gpt4 book ai didi

mysql - 关系型数据库设计多用户类型

转载 作者:IT王子 更新时间:2023-10-29 00:31:58 25 4
gpt4 key购买 nike

我有 4 种类型的用户,每种都有特定的数据,但他们也共享公共(public)数据,如 usernamepassword ..

我的第一个想法是创建一个包含 user_type 列的主 users 表。然后,在查询用户数据时,我可以先选择他们的 user_type,然后根据 output 运行不同的查询来获取“用户类型”特定数据。我不喜欢这个,因为我希望我可以通过一个查询获取所有与用户相关的数据,最好使用外键。

第二个想法是在 users 表中不要有 user_type 列,而是使用来自特定用户类型表的外键将指向主 用户表。我更喜欢这样,不过我想我将不得不运行 N 次查询,其中 N 是每次我需要获取用户数据时用户类型的数量。

还有其他选择吗?在这种情况下,好的做法是什么?

非常感谢

最佳答案

您的案例看起来像是类/子类的实例。

处理子类的SQL表设计有两种经典方式。各有优缺点。

一种方式称为“单表继承”。在这个设计中,所有类型的用户只有一张表。如果给定的列不属于给定的行,则交集为 NULL。可以添加一列来指示用户类型。

另一种方式称为“类表继承”。这很像 Nanego 给出的答案,只是做了一些小改动。有一张用户表,包含所有公共(public)数据和一个 id 字段。每个子类都有一个表,其中包含属于该子类的数据。 id 字段通常设置为 users 表中匹配行中 id 字段的副本。这样,子类键可以执行双重任务,既充当主键又充当引用用户表的外键。最后一项技术称为“共享主键”。它需要在插入时进行一些编程,但这是非常值得的。它加强了关系的一对一性质,并加快了必要的连接。

您可以在 SO 中将所有这三种设计作为标签或作为 Web 上的文章进行查找。

关于mysql - 关系型数据库设计多用户类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13749525/

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