轨;多态的1:1关系

时间:2017-02-03 23:23:25

标签: ruby-on-rails database-design

我很少在db schema中看到has_one关系中的多态设计。

我很乐意在1:1与他人(invoice_itemsubscripiton_item)之间实现usage_item关系。

我知道多态关系不是好设计。

如何实现没有多态的1:1关系?

我是否应该让FK成为PK(保证唯一性)或对其设置一个独特的约束?

SubscriptionItems
--------
- id
- title
- period_start
- period_end

UsageItems
--------
- id
- title
- description


InvoiceItems
--------
- id
- itemable_id
- itemable_type (either a subscription_item *or* a usage_item)

1 个答案:

答案 0 :(得分:0)

SubscriptionItem

    #model subscription_item.rb
    ---
    has_one  :invoice_item
    ---

UsageItem

    #model usage_item.rb
    ---
    has_one  :invoice_item
    ---

InvoiceItems

    #model invoice_item.rb
    ---
    belongs_to :usage_item, :class_name => 'UsageItem', :foreign_key => 'usage_item_id'
    belongs_to :subscription_item, :class_name => 'SubscriptionItem', :foreign_key => 'subscription_item_id'
    ---