Първо, имаме практическото причини. Външните ключове се поддържат и проверяват с помощта на индекси. За да може един индекс да бъде използваем, трябва да знаем (търсените) стойности на всички колони в индекса. Ако имаме индекс/pk на (a,b)
и имаме стойност на външен ключ (NULL,1)
, не можем да търсим в рамките на индекса, за да се определи дали има някакъв ред с b
стойност 1. Това би направило външния ключ "скъп" за поддръжка.
Но второ, трябва да вземем предвид последователността. За случая с една колона това е доста безспорно - ако имате стойност в колоната FK, тогава трябва да има съответстваща стойност в колоната, към която се отнася. В противен случай, ако колоната FK е NULL
тогава ограничението не е отметнато.
Но как да разширим това до множество колони? Какво е правилото по-горе? Няма единствен очевидно тълкуване, но вместо това множество. Дали горното правило „ако всички колоните не са NULL, тогава ограничението се проверява" или "ако някакво колоните не са NULL, тогава ограничението се проверява"? Тези правила са идентични, когато се разглежда само една колона.
Очаквахте правилото да е второто, а всъщност е първото. Това е изрично документирано :