Introducere în cheia externă în SQL

Cheia externă este o constrângere în SQL. Este utilizat pentru a relaționa cele două tabele. O cheie străină dintr-un tabel indică o cheie primară dintr-un alt tabel. O cheie străină poate fi utilizată pentru a vă asigura că rândul dintr-un tabel are rândul / rândurile corespunzătoare într-o altă tabelă. Tabelul referit se numește tabel părinte, iar tabelul cu cheia străină este cunoscut sub numele de tabel copil. Această relație părinte-copil aplică regula care este cunoscută sub numele de Integritate referențială. Integritatea referențială este o proprietate a datelor care afirmă că toate referințele sale sunt valide.

Așadar, dacă aveți relații 1-la-multe sau multe-la-multe în baza de date, cheile străine vor fi foarte utile. Acționează ca o referință încrucișată între două tabele (parent_table și child_table), deoarece face referire la cheia primară a altei tabele. Prin urmare, stabilește o legătură între parent_table și child_table.

Sintaxă

Crearea unei noi tabele cu o cheie străină necesită permisiunea CREATE TABLE în baza de date

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 este numele tabelului pe care îl vom crea
  • column_1, column_2- coloanele care trebuie adăugate la tabel.
  • F_key- Aceasta este o restricție de cheie străină.
  • child_column1, child_column2 … child_column_n- Este denumirea coloanelor child_Table pentru a face referire la cheia primară din tabelul părinte.
  • Parent_Table- Acesta este numele parent_table. Cheia primară a parent_table este făcută referință în child_table
  • ON DELETE- Acest parametru acționează asupra datelor despre copii după ștergerea datelor părinte. SET NULL, NO ACTION, CASCADE, SET DEFAULT sunt câteva dintre valorile acestui parametru.
  • ACTUALIZARE - Acesta este un parametru opțional care ia măsuri asupra datelor copilului după actualizarea datelor părinte. SET NULL, NO ACTION, CASCADE, SET DEFAULT sunt câteva dintre valorile acestui parametru.
  • CASCADE - Putem folosi acest lucru împreună cu ON DELETE și ON UPDATE. După ștergerea sau actualizarea datelor părinte, datele copilului vor fi șterse sau actualizate.

Crearea unei chei străine într-un tabel existent necesită permisiunea ALTER pe tabelă.

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

reguli

  1. Cheile externe nu se aplică tabelelor temporare.
  2. Restrângerea cheii externe nu trebuie să fie legată doar de cheia primară a altui tabel, ci poate fi legată și de constrângerea UNIQUE a unui alt tabel.
  3. Restricțiile TĂIEI STRĂINE pot face referire la o altă coloană din același tabel. La aceasta se face referire la auto-referire.
  4. Restrângerile de chei externe se pot referi la tabelele din aceeași bază de date.
  5. Putem de asemenea introduce valori NULL în tabelul copil.
  6. Când introducem altă valoare decât NULL în restricția de cheie străină, valoarea trebuie să existe în coloana de referință, altfel a apărut mesajul de încălcare.
  7. Valoarea cheilor unice ale părintelui nu poate fi modificată dacă regula de actualizare este RESTRICT și există unul sau mai multe rânduri dependente. Cu toate acestea, dacă regula de actualizare este NO ACTION, cheile unice ale părinților pot fi actualizate atât timp cât fiecare copil are o cheie părinte până la finalizarea instrucțiunii de actualizare.

Exemple

Spuneți că avem două tabele Clienți și comenzi. Tabelul clienților conține toate datele referitoare la clienți și tabelul de comenzi având date legate de comenzi ale clienților.

Clienți

Cust_idCheia principala
CUST_NAME
Locație

Comenzi

Comanda IDCheia principala
Data comandă
Cantitate
Cust_idCheie externă
Valoare totală

În exemplul de mai sus, coloana Cust_id din tabelul ORDERS este o cheie străină care indică coloana Cust_id din tabelul CLIENTI.

Să presupunem că aceste tabele au următoarele valori

Clienți

1001AlexNE
1002CareyNE
1003SidRegatul Unit
1004TomAUS
1005KapilIND

Comenzi

7820-10-2018510021200
7912-10-201741001800
8020-11-201621005369
8109-10-201651002258
8219-08-20161110041900
8330-06-20164510012300
8416-02-201671001890
8502-01-201621002260

Pentru cust_id 1001 există trei comenzi care există în tabelul de comenzi.

Pentru cust_id 1003 nu există nicio comandă.

Deci, dacă avem date particulare (Spune id 1003) în tabelul părinte, atunci nu este necesar să avem aceste date în tabelul copil, dar invers nu este adevărat.

Nu putem avea date în tabelul Copil (tabel comenzi) care nu există în tabelul părinte (clienți.)

De exemplu, nu putem introduce o nouă înregistrare say pentru cust_id 1006 în tabelul de comenzi, deoarece cust_id 1006 nu există în tabelul Clienți.

Iată mai jos exemplele care încalcă integritatea referențială a acestei relații:

  1. Introducerea unui rând în tabelul ORDERS unde Cust_ID nu apare în coloana Cust_ID din tabelul CLIENTI.
  2. Ștergerea unui rând din tabela CLIENTI unde Cust_ID al rândului care trebuie șters este încă prezentă în coloana Cust_ID din tabelul ORDERS.

Când o anumită înregistrare este ștersă din tabelul principal, există două moduri de a menține integritatea datelor din tabelul copil. Când două tabele sunt conectate cu cheia externă și anumite date din tabelul principal sunt șterse, pentru care înregistrarea există și în tabelul copil, atunci avem un mecanism pentru salvarea integrității datelor din tabelul copil.

  • La Ștergerea cascadei : aceasta va elimina înregistrarea de pe tabelul copil dacă această valoare a cheii străine este ștersă din tabelul principal.
  • La Ștergere NULL: Aceasta va seta toate valorile din acea înregistrare a tabelului Copil ca NULL, pentru care valoarea cheii străine este ștersă din tabelul principal.

Concluzie - cheie externă în SQL

Așadar, este recomandabil să utilizați cheia străină în baza de date care are una sau una sau mai multe relații. Principalul avantaj al utilizării constrângerilor de chei străine este că îmbunătățește performanța. Dezvoltatorii pot identifica cu ușurință structura bazei de date. De asemenea, putem examina modul în care interogarea va prelua datele.

Articole recomandate

Acesta este un ghid pentru cheia externă în SQL. Aici discutăm Regulile și exemple de cheie străină în SQL cu sintaxa. De asemenea, puteți arunca o privire la următoarele articole pentru a afla mai multe -

  1. Vizualizări SQL
  2. Tipuri de uniri în SQL Server
  3. Ce este PL / SQL?
  4. Constrângerile SQL Server
  5. Top 6 tipuri de uniri în MySQL cu exemple