多个用户“类型”

时间:2017-09-25 16:41:18

标签: mysql sql ruby-on-rails

我想要为我迄今为止最大的应用程序构建数据库提供一些指导。这是我用多种用户类型创建的第一个应用程序。

我有两种类型的用户 - 一个有很多客户的教练,一个可能有很多教练的客户,但是现在可以说他们只有一个。

教练和客户都分享某些事情 -

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 个答案:

答案 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