Sunteți pe pagina 1din 11

Laborator 2

Normalizarea bazei de date

2.1. Necesitatea normalizrii

Cnd proiectm o baz de date, dorina noastr este de a reprezenta ct mai


corecte informaiile i s diminum ct mai mult posibilitatea de a ajunge la
informaii eronate (dac nu putem elimina de tot acest neajuns). Pentru a ajunge
la aceast performan, trebuie s folosim normalizarea.
Definiie:
Normalizare: O tehnic de generare a unor relaii co proprietiile dorite, n
scopul memorrii corecte a datelor unei ntreprinderi.
Procesul de normalizare prima dat a fost introdus de E. F. Codd (1972).
Iniial s-au propul trei forme normale, numerotate de al unu la trei. Mai trziu s-a
inclus nc o form normal, numit Boyce-Codd, dup numele celor care l-au
introdus: R. Boyce i E. F. Codd.
Formele normale cele mai folosite sunt: forma normal 3 i forma normal
Boyce-Codd. Exist i forme normale mai tari - forma normal 4 (4NF) i forma
normal 5 (5NF) - dar aceste se folosesc foarte rar.
Procesul de normalizare este o metod formal de identificare a relaiilor
bazate pe chei primare (sau chei candidat n cazul BCNF) i dependenele
funcionale cu atributele asociate. Normalizarea d posibilitatea proiectantului
bazei de date, pentru a efectua o seria de teste pe baza de date, toate aceste teste
ducnd la prevenirea posibilitii de a aprea anomalii la actualizarea bazei de
date.
Pentru a ilustra procesul de normalizare, vom folosii exemple din sistemul
informatic Asociacie de locatari.

2.2. Redundana n informaii i anomalii la actualizare

Partea cea mai important a proiectrii bazei de date este de a grupa


atributele n relaii cu scopul de a minimiza redundana n informaii i spaiul
ocupat de fiiere pe suportul magnetic.
Fie relaia Furnizori_Cheltuieli exemplificat mai jos. La exemple vom
simplifica atributele asociate entitiilor.

Cod Denumire Cod Nr. Cod Denumire Valoare


Furn. fiscal Crt. Chelt. Cheltuial
F100 Romgaz R1234567 1 C15 Chelt pt. nclzire 1500000
F100 Romgaz R1234567 2 C16 Chelt pt. buctrii 500000
F110 Renel R7654321 3 C10 Chelt cu iluminatul 3000000
F110 Renel R7654321 4 C11 Chelt pt. func. liftului 200000
Figura 2.1 Relaia Furnizori_Cheltuieli

Dependenele funcionale pentru relaia Furnizori_Cheltuieli de mai sus sunt


urmtoarele:
Furnizori (Cod.Furn., Denumire, Cod fiscal)
Cheltuieli (Nr.Crt., Cod chelt., Cod.furn., Valoare)
Tip_cheltuiala (Cod.Chelt., Denumire chelt.)
Furnizori_Cheltuieli (Nr.Crt., Cod chelt., Cod furn., Denumire chelt.,
Denumire, Cod fiscal, Valoare)

n acest exemplu, informaia despre furnizor devine redundant. Detraliile


despre furnizor se repet la fiecare introducere a unei cheltuieli noi. n
dependenele funcionale specificate pentru entitatea Cheltuieli, apare doar codul
furnizorului. Analog, denumirea cheltuielii, apare i ea n plus fa de entitatea
Cheltuieli.
O alt problem serioas datorat redundanei bazei de date, sunt
problemele de actualizare a informaiei stocate. Aceste probleme se pot clasifica
n anomalii de inserare, modificare, sau tergere.

2.2.1. Anomalii de inserare

Anomaliile de inserare se pot clasifica n dou tipuri mari:


Pentru a adauga detaliile despre o cheltuial ctre un furnizor, n relaia
Furnizori_Cheltuieli trebuie obligatoriu adugate i detaliile despre furnizorul n
cauz, chiar dac el exist deja n baza de date. Aceast anomalie poate duce la
apariia aceluiai furnizor, avnd introduse detalii diferite n nregistrri diferite.
Pentru a aduga detaliile unui furnizor nou n relaia Furnizori_Cheltuieli,
trebuie neaprat adugat i o cheltuial pentru asociaia de locatari ctre acel
furnizor. n cazul n care nc nu a sosit factura de la furnizor, nu pot nregistra
nici o cheltuial i deci trebuie introduse date vide n locul cheltuieli. Cum Nr.Crt.
este cheia primar n relaia Furnizori_Cheltuieli, introducerea de date vide n
acest cmp va strica integritatea entitii.

2.2.2. Anomalii de tergere

n cazul tergerii ultimei cheltuieli a asociaiei de locatari ctre un furnizor,


se va terge i furnizorul. Deci toate detaliile introduse despre acel furnizor vor fi
pierdute, ceea ce duce la obligativitatea reintroducerii datelor la o nou folosire al
acelui furnizor. n cazul entitii separate pentru cheltuieli i furnizori, dac se
terge i ultima cheltuial ctre un furnizor, datele despre furnizor rmn totui n
entitatea Furnizori.
2.2.3. Anomalii de modificare

Dac n relaia Furnizori_Cheltuieli dorim s schimbm valoarea unui


atribut al unui furnizor, va trebui s schimbm datele la fiecare apariie a acelui
furnizor. De exemplu dac dorim s schimbm codul fiscal al furnizorului cu
codul F100, va trebui s achimbm acest atribut n dou locuri. Dac n timpul
modificrilor, care poate dura destul de mult, intervine i un incident n uema
cruia vor rmne nregistrri nemodificate, atunci baza de date devine
inconsistent. Aceast anomalie se poate evita prin folosirea a dou entiti
distincte precum Cheltuieli i Furnizori. n acest caz dac trebuie s modific un
atribut al unui furnizor, va trebui s-o modific doar ntr-un singur loc: n entitatea
Furnizori.

2.3. Dependene funcionale

Unul din cele mai importante concepte asociate normalizrii este


dependena funcional. Dependena funcional descrie relaia dintre atribute. n
acest capitol vom descrie conceptul de dependen funcional, urmnd ca n
capitolele urmtoare s descriem procesul de nlormalizare a bazei de date.

2.3.1. Definiia dependenei funcionale

Definiie:
Dependen funcional: Descrie relaia dintre atribute. De exemplu dac
atrubutul A este n relaia R cu atributul B, atunci atributul B este dependent
funcional de atributul A (notat: A B), dac orice valoarea al lui A este asociat
prin relaia R cu exact o valoare a atributul B.
Dependena funcional este o proprietate a semanticii atributelor n relaii.
Semantica indic atributele care sunt n relaie i specific dependenele
funcionale dintre atribute.
Considerm o relaie ntre dou atribute A i B, unde atributul B este
dependent funcional de atributul A (atributele A i B pot fi compuse din mai
multe atribute). Cu alte cuvinte, dac tim valorile cmpului A, atunci analiznd
valorile lui B n relaia cu A, vom considera c pentru valori diferite al lui A - care
fiind cheie, trebuie s aib valori diferite - avem valori diferite i pentru cmpul
B. Dependena funcional dintre dou cmpuri se reprezint grafic n urmtorul
mod:

Figura 2.2 Diagrama dependenei funcionale


Definiie: Determinant: Numim determinantul unei relaii funcionale,
atributul, sau mulimea atributelor din partea stng a sgeii.
n acest capitol vom ignora dependenele funcionale triviale, adic acele
relaii de tipul A B, n care B este dependent de un subset de atribute al lui A.
Pentru a exemplifica dependenele funcionale, considerm urmtorul exemplu:
Exemplu: Considerm atributele Cod furnizor i Denumire. Pentru un
anumit cod de furnizor, putem determina denumire acelui furnizor. Adic
denumirea este dependent funcional de cod furnizor. Dependena invers nu este
adevrat pentru c pot exista aceleai denumiri cu coduri diferite.
Relaia dintre cod furnizor i denumire este de 1:1, iar relaia invers este
de 1:M.

S identificm dependenele funcionale din relaia Furnizori_Cheltuieli


descris mai sus:
Nr. Crt., Cod Furn., Cod Chelt. Denumire
Nr. Crt., Cod Furn., Cod Chelt. Cod fiscal
Nr. Crt., Cod Furn., Cod Chelt. Denumire cheltuial
Nr. Crt., Cod Furn., Cod Chelt. Valoare
Cod Furnizor Denumire
Cod Furnizor Cod fiscal
Cod fiscal Denumire
Cod fiscal Cod Furnizor
Cod Chelt. Denumire cheltuial

n aceast relaie avem 9 dependene funcionale, care au determinantele


(Nr. Crt., Cod Furn., Cod Chelt.), Cod fiscal, Cod Furn. i Cod Chelt. Putem
evidenia aceste dependene i ntr-un alt format:

Nr.Crt., Cod Furn., Cod Chelt. Denumire,Cod fiscal, Denumire


cheltuial, Valoare
Cod Furn. Denumire, Cod fiscal
Cod fiscal Denumire, Cod Furn.
Cod Chelt. Denumire cheltuial

Pentru a identifica cheile candidate, trebuie s identificm atributul, sau


grupul de atribute care determin unic fiecare nregistrare al acestei relaii. Dac
avem mai mult de o cheie candidat, atunci va trebui s identificm i o cheie
primar. Toate atributele care nu aparin cheii primare, depind funcional de cheia
primar. n aceast ipostaz este grupul de atribute (Nr. Crt., Cod Furn., Cod
Chelt.). Atributele Cod Furn., Cod fiscal i Cod Chelt. Sunt determinani, dar nu
sunt chei candidat.
Conceptul de dependen funional este conceptul central al normalizrii,
ceea ce vom descrie n capitolele urmtoare.

2.4. Procesul de normalizare

Normalizarea este un proces formal de analiz a relaiilor bazate pe chei


primare (sau pe baza cheilor candidat n cazul BCNF). Normalizarea presupune
urmarea unor reguli prin care baza de date se poate normaliza pn la un anumit
grad. Dac o cerin nu este satisfcut, relaia trebuie dezcompus n mai multe
relaii, care individual satisfac cerinele formei normale.
Normalizarea se execut trecnd prin toate formele nornale, pn la forma
normal cerut. La proiectarea unei baze de date trebuie s ajungem cel puin la
forma normal unu, dar ca s evitm toate anomaliile descrise mai nainte, este
recomandat aducerea bazei de date la BCNF.
n figura urmtoare evideniem relaia dintre diversele forme normale.
Observm c unele din relaiile n 1NF este i n 2NF, dintre care unele n 3NF i
aa mai departe.

Figura 2.3. Ilustrarea grafic a relaiei dintre formele normale.

2.5. Forma Normal Unu (1NF)

nainte s discutm despre forma normal unu, vom da definiia stadiului


dinainte de aceast form normal.
Definiie:
Form Nenormalizat (UNF): O tabel care conine una sau mai multe
grupuri repetitive.
Definiie:
Forma Normal Unu (1NF): Relaie n care la intersecia oricrei linii cu
oricare coloan gsim un cmp care conine exact o valoare.

Incepem procesul de normalizare. Pentru nceput transferm datele de la


surs ntr-o tabel, care va fi o tabel nenormalizat. Pentru a transforma aceast
tabel n forma normal unu, identificm i tergem grupurile repetitive din tabel.
Grupurile repetitive sunt atribute, sau grup de atribute, pentru care avem diferite
valori pentru aceeasi valoare a cheii, ceea ce este n contradicie cu definiia cheii.
Eliminarea acestor grupuri repetitive se poate realiza n dou moduri:
Conform primei modaliti, eliminm grupurile repetitive, prin crearea altor
nregistrri, n care s fie introduse valorile din aceste grupuri, mpreun cu
celelalte valori ai atributelor din nregistrarea la care se lucreaz. Tabele astefel
rezultat va fi n form normal unu.
n a doua modalitate, fiecere valoare a grupurilor repetitive le copiem ntr-
o nou relaie mpreun cu cheia primar din tabela iniial. Putem avea mai multe
grupuri repetitive. n acest caz crem mai multe relaii noi. Aceste relaii noi,
precum i tabela normalizat vor fi n form normal unu.

De exemplu s lum relaia Furnizori_Cheltuieli:

Cod Denumire Cod Nr. Cod Denumire Valoare


Furn. fiscal Crt. Chelt. Cheltuial
F100 Romgaz R1234567 1 C15 Chelt pt. nclzire 1500000
F100 Romgaz R1234567 2 C16 Chelt pt. Buctrii 500000
F110 Renel R7654321 3 C10 Chelt cu iluminatul 3000000
F110 Renel R7654321 4 C11 Chelt pt. Func. liftului 200000

Figura 2.4. Tabela nenormalizat Furnizori_Cheltuieli.

n aceast tabel observm c pentru furnizorul Romgaz avem dou tipuri


de cheltuieli. Pentru a transforma aceast tabel n 1NF, trebuie s avem o singur
valoare la fiecare intersecie linie coloan.
n cazul primei modaliti, scriem repetiiile pe diferite rnduri iar coloanele
care nu conin repetiii, vor fii copiate pe fiecare rnd. Dup desprirea repetiiilor
pe mai multe rnduri, identificm o nou cheie.

Cod Nr. Cod Denumire Valoare


Furn. Crt. Chelt. Cheltuial
F100 1 C15 Chelt pt. nclzire 1500000
F100 2 C16 Chelt pt. Buctrii 500000
F110 3 C10 Chelt cu iluminatul 3000000
F110 4 C11 Chelt pt. func. Liftului 200000
Figura 2.5. Tabela Furnizori_Cheltuieli n 1NF, creat prin prima modaliate de
transformare.

n tabela normalizat, noua cheie va fii (Cod Furn., Nr. Crt., Cod Chelt.).
Normaliznd tabela iniial dup a doua modalitate, vom crea o a doua
tabel cu informaiile care nu se repet, mpreun cu cheia primar din tabela
iniial. Deci cele dou tabele vor fi urmtoarele:

Furnizori (Cod Furn., Denumire, Cod fiscal)


Cheltuieli (Cod Furn., Cod Chelt., Nr. Crt., Denumire cheltuial, Valoare)

Cele dou tabele astfel create sunt n 1NF:

Cod Denumire Cod Nr. Cod Denumire Valoare


Furn. fiscal Crt. Chelt. Cheltuial
F100 Romgaz R1234567 1 C15 Chelt pt. nclzire 1500000
F100 Romgaz R1234567 2 C16 Chelt pt. Buctrii 500000
F110 Renel R7654321 3 C10 Chelt cu iluminatul 3000000
F110 Renel R7654321 4 C11 Chelt pt. Func. liftului 200000

Cod Denumire Cod


Furn. fiscal
F100 Romgaz R1234567
F100 Romgaz R1234567
F110 Renel R7654321
F110 Renel R7654321

Figura 2.6. Relaia Cheltuial i Furnizor, create prin metoda a doua de


normalizare

Pentru a demonstra trecerea la forma normal doi i mai mari, vom folosii
relaia Furnizori_Cheltuieli, evideniat n figura 2.5.
2.6. Forma Normal Doi (2NF)

Forma normal doi se bazeaz pe conceptul de dependen funcional


total, ceea ce vom descrie n continuare.

2.6.1. Dependena funcional total

Definiie:
Dependena funcional total: Dac A i B sunt atributele unei relaii,
atunci B este total dependent funcional de atributul A, dac B este dependent
funcional de A, dar nu este dependent funcional de nici un subset al lui A.
De exemplu s lum urmtoarea dependen funcional:

Nr. Crt., Cod Chelt. Denumire cheltuial

Dependena funcional este corect, pentru c fiecare valoare al lui


(Nr. Crt., Cod Chelt.) determin unic denumirea cheltuielii, ns dependena nu
este total, pentru c Denumire cheltuial depinde funcional i de un subset al lui
(Nr. Crt., Cod Chelt.) i anume atributul Cod Chelt.

2.6.2. Definiia Formei Normale Doi

Forma normal doi trebuie verificat doar la relaiile care au cheie


compus pe poziie de cheie primar. Relaiile la care cheia primar se compune
dintr-un singul atribut, este n 2NF. Relaiile care nu sunt n forma normal doi,
pot suferii de anomaliile prezentate in capitolul 2.2. De exemplu dac n cazul
relaiei Furnizori_Cheltuieli vream s actualizm datele despre furnizorul F100,
trebuie s actualizm dou nregistrri.

Definiie:
Forma Normal Doi (2NF): O relaie este n forma normal doi, dac este
n forma normal unu i fiecare atribut care nu aparine cheii primare, este total
dependent funcional de cheia primar.
Vom demonstra aducerea la forma normal doi, folosind relaia
Furnizori_Cheltuieli evideniat n figura 2.5. Putem trece la forma normal doi
prin tergerea atributelor care nu depind total de cheia primar i trecrea lor ntr-
o alt tabel mpreun cu determinantul lor. Dup efectuarea acestor transformri,
vom avea urmtoarela relaii:
Relatia Cheltuieli
Cod Nr. Cod Valoare
Furn. Crt. Chelt.
F100 1 C15 1500000
F100 2 C16 500000
F110 3 C10 3000000
F110 4 C11 200000

Relaia Furnizori
Cod Denumire Cod
Furn. fiscal
F100 Romgaz R1234567
F100 Romgaz R1234567
F110 Renel R7654321
F110 Renel R7654321

Relaia Tip Cheltuial

Cod Denumire
Chelt. Cheltuial
C15 Chelt pt. nclzire
C16 Chelt pt. buctrii
C10 Chelt cu iluminatul
C11 Chelt pt. func. liftului

Figura 2.7. Relaiile rezultate dup trecerea la 2NF a relaiei


Furnizori_Cheltuieli

Relaiile rezultate au urmtoarea form:


Furnizori (Cod Furn., Denumire, Cod fiscal)
Tip cheltuial (Cod Chelt., Denumire cheltuial)
Cheltuieli (Nr. Crt., Cod Furn., Cod Chelt., Valoare)
2.7. Forma Normal Trei (3NF)

Forma normal doi chiar dac nu conine atta redundan ca forma


normal unu, totui exist cazuri n care pot aprea anomalii la actualizare. Aceste
anomalii apar din cauza redundanei generate de dependena tranzitiv.

2.7.1. Dependena tranzitiv

Definiie:
Dependen tranzitiv: Dac atributele A, B, C sunt n relaiile AB i
BC, atunci spunem c atributul C este dependent tranzitiv de atributul A, via B.

2.7.2. Definiia Formei Normale Trei

Definiie:
Forma Normal Trei (3NF): O relaie care este n form normal doi i nu
exist nici un atribut care s nu aparin cheii principale i care s fie tranzitiv
dependent de cheia principal.
n cazul existenei dependenei tranzitive, tergem coloanele care sunt
tranzitiv dependente de cheia primar i crem o relaie nou cu aceste coloane,
mpreun cu determinantul lor, adic cheia primar.
Examinnd relaiile n forma normal de mai sus, observm c nu exist
dependene tranzitive. Deci relaiile sunt n form normal trei.

2.8. Forma Normal Boyce-Codd (BCNF)

Baza de date trebuie broiectat astfel nct s nu conin dependene pariale


sau tranzitive, pentru c altfel ne putem confrunta cu anomalii.

2.8.1. Definiia Formei Normale Boyce-Codd

Forma normal Boyce-Codd este bazat pe cheile candidat din relaie. O


relaie cu o singur cheie candidat n form normal trei este i n form normal
Boyce-Codd.
Definiie:
Forma normal Boyce-Codd (BCNF): O relaie este n forma normal
Boyce-Codd dac i numai dac orice determinant din relaie este cheie candidat.
S cutm determinanii din exemplul de mai sus:

Cod Furn. Denumire, Cod fiscal


Cod Chelt. Denumire cheltuial
Nr. Crt., Cod Furn., Cod Chelt. Valoare
Toi cei trei determinani sunt i chei candidat. Deci exemplul de mai sus
este n form normal Boyce-Codd. Relaiile n form normal trei sunt n general
i n form normal Boyce-Codd. n cazul n care relaia nu este n form normal
Boyce-Codd, trecerea la BCNF se realizeaz prin tergerea din relaia iniial a
atributelor care sunt asociate unui determinant care nu este cheie candidat i
crearea unei noi relaii cu aceste atribute i determinantul lor.
Exist situaii cnd este foarte greu de descompus atributele, ca s ajungem
la BCNF. n aceste situaii este indicat rmnerea la forma normal trei.

2.9. S recapitulm procesul de normalizare (de la 1NF la BCNF)

Forma Normal Unu (1NF)


Trebuie s cutm toate interseciile de linii i coloane, unde exist repetiii.
Aceste repetiii se pot elimina prin dou madaliti:
Crearea a noi nregistrri pentru fiecare valoare a repetiiei, dup care se
caut o nou cheie primar.
tergerea atributelor care conin repetiii i crearea a unor noi relaii care
vor conine atributele terse, precum i cheia principal din relaia iniial.

Forma Normal Doi (2NF)


Se caut dependenele pariale de cheia principal, adic toate atributele
care depind funcional de un subset de atribute a cheii primare. Dac cheia primar
este compus dintr-un singur atribut, atunci releia este n forma normal doi.
Dac exist dependene pariale, vom terge atributele care depind parial
de cheia principal i crem o relaie nou care s se compun din atributele terse
mpreun cu determinantul lor.

Forma Normal Trei (3NF)


Pentru a trece la forma normal trei, trebuie s eliminm dependenele
tranzitive. Eliminarea se realizeaz prin tergerea cmpurilor dependente tranzitiv
de cheia primar din relaia iniial i crearea unei noi relaii cu aceste atribute i
determinantul lor.

Forma Normal Boyce-Codd (BCNF)


Cerina la forma normal Boyce-Codd este ca fiecare determinant din
relaie s fie cheie candidat. n cazul n care nu este ndeplinit aceast cerin,
vom terge atributele dependente funcional de determinantul care nu este cheie
candidat i crem o nou relaie n care s avem atributele terse i determinantul
lor. n unele cazuri trecerea la forma normal Boyce-Codd complic foarte mult
baza de date, caz n care este de preferat rmnerea la forma normal trei.

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