Pertama, kami memiliki praktis alasan. Kunci asing dipelihara dan diperiksa menggunakan indeks. Agar indeks dapat digunakan, kita perlu mengetahui nilai (yang dicari) dari semua kolom dalam indeks. Jika kita memiliki indeks/pk pada (a,b)
dan kami memiliki nilai kunci asing (NULL,1)
, kita tidak bisa mencari dalam indeks untuk menentukan apakah ada baris dengan b
nilai 1. Ini akan membuat kunci asing "mahal" untuk dipelihara.
Tapi kedua, kita perlu mempertimbangkan konsistensi. Untuk kasus kolom tunggal, ini cukup tidak kontroversial - jika Anda memiliki nilai di kolom FK, maka perlu ada nilai yang cocok di kolom yang direferensikan. Jika tidak, jika kolom FK adalah NULL
maka batasannya tidak dicentang.
Tapi, bagaimana kita memperluas ini ke beberapa kolom? Apa itu aturan di atas? Tidak ada satu interpretasi yang jelas, tetapi lebih dari itu. Apakah aturan di atas "jika semua kolom bukan NULL, maka batasannya dicentang" atau "jika ada kolom bukan NULL, maka batasannya dicentang"? Aturan ini identik ketika hanya satu kolom yang dipertimbangkan.
Anda mengharapkan aturan menjadi yang kedua, padahal sebenarnya yang pertama. Ini secara eksplisit didokumentasikan :