SQL Server STRANI KLJUČ: Kako ga stvoriti s primjerom
⚡ Pametni sažetak
Strani ključ u SQL Serveru provodi referencijalni integritet povezivanjem podređene tablice s nadređenom tablicom. Svaka vrijednost stranog ključa mora već postojati u referenciranom primarnom ključu nadređene tablice.

Što je FOREIGN KEY?
Strani ključ pruža način provođenja referencijalnog integriteta unutar SQL ServerJednostavno rečeno, strani ključ osigurava da vrijednosti iz jedne tablice moraju biti prisutne i u drugoj tablici.
Pravila za FOREIGN KEY
- NULL je dopušten u SQL stranom ključu.
- Tablica na koju se referencira naziva se roditeljska tablica.
- Tablica sa stranim ključem naziva se podređena tablica.
- Strani ključ u podređenoj tablici referencira Osnovni ključ u roditeljskoj tablici.
- Ovaj odnos roditelj-dijete provodi pravilo poznato kao „referencijalni integritet“.
Donji dijagram sažima sve gore navedene točke za strani ključ.
Kako stvoriti FOREIGN KEY u SQL-u
Strani ključ u SQL Serveru možete stvoriti na dva načina:
SQL Server Management Studio
Nadređena tablica: Recimo da imamo postojeću nadređenu tablicu pod nazivom 'Kolegij'. ID_kolegija i naziv_kolegija su dva stupca, s ID_kolegija kao primarnim ključem.
Podređena tablica: Moramo stvoriti drugu tablicu kao podređenu tablicu. 'Course_ID' i 'Course_Strength' su njezina dva stupca. Međutim, 'Course_ID' će biti strani ključ.
Korak 1) Desnom tipkom miša kliknite na Tablice > Novo > Tablica…
Korak 2) Unesite dva naziva stupaca kao 'Course_ID' i 'Course_Strength'. Desnom tipkom miša kliknite stupac 'Course_Id', a zatim kliknite Odnos.
Korak 3) U odjeljku 'Odnosi vanjskog ključa' kliknite 'Dodaj'.
Korak 4) U odjeljku 'Specifikacija tablica i stupaca' kliknite ikonu '…'.
Korak 5) Odaberite 'Tablicu primarnih ključeva' kao 'KOLEG' i novu tablicu koja se stvara kao 'Tablicu stranih ključeva' iz padajućeg izbornika.
Korak 6) Za 'Tablicu primarnog ključa' odaberite stupac 'Id_kolegija' kao stupac tablice primarnog ključa.
Za 'Tablicu stranih ključeva' odaberite stupac 'Id_tečaja' kao stupac tablice stranih ključeva. Kliknite U redu.
Korak 7) Kliknite na Dodaj.
Korak 8) Nazovite tablicu kao 'Course_Strength' i kliknite U redu.
Rezultat: Postavili smo odnos roditelj-dijete između 'Tečaja' i 'Jačine_Tečaja'.
T-SQL: Izrada tablice roditelj-dijete pomoću T-SQL-a
Nadređena tablica: Ponovno razmotrite da imamo postojeću nadređenu tablicu s nazivom 'Kolegij'. ID_kolegija i naziv_kolegija su dva stupca, s ID_kolegija kao primarnim ključem.
Podređena tablica: Moramo stvoriti drugu tablicu kao podređenu tablicu s nazivom 'Course_Strength_TSQL'. 'Course_ID' i 'Course_Strength' su njezina dva stupca. Međutim, 'Course_ID' će biti strani ključ.
Ispod je sintaksa za stvoriti tablicu sa STRANIM KLJUČEM.
Sintaksa:
CREATE TABLE childTable ( column_1 datatype [ NULL |NOT NULL ], column_2 datatype [ NULL |NOT NULL ], ... CONSTRAINT fkey_name FOREIGN KEY (child_column1, child_column2, ... child_column_n) REFERENCES parentTable (parent_column1, parent_column2, ... parent_column_n) [ ON DELETE { NO ACTION |CASCADE |SET NULL |SET DEFAULT } ] [ ON UPDATE { NO ACTION |CASCADE |SET NULL |SET DEFAULT } ] );
Ovdje je opis gore navedenih parametara:
- childTable je naziv tablice koju treba kreirati.
- column_1, column_2 su stupci koji će se dodati u tablicu.
- fkey_name je naziv ograničenja stranog ključa koje treba stvoriti.
- podređeni_stupac1, podređeni_stupac2 ... podređeni_stupac_n su stupci podređene tablice koji referenciraju primarni ključ u nadređenoj tablici.
- nadređena tablica je naziv nadređene tablice čiji se ključ referencira u podređenoj tablici.
- roditeljski_stupac1, roditeljski_stupac2 ... roditeljski_stupac_n su stupci koji čine primarni ključ roditeljske tablice.
- ON DELETE je neobavezni parametar koji određuje što se događa s podređenim podacima nakon što se roditeljski podaci izbrišu. Vrijednosti uključuju NO ACTION, SET NULL, CASCADE ili SET DEFAULT.
- ON UPDATE je opcionalni parametar koji određuje što se događa s podređenim podacima nakon ažuriranja roditeljskih podataka. Vrijednosti uključuju NO ACTION, SET NULL, CASCADE ili SET DEFAULT.
- BEZ AKCIJE znači da se ništa ne događa s podređenim podacima nakon što se roditeljski podaci ažuriraju ili izbrišu.
- KASKADA znači da se podređeni podaci brišu ili ažuriraju nakon što su roditeljski podaci izbrisani ili ažurirani.
- SET NULL znači da se podređeni podaci postavljaju na null nakon što se roditeljski podaci ažuriraju ili brišu.
- POSTAVI ZADANO znači da se podređeni podaci postavljaju na zadanu vrijednost nakon ažuriranja ili brisanja roditeljskih podataka.
Pogledajmo primjer stranog ključa koji stvara tablicu s jednim stupcem kao STRANI KLJUČ, koristeći tip podataka za svaki stupac.
Strani ključ u SQL primjeru
upita:
CREATE TABLE Course_Strength_TSQL ( Course_ID Int, Course_Strength Varchar(20) CONSTRAINT FK FOREIGN KEY (Course_ID) REFERENCES COURSE (Course_ID) )
Korak 1) Pokrenite upit klikom na Izvrši.
Rezultat: Postavili smo odnos roditelj-dijete između 'Course' i 'Course_Strength_TSQL.'
Korištenje ALTER TABLE
Sada ćemo naučiti kako dodati strani ključ u SQL Serveru u tablicu koja već postoji pomoću naredbe ALTER TABLE. Koristit ćemo sintaksu navedenu u nastavku:
ALTER TABLE childTable ADD CONSTRAINT fkey_name FOREIGN KEY (child_column1, child_column2, ... child_column_n) REFERENCES parentTable (parent_column1, parent_column2, ... parent_column_n);
Ovdje je opis gore korištenih parametara:
- childTable je naziv tablice koju treba kreirati.
- column_1, column_2 su stupci koji će se dodati u tablicu.
- fkey_name je naziv ograničenja stranog ključa koje treba stvoriti.
- podređeni_stupac1, podređeni_stupac2 ... podređeni_stupac_n su stupci podređene tablice koji referenciraju primarni ključ u nadređenoj tablici.
- nadređena tablica je naziv nadređene tablice čiji se ključ referencira u podređenoj tablici.
- roditeljski_stupac1, roditeljski_stupac2 ... roditeljski_stupac_n su stupci koji čine primarni ključ roditeljske tablice.
Primjer dodavanja stranog ključa naredbom ALTER TABLE:
ALTER TABLE department ADD CONSTRAINT fkey_student_admission FOREIGN KEY (admission) REFERENCES students (admission);
Stvorili smo strani ključ pod nazivom fkey_student_admission na tablici odjela. Ovaj strani ključ upućuje na stupac upisa u tablici učenika.
Primjer upita FOREIGN KEY
Prvo, pogledajmo podatke naše roditeljske tablice, NARAVNO.
upita:
SELECT * from COURSE;
Sada umetnimo nekoliko redaka u podređenu tablicu 'Course_Strength_TSQL'. Pokušat ćemo umetnuti dvije vrste redaka:
- Prvi tip, za koji Course_Id u podređenoj tablici postoji u Course_Id roditeljske tablice, odnosno Course_Id = 1 i 2.
- Drugi tip, za koji Course_Id u podređenoj tablici ne postoji u Course_Id roditeljske tablice, odnosno Course_Id = 5.
upita:
Insert into COURSE_STRENGTH values (1,'SQL'); Insert into COURSE_STRENGTH values (2,'Python'); Insert into COURSE_STRENGTH values (5,'PERL');
Rezultat: Pokrenimo upit zajedno kako bismo vidjeli naše roditeljske i podređene tablice.
Redci s Course_ID 1 i 2 postoje u tablici Course_Strength. Međutim, Course_ID 5 je iznimka jer nema odgovarajući redak u nadređenoj tablici.

















