Introduktion til Foreign Key i SQL

Foreign Key er en begrænsning i SQL. Det bruges til at relatere de to tabeller. En fremmed nøgle i en tabel peger på en primær nøgle i en anden tabel. En fremmed nøgle kan bruges til at sikre, at rækken i en tabel har tilsvarende række / rækker i en anden tabel. Den refererede tabel kaldes overordnede tabel, og tabellen med den fremmednøgle kaldes underordnede tabel. Dette forhold mellem forældre og barn håndhæver reglen, der er kendt som referencemæssig integritet. Henvisningsintegritet er en egenskab ved data, der angiver, at alle dens referencer er gyldige.

Så hvis du har 1-til-mange eller mange-til-mange-relationer i databasen, vil udenlandske nøgler være meget nyttige. Det fungerer som en krydshenvisning mellem to tabeller (parent_table og child_table), fordi den refererer til den primære nøgle i en anden tabel. Så det opretter en forbindelse mellem parent_table og child_table.

Syntaks

Oprettelse af en ny tabel med en fremmed nøgle kræver CREATE TABLE-tilladelse i databasen

CREATE TABLE child_Table
(
column_1 datatype ( NULL |NOT NULL ),
column_2 datatype ( NULL |NOT NULL ),

CONSTRAINT F_key
FOREIGN KEY (child_column1, child_column2, … child_column_n)
REFERENCES parent_Table (parent_column1, parent_column2, … parent_column_n)
( ON DELETE ( NO ACTION |CASCADE |SET NULL |SET DEFAULT ) ) ( ON UPDATE ( NO ACTION |CASCADE |SET NULL |SET DEFAULT ) ) );

  • Child_Table er det tabellenavn, som vi vil oprette
  • column_1, column_2- de kolonner, der skal føjes til tabellen.
  • F_key- Dette er en fremmed nøglebegrænsning.
  • child_column1, child_column2… child_column_n- Det er navnet på child_Table-kolonner for at henvise til den primære nøgle i overordnede tabel.
  • Parent_Table- Dette er navnet på parent_table. Den primære nøgle til parent_table henvises til under child_table
  • ON DELETE - Denne parameter udfører handling på børndata efter sletning af forældredata. SET NULL, NO ACTION, CASCADE, SET DEFAULT er nogle af værdierne for denne parameter.
  • ON UPDATE- Dette er en valgfri parameter, der tager handling på underordnede data efter opdatering af forældredata. SET NULL, NO ACTION, CASCADE, SET DEFAULT er nogle af værdierne for denne parameter.
  • CASCADE- Vi kan bruge dette sammen med ON DELETE og ON UPDATE. Efter sletning eller opdatering af forældredata Børndataene bliver enten slettet eller opdateret.

Oprettelse af en fremmed nøgle i en eksisterende tabel kræver ALTER-tilladelse på bordet.

ALTER table_name
ADD CONSTRAINT constraint_name
FOREIGN KEY foreign_key_name(columns)
REFERENCES parent_table(columns)

Regler

  1. Udenlandske nøgler gælder ikke for midlertidige tabeller.
  2. Udenlandsk nøglebegrænsning behøver ikke kun være knyttet til den primære nøgle i en anden tabel, den kan også knyttes til UNIK begrænsning i en anden tabel.
  3. UDENlandske nøglebegrænsninger kan henvise til en anden kolonne i samme tabel. Dette kaldes en selvreference.
  4. Udenlandske nøglebegrænsninger kan henvise til tabellerne i den samme database.
  5. Vi kan også indsætte NULL-værdier i underordnede tabeller.
  6. Når vi indsætter andre end NULL-værdien i den udenlandske nøglebegrænsning, skal værdien findes i den henvisede kolonne ellers meddelelse om overtrædelse.
  7. Værdien af ​​overordnede unikke nøgler kan ikke ændres, hvis opdateringsreglen er RESTRICT, og der er en eller flere afhængige rækker. Hvis opdateringsreglen imidlertid er INGEN HANDLING, kan unikke forældre nøgler opdateres, så længe hvert barn har en forældremåde, når opdateringserklæringen er færdig.

eksempler

Lad os sige, at vi har to borde Kunder og ordrer. Kundetabellen har alle de kunderelaterede data og ordrer-tabellen med kundeordrerelaterede data.

kunder

kunde_idPrimærnøgle
kunde_navn
Beliggenhed

Ordre:% s

Ordre IDPrimærnøgle
Bestillingsdato
Antal
kunde_idFremmed nøgle
Total beløb

I ovenstående eksempel er Cust_id-kolonnen i ORDERS-tabellen en fremmed nøgle, der peger på Cust_id-kolonnen i CUSTOMERS-tabellen.

Lad os antage, at disse tabeller har følgende værdier

kunder

1001AlexOS
1002CareyOS
1003SidUK
1004TomAUS
1005KapilIND

Ordre:% s

7820-10-2018510021200
792017/12/1041001800
8020-11-201621005369
812016/09/1051002258
8219-08-20161110041900
8330-06-20164510012300
8416-02-201671001890
852016/02/0121002260

For cust_id 1001 er der tre ordrer, der findes i ordrestabellen.

For cust_id 1003 er der ingen ordre.

Så hvis vi har bestemte data (Sig id 1003) i forældrestabellen, er det ikke nødvendigt at have disse data i underordnede tabellen, men omvendt er det ikke sandt.

Vi kan ikke have nogen data i underordnede tabellen (ordretabel), som ikke findes i overordnede tabeller (kunder).

Vi kan for eksempel ikke indsætte en ny post, der siger for cust_id 1006 i ordrer-tabellen, fordi cust_id 1006 ikke findes i kundetabellen.

Så nedenfor er eksemplerne, der krænker referencenes integritet i dette forhold:

  1. Indsættelse af en række i ORDERS-tabellen, hvor Cust_ID ikke vises i kolonnen Cust_ID i CUSTOMERS-tabellen.
  2. Sletning af en række fra CUSTOMERS-tabellen, hvor Cust_ID for rækken, der skal slettes, stadig findes i Cust_ID-kolonnen i ORDERS-tabellen.

Når en bestemt post slettes fra hovedtabellen er der to måder at opretholde integriteten af ​​data i underordnede tabellen. Når to tabeller er forbundet med Foreign Key og visse data i hovedtabellen slettes, som posten også findes i underordnet tabel, så har vi en mekanisme til at gemme integriteten af ​​data i barnetabellen

  • Ved Slet kaskade : Dette fjerner posten fra underordnede tabellen, hvis denne værdi af den udenlandske nøgle slettes fra hovedtabellen.
  • Ved Slet NULL: Dette indstiller alle værdier i den optegnelse af underordnede tabel som NULL, for hvilken værdien af ​​den udenlandske nøgle slettes fra hovedtabellen.

Konklusion - Fremmed nøgle i SQL

Så det tilrådes at bruge Foreign Key i databasen, der har en til en eller en til mange forhold. Den største fordel ved at bruge udenlandske nøglebegrænsninger er, at det forbedrer ydeevnen. Udviklere kan let identificere strukturen i databasen. Vi kan også undersøge, hvordan forespørgslen vil hente dataene.

Anbefalede artikler

Dette er en guide til Foreign Key i SQL. Her diskuterer vi regler og eksempler på fremmed nøgle i SQL med syntaks. Du kan også se på de følgende artikler for at lære mere -

  1. SQL Views
  2. Typer af sammenføjninger i SQL Server
  3. Hvad er PL / SQL?
  4. SQL Server-begrænsninger
  5. Top 6 typer sammenføjninger i MySQL med eksempler