首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >逗号列表与多条记录

逗号列表与多条记录
EN

Database Administration用户
提问于 2014-12-02 19:00:25
回答 1查看 270关注 0票数 0

我目前正在构建一个包含许多用户、两个角色和两个组的应用程序。从逻辑上讲,我们希望用户能够成为两个组中其他用户的管理员。

用户表

代码语言:javascript
复制
UserID         varchar    PK
DisplayName
Email
Role           int        FK `role`.`RoleID`

DATA [jschmo,Joe Schmo,joe@schmo.com,1]

角色表

代码语言:javascript
复制
RoleID         int        PK     AI
RoleName       varchar

DATA [1=Master,2=Admin,3=User]

组表

代码语言:javascript
复制
GroupID        int        PK     AI
GroupName

DATA [1=Marketing,2=Infrastructure]

用户可能是两个组的管理员。我看不到多选择外键的选项,但据我所知,在列中使用逗号分隔的列表是个坏主意,我应该使用多个记录,但我不喜欢为每个用户创建多个记录的想法。

Q:我如何跟踪用户是哪些组的管理员?

EN

回答 1

Database Administration用户

回答已采纳

发布于 2014-12-02 19:44:08

请不要将逗号分隔的列表存储在一列中。这只是一场等待发生的灾难。如果这些是不同的事实,则应分别储存。

代码语言:javascript
复制
Table GroupMemberRoles
GroupID  FK
UserID   FK
RoleID   FK
(PK on all three, with perhaps other constraints)

您的查询(例如,查找某个组的管理员)应采用以下形式:

代码语言:javascript
复制
WHERE RoleID = 1 AND GroupID = @GroupID;

而不是:

代码语言:javascript
复制
WHERE RoleID = 1 AND ',' + GroupIDList + ',' LIKE ',' + RTRIM(@GroupID) + ','; 

或者,要找出哪个用户组是管理员,也应该类似地简单:

代码语言:javascript
复制
WHERE RoleID = 1 AND UserID = @UserID;
票数 7
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/84120

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档