2016-11-18 18 views
0

Webサイトの特定のコミュニティに参加しているユーザーの一覧を表すGroupMembersという名前のテーブルがあります。あなたが見ることができるように、私は、コミュニティ内のすべてのユーザの役割を表しての役割 'という名前のCHAR(1)列を、持っている内、SQL制約:一意でない列の一意の値

groupId | accountId | role 

列は次のようになり。主キーは最初の2つの列で構成され、「ロール」はNOT NULLでもUNIQUEでもありません。

ここに問題があります:すべてのグループには、作成者のアカウントが指定されている必要があります。これは、GroupMembersにアカウントを追加し、 'ロール'の列に 'C'を入れて実装できると思います。 しかし、作成者が1人しかいない場合、グループ内の他のアカウントは「役割」として「C」を持つことはできません。

UNIQUEとは別に、 'role'列に 'C'を含む行が1つしかないかどうかを確認するための制約がありますか?ユーザーのタイプ)?

答えて

2

このような制約が存在します。 。 。 MySQLではそうではありません。他のデータベースでは、フィルタリングされたインデックスまたはインデックスを計算カラムに実装できます。

代わりに、あなたは作成者を持つことにより、Groupsの表に、このロジックを実装することができます

alter table groups add column creatorUserId int; 
alter table groups add constraint fk_groups_creatorUserId 
    foreign key creatorUserId references users(creatorUserId); 
関連する問題