SQL
Buitenlandse sleutels
Zoeken…
Een tabel maken met een externe sleutel
In dit voorbeeld hebben we een bestaande tabel, SuperHeros
.
Deze tabel bevat een primaire sleutel- ID
.
We zullen een nieuwe tafel toevoegen om de krachten van elke superheld op te slaan:
CREATE TABLE HeroPowers
(
ID int NOT NULL PRIMARY KEY,
Name nvarchar(MAX) NOT NULL,
HeroId int REFERENCES SuperHeros(ID)
)
De kolom HeroId
is een externe sleutel voor de tabel SuperHeros
.
Buitenlandse sleutels uitgelegd
Beperkingen voor externe sleutels zorgen voor gegevensintegriteit door te handhaven dat waarden in de ene tabel moeten overeenkomen met waarden in een andere tabel.
Een voorbeeld van waar een buitenlandse sleutel vereist is, is: op een universiteit moet een cursus tot een afdeling behoren. Code voor dit scenario is:
CREATE TABLE Department (
Dept_Code CHAR (5) PRIMARY KEY,
Dept_Name VARCHAR (20) UNIQUE
);
Voeg waarden in met de volgende instructie:
INSERT INTO Department VALUES ('CS205', 'Computer Science');
De volgende tabel bevat de informatie van de onderwerpen die worden aangeboden door de informaticabranche:
CREATE TABLE Programming_Courses (
Dept_Code CHAR(5),
Prg_Code CHAR(9) PRIMARY KEY,
Prg_Name VARCHAR (50) UNIQUE,
FOREIGN KEY (Dept_Code) References Department(Dept_Code)
);
(Het gegevenstype van de externe sleutel moet overeenkomen met het gegevenstype van de sleutel waarnaar wordt verwezen.)
De beperking voor externe sleutels in de kolom Dept_Code
staat alleen waarden toe als ze al bestaan in de tabel waarnaar wordt verwezen, Department
. Dit betekent dat als u probeert de volgende waarden in te voegen:
INSERT INTO Programming_Courses Values ('CS300', 'FDB-DB001', 'Database Systems');
de database geeft een fout met de CS300
Vreemde sleutel, omdat CS300
niet in de tabel Department
. Maar wanneer u een sleutelwaarde probeert die bestaat:
INSERT INTO Programming_Courses VALUES ('CS205', 'FDB-DB001', 'Database Systems');
INSERT INTO Programming_Courses VALUES ('CS205', 'DB2-DB002', 'Database Systems II');
dan staat de database deze waarden toe.
Enkele tips voor het gebruik van buitenlandse sleutels
- Een buitenlandse sleutel moet verwijzen naar een UNIEKE (of PRIMAIRE) sleutel in de bovenliggende tabel.
- Het invoeren van een NULL-waarde in een kolom met een externe sleutel levert geen fout op.
- Beperkingen voor externe sleutels kunnen verwijzen naar tabellen in dezelfde database.
- Beperkingen voor externe sleutels kunnen verwijzen naar een andere kolom in dezelfde tabel (zelfreferentie).