2016-11-18 123 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表這個邏輯