Tengo una tabla con varias columnas que constituyen la clave principal. La naturaleza de los datos almacenados permite que algunos de estos campos tengan valores de NULL
. He diseñado mi mesa como tal:Valor NULL en clave primaria de varias columnas
CREATE TABLE `test` (
`Field1` SMALLINT(5) UNSIGNED NOT NULL,
`Field2` DECIMAL(5,2) UNSIGNED NULL DEFAULT NULL,
PRIMARY KEY (`Field1`, `Field2`)
)
COLLATE='latin1_swedish_ci'
ENGINE=InnoDB;
Sin embargo, cuando corro describe test
se muestra así:
|| *Field* || *Type* || *Null* || *Key* || *Default* || *Extra*
|| Field1 || smallint(5) unsigned || NO || PRI || ||
|| Field2 || decimal(5,2) unsigned || NO || PRI || 0.00 ||
Y Me aparece un error al insertar un valor NULL
.
Columna 'Campo2' no puede ser nulo
Se debe esto a un campo que es parte de una clave principal no puede ser nulo? ¿Cuáles son mis alternativas además de usar, digamos, '0' para NULL
?
Gracias a enlace vj de Shah, @Tomalak hace que el [excelente punto] (http://stackoverflow.com/a/386061/673991) que esta restricción se sigue de la SQL básico principio de que, como las partes de una clave PRIMARIA deben compararse de cada fila a cada otra fila, y "** NULL no puede ser parte de una comparación, el resultado de dicha comparación siempre será NULO **" que obliga a aplicar la singularidad PRIMARY columnas no nulas. –