如何对项目表中不同用户/角色所在的数据库进行建模,而所有用户/角色都必须属于用户表


How to model database where different users/roles are in a project table, while all of them have to belong to user table?

我正试图为我当前的项目建模一个数据库,但我遇到了一个新问题。我有一个由SupervisorCoordinatorCompany监督的Project。所以Project表有Supervisor.id作为外键等等。还有Student表包含Project.is作为外键(因为很多用户可以做一个项目)。现在就是这样。我想做的是有一个User表,其中包含一个名为type的列,它允许我查看特定用户(也是学生)的角色。尽管该表将包含许多NULL条目,但我的冗余代码要少得多。

然而,我想要一个User表的主要原因是我使用的是CakePHP,并且让不同的模型登录并不容易。这有可能吗?

感谢

编辑:也许我应该说,这些角色中的每一个都有不同的权限。

我看到三个表:USERGROUPROLE

用户将被分配到组,组将被赋予角色。我想你需要三个,而不是一个。

基数很重要:我可以看到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

它将存储适当的值:Company77(我的意思是77是来公司的id)

另一种方法

您可以为supervisor_id提供UUID,因此它在多个表中是唯一的,并且您没有太多NULL和额外的列。