logo

Constrângeri de integritate referenţială în DBMS

O constrângere de integritate referenţială este cunoscută şi ca constrângere cheie străină . O cheie externă este o cheie ale cărei valori sunt derivate din cheia primară a altui tabel.

Tabelul din care sunt derivate valorile este cunoscut ca Master sau Referit Tabel și Tabelul în care valorile sunt introduse corespunzător este cunoscut ca Copil sau referire Tabel, Cu alte cuvinte, putem spune că tabelul care conține cheie externă se numeste masa pentru copii , și tabelul care conține Cheie primară/cheie candidată se numeste tabelul referitor sau părinte . Când vorbim despre modelul relațional al bazei de date, cheia candidată poate fi definită ca un set de atribute care pot avea zero sau mai multe atribute.



Sintaxa tabelului principal sau a tabelului de referință este:

matrice de octeți în șir de caractere java
 CREATE TABLE Student (Roll int PRIMARY KEY, Name varchar(25) , Course varchar(10) ); 

Aici coloana Roll acționează ca Cheia principala, care va ajuta la derivarea valorii cheii străine în tabelul copil.

Constrângere de integritate referenţială

Sintaxa tabelului copil sau a tabelului de referință este:



 CREATE TABLE Subject (Roll int references Student, SubCode int, SubName varchar(10) ); 

Constrângere de integritate referenţială

În tabelul de mai sus, coloana Roll acționează ca Cheie externă, ale căror valori sunt derivate folosind valoarea Roll a cheii primare din tabelul principal.

Constrângere cheie străină SAU constrângere de integritate referențială.

Există două constrângeri de integritate referenţială:

Inserați constrângere: Valoarea nu poate fi inserată în tabelul CHILD dacă valoarea nu se află în tabelul MASTER



Șterge constrângerea: Valoarea nu poate fi ștearsă din tabelul MASTER dacă valoarea se află în tabelul CHILD

Să presupunem că doriți să inserați Roll = 05 cu alte valori ale coloanelor în tabelul SUBJECT, atunci veți vedea imediat o eroare ' Constrângere cheie externă încălcată ' adică la rularea unei comenzi de inserare ca:

Inserați în SUBJECT valorile (5, 786, OS); nu vor fi distrați de SQL din cauza constrângerii de inserare (Deoarece nu puteți introduce valoare într-un tabel copil dacă valoarea nu se află în tabelul principal, deoarece Roll = 5 nu este prezent în tabelul principal, prin urmare nu va fi permis să introduceți Roll = 5 în tabelul copil )

lista de matrice sortată în java

În mod similar, dacă doriți să ștergeți Roll = 4 din Tabelul STUDENT, atunci veți vedea imediat o eroare ' Constrângere cheie externă încălcată ' adică la rularea unei comenzi de ștergere ca:

Ștergeți din STUDENT unde Roll = 4; nu vor fi distrați de SQL din cauza constrângerii de ștergere. (Deoarece nu puteți șterge valoarea din tabelul principal dacă valoarea se află în tabelul copil, deoarece Roll = 5 este prezent în tabelul copil, prin urmare nu va fi permis să ștergeți Roll = 5 din tabelul principal, dacă cumva am reușit să ștergem Roll = 5, apoi Roll = 5 va fi disponibil în tabelul copil, ceea ce va încălca în cele din urmă constrângerea de inserare.

ON DELETE CASCADE.

Conform constrângerii de ștergere: valoarea nu poate fi ștearsă din tabelul MASTER dacă valoarea se află în tabelul CHILD. Următoarea întrebare vine: putem șterge valoarea din tabelul principal dacă valoarea se află în tabelul copil fără a încălca constrângerea de ștergere? adică în momentul în care ștergem valoarea din tabelul principal, valoarea corespunzătoare acesteia ar trebui să fie ștearsă și din tabelul copil.

string java

Răspunsul la întrebarea de mai sus este DA, putem șterge valoarea din tabelul principal dacă valoarea se află în tabelul copil fără a încălca constrângerea de ștergere, trebuie să facem o ușoară modificare în timp ce creăm tabelul copil, adică prin adăugarea la ștergerea în cascadă .

SINTAXA TABELULUI

 CREATE TABLE Subject (Roll int references Student on delete cascade, SubCode int, SubName varchar(10) ); 

În sintaxa de mai sus, imediat după cuvântul cheie de referință (utilizat pentru crearea cheii străine), am adăugat cascada de ștergere, adăugând astfel acum, putem șterge valoarea din tabelul principal dacă valoarea se află în tabelul copil fără a încălca ștergerea constrângere. Acum, dacă ați vrut să ștergeți Roll = 5 de la masa principală, chiar dacă Roll = 5 se află în masa copil, este posibil deoarece în momentul în care dați comanda de ștergere Roll = 5 de la masa principală, rândul având Roll = 5 din tabelul copil va fi, de asemenea, șters.

Constrângere de integritate referenţială
Constrângere de integritate referenţială

Sunt afișate cele două tabele de mai sus STUDENT și SUBJECT având fiecare câte patru valori, acum să presupunem că doriți să ștergeți Roll = 4 din STUDENT( Master ) Table scriind o comandă SQL: șterge de la STUDENT unde Roll = 4;

În momentul în care SQL execută comanda de mai sus, rândul care are Roll = 4 din SUBJECT( Child ) Table va fi, de asemenea, șters, rezultatul STUDENT și SUBIECTUL tabelul va arăta astfel:

Constrângere de integritate referenţială
Constrângere de integritate referenţială

Din cele două tabele de mai sus STUDENT și SUBJECT, puteți vedea că în ambele tabel Roll = 4 este șters dintr-o dată, fără a încălca constrângerea de ștergere.

Uneori se pune o întrebare foarte importantă în interviuri care: Poate cheia externă să aibă valori NULL?

Răspunsul la întrebarea de mai sus este DA, poate avea valori NULL, în timp ce cheia primară nu poate fi NULL cu orice preț. Pentru a înțelege practic întrebarea de mai sus, să înțelegem mai jos conceptul de ștergere nul.

ON DELETE NULL.

Conform constrângerii de ștergere: valoarea nu poate fi ștearsă din tabelul MASTER dacă valoarea se află în tabelul CHILD. Următoarea întrebare vine: putem șterge valoarea din tabelul principal dacă valoarea se află în tabelul copil fără a încălca constrângerea de ștergere? adică în momentul în care ștergem valoarea din tabelul principal, valoarea corespunzătoare acesteia ar trebui să fie ștearsă și din tabelul copil sau poate fi înlocuită cu valoarea NULL.

Răspunsul la întrebarea de mai sus este DA, putem șterge valoarea din tabelul principal dacă valoarea se află în tabelul copil fără a încălca constrângerea de ștergere prin inserarea NULL în cheia externă, trebuie să facem o ușoară modificare în timp ce creăm tabelul copil, adică. prin adăugarea la ștergere nul .

python scrie json în fișier

SINTAXA TABELULUI:

 CREATE TABLE Subject (Roll int references Student on delete null, SubCode int, SubName varchar(10) ); 

În sintaxa de mai sus, imediat după cuvântul cheie de referință (utilizat pentru crearea cheii străine), am adăugat la ștergere nul, adăugând astfel acum, putem șterge valoarea din tabelul principal dacă valoarea se află în tabelul copil fără a încălca ștergerea constrângere. Acum, dacă ați vrut să ștergeți Roll = 4 de la masa principală, chiar dacă Roll =4 se află în masa copil, este posibil deoarece în momentul în care dați comanda de ștergere Roll = 4 de la masa principală, rândul având Roll = 4 din tabelul copil va fi înlocuit cu o valoare NULL.

Constrângere de integritate referenţială
Constrângere de integritate referenţială

Sunt afișate cele două tabele de mai sus STUDENT și SUBJECT având fiecare câte patru valori, acum să presupunem că doriți să ștergeți Roll = 4 din STUDENT( Master ) Table scriind o comandă SQL: șterge de la STUDENT unde Roll = 4;

În momentul în care SQL execută comanda de mai sus, rândul având Roll = 4 din SUBJECT( Child ) Table va fi înlocuit cu o valoare NULL, rezultatul STUDENT și SUBIECTUL tabelul va arăta astfel:

Constrângere de integritate referenţială
Constrângere de integritate referenţială

Din cele două tabele de mai sus STUDENT și SUBJECT, puteți vedea că în tabelul STUDENT Roll = 4 este șters, în timp ce valoarea Roll = 4 din tabelul SUBJECT este înlocuită cu NULL. Acest lucru demonstrează că cheia externă poate avea valori nule. Dacă în cazul din SUBJECT Table, coloana Roll este cheia primară împreună cu cheia externă, atunci în acest caz nu am putea face ca o cheie externă să aibă valori NULL.