Fremdschlüsseleinschränkungen, die Nullwerte zulassen
Beim Datenbankdesign ist es häufig erforderlich, Fremdschlüssel zu verwenden, um Beziehungen zwischen Tabellen herzustellen und die referenzielle Integrität sicherzustellen. In manchen Fällen kann es jedoch notwendig sein, die Einschränkungen zu lockern, indem man zulässt, dass einige Fremdschlüsselspalten null sind.
Frage:
Können Tabellenspalten mit Fremdschlüsseln in der Datenbank leer sein?
Antwort:
Ja, Fremdschlüsselspalten können Nullwerte enthalten. Dies macht die Datenmodellierung flexibler und kann in Szenarien verwendet werden, in denen die referenzielle Integrität nur dann erzwungen wird, wenn die Fremdschlüsselspalte nur Daten ungleich Null enthält.
MySQL-Beispiel:
Stellen Sie sich eine MySQL-Datenbank mit den folgenden Tabellen vor:
<code class="language-sql">CREATE DATABASE t; USE t; CREATE TABLE parent ( id INT NOT NULL, PRIMARY KEY (id) ) ENGINE=INNODB; CREATE TABLE child ( id INT NULL, parent_id INT NULL, FOREIGN KEY (parent_id) REFERENCES parent(id) ) ENGINE=INNODB;</code>
In diesem Beispiel ist die Spalte „parent_id“ in der untergeordneten Tabelle als nullfähig definiert. Dies bedeutet, dass die untergeordnete Tabelle Zeilen mit einem NULL-Wert in der Spalte parent_id enthalten kann.
Erzwingen Sie die Einschränkung nur, wenn der Wert nicht leer ist:
Um die referenzielle Integrität nur dann zu erzwingen, wenn der Fremdschlüsselwert nicht null ist, definieren Sie die Fremdschlüsseleinschränkung mithilfe der Klausel ON DELETE SET NULL oder ON UPDATE SET NULL. Die folgende Anweisung erzwingt beispielsweise eine Fremdschlüsseleinschränkung nur, wenn der Fremdschlüsselwert nicht null ist:
<code class="language-sql">ALTER TABLE child ADD FOREIGN KEY (parent_id) REFERENCES parent(id) ON DELETE SET NULL ON UPDATE SET NULL;</code>
Diese Konfiguration ermöglicht das Einfügen von Nullwerten in die Spalte „parent_id“, aber alle nachfolgenden Aktualisierungen oder Löschungen in der übergeordneten Tabelle werden an die untergeordnete Tabelle weitergegeben, wodurch der entsprechende Wert „parent_id“ in der untergeordneten Tabelle auf NULL gesetzt wird.
Fazit:
Indem Datenbankadministratoren zulassen, dass Fremdschlüsselspalten null sind, und die Klausel ON DELETE SET NULL oder ON UPDATE SET NULL verwenden, können sie Beziehungen zwischen Tabellen herstellen und gleichzeitig Flexibilität bei der Datenverwaltung bieten. Dies stellt die referenzielle Integrität sicher und ermöglicht gleichzeitig die Verwendung in Situationen, in denen eine bestimmte Referenz möglicherweise nicht sofort verfügbar ist oder absichtlich leer gelassen wurde.
Das obige ist der detaillierte Inhalt vonKönnen Fremdschlüsselspalten NULL-Werte in einer Datenbank akzeptieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!