SQL Server FOREIGN NØGLE: Sådan opretter du med eksempel

⚡ Smart opsummering

En fremmednøgle i SQL Server håndhæver referentiel integritet ved at linke en underordnet tabel til en overordnet tabel. Enhver fremmednøgleværdi skal allerede findes i den refererede primære nøgle i den overordnede tabel.

  • 🔗 Hvad er en fremmednøgle: En fremmednøgle forbinder en undertabel med en overordnet tabel og håndhæver referentiel integritet mellem dem.
  • 👪 Forælder og barn: Den refererede tabel er den overordnede tabel; tabellen, der indeholder den fremmede nøgle, er den underordnede tabel, som peger på den overordnede primære nøgle.
  • 🖱️ To oprettelsesmetoder: SQL Server Management Studio-relationer og T-SQL CREATE TABLE … FOREIGN KEY … REFERENCES-klausulen definerer begge en fremmednøgle.
  • Tilføj til en eksisterende tabel: ÆNDR TABEL … TILFØJ BEGRÆNSNING … UDMÆRKET NØGLE tilføjer relationen til en tabel, der allerede findes.
  • 🔄 Referentielle handlinger: ON DELETE- og ON UPDATE-klausuler styrer underordnede rækker med NO ACTION, CASCADE, SET NULL eller SET DEFAULT.
  • Integrity kontrollere: Indsættelse af en underrække, hvis nøgle ikke har nogen matchende overordnet række, afvises.ping dataene er konsistente.

SQL Server FOREIGN NØGLE: Sådan opretter du i SQL Server med et eksempel

Hvad er en UDENLANDSKE NØGLE?

En fremmednøgle giver en måde at håndhæve referentiel integritet inden for SQL ServerKort sagt sikrer en fremmednøgle, at værdier i én tabel skal være til stede i en anden tabel.

Regler for UDENLANDSKE NØGLE

  • NULL er tilladt i en SQL-fremmednøgle.
  • Den tabel, der refereres til, kaldes den overordnede tabel.
  • Tabellen med den fremmede nøgle kaldes undertabellen.
  • Fremmednøglen i undertabellen refererer til primærnøgle i den overordnede tabel.
  • Dette forældre-barn-forhold håndhæver reglen kendt som "referentiel integritet".

Diagrammet nedenfor opsummerer alle ovenstående punkter for den fremmednøgle.

Diagram over en fremmednøgle, der forbinder en undertabel med den overordnede tabels primære nøgle

Sådan opretter du UDENLANDSKE NØGLE i SQL

Du kan oprette en fremmednøgle i SQL Server på to måder:

SQL Server Management Studio

Overordnet tabel: Lad os sige, at vi har en eksisterende overordnet tabel med navnet 'Kursus'. Kursus-ID og Kursusnavn er to kolonner med Kursus-ID som primærnøgle.

Overordnet tabel Kursus med primærnøgle Course_Id og kolonner Course_name

Undertabel: Vi skal oprette den anden tabel som en undertabel. 'Course_ID' og 'Course_Strength' er dens to kolonner. 'Course_ID' skal dog være den fremmede nøgle.

Trin 1) Højreklik på Tabeller > Ny > Tabel…

Højreklik på Tabeller, derefter Ny og derefter Tabel i SQL Server Management Studio

Trin 2) Indtast to kolonnenavne som 'Course_ID' og 'Course_Strength'. Højreklik på kolonnen 'Course_Id', og klik derefter på Relationship.

Nye underordnede tabelkolonner Course_ID og Course_Strength med menuen Relationship

Trin 3) Klik på 'Tilføj' i 'Fremmednøgleforhold'.

Dialogboksen Forhold mellem fremmednøgler med knappen Tilføj

Trin 4) Klik på ikonet '…' i 'Specifikation af tabeller og kolonner'.

Specifikationsfelt for tabeller og kolonner med ellipseknappen

Trin 5) Vælg 'Primærnøgletabellen' som 'KURS' og den nye tabel, der oprettes, som 'Fremmednøgletabel' i rullemenuen.

Valg af COURSE som primærnøgletabel i relationsdialogen

Trin 6) For 'Primærnøgletabellen' skal du vælge kolonnen 'Kursus-id' som kolonne for den primære nøgletabel.

For tabellen 'Foreign Key Table' skal du vælge kolonnen 'Course_Id' som tabellens kolonne for fremmednøgler. Klik på OK.

Kortping Course_Id som både primærnøgle- og fremmednøglekolonner

Trin 7) Klik på Tilføj.

Klik på Tilføj for at bekræfte relationen mellem fremmednøgler

Trin 8) Giv tabellen navnet 'Course_Strength' og klik på OK.

Navngiv den underordnede tabel Course_Strength og klik på OK

Resultat: Vi har angivet en overordnet-underordnet relation mellem 'Kursus' og 'Kursusstyrke'.

Forældre-barn-forhold etableret mellem Kursus og Kursusstyrke

T-SQL: Opret en overordnet-underordnet tabel ved hjælp af T-SQL

Overordnet tabel: Overvej igen, at vi har en eksisterende overordnet tabel med navnet 'Kursus'. Course_ID og Course_name er to kolonner med Course_Id som primærnøgle.

Eksisterende overordnet tabel Kursus med Kursus-Id som primærnøgle

Undertabel: Vi skal oprette den anden tabel som undertabel med navnet 'Course_Strength_TSQL'. 'Course_ID' og 'Course_Strength' er dens to kolonner. 'Course_ID' skal dog være den fremmede nøgle.

Nedenfor er syntaksen til oprette en tabel med en UDENLANDSK NØGLE.

Syntaks:

CREATE TABLE childTable
(
  column_1 datatype [ NULL |NOT NULL ],
  column_2 datatype [ NULL |NOT NULL ],
  ...

  CONSTRAINT fkey_name
    FOREIGN KEY (child_column1, child_column2, ... child_column_n)
    REFERENCES parentTable (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 } ] 
);

Her er en beskrivelse af ovenstående parametre:

  • childTable er navnet på den tabel, der skal oprettes.
  • kolonne_1 og kolonne_2 er de kolonner, der skal tilføjes til tabellen.
  • fkey_name er navnet på den fremmednøglebegrænsning, der skal oprettes.
  • child_column1, child_column2 … child_column_n er de underordnede tabelkolonner, der refererer til den primære nøgle i parentTable.
  • parentTable er navnet på den overordnede tabel, hvis nøgle refereres til i undertabellen.
  • parent_column1, parent_column2 … parent_column_n er de kolonner, der udgør den primære nøgle i den overordnede tabel.
  • ON DELETE er en valgfri parameter, der angiver, hvad der sker med underdataene, når overordnede data er slettet. Værdierne omfatter NO ACTION, SET NULL, CASCADE eller SET DEFAULT.
  • ON UPDATE er en valgfri parameter, der angiver, hvad der sker med underdataene, efter at overordnede data er opdateret. Værdierne omfatter NO ACTION, SET NULL, CASCADE eller SET DEFAULT.
  • INGEN HANDLING betyder, at der ikke sker noget med de underordnede data, efter at de overordnede data er opdateret eller slettet.
  • CASCADE betyder, at underdataene slettes eller opdateres, efter at overordnede data er blevet slettet eller opdateret.
  • SET NULL betyder, at underdataene sættes til null, efter at overordnede data er opdateret eller slettet.
  • ANGIV STANDARD betyder, at underdataene indstilles til deres standardværdi efter en opdatering eller sletning af overordnede data.

Lad os se et eksempel på en fremmednøgle, der opretter en tabel med én kolonne som en UDENLANDSK NØGLE ved hjælp af en datatype for hver kolonne.

Fremmednøgle i SQL-eksempel

Forespørgsel:

CREATE TABLE Course_Strength_TSQL
(
Course_ID Int,
Course_Strength Varchar(20) 
CONSTRAINT FK FOREIGN KEY (Course_ID)
REFERENCES COURSE (Course_ID)	
)

Trin 1) Kør forespørgslen ved at klikke på Udfør.

Udførelse af CREATE TABLE-forespørgslen, der definerer den fremmede nøgle Course_ID

Resultat: Vi har angivet en overordnet-underordnet relation mellem 'Course' og 'Course_Strength_TSQL'.

Forældre-barn-forhold oprettet mellem Course og Course_Strength_TSQL

Brug af ALTER TABLE

Nu skal vi lære, hvordan man tilføjer en fremmednøgle i SQL Server til en tabel, der allerede findes, ved hjælp af ALTER TABLE-sætningen. Vi bruger syntaksen nedenfor:

ALTER TABLE childTable
ADD CONSTRAINT fkey_name
    FOREIGN KEY (child_column1, child_column2, ... child_column_n)
    REFERENCES parentTable (parent_column1, parent_column2, ... parent_column_n);

Her er en beskrivelse af de anvendte parametre ovenfor:

  • childTable er navnet på den tabel, der skal oprettes.
  • kolonne_1 og kolonne_2 er de kolonner, der skal tilføjes til tabellen.
  • fkey_name er navnet på den fremmednøglebegrænsning, der skal oprettes.
  • child_column1, child_column2 … child_column_n er de underordnede tabelkolonner, der refererer til den primære nøgle i parentTable.
  • parentTable er navnet på den overordnede tabel, hvis nøgle refereres til i undertabellen.
  • parent_column1, parent_column2 … parent_column_n er de kolonner, der udgør den primære nøgle i den overordnede tabel.

Eksempel på tilføjelse af fremmednøgle på ALTER TABLE:

ALTER TABLE department
ADD CONSTRAINT fkey_student_admission
    FOREIGN KEY (admission)
    REFERENCES students (admission);

Vi har oprettet en fremmednøgle ved navn fkey_student_admission på afdelingstabellen. Denne fremmednøgle refererer til adgangskolonnen i elevtabellen.

Eksempel forespørgsel UDENLANDSKE NØGLE

Lad os først se på dataene i vores overordnede tabel, COURSE.

Forespørgsel:

SELECT * from COURSE;

SELECT-resultat, der viser den overordnede tabel COURSE-data

Lad os nu indsætte nogle rækker i undertabellen 'Course_Strength_TSQL'. Vi vil forsøge at indsætte to typer rækker:

  • Den første type, for hvilken Course_Id i den underordnede tabel findes i Course_Id i den overordnede tabel, dvs. Course_Id = 1 og 2.
  • Den anden type, hvor Course_Id i den underordnede tabel ikke findes i Course_Id i den overordnede tabel, dvs. Course_Id = 5.

Forespørgsel:

Insert into COURSE_STRENGTH values (1,'SQL');
Insert into COURSE_STRENGTH values (2,'Python');
Insert into COURSE_STRENGTH values (5,'PERL');

Indsættelse af underordnede rækker, inklusive Course_ID 5, der ikke har nogen matchende overordnet række

Resultat: Lad os køre forespørgslen sammen for at se vores overordnede og underordnede tabeller.

Rækkerne med Course_ID 1 og 2 findes i Course_Strength-tabellen. Course_ID 5 er dog en undtagelse, fordi den ikke har nogen matchende række i den overordnede tabel.

Forældre- og underordnede tabeller sammenlignet; Course_ID 5 krænker referentiel integritet

Ofte Stillede Spørgsmål

En primærnøgle identificerer entydigt hver række i sin egen tabel og kan ikke være NULL. En fremmednøgle refererer til den primære nøgle fra en anden tabel for at håndhæve referentiel integritet. primærnøgle versus fremmednøgle Sammenligning forklarer enhver forskel.

Ja. En fremmednøgle kan referere til enten en primærnøgle eller enhver kolonne, der har en UNIK begrænsning i den overordnede tabel. Den refererede kolonne skal indeholde unikke værdier, så hver underordnede række matcher præcis én overordnet række.

VED SLETNING sletter CASCADE automatisk de matchende underrækker, når deres overordnede række slettes.ping tabellerne er konsistente. Alternativer er SET NULL, som rydder den underordnede fremmednøgle, og NO ACTION, som blokerer sletningen.

Ja. En selvrefererende fremmednøgle peger på en primærnøgle i den samme tabel, som modellerer hierarkier, f.eks. en medarbejderrække, der refererer til sin leder. For selvreferencer anbefaler SQL Server ON DELETE NO ACTION for at undgå kaskadecyklusser.

Ja, medmindre kolonnen er deklareret som NOT NULL. En fremmednøgle med NULL betyder, at den underordnede række endnu ikke er linket til nogen overordnet række, og SQL Server springer den referentielle kontrol over for den pågældende NULL-værdi.

Kør ALTER TABLE child_table DROP CONSTRAINT fkey_name. Du skal angive navnet på begrænsningen, som du kan finde i sys.foreign_keys. Dropping Den fremmede nøgle fjerner relationen, men lader begge tabeller og deres data være uændrede.

Ja. GitHub Copilot kan skrive FOREIGN KEY-begrænsninger i CREATE TABLE- eller ALTER TABLE-sætninger fra en prompt i naturligt sprog og foreslå den overordnede tabel og den refererede kolonne. Gennemgå altid nøglerne, referentielle handlinger og datatyper, før du kører scriptet.

AI- og maskinlæringsværktøjer undersøger eksempeldata og forespørgselsmønstre for at foreslå, hvilke kolonner der skal blive fremmednøgler, registrere manglende eller forældreløse relationer og anbefale passende ON DELETE-handlinger. Udvikleren gennemgår hvert forslag, før det anvendes.

Opsummer dette indlæg med: