如何使用动态帐单详细信息设计帐单表

时间:2013-03-28 12:56:14

标签: mysql ruby-on-rails database-design

我有不同的模块,如绘画,chasis_repair,over_oiling部分 每个模块都有单独的账单表,例如painting_bills,chasis_repair_bills,over_oiling_bills

现在我必须为Delivery模块创建账单。 delivery module与其他模块有关系(painting,chasis_repair,over_oiling) 交货单是一个综合的绘画账单,chasis_repair,over_oiling部分账单和交付特定账单

注意:绘画,chasis_repair,over_oiling部分账单和交付特定账单是可选的。

示例1:交货单包含绘画和chasis_repair账单 示例2:交货单包含过度绘制,绘画和交付特定账单

class DeliveryBill < ActiveRecord::Base
  attr_accessible :date, :total_amount, :discount
  has_many :delivery_detail_bills
end

我很难构建delivery_detail_bills模型,我有两个想法

1)

id
date
tot_amount
bill_item_type # name of section as text for example painting/chasis_repair/over_oiling/other
bill_item_amount # for example, respective total amount of painting/chasis_repair/over_oiling/other
bill_item_klass # for example, here I store the respective class name, PaintingBill, ChasisRepairBill...
bill_item_klass_id # id value of respective object
通过这种方式,没有关系表。我通过bill_item_type列处理交付特定的结算项目 如果我想去相应的账单,我必须手动使用bill_item_klass,bill_item_klass_id列构建相应的链接

2)创建has_many:通过delivery_bill与painting_bills之间的关联表,chasis_repair_bills

class DeliveryBill < ActiveRecord::Base
  has_many :painting_bills, :through => :delivery_bill_painting_bills

  has_many :chasis_repair_bills, :through => :delivery_bill_chasis_repair_bills
  .....
end

class DeliverBillPaintingBill < ActiveRecord::Base
  belongs_to :delivery_bill
  belongs_to :painting_bill
end

class DeliverBillChasisRepairBill < ActiveRecord::Base
  belongs_to :delivery_bill
  belongs_to :chasis_repair_bill
end

....

这里的关系非常清楚,但如果按照这种方式,我就无法处理“其他”的账单,因为没有关于额外/其他账单的关联表。 此方法将增加表计数

哪一个是性能明智的最佳解决方案还是还有其他更好的解决方案?

0 个答案:

没有答案