Ich habe eine Integer-Spalte, der ich eine Fremdschlüssel-Integritätsregel hinzufügen möchte. Das einzige Problem ist, wenn diese Spalte keinen Wert hat / braucht, MySQL schreibt standardmäßig einen '0' Wert. Dies bricht offensichtlich die Fremdschlüsseleinschränkung, da es in der Primärtabelle keinen Datensatz mit einem PK von 0 gibt.
Wie kann ich dieses Problem überwinden?
Vielleicht möchten Sie Ihren Fremdschlüssel so einstellen, dass er NULL
-Werte akzeptiert, und verwenden Sie NULL
anstelle von 0
value.
Konzeptionell bedeutet NULL
einen fehlenden Wert . Wenn Ihre Zeile "den Wert nicht hat / braucht", passt ein NULL
perfekt dazu.
Und ja, ein NULL
-Wert würde Ihre Fremdschlüsseleinschränkung nicht brechen.
Lassen Sie uns ein einfaches Beispiel erstellen:
%Vor%Dann:
%Vor%Denken Sie jedoch long and hard darüber nach, dass diese FK-Spalte null sein darf. Null bedeutet, dass Sie eine Kinderaufzeichnung ohne Eltern haben können. Ist das wirklich ein gültiger Business Case? Können Sie ein Beispiel geben, wo dies gilt?
Außerdem bedeutet ein Null-FK (oder eine beliebige Null-Spalte), dass Sie jetzt Annahmen darüber treffen, was der Nullwert bedeutet. Wie sagst du, ob das Feld wirklich keinen Wert haben soll, während jemand vergisst, einen Wert einzugeben? Sie können Not-Null-Logik in der App implementieren und das Problem auf diese Weise umgehen, obwohl dies immer noch mit Risiken verbunden ist. Bessere Köpfe als meine haben gesagt, dass das Erlauben von Nullen zu einem weniger stabilen Datenbankdesign führt. YMMV. Betrachten Sie vielleicht einen Standardwert wie -1, der immer noch eine nicht-null FK erzwingt und zu einem Dummy-Datensatz nachschlägt.
Tags und Links sql mysql foreign-keys