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 (foreign key) 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 w SQL 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).


Przykłady SQL

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


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


Dodawanie klucza obcego podczas aktualizowania tabeli

ALTER TABLE MechanicalPart
ADD CONSTRAINT FK_MechanicalPart_CarId
	FOREIGN KEY (CarId)
	REFERENCES CAR(Id);
alsenq 02-02-2022 01:29
Całkiem dobrze wytłumaczone aczkolwiek przydałyby się informacje oraz przykłady z konkretnych silników baz danych, Oracle, MysSql, Sql Server itp.


© 2024 - SkillsTest.pl | | Regulamin | Polityka Prywatnosci