gpt4 book ai didi

mysql - 多用户数据库标准化 'types'

转载 作者:行者123 更新时间:2023-11-29 10:36:03 27 4
gpt4 key购买 nike

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

我有两种类型的用户 - 一种是拥有许多客户的教练,另一种是可能拥有许多教练,但目前假设他们只有一位教练的客户。

教练和客户都有一些共同点 -

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)中的列?

感谢您的帮助!

最佳答案

目前,我建议保持简单。随着时间的推移,像 Coach 和 Client 这样的模型肯定会发生变化,并且有不同的实现要求。建议的模式(具有单个用户模型和表)只会导致 future 的紧密耦合。如果行为确实在两个模型之间共享,那么这是 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

关于mysql - 多用户数据库标准化 'types',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46410148/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com