SkillsTest.pl SQL pytania i zadania rekrutacyjne Co to jest klucz obcy?

: 2017-09-21 | Nr 11 z 24

Pytanie

Co to jest klucz obcy? SQL

FOREIGN KEY klucz obcy

najprościej mówiąc jest to kolumna bądź grupa kolumn w jednej tabeli stanowiących klucz główny w innej tabeli.
Klucz obcy służy do zapewnienia integralności danych - jeśli pojawiła się nowa wartość w kolumnie oznaczonej jako klucz obcy, oznacza to, że wartość ta musi istnieć w innej tabeli.

Wykorzystuje się go do tworzenia relacji między tabelami.


Co prawda najczęściej klucz obcy jest to odwołanie do klucza głównego w innej tabeli, jednak są inne możliwości.

  • klucz obcy może odwoływać się do kolumny w innej tabeli która nie jest oznaczona jako PRIMARY KEY, kolumna ta jednak musi być oznaczona jako UNIQUE (zapewnione unikatowe wartości w kolumnie bądź grupie kolumn)
  • klucz obcy może odwoływać się do kolumny z tej samej tabeli

Klucz obcy może odwoływać się jedynie do tabel w tej samej bazie danych. Integralność danych z innymi bazami danych trzeba wtedy zaimplementować przy pomocy wyzwalaczy (TRIGGER).


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

CREATE TABLE Car (
	Id INT PRIMARY KEY, -- klucz główny
	Mark NVARCHAR(20)
)

Zakładanie klucza obcego podczas tworzenia tabeli

1 sposób

CREATE TABLE MechanicalPart (
	Id INT PRIMARY KEY, -- klucz główny
	CarId INT FOREIGN KEY REFERENCES Car(Id), -- klucz obcy odwołujący się do tabeli Car
	Name VARCHAR (15)
)

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

2 sposób

CREATE TABLE MechanicalPart (
	Id INT PRIMARY KEY, -- klucz główny
	CarId INT,
	Name VARCHAR (15),
	CONSTRAINT FK_MechanicalPart_CarId FOREIGN KEY(CarId) REFERENCES Car(Id) -- klucz obcy odwołujący się do tabeli Car
)

Zakładanie klucza obcego podczas aktualizowania tabeli

ALTER TABLE MechanicalPart
ADD CONSTRAINT FK_MechanicalPart_CarId
	FOREIGN KEY (CarId)
	REFERENCES CAR(Id);

Polecamy

Na co możesz wydać swoje 15k?

Zabawki dla dwulatka