建议手机账单:我应该使用单表继承还是多态关联?

时间:2010-04-14 01:50:04

标签: ruby-on-rails polymorphic-associations single-table-inheritance

在我的域名中:

  • 用户有很多帐单
  • 票据有很多BillItems(因此用户通过票据有很多BillItems)
  • 每个BillItem都是以下之一:
    • 呼叫
    • 短信(短信)
    • 彩信(彩信)
    • 数据

以下是每个BillItem的属性(有些是常见的):

alt text http://dl.dropbox.com/u/2792776/screenshots/2010-04-13_2146-1.png

我的问题是我是否应该使用单表继承(即一个带有“type”列的“bill_items”表)或多态(每个BillItem类型的单独表)来模拟这种安排,以及原因。

1 个答案:

答案 0 :(得分:2)

我会使用Polymorphic关联,因为已经有足够的字段不适用于所有/大多数项目。 STI只会浪费大量空间,但忽略了优化,它也是一种非常严格的设计,因为当需要更多字段时,在该设计上扩展的最自然方式是将它们添加到表中。

另一方面,多态关联仅指定所有实现者必须遵循的合同。在这种情况下,合同只表示项目必须是可计费的,并允许每个单独类型的项目独立发展。如果要在这些不同的类之间共享逻辑,那么将它转换为模块并包含它可能会更好。