我想要为我迄今为止最大的应用程序构建数据库提供一些指导。这是我用多种用户类型创建的第一个应用程序。
我有两种类型的用户 - 一个有很多客户的教练,一个可能有很多教练的客户,但是现在可以说他们只有一个。
教练和客户都分享某些事情 -
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?
感谢您的帮助!
答案 0 :(得分:1)
目前,我建议保持简单。随着时间的推移,像Coach和Client这样的模型肯定会改变并具有不同的实现要求。建议的模式(具有单个用户模型和表格)只会导致紧密耦合。如果确实在两个模型之间共享行为,那么对于Mixin(模块)或使用ActiveModel :: Concern来说,这是一个很好的用例。
您应该有一个单独的Coach和Client模型和数据库表。您说您需要设置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