这不是另一个我应该使用HABTM或HMT的问题。诚实。也就是说,我在am会问在下列情况下人们是否会使用HABTM或HMT。已经和属于很多,有很多通过
- 我有一个模型“书”。
- 我想添加一个模型“作者”。作者has_many Books。一本书has_many作者。
- 我想添加一个模型“主题”。一个主题has_many书籍。一本书has_many话题。
我已经知道两个关联之间的区别,我知道关于连接表,我知道(一般)每个关联系统的好处。
很明显,我可以在这里设置两个HABTM关系。
然而,它让我觉得我也可以通过将作者和主题声明为“has_many:authors/topics,:through =>:books”,将我的foreign_ids放在“Books”模型表中。
我的问题是,人们是否认为这是数据库结构的过度抽象,因为主要关系是在BOOKS和AUTHORS,BOOKS和TOPICS之间,而不是AUTHOR和TOPIC之间的直接关系?换句话说,虽然我可以去掉两个(额外的)连接表并使用更灵活的HMT关系,但我可能会淡化我的数据库的要点,即存储书籍,然后链接到AUTHORS和TOPICS。
我认为这是一个相对有趣的问题。
此外,互联网上的所有其他例子,我可以找到使用HMT的“贯穿”表作为数据库的一个相对不重要的部分。例如 - 将其用作“通过”表来存储进行测试的学生成绩; - 存储订阅杂志的订阅者的杂志订阅信息。
我从来没有见过“through”表存储主要信息的例子。它似乎更适合于存储关于它加入的两个主表的辅助信息。
是的,我的意思是“有很多:通过=>”。另外,是的,这两个关联都有一个连接表,但我基本上想知道是否使用主表(在这种情况下是BOOKS表)试图充当AUTHORS和TOPICS的连接表是否聪明。这说明了吗?要回答你的问题,我认为书籍表将包含author_id和topics_id,所以每本书都可以用这种方式引用作者和主题。我只是想知道,如果我过度使用我的BOOKS表(使用它作为连接)过度使用HMT? – Jon 2011-05-26 02:15:15
你绝对可以做到这一点。 HMT不检查表格的内容,只要你有正确的ID在那里,你可以坚持下去。所有的HMT(和':polymorphic')就是建立这些方法的,所以只要你注意你放在哪里,你就能摆脱它。即使在文档中,如果HMT仅仅是允许额外属性(通过作为离散模型)的HABTM,这可以颠倒过来,使得由“额外属性”组成的任何模型都可以是连接模型。只需添加ID! – Eric 2011-05-26 19:32:53
@Eric,但是如果我把连接表放在BOOK表中,如果(例如)有两个作者写这本书,我不会遇到麻烦吗?给我的书我的书模型将有一个独特的条目#1。然后它需要链接到作者#1 _AS WELL AS_作者#2,第二个入口在哪里? Book表条目是不是只有一个author_id整数键和一个topic_id键? 在HABTM中,您只需重复键:即1-1,1-2,1-3(对于具有三位作者的书#1)。但在我的情况下,我的BOOKS表已经填充了条目,每个条目代表一本书。 ?? – Jon 2011-05-27 02:47:18