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