我正试图为我当前的项目建模一个数据库,但我遇到了一个新问题。我有一个由Supervisor
、Coordinator
和Company
监督的Project
。所以Project表有Supervisor.id
作为外键等等。还有Student
表包含Project.is
作为外键(因为很多用户可以做一个项目)。现在就是这样。我想做的是有一个User
表,其中包含一个名为type
的列,它允许我查看特定用户(也是学生)的角色。尽管该表将包含许多NULL
条目,但我的冗余代码要少得多。
然而,我想要一个User
表的主要原因是我使用的是CakePHP,并且让不同的模型登录并不容易。这有可能吗?
感谢
编辑:也许我应该说,这些角色中的每一个都有不同的权限。
我看到三个表:USER
、GROUP
和ROLE
。
用户将被分配到组,组将被赋予角色。我想你需要三个,而不是一个。
基数很重要:我可以看到USER
在哪里可以分配给许多GROUPS
;一个CCD_ 17可以具有许多CCD_;一个CCD_ 19可以被分配给几个CCD_;并且一个CCD_ 21可以具有许多CCD_。还有很多对多的JOIN表:
USER <-> USER_GROUP <-> GROUP <-> GROUP_ROLE <-> ROLE
这是标准化的——没有任何内容以这种方式重复。USER、GROUP和ROLE具有主键。JOIN表主键是每行中两个ID的组合。
这取决于您将如何使用关联。
为什么不呢
例如:如果您稍后使用关系来输出数据,并且您确信,您的数据库方案不会更改,则。。。为什么不呢?您的主要目标是:代码的质量和开发速度,因此,无论有多少列为null。
但是
如果您不确定您的需求或计划扩展数据库方案,您可以使用两列
- supervisor_model
- supervisor_id
它将存储适当的值:Company
、77
(我的意思是77是来公司的id)
另一种方法
您可以为supervisor_id提供UUID,因此它在多个表中是唯一的,并且您没有太多NULL
和额外的列。