Estoy tratando de crear una relación donde se puede incluir cualquiera de las cuatro partes diferentes, pero cualquier colección de las mismas partes debe tratarse como única.Pregunta de MySQL - Clave única ¿No funciona correctamente o no entiendo bien?
Ejemplo: Una asignación debe tener una empresa asignada, opcionalmente puede tener una ubicación asignada, grupo de trabajo y programa. Una tarea puede no tener un grupo de trabajo sin una ubicación.
Supongamos que tenemos las compañías A, B, C; ubicaciones X, Y, Z; grupos de trabajo I, J, K y los programas 1, 2, 3.
Así relaciones válidas podrían incluir A - X - I - 1 A - Z - 2 B - Y C C - 3 B - Z - K
Pero las relaciones no válidos incluiría a - K (Grupo de trabajo sin la localización) Y - K - 1 (Ninguna empresa)
Por lo tanto, para crear mi mesa, 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)
Calculo esto sería manejar todas mis relaciones, además de la neccessity de una asignación a tener una ubicación si hay un grupo de trabajo (que yo puedo hacer feliz mediante programación 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 queja. Supongo que (1, nulo, nulo, nulo) no se iguala porque se incluyen valores nulos. Si este es el caso, ¿hay alguna forma de que pueda manejar esta relación?
¡Cualquier ayuda sería apreciada!
Configurar las columnas para que sean "NOT NULL" funcionaría, pero también requeriría la adición de elementos de datos como Rob y sugerí que permitieran que la base de datos coincidiera correctamente con los requisitos enumerados; si NULL no está permitido, necesita un El valor "NO FOO" es una entrada válida en la tabla FOO a la que se refiere el FK. –
En cuanto a hacer que el índice sea su clave principal: el único problema es que no puede crear una columna AUTO_INCREMENT a menos que sea parte de la clave principal. Ese es el problema que estoy teniendo. –
Otro problema para hacer que las columnas NULL'able sean parte de la PK es que pasan a ser NOT NULL y en su lugar obtienes 0 o una cadena vacía como valor predeterminado. – Rafa