2017-09-25 12 views
0

これまでの私の最大のアプリケーション用にデータベースを構成するためのガイダンスが必要でした。複数のユーザータイプで作成したアプリです。複数のユーザータイプのデータベース正規化

私は、多くのクライアントを持つコーチと潜在的に多くのコーチを持つクライアントの2種類のユーザーを持っていますが、現在は1つのみを持っていると言います。

どちらも、コーチとクライアントの共有、特定の物事 -

users (shared info) 
column name  | data type | details 
-----------------|-----------|----------------------- 
id    | integer | not null, primary key 
username   | string | not null 
email   | string | not null 
password_digest | string | not null 
session_token | string | not null 

私の最初に考えたのは二つの他のテーブル、1つの物件タイプ、および次の加入タイプとユーザーを持つことです。

type 
column name  | data type | details 
-----------------|-----------|----------------------- 
id    | integer | not null, primary key 
coach   | string | 
client   | string | 

ユーザータイプ

user_type 
column name  | data type | details 
-----------------|-----------|----------------------- 
id    | integer | not null, primary key 
user_id   | integer | not null, foreign key (users) 
type_id   | integer | not null, foreign key (type) 

私の質問はどこでコーチに関連付けられているuser_idsを保存するために最善だろう、です。

コーチには多くのクライアントがあります。別のテーブルが必要でしょうか?これはuser_typeのような既存のものの中のカラムとして最適でしょうか?

ありがとうございました!

答えて

1

今のところ、私はそれを簡単に保つことをお勧めします。時間が経つにつれて、CoachやClientのようなモデルは確実に変化し、異なる実装要件を持っています。提案されているパターン(単一のユーザーモデルと表を持つ)は、道路を結んでいるだけのつながりにつながります。動作が2つのモデル間で実際に共有されている場合は、Mixin(モジュール)またはActiveModel :: Concernを使用する優れた使用例です。

別のCoach and Clientモデルとデータベーステーブルが必要です。 has_oneまたはhas_manyの関係を設定する必要があると言ったので、すでにクライアントに固有のcoach_idフィールドが必要です。私はhas_manyを最初から構築することをお勧めします。その設定は非常に簡単ですが、has_oneからhas_manyへの移行は後でIMHOに移行するのがより難しくなります。

私は個人的にこれとリファクタリングを続けています。

class Client < ApplicationRecord #or ActiveRecord::Base if Rails 4 or lower 
    belongs_to :coach 
end 

class Coach < ApplicationRecord #or ActiveRecord::Base if Rails 4 or lower 
    has_many :clients 
end 
+0

これは理にかなっています。つまり、本質的にコーチとクライアントは別々のテーブルを持ち、両方がユーザーであり、クライアントとコーチのための結合テーブルを作成します。 –

+0

No. 2つの別個のテーブル。結合テーブルはありません。 Clientテーブルには 'coach_id'カラムがあります。 – danielricecodes

関連する問題