0

町内会のRailsデータベースには、ユーザー、プロット、ハウスのモデルがあります。(空のプロット、所有者またはテナントが住んでいる1つ以上の家のあるプロット)。データベースの観点から、私はさまざまな関係が必要になります。

  • 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などは持っていません。メンバーデータは頻繁に必要になるため、システムで整合性を強制できる限り、これらの列を複製することは合理的ですか?メモリ内のデータを並べ替える以外に他の方法はありますか?

さまざまな役割のメンバーをレポートとして表示しますが、頻繁に必要になるため、表示のために重複するため、永続化する必要がありますが、管理者向けの重複のないユーザー/プロット/モデルの基本モデルが方法のようです。私の理解にギャップはありますか?

  • ジャヤワント
4

1 に答える 1

0

4つのモデルでできると思います。

  1. ユーザー (id、その他の列)
  2. プロット (id、その他の列)
  3. 家 (id、plot_id、その他の列)
  4. UserAssociation/ユーザーをプロット/ハウスに関連付けるための直感的な名前 (id、user_id、associable_id、associable_type、role)

ポリモーフィック アソシエーションを使用して、ユーザーを 1 つのモデルのみからプロットおよび家屋に関連付けることができます。以下は、必要な関連付けです。

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
于 2013-02-15T04:32:44.260 に答える