我正在尝试设计一个应用程序来保存学术参考信息.问题是每种不同类型的参考(例如期刊文章,书籍,报纸文章等)都需要不同的信息.例如,期刊参考既需要期刊标题,也需要文章标题,还需要页码,而书籍需要出版商和期刊文章不需要的出版日期.
因此,我是否应该将所有引用存储在我的数据库中的一个表中,并且当它们不适用时将字段留空,或者我应该有各种表,例如BookReferences,JournalReferences,NewspaperReferences,并在每个表中放入适当的引用.那么问题是它会使搜索所有参考文件变得更加困难,并且编辑也可能需要更加单独地进行.
(顺便说一句,我打算在这个项目中使用Ruby on Rails,但我怀疑这对这个设计问题有什么不同)
更新:
还有更多观点吗?我希望得到一个简单的答案,说一个特定的方法肯定被认为是"最好的" - 但通常事情并不像这样简单.单表继承选项看起来很有趣,但是我没有太多关于它的信息我可以很容易地找到 - 我可以在这个网站上发布另一个问题.
我在奥尔瓦克的回答和科里的答案之间分开了.科里的回答给出了奥尔瓦克不是最好的理由,但奥尔瓦克的答案给出了科里为什么不是最好的理由!我从没意识到这可能会如此困难......
进一步的建议非常感谢!
我有以下3个rails类,它们都存储在一个表中,使用rails的单表继承.
class Template < ActiveRecord::Base
class ThingTemplate < Template
class StockThingTemplate < ThingTemplate
Run Code Online (Sandbox Code Playgroud)
如果我有一个StockThingTemplate
ID,150
那么我应该在逻辑上能够做到这一点:
ThingTemplate.find(150)
=> #returns me the StockThingTemplate
Run Code Online (Sandbox Code Playgroud)
而事实上这个工程,有时
当它工作时,它会生成以下SQL查询:
SELECT * FROM templates WHERE (templates.`id` = 159) AND ( (templates.`type` = 'ThingTemplate') OR (templates.`type` = 'StockThingTemplate' ) )
Run Code Online (Sandbox Code Playgroud)
如果它不起作用,它会生成以下SQL查询:
SELECT * FROM templates WHERE (templates.`id` = 159) AND ( (templates.`type` = 'ThingTemplate') )
Run Code Online (Sandbox Code Playgroud)
sql正在做它应该做的事情,但问题是,为什么它一次生成一组SQL,另一次生成另一组.它的字面意思完全相同.
笔记:
require 'stock_thing_template'
在不同的地方尝试过了.它要么没有效果,要么引起其他问题