Za prvé, máme praktické důvody. Cizí klíče jsou udržovány a kontrolovány pomocí indexů. Aby byl index použitelný, potřebujeme znát (hledané) hodnoty všech sloupců v rámci indexu. Pokud máme index/pk na (a,b)
a máme hodnotu cizího klíče (NULL,1)
, nemůžeme hledat v indexu, abyste zjistili, zda existuje nějaký řádek s b
hodnota 1. To by znamenalo, že údržba cizího klíče by byla "drahá".
Ale zadruhé musíme zvážit konzistenci. V případě jednoho sloupce je to docela nekontroverzní - pokud máte hodnotu ve sloupci FK, pak v odkazovaném sloupci musí být odpovídající hodnota. Jinak, pokud je sloupec FK NULL
pak omezení není zaškrtnuto.
Ale jak to rozšíříme na více sloupců? Co je pravidlo výše? Neexistuje žádný jediný zřejmý výklad, ale místo toho několik. Je výše uvedené pravidlo „pokud vše sloupce nemají hodnotu NULL, pak je omezení zkontrolováno" nebo "pokud nějaké sloupce nemají hodnotu NULL, pak je omezení zkontrolováno"? Tato pravidla jsou identická, pokud je zvažován pouze jeden sloupec.
Očekávali jste, že pravidlo bude druhé, i když ve skutečnosti je první. Toto je výslovně zdokumentováno :