2012-09-26 51 views
1

我正在爲我的項目設計一個數據庫模式,在那裏我似乎被一個奇怪的視覺模塊卡住了(從某種意義上說,我之前從未遇到過這個問題,因爲它實際上很容易解決,除了在這個特定案件 - 對我來說)如何刪除此數據庫設計異常?

我有一個實體homes,可以有各種facilities
因此,我宣佈一個模型:FacilitySet,看起來像:

id, home_id, parking, electricity 

正如你所看到的,facility_sets表的每一行對應一個家庭。

但是,在我看來,如果我能說:如果我能說一個家庭has_many設施,而不是家庭has_one facility_set,那麼對我來說,這將會更加合理。這也提供了一個好處,我可以簡單地說:@ home.facilities,而不是@ home.facility_set

真正的問題是我無法理解如何在數據庫中構造facilities表,這樣我可以簡單地聲明:

class Home << ActiveRecord::Base 
    has_many :facilities 
    .. 
end 

和接入設施,如:@home.facilities

我,目前,這樣做的:

class Home << ActiveRecord::Base 
    has_one :facility_set 
    .. 
end 

和訪問設施,如:@home.facility_set,這真的讓我覺得我正在做一些可怕的錯誤! :〜)

在這裏清晨,我真的很感激任何ray-of-ho(m)e對我來說。

問候

回答

1
class InitSchema < ActiveRecord::Migration 
    def change 
    create_table :homes do |t| 
     t.integer :id, null: false 
     # ... 
    end 

    create_table :facilities do |t| 
     t.integer :id, null: false 
     t.integer :home_id, null: false 
     t.string :name, null: false 
     t.string :value, null: false 
    end 
    end 
end 

class Home < ActiveRecord::Base 
    has_many :facilities 
end 

class Facility < ActiveRecord::Base 
    belongs_to :home 
end 

現在使用的設施名稱和值字段來存儲之類的東西停車場,電力等您可能希望創建HAS_MANY設施FacilityType類,並保持停車,電力等, 在那裏。

+0

謝謝,因爲:)這個方法的任何問題,你可以想想,通過FacilitySets?這是更好的方法嗎? – Stoic

+0

@Stpoc。一件好事就是您可以添加新的設施類型,而無需更改模式。另一個是數據標準化的所有好處,例如使查詢具有特定設施的家庭更容易。 – Mori

相關問題