在我的域名中:
以下是每个BillItem的属性(有些是常见的):
alt text http://dl.dropbox.com/u/2792776/screenshots/2010-04-13_2146-1.png
我的问题是我是否应该使用单表继承(即一个带有“type”列的“bill_items”表)或多态(每个BillItem类型的单独表)来模拟这种安排,以及原因。
答案 0 :(得分:2)
我会使用Polymorphic关联,因为已经有足够的字段不适用于所有/大多数项目。 STI只会浪费大量空间,但忽略了优化,它也是一种非常严格的设计,因为当需要更多字段时,在该设计上扩展的最自然方式是将它们添加到表中。
另一方面,多态关联仅指定所有实现者必须遵循的合同。在这种情况下,合同只表示项目必须是可计费的,并允许每个单独类型的项目独立发展。如果要在这些不同的类之间共享逻辑,那么将它转换为模块并包含它可能会更好。