2017-09-25 63 views
0

我希望得到一些有關爲迄今爲止我最大的應用程序構建數據庫的指導。這是我用多種用戶類型創建的第一個應用程序。多用戶'類型'的數據庫規範化

我有兩種類型的用戶 - 一個有很多客戶的教練,一個可能有很多教練的客戶,但是目前可以說他們只有一個。

雙方教練和客戶端共享某些事情 -

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 

我首先想到的是有其他兩個表,一個上市類型,接下來加入類型和用戶。

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這樣的模型肯定會發生變化,並具有不同的實施要求。建議的模式(只有一個用戶模型和表格)只會導致緊密耦合。如果行爲真的在這兩種模型之間共享,那麼對於Mixin(模塊)或使用ActiveModel :: Concern來說,這是一個很好的用例。

你應該有一個單獨的教練和客戶端模型和數據庫表。你說你需要設置has_one或has_many關係,所以你已經需要一個客戶端獨有的coach_id字段。我建議從一開始就建立has_many,因爲它現在很容易設置,但是它更難以從has_one遷移到has_many關係以後的恕我直言。

隨着時間的推移,我會親自堅持這一點並重構。

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

編號兩個分開的表格。沒有連接表。客戶端表格上會有一個'coach_id'列。 – danielricecodes