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).


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow