2016-11-18 131 views
0

我有一个名为GroupMembers的表,它表示参与网站上某些社区的用户列表。SQL约束:非唯一列中的唯一值

列是这个样子:

groupId | accountId | role 

正如你可以看到,里面我有一个CHAR(1)指定的列“角色”,这代表了社会的每个用户的角色。主键包含前两列,'角色'既不是非空也不是唯一。

现在,问题是:每个组都必须拥有指定创建者的帐户,我认为我可以通过将帐户添加到GroupMembers并将'C'放入其'角色'列中来实现。 但是只能有一个创建者,组中的其他账户不能有'C'作为他们的'角色'。

是否有一个限制,可以让我检查是否只有一行'C'在'角色'列,除UNIQUE(我不能使用,因为可以有任何数量的其他类型的用户)?

回答

2

存在这样的约束。 。 。但不是在MySQL中。其他数据库允许您在计算列上实施筛选索引或索引。

alter table groups add column creatorUserId int; 
alter table groups add constraint fk_groups_creatorUserId 
    foreign key creatorUserId references users(creatorUserId); 

相反,你可以通过让创作者实现在Groups表这个逻辑