2013-02-15 40 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