Database 跨4个表的多对多关系

Database 跨4个表的多对多关系,database,database-design,database-schema,Database,Database Design,Database Schema,我正在实现一个基于角色的访问控制系统,它有以下数据库表 groups --------- id (PK) name level resources --------- id (PK) name roles --------- id (PK) name permissions ----------- id (PK) name description users ----------- id (PK) name group_id(FK - references id on groups)

我正在实现一个基于角色的访问控制系统,它有以下数据库表

groups
---------
id (PK)
name
level

resources
---------
id (PK)
name

roles
---------
id (PK)
name

permissions
-----------
id (PK)
name
description


users
-----------
id (PK)
name
group_id(FK - references id on groups)
role_id(FK - references id on roles)
组与资源和角色之间存在多对多关系。所以我有下面的连接表

group_resource
---------------
group_id(FK - references id on groups)
resource_id(FK - references id on resources)

group_role
---------------
group_id(FK - references id on groups)
role_id(FK - references id on roles)
问题是:

组中的任何给定角色都应仅对分配给该组的资源具有权限

我不完全确定在组资源和组角色关系的上下文中,对角色、权限和资源之间的关系建模的最佳方式是什么

如有任何建议,将不胜感激


谢谢。

这里有一个可能的解决方案,有一定程度的冗余

groups (id (PK), name, level)
roles (group_id (FK for groups) ,num_role, name) with PK (group_id, num_role)
users (id (PK), name, group_id, num_role) with (group_id, num_role) FK for roles
resource_types (id (PK), name)
group_resources (resource_type_id (FK for resource_types), group_id (FK for groups) with PK both the attributes
permissions (resource_type_id (FK for resource_types), group_id, num_role, description)  with (group_id, num_role) FK for roles
使用此解决方案,应用程序必须在插入权限期间检查资源是否出现在权限中指定的组id中,通常带有触发器

消除冗余的一种方法是消除关系组资源,因为所有信息都可以通过权限找到。

-group-GRP存在。 - 组{GRP} PK{GRP} -角色ROL存在。 - 角色{ROL} PK{ROL} -资源RES存在。 - 资源{RES} PK{RES} -角色ROL存在于组GRP中。 - 组_角色{GRP,ROL} PK{GRP,ROL} FK1{ROL}引用角色{ROL} FK2{GRP}引用组{GRP} -为GRP组分配了资源资源。 - 组资源{GRP,RES} PK{GRP,RES} FK1{GRP}引用组{GRP} FK2{RES}引用资源{RES} -每个用户的权限已存在。 - 权限{PER} PK{PER} -每个角色的权限被授予角色ROL -资源资源的组GRP中。 - 组资源权限{GRP,RES,ROL,PER} PK{GRP,RES,ROL} FK1{GRP,RES}引用组_资源{GRP,RES} FK2{GRP,ROL}引用组_角色{GRP,ROL} FK3{PER}引用权限{PER} -用户USR在GRP组中被分配角色ROL。 - 用户{USR,GRP,ROL} PK{USR} FK1{ROL}引用角色{ROL} FK2{GRP}引用组{GRP} -集团GRP角色ROL中的用户USR, -对资源RES具有权限。 - 创建视图用户\u资源\u权限 像 选择u.USR ,x.RES ,x.PER ,u.GRP ,u.ROL 从用户作为u 加入组\u资源\u权限为x ON x.GRP=u.GRP x.ROL=u.ROL; 注:

所有属性列不为空 PK=主键 AK=备用密钥唯一 SK=正确的超键唯一 FK=外键
权限是否与其他实体存在某种关系?角色和用户组之间的关系是什么(如果有的话)?该角色必须与团队建立关系?是否?权限应该与组中的资源和角色有关系。例如,属于集团“总部”的用户“Joe Bloggs”被分配一个名为“审计员”的角色。“总部”集团拥有“审计文件”和“年度报告”资源。集团“总部”中的“审计员”角色对资源“审计文件”具有“读取”和“更新”权限,对资源“年度报告”仅具有“读取”权限。因此,“总部”中的“审计师”和另一个办事处中的“审计师”是两个不同的角色,或者是同一个角色?它们是两个不同的角色。这意味着角色和组之间的关系不是多对多而是一对多。我会试着提出一个答案。