sql >> Database teknologi >  >> RDS >> Sqlserver

Foreign Key Constraint i den underordnede tabel gør det muligt at indsætte værdier, der ikke findes i den overordnede tabel

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 :



  1. Hent mysql-tabelkommentar ved hjælp af DatabaseMetaData

  2. Vil du migrere eksisterende auth.Brugerdata til den nye Django 1.5 brugermodel?

  3. Identifikation af ASH-sekvenskondition i RAC

  4. Hvad er forskellen mellem libmysqlclient.a og libmysqlclient_r.a?