Sql 多对多层次关系
在我的应用程序中,我有三个主要表:Sql 多对多层次关系,sql,many-to-many,Sql,Many To Many,在我的应用程序中,我有三个主要表: 使用者 团体 角色 任何组合都有多对多的关系。用户可以位于不同的组中,在每个组中具有不同的角色 最简单的部分是映射用户和组,由中间表user\u group完成。然后,在设计如何将三者联系在一起时,我产生了一些疑问 Q:我是否在用户组中添加另一列?或者创建其他中间表? 考虑到第二种选择,我尝试了以下方法: 这(我认为)将使在前端检索我需要的信息更容易、更整洁: 用户可用的组(user\u Group) 可用于组的角色(组\角色) 给定组中用户可用的角色(u
user\u group
完成。然后,在设计如何将三者联系在一起时,我产生了一些疑问
Q:我是否在用户组中添加另一列?或者创建其他中间表?
考虑到第二种选择,我尝试了以下方法:
这(我认为)将使在前端检索我需要的信息更容易、更整洁:
user\u Group
)组\角色
)user\u group\u Role
)我将使用现有联接表中的附加列。您仍然可以相当轻松地回答所有问题:
select *
from Roles r
join JoiningTableName j on r.Role_Id = j.Role_Id
where j.User_Id = myUserId
select *
from Roles r
join JoiningTableName j on r.Role_Id = j.Role_Id
where j.Group_Id = myGroupId
select *
from Roles r
join JoiningTableName j on r.Role_Id = j.Role_Id
where j.User_Id = myUserId and j.Group_Id = myGroupId
我不认为你在文章末尾提出的模式有任何问题
- 它确保
可以关联到用户
,而不要求他们在该组
中具有组
角色
- 它可以确保
只能担任适用于特定用户
的组
角色
- 它可以允许在多个
组中共享相同的
角色
- 它可以允许一个
,而不允许任何组
角色
要缩小模式,您可以想出一些好办法:
- 为此组中没有角色的
;要删除创建角色
用户组的需要
- 为每个组创建一个
,该用户拥有该组可以担任的所有角色;要删除虚拟用户
组角色的需要
- 等等等等
我认为没有理由不使用您提出的模式,它对我来说似乎是完全正确、可维护、可理解和有弹性的。对于添加到组中的用户,一个附加列的微妙细节是,没有角色。这可能会引入一个空的需求或“成员”角色。@user2864740-我认为
NoRole
或Member
角色没有问题,您能详细说明一下为什么您认为这是一个问题,还是您只是指出了需求?@MatBailie不是说有问题,而是“可能的复杂性”-我已将其改为“细微细节”,以减少评论。。污名化?我很高兴听到这个。因为这是我第一个这样的项目。非常感谢