Я пытаюсь создать отношение, в которое может быть включена любая из четырех различных частей, но любая коллекция тех же частей должна обрабатываться как уникальная.
Пример: Учреждение должно иметь назначенную компанию, возможно, иметь назначенное местоположение, рабочую группу и программу. У задания может не быть рабочей группы без места.
Предположим, что у нас есть компании A, B, C; местоположения X, Y, Z; рабочие группы I, J, K и программы 1, 2, 3.
Таким образом, действительные отношения могут включать A - X - я - 1 A - Z - 2 ОТ С 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);
... без жалобы. Я предполагаю, что (1, null, null, null) не равен самому, потому что включены null. Если это так, можно ли каким-либо образом справиться с этим соотношением?
Любая помощь будет оценена!