webentwicklung-frage-antwort-db.com.de

MySQL-Fremdschlüssel, um NULL zuzulassen?

Ich setze eine Bildwebsite zusammen. Das grundlegende Schema ist ziemlich einfach in MySQL, aber ich habe einige Probleme damit, mögliche Admin-Flags darzustellen, die mit einem Bild verknüpft sind ("unangemessen", "urheberrechtlich geschützt" usw.). Meine aktuelle Vorstellung ist wie folgt:

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,
    ...
);

(Aus Gründen der Lesbarkeit abgeschnitten; ich schwöre, dass verschiedene Fremdschlüssel und Indizes in Ordnung sind.)

tblImageFlags.flagTypeID Ist in einer Nachschlagetabelle mit Flag-Typen mit Fremdschlüsseln versehen, und wie Sie sich vorstellen können, sollte tblImageFlags.resolutionTypeID fremd sein -Taste auf luResolutionTypes.resolutionTypeID. Das Problem ist, dass es beim erstmaligen Ausgeben eines Flags keinen logischen Auflösungstyp gibt (ich würde dies als gute Verwendung von NULL deklarieren); Wenn jedoch ein Wert festgelegt ist, sollte dieser für die Nachschlagetabelle mit einem Fremdschlüssel versehen sein.

Ich kann keine MySQL-Syntax-Problemumgehung für diese Situation finden. Existiert es? Die besten Zweitplatzierten sind:

  • Fügen Sie einen "nicht moderierten" Auflösungstyp hinzu
  • Fügen Sie einen NULL -Eintrag zu luResolutionTypes.resolutionTypeID Hinzu (würde dies sogar in einer AUTO_INCREMENT - Spalte funktionieren?)

Danke für den Einblick!

PS Bonuspunkte für jeden, der mir sagt, ob es sich bei Datenbanken um "Indizes" oder "Indizes" handelt.


Follow-up: Vielen Dank an Bill Karwin, der darauf hingewiesen hat, dass es sich um einen Syntaxfehler in der Tabellenstruktur handelt (setzen Sie keine Spalte auf NOT NULL, Wenn Sie dies zulassen möchten NULL!). Und wenn ich genug Karma habe, um dir diese Bonuspunkte zu geben, werde ich :)

64
kyle

Sie können dieses Problem lösen, indem Sie NULL in der Fremdschlüsselspalte tblImageFlags.resolutionTypeID Zulassen.


PS Bonuspunkte für jeden, der mir mitteilt, ob es sich bei Datenbanken um "Indizes" oder "Indizes" handelt.

Der Plural von Index sollte Index sein.

Laut " Modern American Usage " von Bryan A. Garner:

Für gewöhnliche Zwecke ist der Index der bevorzugte Plural, nicht der Index . ... Indizes , wenn auch weniger anspruchsvoll als Foren oder Dogmen , sind trotzdem anmaßend. Einige Autoren bevorzugen Indizes in technischen Zusammenhängen, wie in Mathematik und Naturwissenschaften. Obwohl nicht der beste Plural für Index , ist Index in diesem Sinne zulässig "Indikatoren." ... Vermeiden Sie den singulären Index , eine Rückbildung aus dem Plural Indizes .

97
Bill Karwin