Sunteți pe pagina 1din 57

Normalizarea

n acest capitol vom nva despre:


Anomaliile care apar cnd avem redundan n
informaii
Cum putem defini reguli de legtur ntre
informaii cu ajutorul dependenelor funcionale
Cum putem crea baze de date corecte aducnd
la forma normal 1, 2, 3 i Boice-Codd i cum se
pstreaz proprietile de descompunere unitar
i de dependene.

Redundana informaiilor i
anomalii la actualizare.
La proiectarea unei baze de date, un obiectiv
foarte important, care trebuie urmrit cnd se
gndete un model de date, este realizarea unei
reprezentari corecte a datelor, a relaiilor dintre
date i a restriciilor impuse asupra datelor.
Pentru realizarea acestui obiectiv se utilizeaz
tehnica normalizrii, care are ca scop principal
identificarea celor mai adecvate de relaii care
s modeleze realitatea dorit.

Procesul de normalizare a fost introdus de E. F.


Codd (1972). Iniial s-au propus trei forme
normale, notate 1NF, 2NF, respectiv 3NF. Mai
trziu, prin enunarea unei definiii mai tari a
formei normale trei, s-a obinut forma BoyceCodd, dup numele celor care au introdus
aceast form normal: R. Boyce i E. F. Codd
(1974). Toate aceste forme normale se bazeaz
pe dependenele funcionale stabilite ntre
atributele unei relaii.

Formele normale cele mai folosite sunt:


forma normal 3 i forma normal BoyceCodd. Exist i forme normale mai tari forma normal 4 (4NF) i forma normal 5
(5NF) - dar acestea se folosesc foarte rar.

Pentru a ilustra procesul de normalizare,


vom utiliza exemple din aplicaia Asociatie
de locatari.
Partea cea mai important la proiectarea
bazei de date este gruparea atributelor n
relaii cu scopul de a minimiza redundana
informaiilor i spaiul ocupat de relaii
(tabele sau fiiere) pe suportul magnetic.

Fie relaia Furnizori_Cheltuieli exemplificat mai jos.


Cod_furn Den_furn Cod_fiscal Cod_chelt Den_chelt
data
Valoare
F100
Romgaz R1234567 C15
ncalzire
30.06.99 2,150,000
F100
Romgaz R1234567 C16
Apa calda
30.06.99
500,000
F110
Renel R7654321 C10
Iluminat
30.06.99 3,000,000
F110
Renel R7654321 C11
Lift
30.06.99
200,000

Ce anomalii observai aici?

O descompunere a relaiilor care ne fac


probleme este binevenit i duce la
rezolvarea problemelor. Este bine ns s
tratm descompunerile de relaii cu
pruden deoarece o descompunere
neglijent ne poate crea probleme la fel de
mari cu acelea de care tocmai ne-am
ocupat. Este posibil s pierdem informaii
dac nu suntem ateni la modul n care
se realizeaz descompunerea.

n general se poate urmri ca n fiecare relaie


s se reprezinte informaii despre o singur
mulime-entitate. Criteriul este mai mult de ordin
intuitiv i el nu ne este de mare ajutor n cazul
reprezentrii mulimilor-relaie. n acest caz, ntro relaie se ntlnesc date despre mai multe
mulimi-entitate. Este necesar s se stabileasc
o modalitate riguroas de a decide care sunt
informaiile care trebuie s alcatuiasc o astfel
de relaie.

Orice relaie se construiete pe baza unei


scheme de relaie. Fie R o schem
oarecare de relaie. Un set de scheme de
relaie reprezint o descompunere a lui R
i se noteaza {R1, R2, , Rn} dac

Aceasta nseamn ca orice atribut din


schema de relaie iniial R se regsete
n cel puin o schem de relaie din
descompunere. Dac ne raportm la
relaiile care se bazeaz pe schemele de
mai sus, fie r relaia construita pe schema
R sie fie relaiile r1, r2, , rn construite pe
schemele de relaie ce formeaza
descompunerea. n termenii algebrei
relaionale se poate considera egalitatea;

Descompunerile cu pierderi de informaii


se pot clasifica n Descompuneri cu
pierderi la jonctiune i Descompuneri
cu pierderea dependenelor. Pentru a
clarifica lucrurile n aceast directie este
necesar mai nti definirea noiunii de
dependen funcional.

Dependene funcionale
Unul din cele mai importante concepte
asociate cu normalizarea este conceptul
de dependen funcional. Dependena
funcional descrie un anumit tip de
legtur care se stabilete ntre atributele
aceleiai relaii.
Fie o schema de relaie R i fie
submulimile de atribute A i B din R.

Se verifica

Spunem ca B depinde funcional de A i scriem


AB dac pentru orice relaie legal r,
construit pe schema de relaie R, se verific
urmatoarea situaie:
pentru orice pereche de tuple t1 i t2 din r, pentru
care A[t1]=A[t2], are loc ntotdeauna i
B[t1]=B[t2].

Aceasta nseamn c atunci cnd un tuplu


t1 are (pe submulimea de atribute A)
aceeai valoare cu alt tuplu t2, obligatoriu
cele dou tuple vor avea aceeai valoare
i pe submulimea de atribute B. Valorile
din B sunt n mod unic determinate de
valorile din A.

Numim determinant al unei dependente


funcionale, atributul, sau mulimea
atributelor din partea stng a sgeii.
O parte dintre dependenele funcionale
pentru relaia Furnizori_Cheltuieli sunt:
Cod_furn Den_furn
Cod_furn Cod_fiscal
Cod_chelt Den_chelt
Cod_chelt, Cod_furn, Data Valoare

Numele furnizorului este determinat n


mod unic de codul furnizorului. La coduri
egale, numele sunt identice.
Valoarea ns nu poate fi determinat n
mod unic decat de combinaia cod
cheltuial, cod furnizor i data.

Noiunea de dependent funcional


generalizeaz noiunea de cheie. Se poate da
urmtoarea definiie a supercheii cu ajutorul
dependenelor funcionale:
Spunem ca submulimea de atribute K din
schema de relaie R este o supercheie dac
KR, adic pentru orice pereche de tuple t1 i
t2 din r, pentru care t1[K]=t2[K], are loc
ntotdeauna i t1[R]=t2[R].

Dependentele funcionale ne permit s


exprimam restricii asupra relaiilor pe care
nu le putem exprima cu ajutorul cheilor.
Dependena funcional este o proprietate
legat de semantica atributelor n relaii.
Dependenele funcionale pot fi stabilite de
cine cunoate exact legturile ntre valorile
atributelor, deci de ctre cineva care
cunoate foarte bine aplicaia i
semnificaia informaiilor din relaii.

Nu se pot da reete pentru stabilirea


dependenelor funcionale, dar se pot da metode
de a determina toate dependenele funcionale
dintr-o relaie dac se cunosc cateva
dependene de la care poate porni algoritmul.
O metod de a determina mulimea tuturor
dependenelor funcionale dintr-o relaie se
bazeaz pe aa-numitele Axiome ale lui
Armstrong.

Regulile (Axiomele) lui


Armstrong:

regula reflexivitii dac X este un


subset de atribute al lui Y atunci YX;
regula creterii dac X, Y i W sunt
subseturi de atribute din R i dac XY
atunc WXWY;
regula tranzitivitii dac X, Y i Z
sunt subseturi de atribute din R i dac
XY i YZ atunci are loc i XZ.

Cele trei reguli sunt suficiente i formeaz


un set complet pentru a se putea
determina toate dependenele funcionale
dac se porneste de la un set de baz
iniial. Totui se mai utilizeaz n mod
obinuit i reguli suplimentare (care pot fi
deduse din primele trei) deoarece
uureaz calculele.

regula reuniunii dac X, Y i Z sunt


subseturi de atribute din R i dac XY i
XZ atunci i XYZ;
regula descompunerii dac dac X, Y i Z
sunt subseturi de atribute din R i dac
XYZ atunci au loc i XY i XZ;
regula pseudotranzitivitii - dac X, Y, W i Z
sunt subseturi de atribute din R i dac XY
i WYZ atunci i WXZ

EXEMPLU
Fie schema de relaie R={A, B, C, G, H, I} i fie
setul de dependente initial notat cu F i format
din dependentele: AB, AC, CGH, CGI,
BH.
Pornind de la acest set initial se mai pot calcula
i urmatoarele dependente:
AH, utilizand regula tranzitivitii aplicata la
dependentele AB i BH;
CGHI, utilizand regula reuniunii pentru
dependentele CGH i CGI;si asa mai
departe

Dac se noteaz cu F setul iniial de


dependene funcionale, cu F+ se va nota
nchiderea lui F (deci toate dependenele
funcionale care se pot defini pentru relaia
n cauz).

Descompuneri fara pierderi la


jonctiune
Fie o descompunere oarecare {R1, R2, ,
Rn} a relaiei R, aa cum am definit-o
formal la nceputul acestui capitol. Pentru
o descompunere oarecare se verific
ntotdeuna relaia:

unde prin X s-a notat produsul cartezian,


operatie din algebra relaionala. Altfel
spus, orice tuplu din relaia r duce, prin
descompunere, la cate un tuplu ti n
fiecare relaie ri. Cnd se realizeaza
produsul cartezian cu toate relaiile ri, se
obtin n general mai multe tuple decat au
fost n relaia initiala r, deoarece produsul
cartezian are ca rezultat toate combinatiile
posibile ntre elementele participante.

Fie C un set de restricii asupra bazei de


date. O descompunere {R1, R2, , Rn} a
unei scheme de relaie R este o
descompunere fara pierderi la jonctiune
pentru R, dac pentru toate relaiile r
definite pe schema R (care sunt legale sub
restriciile C) se verific:

Vom prezenta n continuare o condiie


suficient pentru ca o descompunere s fie fr
pierderi la jonciune.
Fie R o schem de relaie i fie descompunerea
lui R reprezentat de {R1, R2}. Aceast
descompunere este fr pierderi la jonciune
dac cel puin una dintre urmtoarele
dependene funcionale se gsesc n F+:

Descompuneri cu pastrarea
dependentelor
Pstrarea dependenelor duce la pstrarea
consistenei informaiilor din baza de date. Se
pot impune restricii care permit sistemului s
verifice la orice actualizare a informaiilor c nu
se va crea o relaie ilegal.
Fie F setul iniial de dependente funcionale,
definit pe o schem de relaie R i fie {R1, R2,
, Rn} o descompunere a lui R. Notm cu Fi
restricia la Ri a mulimii de dependene
funcionale F. (Se cere ca dependenele
funcionale din Fi s includ doar atribute care
se regasesc n relaia Ri).

Vom obine un set de mulimi de dependene


funcionale F1, F2, , Fn. Fie

reuniunea seturilor de dependente funtionale. n


general F'F, dar s-ar putea ca s se verifice
relaia F'+=F+. Dac se ntampl aa, atunci
spunem c descompunerea este o
descompunere cu pstrarea dependeneor
funcionale.

Forme normale
Normalizarea este un proces de organizare a
datelor n relaiile unei baze de date. Acest
proces presupune respectarea unor reguli prin
care baza de date se poate normaliza pn la
un anumit grad, adic se aduce la o anumit
forma normal.
Normalizarea se execut trecnd prin toate
formele normale, pn la forma normal cerut.
La proiectarea unei baze de date este
recomandabil s se ajung cel puin pan la
forma normal trei. Aceasta asigur evitarea
anomaliilor descrise la nceputul acestui capitol.

Numim Form Nenormalizat (UNF)


orice tabel care conine una sau mai
multe grupuri repetitive pe atribute.

Forma Normal Unu (1NF): Spunem ca o relaie se gsete n


Forma normal unu dac orice atribut este atomic, adic nu exist
cereri pentru submulimi ale unui atribut nici atribute repetitive.
Pentru a transforma tabela din Figura 5.2 n forma normal unu,
identificm i tergem grupurile repetitive din tabel. 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 ale 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.

Observm c pentru furnizorul "Romgaz"


avem dou tipuri de cheltuieli. La fel i
pentru furnizorul "Renel".
Pentru a transforma aceast tabel n
1NF, trebuie s avem o singur valoare la
fiecare intersecie linie coloan.

Observm c pentru furnizorul "Romgaz" avem


dou tipuri de cheltuieli. La fel i pentru
furnizorul "Renel".
Pentru a transforma aceast tabel n 1NF,
trebuie s avem o singur valoare la fiecare
intersecie linie coloan.
Dac vom normaliza dupa prima metoda, vom
scrie repetiiile pe diferite rnduri iar coloanele
care nu conin repetiii, vor fii copiate
corespunzator pe fiecare rnd

n tabela normalizat, cheia va fi (Cod_furn,


Cod_chelt, Data).
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, Den_furn, Cod_fiscal)
Cheltuieli (Cod_furn, Cod_chelt, Data,
Den_chelt, Valoare)
Cele dou tabele astfel create sunt n 1NF:

Furnizori
Cod_furn
F100
F110

Den_furn Cod_fiscal
Romgaz R1234567
Renel
R7654321

Forma Normal Doi (2NF)


Forma normal doi se obine utiliznd conceptul
de dependen funcional total.
Dependena funcional total. Dac A este
un subset de dou sau mai multe atribute i B
este atribut (sau subset de atribute) al aceleiai
relaii, spunem ca B este total dependent
funcional de grupul de atribute A, dac B este
dependent funcional de A, dar nu este
dependent funcional de nici un subset de
atribute din A.

De exemplu s lum urmtoarea dependen


funcional:
Cod_chelt, Cod_furn, Data Valoare
Dependena funcional este total pentru c
Valoare nu depinde funcional de nici un subset
de atribute al grupului Cod_chelt, Cod_furn,
Data.
Forma normal doi trebuie verificat doar la
relaiile care au cheie compus pe poziie de
cheie primar. Relaia la care cheia primar se
compune dintr-un singur atribut, este n 2NF
dac este n 1NF.

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. Putem trece
la forma normal doi prin tergerea atributelor
care nu depind total de cheia primar i trecerea
lor ntr-o alt tabel mpreun cu determinantul
lor. Dup efectuarea acestor transformri, vom
obtine urmtoarele relaii:

Relaia Cheltuieli:
Cod_furn. Cod_chelt
F100
C15
F100
C16
F110
C10
F110
C11

Data
Valoare
30.06.99 1500000
30.06.99 500000
30.06.99 3000000
30.06.99 200000

Relaia Furnizori:
Cod_furn
Den_furn
F100
Romgaz
F110
Renel

Cod_fiscal
R1234567
R7654321

Relaia Tip_cheltuiala:
Cod_Chelt
Den_chelt
C15
ncalzire
C16
Apa calda
C10
Iluminat
C11
Lift

Relaiile rezultate au urmtoarele scheme


de relaie:

Furnizori = (Cod_furn., Den_furn,


Cod_fiscal)

Tip cheltuial = (Cod_Chelt.,


Den_chelt)

Cheltuieli = (Cod_furn, Cod_chelt,


Data, Valoare)

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.

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.
Spunem ca o relaie este n form normal
trei dac este deja n forma normal doi
i nici un atribut care nu aparine cheii
primare nu este tranzitiv dependent de
cheia primar.

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.

Forma Normal Boyce-Codd


(BCNF)
Baza de date trebuie proiectat astfel nct s
nu conin dependene pariale sau tranzitive,
pentru c altfel ne putem confrunta cu anomaliile
descrise la nceputul capitolului.
Forma normal Boyce-Codd se obine utiliznd
cheile candidat din relaie. O relaie cu o singur
cheie candidat n form normal trei este i n
form normal Boyce-Codd.

Spunem ca o relaie este n forma normal


Boyce-Codd dac i numai dac orice
determinant din relaie este cheie
candidat.

Cod_furn Den_furn, i Cod_furn


Cod_fiscal

Cod_chelt Den_chelt

Cod_furn, Cod_chelt, Data Valoare

Toi cei trei determinani sunt i chei


candidat n relaiile lor. Deci relaiile din
exemplul de mai sus sunt 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 relaiile, ca s ajungem la BCNF. n
aceste situaii este indicat rmnerea la forma
normal trei.

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