Temat: Więzy integralności

Więzy integralności (spójności ang. Constraints) to zespół reguł, które gwarantują logiczną spójność danych wprowadzanych i przechowywanych w bazie. Zadaniem więzów spójności jest zagwarantowanie tego, aby dane w bazie danych wiernie odzwierciedlały świat rzeczywisty, dla opisu którego baza danych została zaprojektowana. Więzy spójności definiowane są na etapie projektowania bazy danych, tworzone wraz z innymi obiektami, przy tworzeniu bazy. Za ich realizację (przestrzeganie zdefiniowanych przez nie reguł) odpowiada system bazy danych.

Sprawdzanie spójności w bazie danych odbywa się za pomocą zdefiniowania klucza obcego. Więzy możemy zakładać na dwa sposoby. Przy tworzeniu tabeli, oraz nakładając je na już istniejącą tabelę. 

W naszym przykładzie utworzymy dwie tabele uczen i klasa.

Na początek tworzymy tabelę klasa do której odwoływać się będą pozostałe tabele. 

CREATE TABLE klasa (id_klasy int PRIMARY KEY, nazwa varchar (30));

Dodawanie klucza obcego podczas tworzenia tabeli

CREATE TABLE uczen (id_ucznia int PRIMARY KEY, imie varchar (30), nazwisko varchar (30), id_klasy int, 
FOREIGN KEY (id_klasy) REFERENCES klasa(id_klasy));

W tym przypadku nie podaliśmy nazwy dla stworzonego klucza obcego, więc SQL Server wygeneruje nazwę automatycznie, np. FK_uczen_id_klasy.

Składnia na ustalenie nazwanego klucza obcego dla istniejącej już tabeli:

CREATE TABLE uczen (id_ucznia int PRIMARY KEY, imie varchar (30), nazwisko varchar (30), id_klasy int, 
FOREIGN KEY (id_klasy) REFERENCES klasa(id_klasy));

Dodawanie klucza obcego podczas aktualizowania tabeli

Tworzymy dwie tabele: uczen i klasa.

CREATE TABLE uczen (id_ucznia int PRIMARY KEY, imie varchar (30), nazwisko varchar (30), id_klasy int);
CREATE TABLE klasa (id_klasy int PRIMARY KEY, nazwa varchar (30));

Teraz zaktualizujemy tabelę uczeń dodając klucz obcy na kolumnie id_klasy.

ALTER TABLE uczen ADD FOREIGN KEY (id_klasy) REFERENCES klasa(id_klasy);
ALTER TABLE uczen ADD CONSTRAINT fk_uczen_idklasy FOREIGN KEY (id_klasy) REFERENCES klasa(id_klasy)