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 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.
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.
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…
Trin 2) Indtast to kolonnenavne som 'Course_ID' og 'Course_Strength'. Højreklik på kolonnen 'Course_Id', og klik derefter på Relationship.
Trin 3) Klik på 'Tilføj' i 'Fremmednøgleforhold'.
Trin 4) Klik på ikonet '…' i 'Specifikation af tabeller og kolonner'.
Trin 5) Vælg 'Primærnøgletabellen' som 'KURS' og den nye tabel, der oprettes, som 'Fremmednøgletabel' i rullemenuen.
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.
Trin 7) Klik på Tilføj.
Trin 8) Giv tabellen navnet 'Course_Strength' og klik på OK.
Resultat: Vi har angivet en overordnet-underordnet relation 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.
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.
Resultat: Vi har angivet en overordnet-underordnet relation 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;
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');
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.

















