database - 基于项目的角色的数据库设计
问题描述
假设我有一个包含以下实体的项目:
- 用户
- 项目
因此,用户通过多对多关系与项目相关联。所以让我们假设连接表名为user_projects,其中包含user_id和project_id。
所以,问题是用户在项目中根据他们的角色(所以我需要以某种方式将角色实体实现到我的数据库模式中)具有不同的访问权限(权限),我有点困惑我会如何在我的数据库中实现这个。请记住,用户在注册过程中不会绑定到单个角色,角色是在创建项目时确定的。
我的思路如下。我猜用户和项目都与角色相关,是多对多关系,对吗?所以两者都需要自己的连接表,比如user_roles和project_roles。但这对我来说似乎有点奇怪,我想可以以某种方式更优雅地处理。
任何建议将不胜感激,如果答案很明显,我深表歉意,我是数据库设计的新手。
非常感谢!
解决方案
扩展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
不仅关联了一个用户和一个项目,而且还分配了项目中的一个角色。
推荐阅读
- c# - C# - 如何扩展 UserLoginEventSuccessEvent
- reactjs - 如何使用 react-router-dom 在“x”秒后“重定向到”
- python - 如何在seaborn中增加子图的大小
- javascript - 绕过浏览器 URL 编码以从查询参数中反射 XSS
- html - Googlelabs 暗模式切换
- c++ - 类型检查模板参数的编译器错误
- java - 在每个第 n 个分隔符处拆分,并保留字符
- flutter - 需要访问 2 个集合的 Flutter、Firestore 和 FutureBuilder
- typescript - 如何使用 NavigationHelpersCommon 键入检查 ReactNavigation 的导航?
- sql - 如何将整个列的数据类型从数字转换为雪花中的时间戳