Uvod v tuji ključ v SQL

Tuji ključ je omejitev v SQL. Uporablja se za povezavo obeh tabel. Tuji ključ v eni tabeli kaže na primarni ključ v drugi tabeli. Tuji ključ lahko uporabite za zagotovitev, da ima vrstica v eni tabeli ustrezne vrstice / vrstice v drugi tabeli. Referenčna tabela se imenuje nadrejena tabela, tabela s tujim ključem pa je znana kot nadrejena tabela. To razmerje med staršem in otrokom uveljavlja pravilo, ki ga poznamo kot Referenčna integriteta. Referenčna integriteta je lastnost podatkov, ki navajajo, da so vse njene reference veljavne.

Če imate v bazi podatkov odnose med 1 in več ali več do več, bodo tuji ključi zelo koristni. Deluje kot navzkrižna referenca med dvema tabelama (matični_predstavitveni in otroški_predstavljivi), ker se nanaša na primarni ključ druge tabele. Torej vzpostavi povezavo med matično_tezo in nadrejeno.

Sintaksa

Če želite ustvariti novo tabelo s tujim ključem, potrebujete dovoljenje CREATE TABLE v bazi podatkov

CREATE TABLE child_Table
(
column_1 datatype ( NULL |NOT NULL ),
column_2 datatype ( NULL |NOT NULL ),

CONSTRAINT F_key
FOREIGN KEY (child_column1, child_column2, … child_column_n)
REFERENCES parent_Table (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 ) ) );

  • Child_Table je ime tabele, ki ga bomo ustvarili
  • stolpec_1, stolpec_2- stolpce, ki jih je treba dodati v tabelo.
  • F_key - to je omejitev tujega ključa.
  • child_column1, child_column2… child_column_n- To je ime stolpcev child_Table za sklicevanje na primarni ključ v nadrejeni tabeli.
  • Parent_Table - To je ime parent_table. Primarni ključ parent_table se sklicuje v child_table
  • ON DELETE - Ta parameter deluje po nadrejenih podatkih po brisanju nadrejenih podatkov. SET NULL, NO ACTION, CASCADE, SET DEFAULT so nekatere od vrednosti tega parametra.
  • ON UPDATE - to je izbirni parameter, ki po posodobitvi nadrejenih podatkov ukrepa nadrejenimi podatki. SET NULL, NO ACTION, CASCADE, SET DEFAULT so nekatere od vrednosti tega parametra.
  • CASCADE - To lahko uporabimo skupaj z ON DELETE in ON UPDATE. Po brisanju ali posodobitvi nadrejenih podatkov Otroški podatki bodo izbrisani ali posodobljeni.

Ustvarjanje tujega ključa v obstoječi tabeli zahteva dovoljenje ALTER na mizi.

ALTER table_name
ADD CONSTRAINT constraint_name
FOREIGN KEY foreign_key_name(columns)
REFERENCES parent_table(columns)

Pravila

  1. Tuji ključi se ne uporabljajo za začasne tabele.
  2. Omejitve tujega ključa ni treba povezati samo s primarnim ključem druge tabele, lahko ga povežemo tudi z UNIQUE omejitvijo druge tabele.
  3. Omejitve TUJ KLJUČNO lahko sklicujejo na drug stolpec v isti tabeli. To se omenja kot samo referenca.
  4. Omejitve tujih ključev se lahko nanašajo na tabele v isti bazi podatkov.
  5. V otroško tabelo lahko vstavimo tudi NULL vrednosti.
  6. Ko v omejitev tujega ključa vstavimo drugo vrednost, razen vrednosti NULL, mora vrednost obstajati v omenjenem stolpcu, če se je zgodilo sporočilo o kršitvi.
  7. Vrednosti edinstvenih ključev staršev ni mogoče spremeniti, če je pravilo za posodobitev RESTRICT in obstaja ena ali več odvisnih vrstic. Če pa pravilo za posodobitev NI AKCIJA, je mogoče edinstvene ključe staršev posodobiti, dokler ima vsak otrok nadrejeni ključ do konca dopolnitve izjave o posodobitvi.

Primeri

Recimo, da imamo dve tabeli Stranke in naročila. Tabela kupcev vsebuje vse podatke o strankah in tabelo z naročili s podatki o naročilih.

Stranke

Skrbništvo_idPrimarni ključ
Ime_zahteve
Lokacija

Naročila

Številka naročilaPrimarni ključ
Datum naročila
Število
Skrbništvo_idTuji ključ
Skupni znesek

V zgornjem primeru je stolpec Cust_id v tabeli NALOGI tuji ključ, ki kaže na stolpec Cust_id v tabeli KUPCI.

Denimo, da imajo te tabele naslednje vrednosti

Stranke

1001AlexZDA
1002PrevidnoZDA
1003SidUK
1004TomAUS
1005KapilIND

Naročila

7820-10-2018510021200
7912-10-201741001800
8020-11-201621005369
8110.09.201651002258
8219-08-20161110041900
8330-06-20164510012300
8416-02-201671001890
8501.02.201621002260

Za cust_id 1001 obstajajo trije naročili v tabeli naročil.

Za cust_id 1003 ni naročila.

Če imamo v nadrejeni tabeli posebne podatke (recimo id 1003), ni treba, da so ti podatki v nadrejeni tabeli, ampak obratno, to ne drži.

V nadrejeni tabeli (Tabela naročil) ne moremo imeti podatkov, ki ne obstajajo v nadrejeni tabeli (Stranke.)

Na primer, ne moremo vstaviti novega zapisa recimo zapisa za cust_id 1006 v tabelo Naročila, ker v tabeli Kupci ne obstaja krovna vrednost 1006.

Spodaj so primeri, ki kršijo referenčno integriteto tega odnosa:

  1. Vstavite vrstico v tabelo NAROČILA, kjer se Cust_ID ne pojavi v stolpcu Cust_ID v tabeli CUSTOMERS.
  2. Če izbrišete vrstico iz tabele CUSTOMERS, kjer je Cust_ID vrstice, ki jo želite izbrisati, še vedno v stolpcu Cust_ID v tabeli ORDERS.

Ko se določen zapis izbriše iz glavne tabele, obstajata dva načina za ohranjanje celovitosti podatkov v otroški tabeli. Ko sta dve tabeli povezani s tujim ključem in se v glavni tabeli izbrišejo določeni podatki, za katere zapis obstaja tudi v nadrejeni tabeli, potem imamo nekaj mehanizma za shranjevanje celovitosti podatkov v podrejeni tabeli

  • Ob brisanju kaskade : s tem odstranite zapis iz nadrejene tabele, če je vrednost tujega ključa izbrisana iz glavne tabele.
  • Ob izbrisu NULL: s tem nastavite vse vrednosti v tem zapisu nadrejene tabele kot NULL, za katere se vrednost tujega ključa izbriše iz glavne tabele.

Zaključek - Tuji ključ v SQL

Zato je priporočljivo uporabiti tuji ključ v bazi podatkov, ki ima razmerje med enim ali enim do več. Glavna prednost uporabe omejitev tujih ključev je, da izboljša delovanje. Razvijalci zlahka prepoznajo strukturo baze podatkov. Prav tako lahko preučimo, kako poizvedba pridobi podatke.

Priporočeni članki

To je vodnik za Tuji ključ v SQL. Tukaj razpravljamo o pravilih in primerih tujih ključev v SQL s sintakso. Za več informacij si lahko ogledate tudi naslednje članke -

  1. Pogledi SQL
  2. Vrste združitev v SQL Server
  3. Kaj je PL / SQL?
  4. Omejitve strežnika SQL
  5. Prvih 6 vrst združitev v MySQL s primeri