în SQL, conceptul de chei străine este unul important care poate fi găsit în toate bazele de date profesionale utilizate în industrie. Ideea de bază este de a împiedica baza de date PostgreSQL să stocheze date inconsistente prin aplicarea constrângerilor care asigură corectitudinea tabelelor dvs. (cel puțin în ceea ce privește relațiile dintre obiecte). Integritatea referențială este, prin urmare, unul dintre cele mai importante concepte inventate vreodată în ea.

cu toate acestea, cheile străine vor introduce câteva probleme de care trebuie să aveți grijă atunci când scrieți aplicații. Dacă nu există chei străine, puteți introduce date în orice tabel în orice ordine. PostgreSQL nu-i pasă. Cu toate acestea, dacă există o cheie străină, ordinea începe să conteze (cel puțin într-un scenariu tipic, dar mai multe despre asta mai târziu).

chei străine și ordine

pentru a arăta importanța ordinii, trebuie să creăm mai întâi un model de date:

dorim să stocăm valute, produse, precum și descrieri de produse. Practic este un model de date foarte simplu. Să vedem dacă se întâmplă să inserăm în tabelul de produse:

logic, prima inserție va eșua, deoarece moneda numărul 1 nu există încă. Dacă vrem să inserăm, trebuie să folosim o valoare nulă (= monedă necunoscută). În cuvinte de ordine: trebuie să umplem mai întâi tabelul valutar, apoi să inserăm locații și așa mai departe. Ordinea contează în cazul implicit.

determinarea ordinii corecte de inserare a cheilor străine

dacă trebuie să începeți să utilizați un model de date existent, poate fi un pic cam greu să vă înfășurați capul în jurul acestor lucruri. Popularea unui model de date gol poate fi un pic dificil. Deci, de ce să nu scrieți o interogare care să ne spună ordinea în care ar trebui să introducem date?

Ei bine, aici este acea interogare magică…

interogarea nu este banală de citit, dar am făcut tot posibilul să o documentez puțin. Practic, tabelele sistemului PostgreSQL au toate informațiile de care avem nevoie pentru a determina ordinea corectă. Iată ieșirea:

 table_name | level-----------------+------- t_currency | 1 t_location | 1 t_product | 2 t_product_desc | 3 t_product_stock | 3(5 rows)

după cum puteți vedea, interogarea ne-a dat corect tabelele în ordinea dorită. În primul rând, trebuie să inserăm în toate tabelele la nivelul unu și așa mai departe. Dacă rămânem la această ordine, integritatea referențială va fi întotdeauna asigurată (presupunând că datele sunt corecte).

utilizarea constrângerilor „amânate inițial”

în unele cazuri, ordinea de inserare poate fi un lucru urât de rezolvat. Ce se întâmplă dacă am avea mijloacele de a spune PostgreSQL să ignore ordinea și să verifice integritatea pe commit în schimb? Acesta este exact ceea ce face „amânat inițial”. Iată cum funcționează:

în acest caz, putem modifica datele în orice ordine dorim. Atâta timp cât integritatea este garantată intactă la sfârșitul tranzacției, PostgreSQL este perfect în regulă. PostgreSQL va amâna verificarea constrângerii și va lua o povară de pe dezvoltator.

în cele din urmă …

dacă doriți să aflați mai multe despre SQL avansat, poate doriți să aruncați o privire la blogul meu despre unele funcții de ferestre mai avansate (cu legături). Așa că puneți-vă cravata și citiți pentru a afla mai multe.

Lasă un răspuns

Adresa ta de email nu va fi publicată.