相关疑难解决方法(0)

一张桌子还是多张?

我正在尝试设计一个应用程序来保存学术参考信息.问题是每种不同类型的参考(例如期刊文章,书籍,报纸文章等)都需要不同的信息.例如,期刊参考既需要期刊标题,也需要文章标题,还需要页码,而书籍需要出版商和期刊文章不需要的出版日期.

因此,我是否应该将所有引用存储在我的数据库中的一个表中,并且当它们不适用时将字段留空,或者我应该有各种表,例如BookReferences,JournalReferences,NewspaperReferences,并在每个表中放入适当的引用.那么问题是它会使搜索所有参考文件变得更加困难,并且编辑也可能需要更加单独地进行.

(顺便说一句,我打算在这个项目中使用Ruby on Rails,但我怀疑这对这个设计问题有什么不同)

更新:

还有更多观点吗?我希望得到一个简单的答案,说一个特定的方法肯定被认为是"最好的" - 但通常事情并不像这样简单.单表继承选项看起来很有趣,但是我没有太多关于它的信息我可以很容易地找到 - 我可以在这个网站上发布另一个问题.

我在奥尔瓦克的回答科里的答案之间分开了.科里的回答给出了奥尔瓦克不是最好的理由,但奥尔瓦克的答案给出了科里为什么不是最好的理由!我从没意识到这可能会如此困难......

进一步的建议非常感谢!

database database-design

31
推荐指数
4
解决办法
3421
查看次数

单表继承查找问题

我有以下3个rails类,它们都存储在一个表中,使用rails的单表继承.

class Template < ActiveRecord::Base
class ThingTemplate < Template
class StockThingTemplate < ThingTemplate
Run Code Online (Sandbox Code Playgroud)

如果我有一个StockThingTemplateID,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,另一次生成另一组.它的字面意思完全相同.

笔记:

  • 我在轨道上1.2
  • 我已经require 'stock_thing_template'在不同的地方尝试过了.它要么没有效果,要么引起其他问题

ruby inheritance ruby-on-rails

3
推荐指数
1
解决办法
635
查看次数