MySQL-Fremdschlüsseleinschränkung - Ganzzahlspalte

8

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?

    
GSTAR 28.10.2010, 20:01
quelle

3 Antworten

7

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%     
Daniel Vassallo 28.10.2010, 20:04
quelle
2

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.

    
Joe 28.10.2010 20:26
quelle
1

Vielleicht erlauben Sie Nullen in Ihrer Fremdschlüsselspalte und setzen Sie den Standardwert auf null.

    
pavanred 28.10.2010 20:05
quelle

Tags und Links