单表继承或类表继承?

时间:2011-05-20 14:46:00

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

我正在阅读类表继承(CTI)并发现我更喜欢它。我的问题是,是否存在单表继承(STI)的特定用例,您可以在CTI上使用它?

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

2 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:0)

将STI用于行为差异,就像你说的那样。我将使用的一个例子是:

您已购买,并且您拥有PartialPurchase,与数据的唯一区别在于,当PartialPurchase完成时,它会获得与新创建的购买的关系。

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

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

虽然数据开始有很大不同,但我可能会创建另一个与STI表相关的表,在许多不同字段的情况下,我可能会想到CTI。