SQL Server FOREIGN KEY: Hoe maak je er een aan met een voorbeeld?
โก Slimme samenvatting
Een foreign key in SQL Server zorgt voor referentiรซle integriteit door een onderliggende tabel te koppelen aan een bovenliggende tabel. Elke foreign key-waarde moet al bestaan โโin de primaire sleutel van de bovenliggende tabel waarnaar wordt verwezen.

Wat is een BUITENLANDSE SLEUTEL?
Een externe sleutel biedt een manier om referentiรซle integriteit af te dwingen. SQL ServerSimpel gezegd zorgt een foreign key ervoor dat waarden in de ene tabel ook in een andere tabel aanwezig moeten zijn.
Regels voor BUITENLANDSE SLEUTEL
- NULL is toegestaan โโin een SQL-foreign key.
- De tabel waarnaar wordt verwezen, wordt de oudertabel genoemd.
- De tabel met de externe sleutel wordt de kindtabel genoemd.
- De externe sleutel in de kindtabel verwijst naar de hoofdsleutel in de oudertabel.
- Deze ouder-kindrelatie handhaaft de regel die bekend staat als "referentiรซle integriteit".
Het onderstaande diagram vat alle bovenstaande punten samen met betrekking tot de externe sleutel.
Hoe u een FOREIGN KEY in SQL kunt maken
Je kunt in SQL Server op twee manieren een externe sleutel aanmaken:
SQL Server Management Studio
Oudertabel: Stel, we hebben een bestaande oudertabel met de naam 'Course'. Course_ID en Course_name zijn twee kolommen, waarbij Course_ID de primaire sleutel is.
Kindtabel: We moeten een tweede tabel aanmaken als kindtabel. De twee kolommen hiervan zijn 'Course_ID' en 'Course_Strength'. 'Course_ID' moet echter de externe sleutel zijn.
Stap 1) Klik met de rechtermuisknop op Tabellen > Nieuw > Tabelโฆ
Stap 2) Voer twee kolomnamen in: 'Course_ID' en 'Course_Strength'. Klik met de rechtermuisknop op de kolom 'Course_ID' en klik vervolgens op 'Relatie'.
Stap 3) Klik in 'Verschillende sleutelrelaties' op 'Toevoegen'.
Stap 4) Klik in 'Tabellen en kolomspecificaties' op het '...'-pictogram.
Stap 5) Selecteer 'COURSE' als 'Primaire sleuteltabel' en de nieuw aan te maken tabel als 'Tabel met externe sleutels' in het keuzemenu.
Stap 6) Selecteer voor de 'Primaire sleuteltabel' de kolom 'Course_Id' als de kolom voor de primaire sleuteltabel.
Selecteer bij 'Tabel met externe sleutel' de kolom 'Course_Id' als de kolom voor de tabel met externe sleutel. Klik op OK.
Stap 7) Klik op Toevoegen.
Stap 8) Geef de tabel de naam 'Course_Strength' en klik op OK.
Resultaat: We hebben een ouder-kindrelatie ingesteld tussen 'Cursus' en 'Cursussterkte'.
T-SQL: Een ouder-kindtabel maken met T-SQL
Oudertabel: We hebben al een oudertabel met de naam 'Course'. Course_ID en Course_name zijn twee kolommen, waarbij Course_ID de primaire sleutel is.
Kindtabel: We moeten een tweede tabel aanmaken als kindtabel met de naam 'Course_Strength_TSQL'. De twee kolommen zijn 'Course_ID' en 'Course_Strength'. 'Course_ID' moet echter de externe sleutel zijn.
Hieronder staat de syntaxis voor maak een tabel met een FOREIGN KEY.
Syntax:
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 } ] );
Hier volgt een beschrijving van de bovenstaande parameters:
- childTable is de naam van de tabel die moet worden gemaakt.
- column_1 en column_2 zijn de kolommen die aan de tabel moeten worden toegevoegd.
- fkey_name is de naam van de aan te maken foreign key-beperking.
- child_column1, child_column2 โฆ child_column_n zijn de kolommen van de kindtabel die verwijzen naar de primaire sleutel in de parentTable.
- parentTable is de naam van de bovenliggende tabel waarvan de sleutel in de onderliggende tabel wordt gebruikt.
- parent_column1, parent_column2 โฆ parent_column_n zijn de kolommen die de primaire sleutel van de oudertabel vormen.
- ON DELETE is een optionele parameter die aangeeft wat er met de onderliggende gegevens gebeurt nadat de bovenliggende gegevens zijn verwijderd. Mogelijke waarden zijn NO ACTION, SET NULL, CASCADE of SET DEFAULT.
- ON UPDATE is een optionele parameter die aangeeft wat er met de onderliggende gegevens gebeurt nadat de bovenliggende gegevens zijn bijgewerkt. Mogelijke waarden zijn NO ACTION, SET NULL, CASCADE of SET DEFAULT.
- 'GEEN ACTIE' betekent dat er niets gebeurt met de onderliggende gegevens nadat de bovenliggende gegevens zijn bijgewerkt of verwijderd.
- CASCADE betekent dat de onderliggende gegevens worden verwijderd of bijgewerkt nadat de bovenliggende gegevens zijn verwijderd of bijgewerkt.
- SET NULL betekent dat de onderliggende gegevens op null worden gezet nadat de bovenliggende gegevens zijn bijgewerkt of verwijderd.
- SET DEFAULT betekent dat de onderliggende gegevens na een update of verwijdering van de bovenliggende gegevens worden teruggezet naar hun standaardwaarde.
Laten we een voorbeeld bekijken van een foreign key waarmee een tabel wordt gemaakt met รฉรฉn kolom als FOREIGN KEY. data type voor elke kolom.
Voorbeeld van een externe sleutel in SQL
Query:
CREATE TABLE Course_Strength_TSQL ( Course_ID Int, Course_Strength Varchar(20) CONSTRAINT FK FOREIGN KEY (Course_ID) REFERENCES COURSE (Course_ID) )
Stap 1) Voer de query uit door op Uitvoeren te klikken.
Resultaat: We hebben een ouder-kindrelatie ingesteld tussen 'Course' en 'Course_Strength_TSQL'.
ALTER TABEL gebruiken
Nu gaan we leren hoe je in SQL Server een foreign key toevoegt aan een bestaande tabel met behulp van de ALTER TABLE-instructie. We gebruiken de onderstaande syntaxis:
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);
Hier volgt een beschrijving van de hierboven gebruikte parameters:
- childTable is de naam van de tabel die moet worden gemaakt.
- column_1 en column_2 zijn de kolommen die aan de tabel moeten worden toegevoegd.
- fkey_name is de naam van de aan te maken foreign key-beperking.
- child_column1, child_column2 โฆ child_column_n zijn de kolommen van de kindtabel die verwijzen naar de primaire sleutel in de parentTable.
- parentTable is de naam van de bovenliggende tabel waarvan de sleutel in de onderliggende tabel wordt gebruikt.
- parent_column1, parent_column2 โฆ parent_column_n zijn de kolommen die de primaire sleutel van de oudertabel vormen.
ALTER TABLE: voorbeeld van het toevoegen van een foreign key:
ALTER TABLE department ADD CONSTRAINT fkey_student_admission FOREIGN KEY (admission) REFERENCES students (admission);
We hebben een externe sleutel met de naam fkey_student_admission gemaakt in de afdelingstabel. Deze externe sleutel verwijst naar de toelatingskolom van de studententabel.
Voorbeeldquery FOREIGN KEY
Laten we eerst eens kijken naar de gegevens in onze hoofdtabel, COURSE.
Query:
SELECT * from COURSE;
Laten we nu enkele rijen invoegen in de onderliggende tabel 'Course_Strength_TSQL'. We zullen proberen twee soorten rijen in te voegen:
- Het eerste type is het geval wanneer Course_Id in de kindtabel voorkomt in Course_Id van de oudertabel, oftewel Course_Id = 1 en 2.
- Het tweede type is er een waarbij de Course_Id in de kindtabel niet voorkomt in de Course_Id van de oudertabel, oftewel Course_Id = 5.
Query:
Insert into COURSE_STRENGTH values (1,'SQL'); Insert into COURSE_STRENGTH values (2,'Python'); Insert into COURSE_STRENGTH values (5,'PERL');
Resultaat: Laten we de query samen uitvoeren om onze ouder- en kindtabellen te bekijken.
De rijen met Course_ID 1 en 2 bestaan โโin de tabel Course_Strength. Course_ID 5 is echter een uitzondering, omdat er geen overeenkomende rij in de bovenliggende tabel is.

















