我目前正在构建一个包含许多用户、两个角色和两个组的应用程序。从逻辑上讲,我们希望用户能够成为两个组中其他用户的管理员。
用户表
UserID varchar PK
DisplayName
Email
Role int FK `role`.`RoleID`
DATA [jschmo,Joe Schmo,joe@schmo.com,1]角色表
RoleID int PK AI
RoleName varchar
DATA [1=Master,2=Admin,3=User]组表
GroupID int PK AI
GroupName
DATA [1=Marketing,2=Infrastructure]用户可能是两个组的管理员。我看不到多选择外键的选项,但据我所知,在列中使用逗号分隔的列表是个坏主意,我应该使用多个记录,但我不喜欢为每个用户创建多个记录的想法。
发布于 2014-12-02 19:44:08
请不要将逗号分隔的列表存储在一列中。这只是一场等待发生的灾难。如果这些是不同的事实,则应分别储存。
Table GroupMemberRoles
GroupID FK
UserID FK
RoleID FK
(PK on all three, with perhaps other constraints)您的查询(例如,查找某个组的管理员)应采用以下形式:
WHERE RoleID = 1 AND GroupID = @GroupID;而不是:
WHERE RoleID = 1 AND ',' + GroupIDList + ',' LIKE ',' + RTRIM(@GroupID) + ','; 或者,要找出哪个用户组是管理员,也应该类似地简单:
WHERE RoleID = 1 AND UserID = @UserID;https://dba.stackexchange.com/questions/84120
复制相似问题