允許空值的外鍵約束
在資料庫設計中,通常需要使用外鍵在表之間建立關係以確保參考完整性。但是,在某些情況下,可能需要允許某些外鍵列為空,從而放鬆約束。
問題:
資料庫中具有外鍵的表格列可以為空嗎?
答案:
是的,外鍵列可以包含空值。這使得資料建模更加靈活,並且可以在外鍵列中只有非空資料時才執行參考完整性的場景中使用。
MySQL 範例:
考慮一個具有以下表格的 MySQL 資料庫:
<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>
在此範例中,child 表中的 parent_id 欄位被定義為可為空。這表示 child 表中可以有 parent_id 欄位值為 NULL 的行。
僅當數值不為空時才強制約束:
要僅在外鍵值不為空時才強制參考完整性,需要使用 ON DELETE SET NULL 或 ON UPDATE SET NULL 子句定義外鍵約束。例如,以下語句僅在外鍵值不為空白時才強制外鍵約束:
<code class="language-sql">ALTER TABLE child ADD FOREIGN KEY (parent_id) REFERENCES parent(id) ON DELETE SET NULL ON UPDATE SET NULL;</code>
此配置允許將空值插入 parent_id 列,但父表中的任何後續更新或刪除都會級聯到子表,導致子表中對應的 parent_id 值設為 NULL。
結論:
透過允許外鍵列為空白並使用 ON DELETE SET NULL 或 ON UPDATE SET NULL 子句,資料庫管理員可以在表之間建立關係,同時在資料管理中提供彈性。這確保了參照完整性,同時允許在特定引用可能無法立即獲得或故意留空的情況下使用。
以上是資料庫中的外鍵列可以接受 NULL 值嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!