基于项目的角色的数据库设计

Posted

技术标签:

【中文标题】基于项目的角色的数据库设计【英文标题】:Database design for project-based roles 【发布时间】:2021-09-11 04:22:57 【问题描述】:

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

用户 项目

因此,用户通过多对多关系与项目相关联。因此,假设连接表名为 user_projects,其中包含 user_id project_id

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

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

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

非常感谢!

【问题讨论】:

那么同一个用户可能在不同的项目中有不同的角色?但是他们被分配到的每个项目只有一个角色?那么Roleuser-projects桥表上的一个非键字段。 没错,用户可以拥有不同的角色,具体取决于他们所在的项目,但每个项目只有一个用户角色。对不起,如果我很慢,那么这是否意味着 user_projects 表应该有一个 role_id 字段,这意味着桥表将与一对多关系中的角色相关? 【参考方案1】:

扩展您拥有的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中的每一个条目不仅关联了一个用户和一个项目,而且还分配了项目中的一个角色。

【讨论】:

以上是关于基于项目的角色的数据库设计的主要内容,如果未能解决你的问题,请参考以下文章

多级基于角色授权的数据库设计

基于角色的数据库设计。作为用户属性或角色特定表的角色

基于Springboot+SSM框架旅游系统项目开发与设计(附源码资料)-毕业设计

一个角色对应多个用户,一个用户又有多个权限怎么设计数据库

基于Mysql的Shop商城数据库设计与实现角色表

如何设计基于分层角色的访问控制系统