Kekangan kunci asing yang membenarkan nilai nol
Dalam reka bentuk pangkalan data, selalunya perlu menggunakan kunci asing untuk mewujudkan hubungan antara jadual untuk memastikan integriti rujukan. Walau bagaimanapun, dalam beberapa kes mungkin perlu untuk melonggarkan kekangan dengan membenarkan beberapa lajur kunci asing menjadi batal.
Soalan:
Bolehkah lajur jadual dengan kunci asing dalam pangkalan data kosong?
Jawapan:
Ya, lajur kunci asing boleh mengandungi nilai nol. Ini menjadikan pemodelan data lebih fleksibel dan boleh digunakan dalam senario di mana integriti rujukan dikuatkuasakan hanya apabila terdapat hanya data bukan nol dalam lajur kunci asing.
Contoh MySQL:
Pertimbangkan pangkalan data MySQL dengan jadual berikut:
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;
Dalam contoh ini, lajur parent_id dalam jadual anak ditakrifkan sebagai nullable. Ini bermakna jadual anak boleh mempunyai baris dengan nilai NULL dalam lajur parent_id.
Kuatkuasakan kekangan hanya jika nilainya tidak kosong:
Untuk menguatkuasakan integriti rujukan hanya apabila nilai kunci asing bukan batal, takrifkan kekangan kunci asing menggunakan klausa ON DELETE SET NULL atau ON UPDATE SET NULL. Sebagai contoh, pernyataan berikut menguatkuasakan kekangan kunci asing hanya jika nilai kunci asing tidak batal:
ALTER TABLE child ADD FOREIGN KEY (parent_id) REFERENCES parent(id) ON DELETE SET NULL ON UPDATE SET NULL;
Konfigurasi ini membenarkan nilai null disisipkan ke dalam lajur parent_id, tetapi sebarang kemas kini atau pemadaman berikutnya dalam jadual induk akan mengalir ke jadual anak, menyebabkan nilai parent_id yang sepadan dalam jadual anak ditetapkan kepada NULL.
Kesimpulan:
Dengan membenarkan lajur kunci asing menjadi batal dan menggunakan klausa ON DELETE SET NULL atau ON UPDATE SET NULL, pentadbir pangkalan data boleh mewujudkan perhubungan antara jadual sambil menyediakan fleksibiliti dalam pengurusan data. Ini memastikan integriti rujukan sambil membenarkan penggunaan dalam situasi di mana rujukan khusus mungkin tidak tersedia dengan segera atau sengaja dibiarkan kosong.
Atas ialah kandungan terperinci Bolehkah Lajur Utama Asing Menerima Nilai NULL dalam Pangkalan Data?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!