Pregunta de MySQL: clave única ¿No funciona correctamente o estoy malinterpretando?

Estoy tratando de crear una relación en la que se puedan incluir cualquiera de las cuatro partes diferentes, pero cualquier colección de las mismas partes debe manejarse como única.

Ejemplo: una asignación debe tener una empresa asignada, opcionalmente puede tener una ubicación, grupo de trabajo y programa asignados. Una asignación puede no tener un grupo de trabajo sin una ubicación.

Supongamos que tenemos empresas A, B, C; ubicaciones X, Y, Z; grupos de trabajo I, J, K y programas 1, 2, 3.

Por lo tanto, las relaciones válidas pueden incluir A - X - I - 1 A - Z - 2 B - Y C C - 3 B - Z - K

Pero las relaciones inválidas incluirían A - K (Grupo de trabajo sin ubicación) Y - K - 1 (Sin compañía)

Entonces, para crear mi tabla, he creado

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)

Supongo que esto manejaría todas mis relaciones, además de la necesidad de una asignación de tener una ubicación si hay un grupo de trabajo (lo que felizmente puedo hacer programáticamente o con disparadores, creo)

Sin embargo, cuando pruebo este esquema, me permite ingresar lo siguiente ...

INSERT INTO test VALUES (1, null, null, null), (1, null, null, null);

... sin quejas. Supongo que (1, nulo, nulo, nulo) no es igual porque los nulos están incluidos. Si este es el caso, ¿hay alguna forma de manejar esta relación?

¡Cualquier ayuda sería apreciada!

Respuestas a la pregunta(4)

Su respuesta a la pregunta