簡體   English   中英

Rails數據庫設計:組成,排序

[英]Rails Database design: Composition, Sorting

在我的居民協會的Rails數據庫中,有用戶,地塊和房屋模型。 (空地塊,擁有一棟或多棟房屋的地塊,業主或租戶居住的地塊)。 從數據庫的角度來看,我將需要各種關系,例如

  • PlotHouse-plot_id上的house_id
  • PlotOwnership-user_id擁有plot_id
  • HouseOwnership-user_id僅擁有house_id,但不擁有地塊
  • 出租-user_id出租house_id
  • 親戚-業主或房客的關系

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

問題:在顯示居民時,我無法對用戶或房屋屬性中的任何一個進行排序,因為它們來自不同的表。 如果我使用來自用戶,地塊,房屋模型的列創建成員模型,那么我將復制這些列,因此存在數據庫不一致的風險。

我有CS背景,但沒有生產級數據庫設計(Rails或其他)。 由於經常需要成員數據,因此只要我可以在系統中強制執行完整性,是否重復這些列是否合理? 除了對內存中的數據進行排序以外,還有其他選擇嗎?

我看到角色不同的成員作為報告,但由於需要經常使用它們,因此需要將它們保留下來,因此需要重復進行查看,但是用戶/地塊/模型的基本模型卻沒有管理員的重復,這似乎是一種方式。 我的理解上有差距嗎?

  • 賈亞萬斯

我認為您可以使用四個模型來做到這一點。

  1. 用戶(ID,其他列)
  2. 情節(id,其他列)
  3. 房屋(id,plot_id,其他列)
  4. UserAssociation /一些直觀的名稱,用於將用戶與地塊/房屋相關聯(id,user_id,associable_id,associable_type,角色)

您可以使用“ 多態關聯”將用戶與僅一個模型的圖和房屋相關聯。 以下是您需要的關聯。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM