SQL
Utländska nycklar
Sök…
Skapa en tabell med en utländsk nyckel
I det här exemplet har vi ett befintligt bord, SuperHeros
.
Denna tabell innehåller ett primärt nyckel- ID
.
Vi lägger till ett nytt bord för att lagra krafterna hos varje superhjälte:
CREATE TABLE HeroPowers
(
ID int NOT NULL PRIMARY KEY,
Name nvarchar(MAX) NOT NULL,
HeroId int REFERENCES SuperHeros(ID)
)
Kolumnen HeroId
är en utländsk nyckel till bordet SuperHeros
.
Utländska nycklar förklarade
Begränsningar för utländska nycklar säkerställer dataintegritet genom att säkerställa att värden i en tabell måste matcha värden i en annan tabell.
Ett exempel på en utländsk nyckel är: På ett universitet måste en kurs tillhöra en institution. Kod för detta scenario är:
CREATE TABLE Department (
Dept_Code CHAR (5) PRIMARY KEY,
Dept_Name VARCHAR (20) UNIQUE
);
Sätt in värden med följande påstående:
INSERT INTO Department VALUES ('CS205', 'Computer Science');
Följande tabell innehåller information om ämnen som erbjuds av datavetenskapsgrenen:
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)
);
(Datatypen för utländsk nyckel måste matcha datatypen för den hänvisade nyckeln.)
Begränsningen med utländsk nyckel i kolumnen Dept_Code
tillåter värden endast om de redan finns i den refererade tabellen, Department
. Detta innebär att om du försöker infoga följande värden:
INSERT INTO Programming_Courses Values ('CS300', 'FDB-DB001', 'Database Systems');
databasen kommer att skapa ett fel på CS300
utländsk nyckel, eftersom CS300
inte finns i Department
. Men när du försöker ett nyckelvärde som finns:
INSERT INTO Programming_Courses VALUES ('CS205', 'FDB-DB001', 'Database Systems');
INSERT INTO Programming_Courses VALUES ('CS205', 'DB2-DB002', 'Database Systems II');
sedan tillåter databasen dessa värden.
Några tips för att använda utländska nycklar
- En utländsk nyckel måste hänvisa till en UNIK (eller PRIMÄR) nyckel i överordnade tabeller.
- Att ange ett NULL-värde i en kolumn med utländsk nyckel leder inte till något fel.
- Utländska nyckelbegränsningar kan referera tabeller inom samma databas.
- Främmande nyckelbegränsningar kan hänvisa till en annan kolumn i samma tabell (självreferens).