Szukaj…
Tworzenie tabeli z kluczem obcym
W tym przykładzie mamy istniejącą tabelę SuperHeros
.
Ta tabela zawiera ID
klucza podstawowego.
Dodamy nowy stół, aby przechowywać moce każdego superbohatera:
CREATE TABLE HeroPowers
(
ID int NOT NULL PRIMARY KEY,
Name nvarchar(MAX) NOT NULL,
HeroId int REFERENCES SuperHeros(ID)
)
Kolumna HeroId
jest kluczem obcym do tabeli SuperHeros
.
Wyjaśnienie kluczy obcych
Ograniczenia dotyczące kluczy obcych zapewniają integralność danych, wymuszając, że wartości w jednej tabeli muszą być zgodne z wartościami w innej tabeli.
Przykładem, w którym wymagany jest klucz obcy, jest: Na uniwersytecie kurs musi należeć do wydziału. Kod tego scenariusza to:
CREATE TABLE Department (
Dept_Code CHAR (5) PRIMARY KEY,
Dept_Name VARCHAR (20) UNIQUE
);
Wstaw wartości za pomocą następującej instrukcji:
INSERT INTO Department VALUES ('CS205', 'Computer Science');
Poniższa tabela będzie zawierać informacje na tematy oferowane przez dział informatyki:
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)
);
(Typ danych klucza obcego musi być zgodny z typem danych klucza odniesienia).
Ograniczenie klucza obcego w kolumnie Dept_Code
dopuszcza wartości tylko wtedy, gdy już istnieją w tabeli, do której istnieje odwołanie, Department
. Oznacza to, że jeśli spróbujesz wstawić następujące wartości:
INSERT INTO Programming_Courses Values ('CS300', 'FDB-DB001', 'Database Systems');
baza danych zgłosi błąd naruszenia klucza obcego, ponieważ CS300
nie istnieje w tabeli Department
. Ale kiedy wypróbujesz kluczową wartość, która istnieje:
INSERT INTO Programming_Courses VALUES ('CS205', 'FDB-DB001', 'Database Systems');
INSERT INTO Programming_Courses VALUES ('CS205', 'DB2-DB002', 'Database Systems II');
następnie baza danych dopuszcza te wartości.
Kilka wskazówek dotyczących korzystania z kluczy obcych
- Klucz obcy musi odwoływać się do klucza UNIQUE (lub PRIMARY) w tabeli nadrzędnej.
- Wprowadzenie wartości NULL w kolumnie Klucz obcy nie powoduje błędu.
- Ograniczenia klucza obcego mogą odwoływać się do tabel w tej samej bazie danych.
- Ograniczenia klucza obcego mogą odnosić się do innej kolumny w tej samej tabeli (samodzielne odniesienie).