Je suis en train d'assembler un site web d'images. Le schéma de base est un MySQL assez simple, mais j'ai du mal à représenter les drapeaux d'administration possibles associés à une image ("inapproprié", "sous copyright", etc.). Ma notion actuelle est la suivante :
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,
...
);
(tronqué pour faciliter la lecture ; les clés étrangères et les index assortis sont en ordre, je le jure)
tblImageFlags.flagTypeID
est une clé étrangère sur une table de consultation des types de drapeaux, et comme vous pouvez l'imaginer tblImageFlags.resolutionTypeID
devrait à clé étrangère sur luResolutionTypes.resolutionTypeID
. Le problème est que, lorsqu'un drapeau est émis pour la première fois, il n'y a pas de type de résolution logique (je dirais qu'il s'agit d'une bonne utilisation de la fonction NULL
) ; toutefois, si une valeur est définie, elle doit faire l'objet d'une clé étrangère dans la table de consultation.
Je ne trouve pas de solution de contournement de la syntaxe MySQL pour cette situation. Existe-t-il une solution ? Les meilleurs candidats sont :
- Ajouter un type de résolution "non modérée".
- Ajouter un
NULL
l'entrée àluResolutionTypes.resolutionTypeID
(cela fonctionnerait-il même dans unAUTO_INCREMENT
colonne ?)
Merci pour cet aperçu !
PS Points bonus à celui qui me dira si, dans le cas des bases de données, il s'agit d'"index" ou d'"indices".
Suivi : merci à Bill Karwin d'avoir signalé ce qui s'est avéré être une erreur de syntaxe dans la structure de la table (ne pas définir une colonne à NOT NULL
si vous voulez qu'il permette NULL
!). Et dès que j'aurai assez de karma pour vous donner ces points bonus, je le ferai :)