Rails数据库设计:组合,排序

时间:2013-02-15 02:48:18

标签: ruby-on-rails database sorting model

在我的居民协会的Rails数据库中,我有User,Plot和House模型。 (空地块,有一个或多个房屋的地块,业主或租户居住的地方)。从数据库的角度来看,我需要各种关系,例如

  • 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

1 个答案:

答案 0 :(得分:0)

我认为你可以用四种模式做到这一点。

  1. 用户(id,其他列)
  2. Plot(id,other columns)
  3. House(id,plot_id,其他栏目)
  4. UserAssociation /一些直观的名称,用于将用户关联到plot / house(id,user_id,associable_id,associable_type,role)
  5. 您可以使用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