【问题标题】:Single Table Inheritance or Class Table Inheritance?单表继承还是类表继承?
【发布时间】:2011-08-29 17:44:15
【问题描述】:

我正在阅读有关类表继承 (CTI) 的信息,并发现我总体上更喜欢它。我的问题是,单表继承 (STI) 是否有任何特定用例,您可以在其中使用它而不是 CTI?

我读过http://rhnh.net/2010/07/02/3-reasons-why-you-should-not-use-single-table-inheritance,据我所知,它很可靠。 STI 的用例是行为差异而非数据差异。

【问题讨论】:

    标签: ruby-on-rails ruby database-design single-table-inheritance


    【解决方案1】:

    我想向您指出我发现的一篇很棒的文章,它清楚地解释了为什么以及何时使用 CTI。 LINK

    【讨论】:

    • 另外,您引导我访问的另一个链接是peterhamilton.github.com/citier,其中有很多关于此的博客链接。谢谢。
    • @SpaceGhost 这里没有 GitHub Pages 站点。
    【解决方案2】:

    如您所说,将 STI 用于行为差异。我会使用的一个例子是:

    您有 Purchase,也有 PartialPurchase,与数据的唯一区别是当 PartialPurchase 完成时,它会获得与新创建的 Purchase 的关系。

    所以行为是不同的,而且在某些情况下,我希望 PartialPurchase 和 Purchase 出现在同一个查询中。对于商业代理,他们希望同时查看所有购买和部分购买,因此将这些数据放在同一个表中是有意义的。否则,每个模型的所有属性都相同。

    在这种情况下,我会使用 STI 而不是 CTI。

    尽管如果数据开始出现很大差异,我可能会创建另一个与 STI 表相关的表,并且对于许多不同字段的情况,我可能会想到 CTI。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-10
      • 2015-07-20
      • 1970-01-01
      • 2017-06-16
      • 2010-09-17
      • 1970-01-01
      • 2011-05-23
      • 2022-01-16
      相关资源
      最近更新 更多