Estoy uniendo un sitio web de imágenes. El esquema básico es bastante simple MySQL, pero estoy teniendo problemas para tratar de representar posibles indicadores de administración asociados con una imagen ("inapropiado", "con derechos de autor", etc.). Mi idea actual es la siguiente:clave externa de MySQL para permitir NULL?
tblImages (
imageID INT UNSIGNED NOT NULL AUTO_INCREMENT,
...
);
tblImageFlags (
imageFlagID INT UNSIGNED NOT NULL AUTO_INCREMENT,
imageID INT UNSIGNED NOT NULL,
flagTypeID INT UNSIGNED NOT NULL,
resolutionTypeID INT UNSIGNED NOT NULL,
...
);
luResolutionTypes (
resolutionTypeID INT UNSIGNED NOT NULL AUTO_INCREMENT,
resolutionType VARCHAR(63) NOT NULL,
...
);
(truncada para facilitar la lectura; una variedad de claves externas e índices están en orden, lo juro)
tblImageFlags.flagTypeID
está con clave externa en una tabla de búsqueda de tipos de bandera, y como se puede imaginar tblImageFlags.resolutionTypeID
debe ser de código foráneo en luResolutionTypes.resolutionTypeID
. El problema es que, cuando se emite una bandera por primera vez, no hay un tipo de resolución lógica (yo declararía que esto es un buen uso de NULL
); sin embargo, si se establece un valor, debe tener una clave externa en la tabla de búsqueda.
No puedo encontrar una solución de sintaxis MySQL para esta situación. ¿Existe? Los mejores finalistas son:
- Añadir un "no moderado" tipo de resolución
- Añadir una entrada
NULL
-luResolutionTypes.resolutionTypeID
(sería esto incluso trabajar en una columna deAUTO_INCREMENT
?)
Gracias por la comprensión!
PS Bonus apunta a quien me dice si, en el caso de las bases de datos, son "índices" o "índices".
Seguimiento: (! No establezca una columna a NOT NULL
si lo desea para permitir NULL
) gracias a Bill Karwin para señalar lo que resultó ser un error de sintaxis en la estructura de la tabla . Y una vez que tengo karma suficiente para darle los puntos de bonificación, yo :)
¿Qué hace con las claves externas a las columnas de clave principal que no pueden ser NULL? Este es un problema que ha plagado mis aplicaciones a lo largo de los años y, a veces, termino usando 0 o prescindiendo de la relación de clave externa, pero eso no es óptimo. – glyph
@glyph: Eso no tiene sentido. Si la columna FK no hace referencia a ninguna entrada PK específica, entonces haga que el FK sea nulable. Si no se permite que la columna FK sea nula, * debe * hacer referencia a una entrada existente en la columna PK. Usar 0 o algún otro valor falso para indicar "ninguna entrada referenciada" no es válido. –
En este caso (al menos en MySQL) no se permitirá la clave foránea, porque el fk no puede ser nulo si el pk no es nulo, y los pks en mysql no son siempre nulos. Lo que quiero decir es cómo imponer la integridad referencial entre el campo fk y la columna pk si hay un valor presente, pero también permitir valores nulos. Usar un 0 como entrada ficticia es definitivamente un truco que requiere soluciones en otra parte de su aplicación, pero es válido. – glyph