Sunteți pe pagina 1din 14

4.

NORMALIZAREA BAZELOR DE DATE


Tehnica numit normalizare const n descompunerea unui tabel relaional n mai multe tabele care satisfac anumite reguli i care stocheaz aceleai date ca i tabelul iniial. 4.1. Noiuni introductive In trecut normalizarea era utilizata pentru proiectarea unei BD. In prezent, proiectare unei BD se realizeaza pe baza celor prezentate anterior (schema conceptuala, schema logica), iar normalizarea intervine asupra tabelelor obtinute pe baza schemei logice eliminand unele probleme care pot apare in procesul de proiectare initial: redundanta in date, anomalii la actualizare. Definitie: Normalizarea reprezinta procesul de descompunere a unui tabel relational in mai multe tabele care satisfac anumite reguli si care stocheaza aceleasi date ca si tabelul initial astfel incat sa fie eliminate redundanta in date si anomaliile la actualizare. Exemplu: Fie tabelul VANZARI care se foloseste la inregistrarea tranzactiilor unui magazin ce vinde articole la comanda. VANZARI (cod_client, nume_client, nr_telefon, cod_comanda, data, cod_articol, nume_articol, cost_articol, cantitate) cod_ client A1 A1 A2 A2 A2 A1 A3 nume_ client Popescu Popescu Ionescu Ionescu Ionescu Popescu Marinescu nr_ telefon 415355 415355 596322 596322 596322 415355 546229 cod_comanda C1 C1 C2 C2 C2 C3 C4 data 08.10.01 08.10.01 09.10.01 09.10.01 09.10.01 10.10.01 10.10.01 cod_a nume_ articol rticol P1 camasa P3 tricou P1 camasa P3 tricou P2 pantaloni P3 tricou P1 camasa cost_ articol 400000 200000 400000 200000 800000 200000 400000 cantitate 2 1 3 2 1 3 1

Tabelul de mai sus prezinta urmatoarele deficiente: a) redundante in date: - informatia (P1, camasa, 400000) este specificata de 3 ori, - informatia (A1, Popescu, 415355) este specificata de 3 ori, - informatia (A2, Ionescu, 596322) este specificata de 3 ori etc. b) anomalii la actualizare - anomalie la insertie Daca magazinul achizitioneaza un nou articol (P4, pantofi, 980000) informatia nu poate fi introdusa in tabel (un nou tuplu) pentru ca s-ar introduce o valoare Null in cheia primara (cod_comanda). - anomalie la stergere Daca este anulat articolul P2 in cadrul comenzii C2 se pierde informatia referitoare la numele si costul articolului respectiv. - anomalie la modificare Daca se modifica nr. de telefon al unui client modificarea trebuie facuta in toate tuplurile (liniile) unde apare numele acelui client.

In cele ce urmeaza se va realiza o eliminare a deficientelor constatate, dar mai intai, sunt definite cateva notiuni. a) Caracterul reversibil al normalizarii. Prin caracter reversibil al normalizarii se intelege faptul ca descompunerea se face fara pierdere de informatie, adica tabelul initial poate fi reconstituit prin compunerea naturala, pe atribute comune, a tabelelor rezultate. Pentru un tabel R care se descompune prin proiectie in mai multe tabele: R1, R2, Rn, conditia de descompunere fara pierdere de informatie presupune ca in urma operatiei de compunere naturala a tabelelor R1, R2, Rn sa se obtina tabelul R. Regula Casey-Delobel (caz particular de descompunere fara pierdere de informatie): Fie un tabel R(X, Y, Z) care se descompune prin proiectie in tabelele R1(X, Y) si R2(X, Z) unde prin X notam setul de coloane comune ale tabelelor R1 si R2, iar prin Y si Z, coloanele specifice lui R1, respectiv R2. Conditia de descompunere fara pierdere de informatie presupune ca tabelul R sa fie obtinut prin compunerea naturala a tabelelor R1 si R2. In SQL: SELECT R1.X, R1.Y, R2.Z FROM R1, R2 WHERE R1.X = R2.X b) Dependenta functionala Definitie: Fie R un tabel relational si X si Y doua submultimi de coloane ale lui R. Spunem ca X determina functional pe Y sau ca Y depinde functional de X daca nu exista doua randuri in tabelul R care sa aiba aceleasi valori pentru coloanele din X si sa aiba valori diferite pentru cel putin o coloana din Y. Notatie uzuala: X Y unde X = determinant Y = determinat X Y este triviala daca Y X. Exemplu: In tabelul VANZARI exista urmatoarele dependente functionale in care determinantul nu este cheie a tabelului: (cod_articol) (nume_articol, cost_articol,) (cod_comanda) (data, cod_client, nume_client, nr_telefon) (cod_client) (nume_client, nr_telefon) Obs.: Existenta dependentelor functionale pentru care determinantul nu este cheie a tabelului duce la aparitia redundantei in date si a anomaliilor la actualizare in lucrul cu BD. Definitie: Fie R un tabel relational si fie X si Y doua submultimi de coloane ale lui R. O dependenta functionala X Y se numeste dependenta functionala totala daca pentru orice subset de coloane Z al lui X si Z X, daca Z Y atunci Z = X. Deci nu exista nici un subset Z al lui X (cu Z X) pentru care Z Y. Definitie: O dependenta functionala care nu este totala se numeste dependenta functionala partiala. c) Dependenta functionala tranzitiva Fie R un tabel relational, X o submultime de coloane a lui R si A o coloana a lui R. Spunem ca A este dependenta tranzitiv de X daca exista o submultime de coloane Y care nu include coloana A si care nu determina functional pe X astfel incat X Y si Y A. Daca in aceasta definitie se doreste sa se evidentieze si Y atunci se spune ca A depinde functional de X prin intermediul lui Y si se scrie: X Y A.

Exemplu: (cod_comanda) (cod_client) (nume_client) d) Descompunerea minimala Prin descompunerea minimala a unui tabel se intelege o descompunere astfel incat nici o coloana din tabelele rezultate nu poate fi eliminata fara a duce la pierderea de informatii si implicit la pierderea caracterului ireversibil al transformarii. Aceasta inseamna ca nici unul dintre tabelele rezultate nu poate fi continut unul in altul. Obs.: Este de dorit ca procesul de normalizare sa conserve dependentele functionale netranzitive dintre date (atat determinantul cat si determinatul sa se regaseasca intr-unul din tabelele rezultate prin descompunere). Dependentele functionale tranzitive nu trebuie conservate deoarece ele pot fi deduse din cele netranzitive. Un tabel relational se poate afla in 6 situatii diferite numite forme normale: - prima forma normala, - a 2-a forma normala, - a 3-a forma normala, - forma normala Boyce-Codd, - a 4-a forma normala, - a 5-a forma normala. Un tabel este intr-o anumita forma normala daca satisface un set de constrangeri, corespunzator acelei forme normale. Constrangerile pentru o anumita forma normala sunt totdeauna mai puternice decat cele pentru formele normale inferioare (tabelele din f.n._i sunt un subset al tabelelor din f.n._ i-1). Codd si Fagin au elaborat o teorie matematica a normalizarii. 4.2. Prima forma normala (1NF - First Normal Form) Definitie: Un tabel relational este in 1NF daca fiecarei coloane ii corespunde o valoare indivizibila (atomica). Deci orice valoare nu poate fi compusa dintr-o multime de valori (atributele compuse) si nu sunt admise atributele repetitive. 1. 2. 3. 4. Algoritmul 1NF: Se inlocuiesc in tabel coloanele corespunzatoare atributelor compuse cu coloane ce contin componentele acestora. Fiecare grup de atribute repetitive se plaseaza in cate un nou tabel. Se introduce in fiecare tabel nou creat la pasul 2 cheia primara a tabelului din care a fost extras atributul respectiv, care devine cheie straina in noul tabel. Se stabileste cheia primara a fiecarui nou tabel creat la pasul 2. Aceasta va fi compusa din cheia straina introdusa la pasul 3 plus una sau mai multe coloane suplimentare.

Obs.: Algoritmul 1NFA permite aducerea unui tabel R in 1NF prin eliminarea atributelor compuse si atributelor repetitive. Exemple: Ex. 1: Tabelul VANZARI se afla in 1NF. Ex. 2: Fie tabelul STUDENT. STUDENT(cod_student, nume, prenume, adresa, telefon1, telefon2, telefon3, disciplina, nota)

STUDENT cod_ nume student 201 Dima 202 203

prenume Ion

adresa

telefon1 0251_ 432198 0251_ 595322 0251_ 546229

telefon2 0745_ 560921 0722_ 233279 0744_ 560988

telefon3 051_ 415672 051_ 149778

disciplina Fizica Engleza Medicina

nota 9 8 10

str. Unirii, nr. 10 Vasile Dragos str. Cuza, nr. 22 Marinescu Anisoara str. C_Buc, nr. 11

Acest tabel nu este in 1NF deoarece contine un atribut compus (adresa) si un grup de atribute repetitive (telefon1, telefon2, telefon3). In urma aplicarii algoritmului 1NF se obtin tabelele (aflate amandoua in 1NF): STUDENT_1 (cod_student, nume, prenume, strada, nr, disciplina, nota) TELEFON (cod_student, telefon) cod_ student 201 202 203 nume Dima Vasile Marinescu STUDENT_1 prenume strada Ion Dragos Anisoara cod_ student 201 201 201 202 202 202 203 203 Unirii Cuza C_Bucuresti nr 10 22 11 disciplina Fizica Engleza Medicina nota 9 8 10

TELEFON telefon 0251_432198 0745_560921 0251_415672 0251_195322 0722_233279 0251_149778 0251_146229 0744_160988

4.3. A doua forma normala (2NF - Second Normal Form) Definitie: Un tabel relational R este in a doua forma normala (2NF) daca si numai daca: - R este in 1NF - Orice coloana care depinde partial de o cheie a lui R este inclusa in acea cheie. Deci, 2NF nu permite dependentele functionale partiale fata de cheile tabelului, cu exceptia dependentelor triviale, de incluziune.

Regula de descompunere a tabelului: Fie R(K1, K2, X, Y) un tabel relational unde K1, K2, X si Y sunt submultimi de coloane ale lui R astfel incat K1 K2 este o cheie a lui R, iar K1 X este o dependenta functionala totala. Daca X K1 atunci tabelul este deja in 2NF, altfel tabelul R poate fi descompus prin proiectie in R1(K1, K2, Y) avand cheia K1 K2 si R2(K1, X) avand cheia primara K1. Aceasta descompunere conserva si datele si dependentele functionale. Algoritmul 2NF: 1. Pentru fiecare set de coloane X care depinde functional partial de o cheie K, K X, si care nu este inclus in K, se determina K1 K un subset al lui K, astfel incat dependenta K1 X este totala si se creaza un nou tabel R1(K1, X), adica un tabel format din determinantul K1 si determinatul X al acestei dependente. 2. Daca in tabelul R exista mai multe dependente totale ca mai sus cu acelasi determinant, atunci pentru acestea se creeaza un singur tabel format din determinant (luat o singura data) si din toti determinatii dependentelor considerate. 3. Se elimina din tabelul initial R toate coloanele X care formeaza determinatul dependentelor considerate. 4. Se determina cheia primara a fiecarui tabel nou creat, R1. Aceasta va fi K1, determinantul dependentelor considerate. 5. Daca noile tabele create contin alte dependente partiale, atunci se merge la pasul 1, altfel algoritmul se termina. Exemplu: Pentru tabelul VANZARI cheia primara este: (cod_comanda, cod_articol). Exista urmatoarele dependente functionale totale fata de componentele cheii primare care sunt, in acelasi timp, numai dependente functionale partiale fata de cheie: (cod_comanda) (data, cod_client, nume_client, nr_telefon) (cod_articol) (nume_articol, cost_articol) In prima faza vom aplica 2NFA pentru a crea un nou tabel ARTICOL cu determinantul cod_articol si determinatii nume_articol si cost_articol, alaturi de tabelul ramas VANZARI_1: VANZARI_1(cod_client, nume_client, nr_telefon, cod_comanda, data, cod_articol, cantitate) ARTICOL (cod_articol, nume_articol, cost_articol) cod_ client A1 A1 A2 A2 A2 A1 A3 nume_ client Popescu Popescu Ionescu Ionescu Ionescu Popescu Marinescu VANZARI_1 nr_ cod_ data cod_ cantitate telefon comanda articol 415355 C1 08.10.01 P1 2 415355 C1 08.10.01 P3 1 596322 C2 09.10.01 P1 3 596322 C2 09.10.01 P3 2 596322 C2 09.10.01 P2 1 415355 C3 10.10.01 P3 3 546229 C4 10.10.01 P1 1 ARTICOL cod_ nume_ articol articol P1 camasa P2 pantaloni P3 tricou cost_ articol 400000 800000 200000

VANZARI_1 M VANZARI 1 ARTICOL In cea de a 2-a faza vom aplica 2NFA tabelului VANZARI_1 pentru a crea un nou tabel COMANDA cu determinantul cod_comanda si determinatii data, cod_client, nume_client si nr_telefon, alaturi de tabelul ramas VANZARI_2: COMANDA (cod_comanda, data, cod_client, nume_client, nr_telefon) VANZARI_2 (cod_comanda, cod_articol, cantitate) COMANDA cod_ data comanda C1 08.10.01 C2 09.10.01 C3 10.10.01 C4 10.10.01 VANZARI_2 cod_ cod_ comanda articol C1 P1 C1 P3 C2 P1 C2 P3 C2 P2 C3 P3 C4 P1 cod_ client A1 A2 A1 A3 cantitate 2 1 3 2 1 3 1 COMANDA 1 VANZARI_1 M VANZARI_2 4.4. A treia forma normala (3NF - Third Normal Form) Definitie_1: Un tabel relational R este in a treia forma normala (3NF) daca si numai daca: - R este in 2NF - Pentru orice coloana A necontinuta in nici o cheie a lui R, daca exista un set de coloane X astfel incat X A, atunci fie X contine o cheie a lui R, fie A este inclusa in X. nume_ client Popescu Ionescu Popescu Marinescu nr_ telefon 415355 596322 415355 546229

Obs.: A doua conditie din definitie interzice dependentele functionale totale fata de alte coloane in afara celor care constituie chei ale tabelului. Prin urmare, un tabel este in 3NF daca orice coloana care nu este continuta intr-o cheie, depinde de cheie, de intreaga cheie si numai de cheie. Daca exista astfel de dependente functionale trebuie efectuate noi descompuneri ale tabelelor. Tinand cont de definirea notiunii de dependenta functionala tranzitiva (4.1.) se poate formula: Definitie_2: Un tabel relational R este in a treia forma normala (3NF) daca si numai daca: - R este in 2NF - Orice coloana necontinuta in nici o cheie a lui R nu este dependenta tranzitiv de nici o cheie a lui R. Regula de descompunere pentru 3NF fara pierdere de informatie: Fie R(K, X, Y, Z) un tabel relational unde K este o cheie a lui R, iar X, Y si Z sunt submultimi de coloane ale lui R. a) Daca exista dependenta tranzitiva K X Y, atunci R se poate descompune in R1(K, X, Z) avand cheia K si R2(X, Y) avand cheia X. b) Fie K1 K o parte a cheii K astfel incat exista dependenta tranzitiva K X1 Y, unde X1 = K1 X. In acest caz, R poate fi descompus in R1(K, X, Z) avand cheia K si R2 (K1, X, Y) avand cheia K1 X. Algoritmul 3NF: 1. Pentru fiecare dependenta functionala tranzitiva K X Y, unde K si X nu sunt neaparat disjuncte, se transfera coloanele din X si Y intr-un nou tabel. 2. Se determina cheia primara a fiecarui nou tabel creat la pasul 1, aceasta fiind formata din coloanele din X. 3. Se elimina din tabelul initial coloanele din Y. 4. Daca tabelele rezultate contin alte dependente tranzitive, atunci se merge la pasul 1, altfel algoritmul se termina. Obs.: - Descompunerile dupa regula de mai sus conserva atat datele cat si dependentele functionale, determinantul si determinatul dependentelor eliminate regasindu-se in tabelele nou create. - Algoritmul 3NFA permite aducerea in 3NF a unui tabel relational aflat in 2NF prin eliminarea dependentelor functionale tranzitive. Exemple: Ex. 1 pentru cazul a): Referitor la exemplul de mai sus (VANZARI), se observa ca tabelele VANZARI_2 si ARTICOL sunt in 3NF insa tab. COMANDA nu este, datorita dependentei functionale tranzitive: (cod_comanda) (cod_client) (nume_client, nr_telefon) Aplicand 3NFA tabelului COMANDA se obtin tabelele: COMANDA_1 si CLIENT. COMANDA_1 (cod_comanda, data, cod_client) CLIENT (cod_client, nume_client, nr_telefon) COMANDA_1 cod_comanda data cod_client C1 08.10.01 A1 C2 09.10.01 A2 C3 10.10.01 A1 C4 10.10.01 A3 CLIENT cod_client nume_client A1 Popescu A2 Ionescu A3 Marinescu nr_telefon 415355 596322 546229

COMANDA_1 M COMANDA 1 CLIENT In acest moment, in urma descompunerilor reprezentate in figura de mai sus, tabelul VANZARI nu mai are redundante in date. Ex. 2 pentru cazul b): Fie tabelul PROIECTE (cod_angajat, cod_proiect, rol_in_proiect, suma_obtinuta) care stocheaza date privind repartizarea pe proiecte a angajatilor unei firme. PROIECTE cod_angajat cod_proiect rol_in_proiect suma_obtinuta A1 P1 Programator 100000 A2 P1 Coordonator 150000 A3 P1 Programator 100000 A4 P1 Programator 100000 A1 P2 Programator 90000 A4 P2 Analist 140000 Daca presupunem ca suma obtinuta de un angajat depinde de proiectul la care lucreaza si de rolul pe care il are in acel proiect, vom avea dependenta functionala: (cod_proiect, rol_in_proiect) (suma_obtinuta) Aplicand regula de descompunere din cazul b) asupra tabelului PROIECTE se obtin tabelele PROIECTE_1 (cod_angajat, cod_proiect, rol_in_proiect) SUMA (cod_proiect, rol_in_proiect, suma_obtinuta) PROIECTE_1 cod_ cod_ angajat proiect A1 P1 A2 P1 A3 P1 A4 P1 A1 P2 A4 P2 rol_in_ proiect Programator Coordonator Programator Programator Programator Analist SUMA cod_ proiect P1 P1 P2 P2 rol_in_ proiect Programator Coordonator Programator Analist suma_ obtinuta 100000 150000 90000 140000

PROIECTE_1 M PROIECTE 1 SUMA

4.5. Forma normal Boyce-Codd (BCNF Boyce-Codd Normal Form) De obicei bazele de date utilizeaz tabele care necesit doar algoritmii primelor 3 forme normale pentru o normalizare complet a lor (1NF-3NF). Sunt totui cazuri n care tabele aflate n 3NF mai prezint redundane n date i anomalii la actualizare datorit prezenei unor dependene funcionale non-cheie, fiind necesar trecerea la un nivel superior de normalizare. Urmtorul nivel de normalizare este Forma Normal Boyce-Codd (BCNF Boyce-Codd Normal Form). Definiie: Un tabel relaional R este n forma normal Boyce-Codd (BCNF) dac i numai dac pentru orice dependen funcional total X A, unde X este un subset de coloane ale lui R, iar A este o coloan neconinut n X, X este o cheie a lui R. Algoritmul BCNF: - Pentru fiecare dependen non-cheie X Y, unde X i Y sunt subseturi de coloane ale lui R, se creeaz 2 tabele: R1 format din coloanele X i Y i R2 format din coloanele iniiale ale lui R, mai puin coloanele Y. - Dac tabelele rezultate conin alte dependene non-cheie, atunci se merge la pasul 1, altfel algoritmul se termin. Observaii: - Putem spune c un tabel R este n BCNF dac fiecare determinant al unei dependene funcionale este cheie candidat a lui R. - Orice tabel aflat n BCNF este i n 3NF, reciproca fiind fals. - Orice tabel care are cel mult 2 coloane este n BCNF. - Descompunerea prin algoritmul BCNFA se face fr pierdere de informaie, dar nu se garanteaz pstrarea dependenelor funcionale. Exemplu: O companie de transporturi efectueaz curse ntre diferite orae. Compania dispune de un numr de oferi i un numr de autobuze. ntr-o curs pot fi solicitai unul sau mai muli oferi i unul sau mai multe autobuze (ex.: n prima jumtate a cursei conduce un ofer un autobuz i n a 2-a jumtate, alt ofer, alt autobuz). ntr-o curs un ofer trebuie s conduc un singur autobuz. Fiecare autobuz al companiei este repartizat la un singur ofer, prin urmare numai acesta poate s l conduc. Acest sistem este modelat prin tabelul: TRANSPORTURI (cod_curs, cod_ofer, cod_autobuz, loc_plecare, loc_sosire) cod_curs C1 C1 C2 C2 C3 cod_ofer S1 S2 S2 S1 S1 cod_autobuz A1 A2 A2 A3 A1 loc_plecare Constana Bucureti Brasov Sibiu Bucuresti loc_sosire Bucureti Brasov Sibiu Bucuresti Craiova

Cheile: (cod_curs, cod_ofer) i (cod_curs, cod_autobuz) Dependenele care rezult din acest tabel sunt: (cod_curs, cod_ofer) (cod_autobuz, loc_plecare, loc_sosire) (cod_autobuz) (cod_ofer)

Prima dependen asigur nivelul 3NF, iar a 2-a este o dependen non-cheie care genereaz redundanele: (S1, A1) i (S2, A2) ce apar de cte 2 ori. Prin aplicarea algoritmului BCNFA rezult tabelele: TRANSPORTURI_1 (cod_curs, cod_ofer, loc_plecare, loc_sosire) i AUTOBUZ (cod_autobuz, cod_ofer) TRANSPORTURI_1 cod_curs cod_ofer C1 S1 C1 S2 C2 S2 C2 S1 C3 S1 loc_plecare Constana Bucureti Brasov Sibiu Bucuresti loc_sosire Bucureti Brasov Sibiu Bucuresti Craiova AUTOBUZ cod_autobuz cod_ofer A1 S1 A2 S2 A3 S1

Descompunerea s-a fcut fr pierdere de informaie, dar a fost pierdut dependena funcional (cod_curs, cod_ofer) (cod_autobuz). 4.6. A 4-a form normal (4NF Fourth Normal Form) Definiii: Fie R un tabel relaional, X i Y dou submulimi de coloane ale lui R i Z = R X Y mulimea coloanelor din R care nu sunt nici n X nici n Y. Spunem c exist o dependen multivaloare Y de X sau c X determin multivaloare pe Y (notaia folosit: XY), dac, pentru orice valoare a coloanelor lui X, sunt asociate valori pentru coloanele din Y care nu sunt corelate n nici un fel cu valorile coloanelor lui Z. R u v s t X x x x x Y y1 y2 y1 y2 Z z1 z2 z2 z1

Cu alte cuvinte X Y dac i numai dac oricare ar fi u i v dou rnduri ale lui R cu u(X) = v(X), exist s i t dou rnduri ale lui R a.. s(X) = u(X) s(Y) = u(Y) s(Z) = v(Z) t(X) = u(X) t(Y) = v(Y) t(Z) = u(Z) Obs.: - Dac XY atunci i XZ. - Dependena multivaloare se mai numete i multidependen. - Orice dependen funcional este i o dependen multivaloare, reciproca nefiind n general adevrat. Definiie 4NF Un tabel relaional R este n 4NF dac i numai dac: - R este n BCNF - Orice dependen multivaloare XY este de fapt o dependen funcional X Y. sau: Un tabel relaional R este n 4NF dac i numai dac pentru orice dependen multivaloare XY exist o cheie a lui R inclus n X.

Echivalena definiiilor: Deoarece Orice dependen multivaloare XY este de fapt o dependen funcional X Y, iar BCNF a eliminat orice dependen non-cheie nseamn c X conine o cheie a lui R. Regul de descompunere: Fie R(X,Y,Z) un tabel relaional n care exist o dependen multivaloare XY astfel nct X nu conine nici o cheie a lui R. Atunci tabelul R poate fi descompus prin proiecie n 2 tabele R1(X, Y) i R2(X, Z). Algoritmul 4NF: 1. Se identific dependenele multivaloare XY pentru care X i Y nu conin toate coloanele lui R i X nu conine nici o cheie a lui R. 2. Se nlocuiete tabelul iniial R cu 2 tabele: unul format din coloanele (X, Y), iar cellalt format din toate coloanele iniiale, mai puin coloanele Y. 3. Dac tabelele rezultate conin alte dependene multivaloare se revine la pasul 1, altfel algoritmul se termin. Obs.: 4NF elimin relaiile M:M independente (elimin dependenele funcionale multivaloare). Exemplu: Fie o companie de taxiuri care are mai muli angajai i mai multe maini, de diferite tipuri. Un angajat poate cunote mai multe limbi strine i poate conduce mai multe maini. n legtur cu sosirea unei delegaii de persoane strine n ora managerul companiei cere o situaie cu oferii angajai, cunotinele de limbi strine i mainile de care dispun. Aceast situaie este modelat prin intermediul tabelului ANGAJAI cod_angajat A1 A1 A1 A1 A1 A1 A2 A2 limba_strin
M M

limba_strin Englez Francez Spaniol Englez Francez Spaniol Englez Rus


M

automobil Cielo Cielo Cielo Tico Tico Tico Matiz Matiz


M

cod_angajat

automobil

cod_angajat limb_strin i cod_angajat main, dar niciuna dintre limb_strin i main, nu depinde funcional de cod_angajat. Aplicnd algoritmul de mai sus (4NFA) obinem tabelele ANGAJAI_1 i ANGAJAI_2 aflate fiecare dintre ele n 4NF. Exist dependenele multivaloare ANGAJAI_1(cod_angajat, limba_strin) ANGAJAI_2(cod_angajat, automobil)

ANGAJAI_1 ANGAJAI_2 cod_angajat limba_strin cod_angajat automobil A1 Cielo A1 Englez A1 Tico A1 Francez A2 Matiz A1 Spaniol A2 Englez A2 Rus 4.7. A 5-a form normal (5NF Fifth Normal Form) Se ntlnete destul de rar n practic i are rolul de a elimina relaiile M:M dependente care pot introduce redundane n date. Regulile de descompunere stabilite pentru formele normale 1NF-4NF permiteau descompunerea prin proiecie a unui tabel relaional R n 2 tabele relaionale R1 i R2. Exist ns tabele relaionale care nu pot fi descompuse n 2 tabele, ci n 3 sau mai multe, fr pierdere de informaie. Astfel de situaii sunt tratate de 5NF. S-a introdus conceptul de joindependen sau dependen la compunere sau dependen de uniune. Definiie pentru join-dependen: Fie R un tabel relaional i R1, R2, ., Rn o mulime de tabele relaionale care nu sunt disjuncte (au coloane comune) a. . reuniunea coloanelor din R1, R2, ., Rn este mulimea coloanelor din R. Spunem c exist join-dependena notat *( R1, R2, ., Rn) dac R se descompune prin proiecie n R1, R2, ., Rn fr pierdere de informaie, adic tabelul iniial poate fi reconstruit prin compunerea natural pe atributele comune ale tabelelor rezultate. Join-dependena este o generalizare a dependenei multivaloare. Dependena multivaloare corespunde join-dependenei cu 2 elemente. - Dac avem R(X, Y, Z) i exist dependena multivaloare XY atunci exist i join-dependena *((X Y), X Z)). - Dac avem join-dependena *(R1, R2) atunci exist i dependena multivaloare (R1 R2) (R1 (R1 R2)). Definiie pentru 5NF: Un tabel relaional R este n 5NF dac i numai dac orice join-dependen *( R1, R2, ., Rn) este consecina cheilor candidate ale lui R, adic fiecare dintre R1, R2, ., Rn include o cheie candidat a lui R. Exemplu: Fie tabelul LUCRTOR_ATELIER_PRODUS (cod_lucrtor, cod_atelier, cod_produs) cod_ cod_ cod_ lucrtor atelier produs L1 A1 P1 L2 A1 P2 L2 A1 P1 L2 A2 P1 cod_atelier M M M cod_lucrator M cod_produs M M

Aparent acest tabel (care este in 4NF) este o relatie de tip 3 intre lucrator, atelier si produs. Daca insa presupunem ca intre lucratorsi atelier, lucrator si produs, atelier si produs exista relatii M:M, atunci in tabel pot exista redundante in date: tuplurile (L2, A1), (L2, P1) si (A1, P1) apar de 2 ori. Acestea pot fi eliminate prin descompunerea tabelului LUCRATORI in 3 tabele: LUCRATOR_ATELIER (cod_lucrtor, cod_atelier) LUCRATOR_PRODUS (cod_lucrtor, cod_produs) ATELIER_ PRODUS (cod_atelier, cod_produs) LUCRATOR_ATELIER cod_ cod_ lucrtor atelier L1 A1 L2 A1 L2 A2 LUCRATOR_PRODUS cod_ cod_ lucrtor produs L1 P1 L2 P2 L2 P1 ATELIER_ PRODUS cod_ cod_ atelier produs A1 P1 A1 P2 A2 P1

Obs.: Tabelul initial LUCRATOR_ATELIER_PRODUS nu poate fi reconstituit din compunerea a doar doua din tabelele componente. In continuare sunt reprezentate tabelele rezultate prin compunerea, doua cate doua, a tabelelor de mai sus: R12 din compunerea tabelelor LUCRATOR_ATELIER si LUCRATOR_PRODUS R13 din compunerea tabelelor LUCRATOR_ATELIER si ATELIER_ PRODUS R14 din compunerea tabelelor LUCRATOR_PRODUS si ATELIER_ PRODUS cod_ lucrtor L1 L2 L2 L2 L2 R12 cod_ atelier A1 A1 A1 A2 A2 cod_ produs P1 P2 P1 P2 P1 cod_ lucrtor L1 L1 L2 L2 L2 R23 cod_ atelier A1 A2 A1 A1 A2 cod_ lucrtor L1 L1 L2 L2 L2 cod_ produs P1 P1 P2 P1 P1 R13 cod_ atelier A1 A1 A1 A1 A2 cod_ produs P1 P2 P2 P1 P1

In schimb, tabelul initial poate obtinut din compunerea fiecaruia dintre aceste tabele cu tabelul care lipseste, de exemplu prin compunerea tabelelor R12 cu ATELIER_ PRODUS. 4.8. Denormalizarea BD Denormalizarea unei BD reprezinta procesul invers operatiei de normalizare si duce la cresterea redundantei datelor. Prin aceasta se doreste, in principal, cresterea performantei si simplificarea programelor de interogare a datelor.

Obs.: - Denormalizarea se face numai dupa o normalizare corecta. - Denormalizarea se face printr-o selectare strategica a structurilor care aduc avantaje semnificative - Denormalizarea trebuie insotita de masuri suplimentare de asigurare a integritatii datelor. a) Cresterea performantei Un caz frecvent intalnit in interogarea BD este cazul unor operatii sau calcule foarte des utilizate. Ex.: Fie tabelele care modeleaza tranzactiile unui magazin care vinde articole la comanda.: VANZARI_2 (cod_comanda, cod articol, cantitate) ARTICOL (cod_articol, nume_articol, cost_articol) COMANDA_1 (cod_comanda, data, cod_client) CLIENT (cod_client, nume_client, nr_telefon) Sa presupunem ca majoritatea rapoartelor cerute de conducerea magazinului se refera la cantitatea totala vanduta intr-o luna pentru fiecare articol. In acest caz este util un tabel suplimentar: ARTICOL_LUNA (cod_articol, luna, cantitatea_totala) Utilizarea acestui tabel suplimentar ceeaza avantajul important al unei interogari usoare si rapide, dar si dezavantajul cresterii redundantei datelor fiind, in acelasi timp, periclitata integritatea datelor. Solutia gasita este atasarea la tabelele VANZARI_2 si COMANDA_1 de declansatoare (trigger-e) care se activeaza dupa fiecare modificare data de INSERT, UPDATE, DELETE. Un efect produs: incetinirea operatiilor de actualizare. b) Simplificarea codului pentru manipularea datelor Exemplu: Fie tabelul STOCURI utilizat de o firma pentru inregistrarea cantitatilor de materiale existente in fiecare din depozitele sale. STOCURI (cod_depozit, cod_material, nume_material, cantitate) Se cere aflarea tuturor depozitelor in care exista ciocolata. Dupa normalizare avem: STOCURI_1 (cod_depozit, cod_material, cantitate) MATERIAL (cod_material, nume_material) Interogarea in SQL va fi: - varianta nenormalizata: SELECT cod_depozit, cantitate FROM stocuri WHERE nume_material = ciocolata; - varianta normalizata: SELECT cod_depozit, cantitate FROM stocuri_1, material WHERE stocuri_1.cod_material = material.cod_material AND nume_material = ciocolata; O solutie care rezolva problema conta in a crea vederi bazate pe tabele normalizate. Ex: CREATE VIEW stocuri AS SELECT cod_depozit, stocuri_1.cod_material, nume_material, cantitate FROM stocuri_1, material WHERE stocuri_1.cod_material = material. cod_material;

S-ar putea să vă placă și