Úvod do cudzieho kľúča v SQL

Cudzí kľúč je obmedzením v SQL. Používa sa na prepojenie oboch tabuliek. Cudzí kľúč v jednej tabuľke ukazuje na primárny kľúč v inej tabuľke. Cudzí kľúč možno použiť na uistenie, že riadok v jednej tabuľke má zodpovedajúce riadky / riadky v inej tabuľke. Odkazovaná tabuľka sa nazýva nadradená tabuľka a tabuľka s cudzím kľúčom sa nazýva dcérska tabuľka. Tento vzťah rodič - dieťa presadzuje pravidlo známe ako referenčná integrita. Referenčná integrita je vlastnosť údajov, ktorá uvádza, že všetky jej odkazy sú platné.

Takže, ak máte v databáze 1-to-many alebo mnoho-to-many vzťahy, cudzie kľúče budú veľmi užitočné. Funguje ako krížový odkaz medzi dvoma tabuľkami (parent_table a child_table), pretože odkazuje na primárny kľúč inej tabuľky. Takto sa vytvorí spojenie medzi parent_table a child_table.

syntax

Vytvorenie novej tabuľky pomocou cudzieho kľúča vyžaduje povolenie CREATE TABLE v databáze

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 názov tabuľky, ktorú vytvoríme
  • column_1, column_2- stĺpce, ktoré sa majú pridať do tabuľky.
  • F_key- Toto je obmedzenie cudzieho kľúča.
  • child_column1, child_column2… child_column_n- Je to názov stĺpca child_Table, ktorý odkazuje na primárny kľúč v nadradenej tabuľke.
  • Parent_Table - Toto je názov parent_table. Primárny kľúč parent_table je uvedený v child_table
  • ZMAZAŤ - Tento parameter vykoná akciu s podradenými údajmi po vymazaní rodičovských údajov. SET NULL, NO ACTION, CASCADE, SET DEFAULT sú niektoré z hodnôt tohto parametra.
  • ON UPDATE - Toto je voliteľný parameter, ktorý po aktualizácii rodičovských údajov vykoná akciu s podradenými údajmi. SET NULL, NO ACTION, CASCADE, SET DEFAULT sú niektoré z hodnôt tohto parametra.
  • CASCADE - Toto môžeme použiť spolu s ON DELETE a ON UPDATE. Po odstránení alebo aktualizácii nadradených údajov Podradené údaje budú buď odstránené, alebo aktualizované.

Vytvorenie cudzieho kľúča v existujúcej tabuľke vyžaduje ALTER povolenie pre tabuľku.

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

pravidlá

  1. Cudzie kľúče sa nevzťahujú na dočasné tabuľky.
  2. Obmedzenie cudzieho kľúča nemusí byť spojené iba s primárnym kľúčom inej tabuľky, môže byť tiež spojené s obmedzeniami UNIQUE inej tabuľky.
  3. Obmedzenia FOREIGN KEY môžu odkazovať na iný stĺpec v tej istej tabuľke. Toto sa označuje ako samoreferencia.
  4. Obmedzenia cudzieho kľúča sa môžu odvolávať na tabuľky v tej istej databáze.
  5. Do podradenej tabuľky môžeme vložiť aj NULL hodnoty.
  6. Keď do obmedzenia cudzieho kľúča vložíme inú hodnotu ako NULL, hodnota musí existovať v odkazovanom stĺpci, inak došlo k porušeniu správy.
  7. Hodnota jedinečných kľúčov rodiča sa nedá zmeniť, ak je pravidlo aktualizácie RESTRICT a ak existuje jeden alebo viac závislých riadkov. Ak však pravidlo aktualizácie NIE JE AKCIA, rodičovské jedinečné kľúče sa môžu aktualizovať, pokiaľ má každé dieťa rodičovský kľúč v čase, keď sa dokončí aktualizačný príkaz.

Príklady

Povedzme, že máme dve tabuľky Zákazníci a Objednávky. Tabuľka Zákazníci obsahuje všetky údaje týkajúce sa zákazníkov a Tabuľka Objednávky obsahuje údaje týkajúce sa zákaziek.

zákazníci

Cust_idPrimárny kľúč
cust_name
umiestnenia

objednávky

Číslo objednávkyPrimárny kľúč
Dátum objednávky
množstvo
Cust_idCudzí kľúč
Celková suma

Vo vyššie uvedenom príklade je stĺpec Cust_id v tabuľke ORDERS cudzí kľúč ukazujúci na stĺpec Cust_id v tabuľke ZÁKAZNÍCI.

Predpokladajme, že tieto tabuľky majú nasledujúce hodnoty

zákazníci

1001alexUS
1002CareyUS
1003sidSpojené kráľovstvo
1004TomášAUS
1005KapilIND

objednávky

7820-10-2018510021200
7912.10.201741001800
8020-11-201621005369
8109.10.201651002258
8219-08-20161110041900
8330-06-20164510012300
8416-02-201671001890
852.1.201621002260

Pre cust_id 1001 existujú tri objednávky, ktoré existujú v tabuľke objednávok.

Pre cust_id 1003 neexistuje žiadna objednávka.

Ak teda máme v nadradenej tabuľke konkrétne údaje (povedzme 1003), nie je potrebné mať tieto údaje v podradenej tabuľke, ale naopak to nie je pravda.

V podradenej tabuľke (tabuľka objednávok) nemôžeme mať žiadne údaje, ktoré v nadradenej tabuľke (zákazníci) neexistujú.

Napríklad nemôžeme vložiť nový záznam povedať pre cust_id 1006 v tabuľke Orders, pretože cust_id 1006 neexistuje v tabuľke Customers.

Nižšie sú uvedené príklady, ktoré porušujú referenčnú integritu tohto vzťahu:

  1. Vloženie riadku do tabuľky ORDERS, kde sa Cust_ID neobjaví v stĺpci Cust_ID v tabuľke CUSTOMERS.
  2. Vymazanie riadku z tabuľky CUSTOMERS, kde Cust_ID riadku, ktorý sa má odstrániť, je stále prítomné v stĺpci Cust_ID v tabuľke ORDERS.

Keď je konkrétny záznam vymazaný z hlavnej tabuľky, existujú dva spôsoby, ako zachovať integritu údajov v podradenej tabuľke. Ak sú dve tabuľky spojené s cudzím kľúčom a niektoré údaje v hlavnej tabuľke sa vymažú, pre ktoré existuje aj záznam v podradenej tabuľke, máme určitý mechanizmus na uloženie integrity údajov do podradenej tabuľky.

  • On Delete Cascade : Odstráni sa záznam z podradenej tabuľky, ak sa táto hodnota cudzieho kľúča odstráni z hlavnej tabuľky.
  • On Delete NULL: Vymaže všetky hodnoty v tomto zázname podradenej tabuľky ako NULL, pre ktoré sa hodnota cudzieho kľúča z hlavnej tabuľky vymaže.

Záver - Cudzí kľúč v SQL

Preto je vhodné použiť cudzí kľúč v databáze, ktorá má jeden až jeden alebo viac vzťahov. Hlavnou výhodou použitia obmedzení cudzím kľúčom je to, že zvyšuje výkon. Vývojári môžu ľahko identifikovať štruktúru databázy. Môžeme tiež preskúmať, ako bude dotaz získavať údaje.

Odporúčané články

Toto je príručka pre cudzí kľúč v SQL. Tu diskutujeme pravidlá a príklady cudzieho kľúča v SQL so syntaxou. Ďalšie informácie nájdete aj v nasledujúcich článkoch -

  1. Zobrazenia SQL
  2. Typy pripojení na serveri SQL Server
  3. Čo je PL / SQL?
  4. Obmedzenia servera SQL
  5. Top 6 typov spojení v MySQL s príkladmi