Introduksjon til Foreign Key i SQL

Foreign Key er en begrensning i SQL. Den brukes til å relatere de to tabellene. En fremmed nøkkel i en tabell peker på en primærnøkkel i en annen tabell. En fremmed nøkkel kan brukes for å sikre at raden i en tabell har tilsvarende rad / rader i en annen tabell. Den refererte tabellen kalles overordnet bord og tabellen med fremmed nøkkel er kjent som underordnet tabell. Dette foreldre-barn-forholdet håndhever regelen som er kjent som Referensiell integritet. Henvisningsintegritet er en egenskap til data som sier at alle referansene er gyldige.

Så hvis du har 1-til-mange eller mange-til-mange-relasjoner i databasen, vil utenlandske nøkler være veldig nyttige. Den fungerer som en kryssreferanse mellom to tabeller (overordnede bord og underordnede tabeller) fordi den refererer til den primære nøkkelen til en annen tabell. Så det etablerer en kobling mellom parent_table og child_table.

syntax

Å opprette en ny tabell med en fremmed nøkkel krever CREATE TABLE-tillatelse 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 tabellenavnet som vi vil lage
  • column_1, column_2- kolonnene som skal legges til i tabellen.
  • F_key- Dette er en fremmed nøkkelbegrensning.
  • child_column1, child_column2… child_column_n- Det er navnet på child_Table-kolonner for å referere til primærnøkkelen i overordnet tabell.
  • Parent_Table- Dette er navnet på parent_table. Den primære nøkkelen til parent_table er referert til i child_table
  • PÅ SLETT - Denne parameteren tar handling på barnedata etter sletting av foreldredata. SET NULL, NO ACTION, CASCADE, SET DEFAULT er noen av verdiene til denne parameteren.
  • PÅ OPPDATERING - Dette er en valgfri parameter som iverksetter tiltak for barnedataene etter oppdatering av foreldredataene. SET NULL, NO ACTION, CASCADE, SET DEFAULT er noen av verdiene til denne parameteren.
  • CASCADE- Vi kan bruke dette sammen med ON DELETE og ON UPDATE. Etter sletting eller oppdatering av foreldredata Barndataene blir enten slettet eller oppdatert.

Å opprette en fremmed nøkkel i en eksisterende tabell krever ALTER-tillatelse på bordet.

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

regler

  1. Utenlandske nøkler gjelder ikke midlertidige tabeller.
  2. Utenlandsk nøkkelbegrensning trenger ikke å kobles bare til den primære nøkkelen til en annen tabell, den kan også kobles til den UNIKKE begrensningen til en annen tabell.
  3. Utenlandske nøkkelbegrensninger kan referere til en annen kolonne i samme tabell. Dette omtales som en selvreferanse.
  4. Utenlandske nøkkelbegrensninger kan referere til tabellene i samme database.
  5. Vi kan også sette inn NULL-verdier i barnetabellen.
  6. Når vi setter inn andre enn NULL-verdien i den fremmede nøkkelbegrensningen, må verdien finnes i den refererte kolonnen ellers overtredelsesmelding skjedde.
  7. Verdien på foreldrenes unike nøkler kan ikke endres hvis oppdateringsregelen er BEGRENSET og det er en eller flere avhengige rader. Imidlertid, hvis oppdateringsregelen er INGEN HANDLING, kan unike overordnede nøkler oppdateres så lenge hvert barn har en overordnet nøkkel når oppdateringsuttalelsen fullføres.

eksempler

Si at vi har to bord Kunder og ordrer. Kundetabellen har alle kundrelaterte data og ordrer-tabellen som inneholder kundeordrerelaterte data.

kunder

Cust_idPrimærnøkkel
CUST_NAME
plassering

Bestillinger

Bestillings IDPrimærnøkkel
Bestillingsdato
Antall
Cust_idFremmed nøkkel
Totale mengden

I eksemplet over er Cust_id-kolonnen i ORDERS-tabellen en fremmed nøkkel som peker til Cust_id-kolonnen i CUSTOMERS-tabellen.

La oss anta at disse tabellene har følgende verdier

kunder

1001AlexOSS
1002CareyOSS
1003SidStorbritannia
1004TomAUS
1005KapilIND

Bestillinger

7820-10-2018510021200
7912-10-201741001800
8020-11-201621005369
8109-10-201651002258
8219-08-20161110041900
8330-06-20164510012300
8416-02-201671001890
8502-01-201621002260

For cust_id 1001 er det tre ordrer som finnes i ordretabellen.

For cust_id 1003 er det ingen ordre.

Så hvis vi har spesielle data (Si id 1003) i overordnede tabell, er det ikke nødvendig å ha disse dataene i barnetabellen, men omvendt er det ikke sant.

Vi kan ikke ha noen data i barnetabellen (ordretabellen) som ikke finnes i overordnede tabellen (kunder.)

Vi kan for eksempel ikke sette inn en ny post si for cust_id 1006 i ordrer-tabellen fordi cust_id 1006 ikke eksisterer i kundetabellen.

Nedenfor er eksemplene som krenker referansens integritet i dette forholdet:

  1. Sette inn en rad i ORDERS-tabellen der Cust_ID ikke vises i Cust_ID-kolonnen i CUSTOMERS-tabellen.
  2. Slette en rad fra CUSTOMERS-tabellen der Cust_ID for raden som skal slettes, fremdeles er til stede i Cust_ID-kolonnen i ORDERS-tabellen.

Når en bestemt post blir slettet fra hovedtabellen, er det to måter å opprettholde integriteten til data i barnetabellen. Når to tabeller er koblet med Foreign Key og visse data i hovedtabellen blir slettet, som posten også finnes i barnetabellen for, har vi en mekanisme for å redde integriteten til data i barnetabellen

  • På Delete Cascade : Dette vil fjerne posten fra barnetabellen hvis den verdien av den utenlandske nøkkelen blir slettet fra hovedtabellen.
  • På Slett NULL: Dette vil sette alle verdiene i den posten til Barnetabellen som NULL, for hvilken verdien av den utenlandske nøkkelen blir slettet fra hovedtabellen.

Konklusjon - Fremmed nøkkel i SQL

Så det er lurt å bruke Foreign Key i databasen som har en til en eller en til mange forhold. Den største fordelen ved å bruke utenlandske nøkkelbegrensninger er at det forbedrer ytelsen. Utviklere kan enkelt identifisere strukturen i databasen. Vi kan også undersøke hvordan spørringen kommer til å hente dataene.

Anbefalte artikler

Dette er en guide til Foreign Key i SQL. Her diskuterer vi reglene og eksemplene på Foreign Key i SQL med Syntax. Du kan også se på følgende artikler for å lære mer -

  1. SQL Views
  2. Typer sammenføyninger i SQL Server
  3. Hva er PL / SQL?
  4. SQL Server-begrensninger
  5. Topp 6 typer sammenføyninger i MySQL med eksempler