SQL FOREIGN KEY: Kako stvoriti u SQL Serveru s primjerom
ล to je FOREIGN KEY?
A Strani kljuc pruลพa naฤin nametanja referentnog integriteta unutar SQL Servera. Jednostavnim rijeฤima, strani kljuฤ osigurava da vrijednosti u jednoj tablici moraju biti prisutne u drugoj tablici.
Pravila za FOREIGN KEY
- NULL je dopuลกten u SQL stranom kljuฤu.
- Tablica na koju se upuฤuje naziva se roditeljska tablica
- Tablica s vanjskim kljuฤem u SQL-u naziva se Child Table.
- SQL vanjski kljuฤ u podreฤenoj tablici upuฤuje na primarni kljuฤ u nadreฤenoj tablici.
- Ovaj odnos roditelj-dijete provodi pravilo koje je poznato kao โReferentni Integrity".
Donji primjer stranog kljuฤa u SQL-u s dijagramom saลพima sve gore navedene toฤke za FOREIGN KEY

Kako stvoriti FOREIGN KEY u SQL-u
Moลพemo stvoriti a Strani kljuc u SQL posluลพitelju 2 naฤina:
- SQL Server Management Studio
- T-SQL
SQL Server Management Studio
Nadreฤena tablica: Recimo, imamo postojeฤu roditeljsku tablicu kao 'Teฤaj'. Course_ID i Course_name su dva stupca s Course_Id kao primarnim kljuฤem.
Podreฤena tablica: Moramo stvoriti drugu tablicu kao podreฤenu tablicu. 'Course_ID' i 'Course_Strength' kao dva stupca. Meฤutim, 'Course_ID' ฤe biti vanjski kljuฤ.
Korak 1) Desni klik na Tables>New> Tableโฆ
Korak 2) Unesite dva naziva stupaca kao 'Course_ID' i 'Course_Strength.' Desni klik na stupac 'Course_Id'. Sada kliknite na Odnos.
Korak 3) In 'Foreign Key Relationship,' Kliknite 'Dodati'
Korak 4) U 'Specifikacija tablice i stupca' kliknite na ikona "โฆ".
Korak 5) Odaberite 'Tablica primarnog kljuฤa' kao 'TEฤAJ', a novu tablicu koja se sada stvara kao 'Tablicu stranog kljuฤa' s padajuฤeg izbornika.
Korak 6) 'Tablica primarnog kljuฤa' โ Odaberite stupac 'Course_Id' kao stupac 'Tablica primarnog kljuฤa'.
'Tablica stranih kljuฤeva'- Odaberite stupac 'Course_Id' kao stupac 'Tablica stranih kljuฤeva'. Pritisnite OK.
Korak 7) Kliknite na Dodaj.
Korak 8) Dajte tablici naziv 'Course_Strength' i kliknite na OK.
Rezultat: Postavili smo odnos roditelj-dijete izmeฤu 'Teฤaj' i 'Course_strength.'
T-SQL: Stvorite tablicu roditelj-dijete koristeฤi T-SQL
Nadreฤena tablica: Ponovno razmislite, imamo postojeฤu matiฤnu tablicu s nazivom tablice 'Teฤaj'.
Course_ID i Course_name su dva stupca s Course_Id 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' kao dva stupca za podreฤenu tablicu Course_Strength_TSQL.' Meฤutim, 'Course_ID' ฤe biti vanjski kljuฤ.
Ispod je sintaksa za stvaranje tablice sa FOREIGN KEY
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.
- stupac_1, stupac_2- stupci koji se dodaju u tablicu.
- fkey_name- ime ograniฤenja stranog kljuฤa koje treba stvoriti.
- child_column1, child_column2โฆchild_column_n- naziv stupaca chidTable za referencu na primarni kljuฤ u parentTable.
- parentTable- naziv nadreฤene tablice ฤiji kljuฤ treba referencirati u podreฤenoj tablici.
- parent_column1, parent_column2, โฆ parent_column3- stupci koji ฤine primarni kljuฤ nadreฤene tablice.
- NA BRISANJE. Neobavezni parametar. Odreฤuje ลกto se dogaฤa s podreฤenim podacima nakon brisanja nadreฤenih podataka. Neke od vrijednosti za ovaj parametar ukljuฤuju NO ACTION, SET NULL, CASCADE ili SET DEFAULT.
- PRI AลฝURIRANJU - Neobavezni parametar. Odreฤuje ลกto se dogaฤa s podreฤenim podacima nakon aลพuriranja nadreฤenih podataka. Neke od vrijednosti za ovaj parametar ukljuฤuju NO ACTION, SET NULL, CASCADE ili SET DEFAULT.
- NEMA RADNJE - koristi se zajedno s ON DELETE i ON UPDATE. To znaฤi da se niลกta neฤe dogoditi podreฤenim podacima nakon aลพuriranja ili brisanja nadreฤenih podataka.
- CASCADE- koristi se zajedno s ON DELETE i ON UPDATE. Podreฤeni podaci bit ฤe izbrisani ili aลพurirani nakon ลกto se nadreฤeni podaci izbriลกu ili aลพuriraju.
- SET NULL- koristi se zajedno s ON DELETE i ON UPDATE. Podreฤeni ฤe biti postavljen na null nakon ลกto se nadreฤeni podaci aลพuriraju ili izbriลกu.
- SET DEFAULT - koristi se zajedno s ON DELETE i ON UPDATE. Podreฤeni podaci bit ฤe postavljeni na zadane vrijednosti nakon aลพuriranja ili brisanja nadreฤenih podataka.
Pogledajmo primjer stranog kljuฤa u SQL-u za stvaranje tablice s jednim stupcem kao STRANIM KLJUฤEM:
Primjer stranog kljuฤa u SQL-u
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 'Teฤaj' i 'Course_strength_TSQL.'
Koriลกtenje ALTER TABLE
Sada ฤemo nauฤiti kako koristiti strani kljuฤ u SQL-u i dodati strani kljuฤ u SQL posluลพitelj koristeฤi naredbu ALTER TABLE, koristit ฤemo sintaksu danu 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.
- stupac_1, stupac_2- stupci koji se dodaju u tablicu.
- fkey_name- ime ograniฤenja stranog kljuฤa koje treba stvoriti.
- child_column1, child_column2โฆchild_column_n- naziv stupaca chidTable za referencu na primarni kljuฤ u parentTable.
- parentTable- naziv nadreฤene tablice ฤiji kljuฤ treba referencirati u podreฤenoj tablici.
- parent_column1, parent_column2, โฆ parent_column3- stupci koji ฤine primarni kljuฤ nadreฤene tablice.
Alter table add Foreign Key primjer:
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 naลกe podatke roditeljske tablice, COURSE.
upita:
SELECT * from COURSE;
Umetnimo sada neki redak u tablicu Child: 'Course_strength_TSQL.'
Pokuลกat ฤemo umetnuti dvije vrste redaka
- Prvi tip, za koji ฤe Course_Id u podreฤenoj tablici postojati u Course_Id nadreฤene tablice. tj. Course_Id = 1 i 2
- Drugi tip, za koji Course_Id u podreฤenoj tablici ne postoji u Course_Id nadreฤene tablice. tj. 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 da bismo vidjeli naลกu tablicu Roditelj i Dijete
Redak s Course_ID 1 i 2 postoji u tablici Course_strength. Dok je Course_ID 5 iznimka.
Rezime
- Svaka vrijednost stranog kljuฤa mora biti dio Glavni kljuฤ drugih tablica.
- The MySQL Strani kljuฤ moลพe referencirati na drugi stupac u istoj tablici. Ova referenca je poznata kao samoreferenca.
- SQL ograniฤenje stranog kljuฤa : koristi se za osiguranje veza izmeฤu tablica i nevaลพeฤih podataka koji se umeฤu u stupac stranog kljuฤa.
- Strani kljuฤ moลพete stvoriti koristeฤi Create Table, Alter Table ili SQL Server Management Studio.
- Evo razlike izmeฤu primarnog i stranog kljuฤa: Klikni ovdje
















