web-dev-qa-db-fra.com

Clé étrangère MySQL pour autoriser NULL?

Je reconstitue un site Web d'images. Le schéma de base est assez simple MySQL, mais j'ai du mal à représenter les éventuels drapeaux d'administration associés à une image ("inapproprié", "protégé par des droits d'auteur", 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; assortiment de clés et d'index étrangers sont en ordre, je le jure)

tblImageFlags.flagTypeID est à clé étrangère sur une table de recherche des types d'indicateurs, et comme vous pouvez l'imaginer tblImageFlags.resolutionTypeID doit être à clé étrangère sur luResolutionTypes.resolutionTypeID. Le problème à résoudre 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 que c'est une bonne utilisation de NULL); cependant, si une valeur est définie, elle doit être à clé étrangère dans la table de recherche.

Je ne trouve pas de solution de contournement de la syntaxe MySQL à cette situation. Existe-t-il? Les meilleurs finalistes sont:

  • Ajouter un type de résolution "non modéré"
  • Ajoutez une entrée NULL à luResolutionTypes.resolutionTypeID (cela fonctionnerait-il même dans un AUTO_INCREMENT colonne?)

Merci pour la perspicacité!

PS Bonus indique à quiconque me dit si, dans le cas des bases de données, ce sont des "index" ou des "indices".


Suivi: merci à Bill Karwin pour avoir signalé ce qui s'est avéré être une erreur de syntaxe dans la structure du tableau (ne définissez pas une colonne sur NOT NULL si vous voulez qu'il autorise NULL!). Et une fois que j'aurai assez de karma pour vous donner ces points bonus, je le ferai :)

64
kyle

Vous pouvez résoudre ce problème en autorisant NULL dans la colonne de clé étrangère tblImageFlags.resolutionTypeID.


PS Bonus indique à quiconque me dit si, dans le cas des bases de données, ce sont des "index" ou des "indices".

Le pluriel de index doit être index .

Selon " Modern American Usage " de Bryan A. Garner:

À des fins ordinaires, index est le pluriel préférable, pas index . ... Indices , bien que moins prétentieux que les forums ou dogmata , est néanmoins prétentieux. Certains auteurs préfèrent les indices dans des contextes techniques, comme en mathématiques et en sciences. Bien que n'étant pas le meilleur pluriel pour index , index est autorisé dans le sens "indicateurs". ... Evitez le singulier indice , une contre-formation du pluriel indices .

97
Bill Karwin