Integritate referenţială
Versiunea actuală a paginii nu a fost încă revizuită de colaboratori experimentați și poate diferi semnificativ de
versiunea revizuită pe 27 aprilie 2017; verificările necesită
6 modificări .
Integritatea referențială este corectitudinea valorilor cheilor străine ale unei baze de date relaționale .
Sarcina de a menține sau de a asigura integritatea referențială este de a preveni sau elimina încălcarea corectitudinii valorilor cheii străine atunci când se fac modificări în baza de date prin corectarea valorilor cheii străine, dacă este posibil, sau anularea operațiunii de editare dacă o astfel de corecție este nu este posibil.
Definiție
Relațiile dintre datele stocate în diferite relații într-o bază de date relațională sunt stabilite folosind chei străine - pentru a stabili o relație între un tuplu din relația A cu un anumit tuplu al relației B , valoarea cheii primare este scrisă în atributele tuplului de relația A prevedea aceasta (și în cazul general, cheia potențial valoric ) a tuplului țintă al relației B . Astfel, este întotdeauna posibilă efectuarea a două operații:
- determinați ce tuplu din relația B este asociat cu un anumit tuplu din relația A ;
- găsiți toate tuplurile relației A care au relații cu un anumit tuplu al relației B .
Datorită prezenței legăturilor într-o bază de date relațională, este posibilă stocarea faptelor fără duplicare excesivă, adică într-o formă normalizată . Integritatea referenţială poate fi ilustrată după cum urmează:
Având în vedere o pereche de relații A și B legate printr-o cheie străină. Cheia primară a relației B este atributul B.key . Cheia străină a relației A care se referă la B este atributul Ab . Integritatea referenţială pentru o pereche de relaţii A şi B are loc atunci când este îndeplinită condiţia: pentru fiecare tuplu al relaţiei A , există un tuplu corespunzător al relaţiei B , adică un tuplu care are ( B.key = Ab ).
O bază de date are proprietatea integrității referențiale atunci când orice pereche de relații legate de chei străine din ea are condiția de integritate referențială.
Dacă condiția de mai sus nu este îndeplinită, se spune că baza de date are o încălcare a integrității referențiale . O astfel de bază de date nu poate fi operată în mod normal, deoarece conexiunile logice dintre faptele care depind unele de altele sunt întrerupte în ea. Rezultatul imediat al unei încălcări a integrității referențiale este că o interogare validă poate să nu producă întotdeauna rezultatul corect.
Menținerea integrității referențiale în baza de date
SGBD-urile au un mecanism pentru menținerea automată a integrității referențiale. Orice operație care modifică datele dintr-un tabel declanșează o verificare automată a integrității referențiale. în care:
- În timpul operațiunii de adăugare a unei înregistrări, se verifică automat dacă cheile străine din această înregistrare se referă la înregistrări existente în tabelele aferente declarate în descriere. Dacă se dovedește că operațiunea va duce la apariția unor legături incorecte, aceasta nu este efectuată - sistemul returnează o eroare.
- Când editați o înregistrare, se verifică următoarele:
- dacă cheia sa primară se modifică și există referințe la această înregistrare, atunci operația de editare se încheie cu o eroare;
- dacă oricare dintre cheile străine stocate în această intrare este schimbată, iar după modificare, cheia străină se va referi la o intrare inexistentă, atunci operația de editare eșuează.
- În timpul operațiunii de ștergere a unei înregistrări, se verifică dacă există referințe la aceasta. Dacă există legături, atunci există trei opțiuni pentru acțiuni ulterioare (realizate de fapt depinde de SGBD și de alegerea programatorului, pe care trebuie să o facă atunci când descrie legătura):
- Refuzat - ștergerea este blocată și este returnată o eroare.
- Ștergere în cascadă - într-o singură tranzacție, această înregistrare și toate înregistrările care se referă la aceasta sunt șterse. Dacă se face referire și la intrările șterse și setările necesită, de asemenea, ștergerea, atunci ștergerea în cascadă continuă. Astfel, după ștergerea acestei înregistrări, în baza de date nu mai rămâne nici o singură înregistrare care să se refere direct sau indirect la ea. Dacă cel puțin una dintre înregistrările de referință nu poate fi ștearsă (fie este configurată o interdicție pentru aceasta, fie apare o altă eroare), atunci toate ștergerile sunt interzise.
- Atribuire NULL - Un marcator NULL este scris pe toate cheile externe ale înregistrărilor care fac referire la aceasta . Dacă acest lucru nu este posibil pentru cel puțin una dintre înregistrările de referință (de exemplu, dacă câmpul cheii externe este declarat ca NOT NULL), atunci ștergerea este interzisă.
Link -uri