Wenn ich Fremdschlüssel in MySQL verwende, erhalte ich einen Fehler, wenn der Quellwert 0 ist (weil es keinen Zieldatensatz mit der ID 0 gibt). Daher ändere ich die Quellspalte auf NULL, und dann funktioniert es. Ich bin mir jedoch nicht sicher, ob dies der richtige Weg ist. Ist es der richtige Weg, oder kann ich irgendwie die Quell-ID auf 0 statt auf NULL setzen?
Fremdschlüssel sind Einschränkungen. Das bedeutet, wenn der Wert der Spalte, die den Fremdschlüssel hat, auf irgendwas gesetzt ist (und "irgendetwas" NULL
nicht enthält), muss dieser Wert in der referenzierten Tabelle vorhanden sein oder MySQL wird einen Fehler ausgeben.
Kurz gesagt, Sie können entweder den Wert auf NULL
setzen, die Fremdschlüsseleinschränkung entfernen und den Wert auf den gewünschten Wert setzen, einschließlich 0
, oder einen Datensatz mit einem 0
im referenzierten Objekt hinzufügen Tabelle. Von diesen Optionen scheint der Wert auf NULL
am saubersten zu sein.
Ja, das ist der richtige Weg. Der ganze Sinn eines FK besteht darin, zu erzwingen, dass ein Datensatz mit der referenzierten ID tatsächlich existiert. Wenn Sie also die FK-Spalte auf 0 setzen, muss ein Datensatz mit der ID 0 vorhanden sein.
Der einzige Weg, um dies zu erreichen, ist, die FK-Spalte wie bisher NULL-fähig zu machen.
Warum sollten Sie die FK-Spalte auf 0 setzen? Der kanonische Wert für "existiert nicht" in SQL ist NULL.
mit einem NULL ist aus zwei Gründen besser als Null. Erstens ist es klarer, dass es sich um einen "speziellen" Wert handelt (es gibt nichts, was bewirkt, dass Tabellen-IDs immer ungleich Null sind, obwohl dies häufig bei automatisch generierten IDs der Fall ist) / p>
Was Sie tun, ist gängige Praxis - viele Leute verwenden NULL als eine Markierung, die "fehlenden Wert" sagt, und das ist, was die SQL-Fremdschlüsselbedingung erwartet.
Eine weitere Möglichkeit, mit fehlenden Werten umzugehen, besteht darin, eine dritte "Link" -Tabelle zu verwenden, die nur dann einen Eintrag enthält, wenn eine Verbindung zwischen den beiden Klassen besteht (wie in einer Viele-zu-Viele-Beziehung). dies vermeidet die Notwendigkeit eines NULL und wird daher von einigen Datenbank-Puristen bevorzugt, macht aber alles komplexer. Weitere Informationen finden Sie unter Nulable Foreign Key Bad Practice? .
Tags und Links mysql foreign-keys