For det første har vi det praktiske grunde. Fremmednøgler vedligeholdes og kontrolleres ved hjælp af indekser. For at et indeks kan bruges, skal vi kende de (søgte) værdier for alle kolonner i indekset. Hvis vi har et indeks/pk på (a,b)
og vi har en fremmednøgleværdi på (NULL,1)
, kan vi ikke søge i indekset for at afgøre, om der er en række med en b
værdi på 1. Dette ville gøre den fremmede nøgle "dyr" at vedligeholde.
Men for det andet skal vi overveje sammenhængen. For tilfældet med en enkelt kolonne er det ret ukontroversielt - hvis du har en værdi i FK-kolonnen, skal der være en matchende værdi i den refererede kolonne. Ellers, hvis FK-kolonnen er NULL
så er begrænsningen ikke kontrolleret.
Men hvordan udvider vi dette til flere kolonner? Hvad er reglen ovenfor? Der er ikke en enkelt indlysende fortolkning, men i stedet flere. Er ovenstående regel "hvis alle kolonner er ikke-NULL, så er begrænsningen markeret" eller "hvis nogen kolonner er ikke-NULL, så er begrænsningen kontrolleret"? Disse regler er identiske, når kun en enkelt kolonne er under overvejelse.
Du forventede, at reglen var den anden, når den faktisk er den første. Dette er eksplicit dokumenteret :