首页 > 解决方案 > 基于项目的角色的数据库设计

问题描述

假设我有一个包含以下实体的项目:

因此,用户通过多对多关系与项目相关联。所以让我们假设连接表名为user_projects,其中包含user_idproject_id

所以,问题是用户在项目中根据他们的角色(所以我需要以某种方式将角色实体实现到我的数据库模式中)具有不同的访问权限(权限),我有点困惑我会如何在我的数据库中实现这个。请记住,用户在注册过程中不会绑定到单个角色,角色是在创建项目时确定的。

我的思路如下。我猜用户项目都与角色相关,是多对多关系,对吗?所以两者都需要自己的连接表,比如user_rolesproject_roles。但这对我来说似乎有点奇怪,我想可以以某种方式更优雅地处理。

任何建议将不胜感激,如果答案很明显,我深表歉意,我是数据库设计的新手。

非常感谢!

标签: databasepostgresqlrelational-database

解决方案


扩展user_projects您拥有的表:

CREATE TABLE roles (
   role_id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
   role_description text NOT NULL
);

CREATE TABLE user_projects (
   user_id bigint REFERENCES users NOT NULL,
   project_id bigint REFERENCES projects NOT NULL,
   PRIMARY KEY (project_id, user_id),
   role_id bigint REFERENCES roles  NOT NULL
);

那么其中的每一个条目user_projects不仅关联了一个用户和一个项目,而且还分配了项目中的一个角色。


推荐阅读