Sunteți pe pagina 1din 4

Forma normal 4 (FN4) prof. dr. ing.

Mircea Petrescu
Pentru a nelege FN4, fie o relaie cu 2 DMV. Relaia este DPC, de la Departament=Dept, Proiecte, Componente=Comp. Iat o reprezentare a relaiei DPC n form nenormalizat (prima dat cnd folosim o astfel de notaie pentru o relaie nenormalizat): DPC DPC Dept Proiecte Comp Dept Proiecte Comp D1 Pr1 C1 D1 Pr1 C1 Pr2 C2 D1 Pr1 C2 D2 Pr3 C2 Iar prin D1 Pr2 C1 normalizare: Pr4 C4 D1 Pr2 C2 Pr5 D2 Pr3 C2 Pr2 D3 C5 D2 Pr3 C4 C6 D2 Pr4 C2 D2 Pr4 C4 D2 Pr5 C2 D2 Pr5 C4 D3 Pr2 C5 D3 Pr2 C6 Din forma nenormalizat se vede uor c avem: DeptProiecte, DeptComponente. Se vede c aa cum este conceput aplicaia, proiectele nu determin componentele (cum ar prea natural, chiar dac nu obligatoriu), deci nu avem DF ProiectComp. Departamentele menin un stoc de componenete i ele dezvolt proiectele care pot folosi unele din componentele disponibile sau toate. Relaia DPC are cheia format din toate atributele sale, deci este n FNBC. Relaia DPC prezint urmtoarele anomalii: 1. Anomalii de inserare. Dac un departament, de exemplu D2, adaug o component nou C7 n stocul su, aceasta va face necesar adugarea mai multor tupluri n cazul nostru trei, cte un tuplu pentru fiecare proiect al departamentului, pentru aceeai component C7. 2. Anomalii de eliminare = reprezint contrariul anomaliilor de inserare prin faptul c atunci cnd o component este eliminat, trebuie eliminate, de asemenea, toate tuplurile care conin acea component pentru fiecare proiect al departamentelor. 3. Anomalii de actualizare. Schimbrile (modificrile) care intervin ntr-un proiect sau pentru o component (de pild, schimbarea numrului), vor face necesare mai multe actualizri (modificri), ntr-un numr de tupluri egal cu numrul de valori ale celuilalt atribut independent. De exemplu, dac numele proiectului Pr2 devine Pr9, vor trebui actualizate toate tuplurile care conin valori pentru atributul Comp, pentru departamentul corespunztor. n exemplul de mai sus, vor trebui schimbate tuplurile al treilea, al patrulea i ultimele dou tupluri ale relaiei. Aadar, anomaliile de mai sus determin o explozie a numrului de tupluri. Putem evita aceast comportare prin descompunerea relaiei DPC n: DP(Dept, Proiecte) i DC (Dept, Comp). DP DC Dept Proiecte Dept Comp D1 Pr1 D1 C1 D1 Pr2 D1 C2 D2 Pr3 D2 C2 1

D2 D2 D3

Pr4 Pr5 Pr2

D2 D3 D3

C4 C5 C6

n acest mod, am convertit schema de relaie din FNBC n FN4. Pe baza componentelor de mai sus, putem defini FN4 a unei scheme de relaie ca fiind o schem de relaie n FNBC, n care nu pot exista dou sau mai multe DMV care nu sunt totodat i DF. Sau, altfel spus, partea stng (determinantul) a fiecrei DMV netriviale trebuie s conduc la o schem de relaie separat. Cu alte cuvinte, n cazul exemplului nostru, n care aveam: DeptProiecte, DeptComponente, am luat fiecare pereche AB i am construit o schem de relaie AB, cu condiia ca AB s fie netrivial. Forma Normal 5 (FN5) Vom (modifica) schimba coninutul relaiei DPC normalizate folosite n prezentarea FN4, astfel nct s nu mai prezinte DMV. Numele noii relaii obinute o s fie DPRC. DPRC Dept Proiecte Comp Schema de relaie DPRC este n FNBC, deoarece cheia sa conine toate atributele. De asemenea, DPRC D1 Pr1 C1 este n FN4, deoarece nu conine DMV. D1 Pr1 C2 D1 Pr2 C2 D2 Pr3 C2 D2 Pr4 C2 D2 Pr4 C4 D2 Pr5 C4 D3 Pr2 C5 Pe relaia de mai sus, vom efectua acum operaia de proiecie i obinem relaiile DPR=(Dept, Proiecte), DC=(Dept, Comp) i PRC=(Proiecte,Comp): DPR DC PRC Dept Proiecte Dept Comp Proiecte Comp D1 Pr1 D1 C1 Pr1 C1 D1 Pr2 D1 C2 Pr1 C2 D2 Pr3 D2 C2 Pr2 C2 D2 Pr4 D2 C4 Pr3 C2 D2 Pr5 D3 C5 Pr4 C2 D3 Pr2 Pr4 C4 Pr5 C4 Pr2 C5 Examinnd relaiile obinute, observm c nu exist posibilitatea de a reconstrui DPRC prin operaiuni de jonciune, pe niciuna din perechile de relaii de mai sus. Prin operaiuni de jonciune, vor rezulta jonciuni cu pierderi. Reprezentm mai jos numai tuplurile nelegate ale acestor jonciuni: DPR >< DC DC >< PRC DPR >< PRC D1 Pr2 C1 D1 Pr3 C2 D3 Pr2 C2 D2 Pr3 C4 D1 Pr4 C2 D2 Pr1 C2 D2 Pr5 C2 D2 Pr2 C2 Niciunul din tuplurile de mai sus nu exist n relaia DPRC. Pentru a reconstrui DPRC fr pierderi, trebuie s efectum jonciunea tuturor celor trei scheme: DPR >< DC >< PRC . 2

Faptul c o relaie poate fi reconstruit fr pierderi din unele proiecii ale sale este cunoscut ca dependen joncional. Dac jonciunile includ i relaia, avem de a face cu o dependen joncional trivial. Preferm o schem cu DPR, DC i PRC n loc de DPRC, deoarece relaiile descompuse au cardinalul inferior celui al relaiei DPRC (sau egal cu acesta). Aceasta nseamn c DPRC va conduce la anomalii de actualizare datorit redundanei sale, deoarece DPRC, dei este n FNBC i n FN4, nu este n FN5 sau n Forma Normal Proiecie Jonciune (FNPJ). O relaie este n FN5 dac: - dependena joncional care reconstruiete schema original este o dependen joncional trivial, sau - fiecare relaie n dependena joncional constituie (cu toate atributele sale) o supercheie a relaiei originale. Deoarece avem dependena joncional DPR >< DC >< PRC , DPRC nu este n FN5 (niciuna din aceste relaii nu formeaz o supercheie pentru DPRC). Prin urmare, schema descompus cu DPR, DC i PRC este n FN5, ntruct aceste relaii satisfac oricare din condiii (de fapt, ambele condiii) i ntruct fiecare relaie reprezint o dependen joncional pentru ea nsi, iar atributele sale sunt superchei (ne amintim c n acest exemplu toate cele trei relaii au cheile formate din toate atributele lor). Forma Normal Domeniu-Cheie (FNDC) FN5 privete dependenele relativ obscure. nc de studiat! Acum: Fiecare din formele normale prezentate pn acum au fost introduse treptat de cercettori pentru a elimina anomalii pe care le gseau n formele normale inferioare (n FN5 obscure!). De aceea, a aprut ideea de a gsi o form normal n care s nu apar anomalii de nici un fel. Aa s-a nscut FNDC n 1981 (Fagia). Definiii: a) constrngere n sens foarte general: orice legtur asupra valorilor statice ale atributelor, suficient de precis, pentru a putea afirma c este adevrat sau fals. Exemple: DF, DMV, restricii interne relaiei (de exemplu, privind forma unor atribute vom vedea un exemplu). b) cheie identificator unic al unui tuplu; c) domeniu o descriere a valorilor admise pentru un atribut; are dou pri: o descriere fizic i o descriere semantic, sau logic. Descrierea fizic = mulimea valorilor pe care le poate avea atributul. Descrierea semantic se refer la nelesul atributului. Definiia neformal a FNDC: o schem de relaie este n FNDC dac prin introducerea (satisfacerea) restriciilor de cheie i de domeniu, este determinat satisfacerea tuturor celorlalte constrngeri. n practica conceperii, a implementrii i exploatrii bazei de date, prin forarea restriciilor de cheie i de domeniu, nu apar anomalii i relaiile sunt n FNDC. FNDC este o problem practic. Nu sunt cunoscui algoritmi pentru construirea unei scheme n FNDC este mai mult o art dect o tiin. Exemplu: Relaia Student(Ids, Anul, Cmin, Chirie) Cheia Ids (Identificator student). Constrngeri: CminChirie, Ids nu trebuie s nceap cu digitul 1. 3

Dac putem exprima contrngerile de mai sus ca fiind o consecin logic a definiiilor privind cheia i domeniile, atunci conform unei teoreme a lui Fagin putem fi siguri c nu vor fi (nu vor aprea) anomalii de modificare (de actualizare). Pentru a fora constrngerea c Ids nu ncepe cu 1, vom defini pur i simplu domeniul pentru Ids astfel nct s in seama de aceast condiie: Aici definiia domeniului pentru Ids: CDDD, unde C este un digit zecimal 1, iar D este digit zecimal. Apoi, trebuie s facem astfel nct constrngerea CminChirie s fie o consecin logic a cheilor. Aadar: dac atributul Cmin ar fi el nsui o cheie, atunci CminChirie ar fi o consecin logic a unei chei. Dar, n relaia student, atributul Cmin nu poate fi cheie, deoarece n aceeai cldire a cminului locuiesc mai muli studenti. Ca urmare, o soluie ar putea fi ca atributul Cmin s fie o cheie a propriei sale relaii. Atunci, definim relaia ca schema Cmin_Chirie, n care atributele sunt Cmin i Chirie, iar atributul Cmin este cheie. Prin introducerea noii relaii, putem elimina atributul Chirie din relaia Student. Mai jos avem definiiile finale pentru domenii i relaii. Definiii de domeniu: Ids = CDDD, unde C = digit zecimal 1, D = digit zecimal Anul (I, II, III, IV) Cmin: CHAR(4) Chirie: DEC(5) Definiii de scheme de relaie i chei: Student (Ids, Anul, Cmin), cheie: Ids Cmin_Chirie (Cmin, Chirie), cheie: Cmin Schemele de relaie sunt n FNDC, potrivit definiiei formulate anterior (Fagin).