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 strani ključ: Strani ključ povezuje podređenu tablicu s roditeljskom tablicom i osigurava referencijalni integritet između njih.
  • 👪 Roditelj i dijete: Referencirana tablica je roditelj; tablica koja sadrži strani ključ je dijete, koje pokazuje na primarni ključ roditelja.
  • 🖱️ Dva načina stvaranja: Relacije u SQL Server Management Studiu i T-SQL klauzula CREATE TABLE … FOREIGN KEY … REFERENCES definiraju strani ključ.
  • Dodaj u postojeću tablicu: PROMIJENI TABLICU … DODAJ OGRANIČENJA … STRANI KLJUČ dodaje relaciju tablici koja već postoji.
  • 🔄 Referentne radnje: Klauzule ON DELETE i ON UPDATE kontroliraju podređene retke s NO ACTION, CASCADE, SET NULL ili SET DEFAULT.
  • Integrity ček: Umetanje podređenog retka čiji ključ nema odgovarajući nadređeni redak je odbijeno, keeping podaci su konzistentni.

SQL Server STRANI KLJUČ: Kako ga stvoriti u SQL Serveru s primjerom

Š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č.

Dijagram stranog ključa koji povezuje podređenu tablicu s primarnim ključem roditeljske tablice

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.

Nadređena tablica Course s primarnim ključem Course_Id i stupcima Course_name

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…

Desnom tipkom miša kliknite Tablice, zatim Novo, a zatim Tablica u SQL Server Management Studiju

Korak 2) Unesite dva naziva stupaca kao 'Course_ID' i 'Course_Strength'. Desnom tipkom miša kliknite stupac 'Course_Id', a zatim kliknite Odnos.

Novi stupci podređene tablice Course_ID i Course_Strength s izbornikom Relationship

Korak 3) U odjeljku 'Odnosi vanjskog ključa' kliknite 'Dodaj'.

Dijalog odnosa stranih ključeva s gumbom Dodaj

Korak 4) U odjeljku 'Specifikacija tablica i stupaca' kliknite ikonu '…'.

Polje Specifikacija tablica i stupaca s gumbom s tri točke

Korak 5) Odaberite 'Tablicu primarnih ključeva' kao 'KOLEG' i novu tablicu koja se stvara kao 'Tablicu stranih ključeva' iz padajućeg izbornika.

Odabir COURSE kao primarne tablice ključeva u dijalogu za odnose

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.

Kartaping Course_Id kao stupac primarnog ključa i stranog ključa

Korak 7) Kliknite na Dodaj.

Klikom na Dodaj potvrdite odnos vanjskog ključa

Korak 8) Nazovite tablicu kao 'Course_Strength' i kliknite U redu.

Imenovanje podređene tablice Course_Strength i klik na OK

Rezultat: Postavili smo odnos roditelj-dijete između 'Tečaja' i 'Jačine_Tečaja'.

Odnos roditelj-dijete uspostavljen između Coursea i Course_Strength

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.

Postojeća nadređena tablica Course 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' 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.

Izvršavanje upita CREATE TABLE koji definira strani ključ Course_ID

Rezultat: Postavili smo odnos roditelj-dijete između 'Course' i 'Course_Strength_TSQL.'

Odnos roditelj-dijete stvoren između Coursea 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;

SELECT rezultat koji prikazuje podatke nadređene tablice 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');

Umetanje podređenih redaka, uključujući Course_ID 5 koji nema odgovarajućeg roditelja

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.

Uspoređuju se roditeljske i podređene tablice; Course_ID 5 krši referencijalni integritet

Pitanja i odgovori

Primarni ključ jedinstveno identificira svaki redak unutar vlastite tablice i ne može biti NULL. Strani ključ referencira taj primarni ključ iz druge tablice kako bi se osigurao referencijalni integritet. primarni ključ u odnosu na strani ključ Usporedba objašnjava svaku razliku.

Da. Strani ključ može referencirati ili primarni ključ ili bilo koji stupac koji nosi UNIQUE ograničenje u nadređenoj tablici. Referencirani stupac mora sadržavati jedinstvene vrijednosti tako da svaki podređeni redak odgovara točno jednom nadređenom retku.

ON DELETE CASCADE automatski briše odgovarajuće podređene retke kad god se izbriše njihov roditeljski redak, keeping tablice su konzistentne. Alternative su SET NULL, što briše podređeni strani ključ, i NO ACTION, što blokira brisanje.

Da. Samoreferencirajući strani ključ pokazuje na primarni ključ u istoj tablici, koja modelira hijerarhije poput retka zaposlenika koji referencira svog menadžera. Za samoreferenciranje, SQL Server preporučuje ON DELETE NO ACTION kako bi se izbjegli kaskadni ciklusi.

Da, osim ako stupac nije deklariran kao NOT NULL. NULL strani ključ znači da podređeni redak još nije povezan ni s jednim roditeljskim retkom, a SQL Server preskače referencijalnu provjeru za tu NULL vrijednost.

Pokrenite naredbu ALTER TABLE child_table DROP CONSTRAINT fkey_name. Morate navesti naziv ograničenja, koji možete pronaći u sys.foreign_keys. Dropping Strani ključ uklanja odnos, ali ostavlja obje tablice i njihove podatke nepromijenjenima.

Da. GitHub kopilot može pisati ograničenja FOREIGN KEY unutar naredbi CREATE TABLE ili ALTER TABLE iz upita na prirodnom jeziku i predložiti nadređenu tablicu i referencirani stupac. Uvijek pregledajte ključeve, referencijalne radnje i tipove podataka prije pokretanja skripte.

Alati umjetne inteligencije i strojnog učenja ispituju uzorke podataka i obrasce upita kako bi predložili koji stupci trebaju postati strani ključevi, otkrili nedostajuće ili napuštene odnose i preporučili prikladne radnje PRI BRISANJU. Programer pregledava svaki prijedlog prije nego što ga primijeni.

Sažmite ovu objavu uz: