En fremmednøkkel kobler poster i én tabell til poster i en annen. En ordretabell har et customer_id-felt. Dette feltet er en fremmednøkkel som peker til kundetabellens primærnøkkel. Koblingen sikrer at hver ordre tilhører en reell kunde. Uten den kan ordrer referere til kunder som ikke finnes. Databasen håndhever forholdet.
Fremmednøkler gjør mer enn å dokumentere relasjoner. De håndhever referensiell integritet. Hvis du prøver å sette inn en ordre med en customer_id som ikke finnes i kundetabellen, avviser databasen den. Hvis du prøver å slette en kunde som har ordrer, blokkerer databasen enten slettingen eller kaskaderer den avhengig av regelen. Denne håndhevingen forhindrer foreldreløse poster og inkonsistente data. Fremmednøkler hjelper også med spørreytelsen. Databasen kan bruke relasjonen til å optimalisere sammenføyninger. Ikke alle databaser håndhever fremmednøkler. Noen NoSQL-databaser overlater referensiell integritet til applikasjonen. Det gir utviklere mer fleksibilitet, men også mer ansvar. Applikasjonen må sørge for at referansene er gyldige. Hvis det mislykkes, blir dataene inkonsistente. Fremmednøkler er en begrensning. Begrensninger er upraktiske inntil de forhindrer en katastrofe.
Regler for fremmednøkkel
- Begrens – blokker sletting hvis referanser finnes
- Kaskade – slett eller oppdater referanseposter automatisk
- Sett null – sett fremmednøkkelen til null ved sletting
- Ingen handling – tillat operasjonen og sjekk senere
En fremmednøkkel er en lenke og en garanti. Lenken forbinder tabeller. Garantien holder dem konsistente.
Comments
No comments yet. Be the first to share a thought.
Leave a comment