我正在了解类表继承(CTI),并发现总体上我更喜欢它。我想知道的问题是,在使用CTI之前,是否有任何特定情况需要使用单表继承(STI)?
我阅读了http://rhnh.net/2010/07/02/3-reasons-why-you-should-not-use-single-table-inheritance,据我所知,这篇文章很有说服力。因为在使用STI时,其用例是行为不同但数据相同。
我正在了解类表继承(CTI),并发现总体上我更喜欢它。我想知道的问题是,在使用CTI之前,是否有任何特定情况需要使用单表继承(STI)?
我阅读了http://rhnh.net/2010/07/02/3-reasons-why-you-should-not-use-single-table-inheritance,据我所知,这篇文章很有说服力。因为在使用STI时,其用例是行为不同但数据相同。
像你说的那样,使用STI来处理行为差异。我会举一个例子:
你有Purchase和PartialPurchase,数据唯一的区别在于当PartialPurchase完成时,它会与新创建的Purchase建立关系。
因此,行为是不同的,而且有些情况下,我希望PartialPurchase和Purchase同时出现在同一个查询中。对于商业代理人来说,他们希望同时看到所有的购买和部分购买,因此将这些数据放在同一个表中是有意义的。否则,每个模型的所有属性都是相同的。
在这种情况下,我会使用STI而不是CTI。
但是,如果数据开始有很大的差异,我可能会创建另一个与STI表相关联的表,在许多不同字段的情况下,我可能会考虑使用CTI。