复杂的user_roles多对多设置

时间:2011-05-06 13:18:27

标签: sql entity-framework database-design

我正在编写一个后端调查数据库。数据库是用于收集调查类型数据的多个应用程序的后端。我有一个模式,其中包含一个指定应用程序的表以及属于该应用程序的问题。

现在我需要设置用户和用户角色......

每个用户可以访问一个或多个应用程序 每个应用程序有1个或更多用户

每个用户可以在他们有权访问的应用程序中拥有1个角色 每个角色可能存在于一个或多个应用程序中 每个用户在每个应用程序中可能有不同的角色。

app1有15个用户1个用户是admin app1有2个为用户访问定义的角色

app2有30个用户来自app1的管理员用户有权访问但是是普通用户      app2中的2个管理员用户作为普通用户存在于app1中 app2为用户访问定义了4个角色。

警告免费形式思考过程

所以我有

应用程序 - > ApplicationUsers< -Users

也许我只需要一个加入表然后像这样?

enter image description here

那会是正确的吗?它会在EF 4.0中运行吗?

使这项工作的正确方法是什么?

2 个答案:

答案 0 :(得分:1)

我认为可能有几种不同的方式来实现关系,最重要的因素是确定最佳方式是如何使用数据。它可以用你描述的四个表来完成,我更喜欢单数,而不是复数用于所有表 - 直到个人但你应该保持一致并使其成为其他表是复数的应用程序。由于关系是由所有三个实体定义的,因此应该是表的结构。但是,要问的问题是这些关系的正常性?我认为很明显,无论是否有用户,应用程序都可以存在,因为用户可能会说它是否当前与应用程序相关联。但是,如果它与应用程序无关,那么它是否会存在?可能不是一个角色(即使它可能共享相同的名称)可能在每个应用程序中都不完全相同。

另一个选择,也许更清楚(更好?)逻辑上,将有一个带有Application FK的Role(AppRole?)表和一个UserAppRole表,用户将它与之相关联。这将允许您定义相对于其应用的应用程序的角色,并通过适当的角色将用户与应用程序相关联。

应用 AppRole 用户 UserAppRole

就像我说的那样,有很多方法可以做到这一点以及许多决定因素。

答案 1 :(得分:0)

我们假设这个

  

每个用户可能有1个角色   他们可以访问每个应用程序   角色可能存在于1个或更多   每个用户可能拥有的应用   每个应用程序中的不同角色。

应该像这样打断。

  

每个用户可能有1个角色   他们可以访问的应用程序   角色可能存在于1个或更多   应用程序,每个用户可能有   每个应用程序中的不同角色。

如果第一个子句意味着每个用户必须在他们有权访问的每个应用程序中拥有一个且不超过一个角色,那么您的架构将无效。 ApplicationUserRoles中的复合主键{ApplicationId,UserID,RoleID}允许每个用户拥有多个角色。

要限制“每个应用程序每个用户一行(和一个角色)”的约束,ApplicationUserRoles的主键应该只是{ApplicationID,UserID}。

此外,如果UserID在表Users中是唯一的,它可能应该是主键,您应该从该表中删除“ID”列。