关系数据库设计多种用户类型
我有4种类型的用户,每个都有具体的数据,但他们也分享COMMUN数据,如username
,password
..
我的第一个想法是users
用user_type
列创建一个主表。然后,当查询用户数据时,我可以先选择它们user_type
,然后根据output
运行情况选择不同的查询来获取“用户类型”的特定数据。我对此并不满意,因为我希望我可以通过一个查询并最好使用外键来获取所有与用户相关的数据。
第二个想法是user_type
在users
表中没有列,而是使用外键,该键来自特定用户类型的表将指向主users
表的一行。尽管我想我将必须运行N个查询,但我还是会更好一些,其中N是每次我需要获取用户数据时用户类型的数量。
还有其他选择吗?在这种情况下,什么是好的做法?
非常感谢
-
您的案例看起来像是类/子类的实例。
有两种设计SQL表以处理子类的经典方法。每种都有优点和缺点。
一种方法称为“单表继承”。在此设计中,只有一张桌子可供所有类型的用户使用。如果给定的列与给定的行不相关,则交集为NULL。可以添加一列以指示用户类型。
另一种方法称为“类表继承”。这很像Nanego给出的答案,但做了一些小的更改。有一个供用户使用的表,其中包含所有常用数据和一个id字段。每个子类都有一个表,其中包含与该子类有关的数据。id字段通常设置为用户表中匹配行中id字段的副本。这样,子类键可以起到双重作用,既充当主键又充当引用用户表的外键。最后一种技术称为“共享主键”。插入时需要一些编程,但这是值得的。它增强了关系的一对一性质,并加快了必要的联接。
您可以将所有这三种设计查找为SO中的标签或Web上的文章。
-
关系数据库设计模式?
2022-05-26 关注 0 浏览17 1答案
-
关系数据库设计的良好资源
2021-05-10 关注 0 浏览88 1答案
-
在关系数据库设计中,设计关系模式是数据库设计中哪个阶段的任务? ( )
2022-05-11 关注 0 浏览28 1答案
-
在关系数据库设计中,关系模式是用来记录用户数据的()
2022-03-03 关注 0 浏览45 1答案
-
在关系数据库设计中,设计视图(view)是哪个阶段的内容?
2022-05-11 关注 0 浏览30 1答案
-
以下不同的数据库类型中,哪些不属于关系数据库范畴
2022-03-02 关注 0 浏览44 1答案
-
如何设置具有多个电话号码的客户表?-关系数据库设计
2021-04-20 关注 0 浏览71 1答案
-
关系数据库系统中,能够为用户提供多种角度观察数据库中数据的机制是
2022-05-11 关注 0 浏览26 1答案
-
Django中的多种用户类型
2021-01-29 关注 0 浏览42 1答案
-
关系数据库规范化是为了解决关系数据库中()问题而引入的?
2022-03-03 关注 0 浏览61 1答案