2013-02-15 38 views
0

在我居民協會的Rails數據庫中,我有User,Plot和House模型。 (空地塊,有一個或多個房屋的地塊,業主或租戶住在那裏)。從數據庫的角度來看,我需要各種關係,例如Rails數據庫設計:組合,排序

  • PlotHouse - 在plot_id house_id
  • PlotOwnership - USER_ID擁有plot_id
  • HouseOwnership - USER_ID擁有隻有house_id但不
  • 租賃情節 - USER_ID租金house_id
  • 親屬 - 業主或承租人關係

從功能和用戶界面的角度來看,我需要具有不同角色的成員模型 - PlotOwners,HouseOwners,租戶,業主親屬,租戶的親戚。我可以用現有的模型和關係來做到這一點。

問題:在顯示「居民」時,我不能根據用戶或家庭屬性對他們進行排序,因爲他們來自不同的表格。如果我使用User,Plot,House模型的列創建成員模型,我會複製列,從而導致數據庫中的風險不一致。

我有CS背景,但沒有生產水平數據庫設計,Rails或其他。由於成員數據是經常需要的,只要我能夠在系統中執行完整性,複製這些列是否合理?除了對內存中的數據進行排序之外,還有其他的選擇嗎?

我將不同角色的成員看作是報告,但他們需要經常保存,因此需要經常查看,因此重複查看,但管理員沒有重複的用戶/繪圖/模型的基本模型似乎就是這樣。我的理解有沒有差距?

  • Jayawanth

回答

0

我想你可以用四種模式去做。

  1. 用戶(ID,其他列)
  2. 圖(ID,其他列)
  3. 府(ID,plot_id,其他列)
  4. UserAssociation /對與用戶繪製一些直觀的名稱/房子(id,user_id,associable_id,associable_type,role)

您可以使用Polymorphic Association將用戶與僅來自一個模型的地塊和房屋相關聯。以下是您需要的協會。

class User < ActiveRecord:Base 
    has_many :user_associations 
    has_many :plots, :through => :user_associations, :source => :associable, :source_type => 'Plot' 
    has_many :houses, :through => :user_associations, :source => :associable, :source_type => 'House' 
end 

class Plot < ActiveRecord:Base 
    has_many :houses 
    has_many :user_associations, :as => :associable 
    has_many :users, :through => :user_associations 
end 

class House < ActiveRecord:Base 
    belongs_to :plot 
    has_many :user_associations, :as => :associable 
    has_many :users, :through => :user_associations 
end 

class UserAssociation < ActiveRecord:Base 
    belongs_to :user 
    belongs_to :associable, :polymorphic => true 
end 
+0

這個問題對我來說並不是優化關聯。正如我原來的帖子所述,當數據從兩個不同的表中獲取並顯示在視圖中時,我的理解是我無法對任何顯示的列進行排序。我是否應該複製房屋細節以允許在列表中的居民表格中排序? – Jayawanth 2013-02-15 14:50:11