4 つの異なるパーツのいずれかを含めることができる関係を作成しようとしていますが、同じパーツのコレクションは一意として処理する必要があります。
例: 割り当てには、割り当てられた会社が必要です。オプションで、割り当てられた場所、ワークグループ、およびプログラムが含まれる場合があります。割り当てには、場所のないワークグループを含めることはできません。
A、B、C という会社があるとします。位置 X、Y、Z; ワークグループ I、J、K およびプログラム 1、2、3。
したがって、有効な関係には、A - X - I - 1 A - Z - 2 B - Y C C - 3 B - Z - K が含まれます。
ただし、無効な関係には、A - K (場所のないワークグループ) Y - K - 1 (会社なし) が含まれます。
だから、私のテーブルを作成するために、私は作成しました
companyID INT NOT NULL,
FOREIGN KEY companyKEY (companyID) REFERENCES company (companyID),
locationID INT,
FOREIGN KEY locationKEY (locationID) REFERENCES location (locationID),
workgroupID INT,
FOREIGN KEY workgroupKEY (workgroupID) REFERENCES workgroup (workgroupID),
programID INT,
FOREIGN KEY programKEY (programID) REFERENCES program (programID),
UNIQUE KEY companyLocationWorkgroupProgramKEY (companyID, locationID, workgroupID, programID)
これは、ワークグループがある場合に場所を割り当てる割り当ての必要性以外のすべての関係を処理すると思います (これは、プログラムまたはトリガーを使用して喜んで実行できると思います)。
ただし、このスキーマをテストすると、次のように入力できます...
INSERT INTO test VALUES (1, null, null, null), (1, null, null, null);
...文句なし。nullが含まれているため、(1、null、null、null)はそれ自体と等しくないと推測しています。この場合、この関係を処理する方法はありますか?
どんな助けでも大歓迎です!