Sunteți pe pagina 1din 51

CURS

NORMALIZAREA RELATIILOR

La proiectarea unei baze de date, un obiectiv foarte important, care trebuie urmrit cnd se gndete un model de date, este realizarea unei reprezentri 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 setului celui mai adecvat 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 definii mai tari a formei normale trei, s-a obinut forma Boyce-Codd, dup numele celor care au introdus aceasta forma normala: R. Boyce i E. F. Codd (1974). Toate aceste forme normale se bazeaz pe dependentele funcionale stabilite ntre atributele unei relaii.

Edgar F. Codd
(23.08.1923 18.04.2003)

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 acestea se folosesc foarte rar.

DEFINIREA NORMALIZARI

DEFINIREA NORMALIZARI

Normalizarea este un proces de


descompunere a unei relaii iniiale n relaii cu structur mai simpl care se realizeaz n cinci pai, primii trei fiind obilgatorii. Aceste etape de normalizare poart numele de forme normale. Pe baza acestor forme normale se furnizeaz simplificri ale problemei iniiale.

Regulile de normalizare a datelor (denumite uneori reguli de normalizare) se utilizeaza pentru a verifica daca bazele de date sunt structurate corect.

Reguli de integritate Normalizarea relaiilor

Reguli de integritate Normalizarea relaiilor Regulile care stau la baza modelrii relaionale a datelor sunt: 1. orice relaie trebuie s aib un atribut de identificare, i dac nu exist el trebuie creat; 2. orice atribut trebuie s fie atomic (nedecompozabil); 3. orice tuplu al unei relaii trebuie s conin o singur valoare pentru un atribut; 4. orice atribut trebuie s depind direct i n ntregime de identificator; 5. un atribut trebuie s apar o singur dat n cadrul unei relaii.

OBSERVATII
Normalizarea este utila daca ati determinat toate elementele informationale si ati creat un proiect preliminar. Scopul fiind acela de a va asigura ca ati impartit elementele informationale in tabelele corespunzatoare. Normalizarea nu va poate ajuta sa va asigurati ca aveti de la inceput toate elementele de date corecte.
Scopul normalizrii este de a suprima redundanele logice, de a evita anomaliile la reactualizare i rezolvarea problemei reconexiunii.

Procesul de normalizare?

Procesul de normalizare este o metod formal, care identific relaiile baznduse pe cheile primare ale acestora i pe dependenele funcionale dintre atributele lor.

Observatii Normalizare
Normalizarea este executat sub forma unei serii de pai. Fiecare pas corespunde unei anumite forme normale, care are proprieti cunoscute. Pe msur ce se desfoar normalizarea, relaiile devin n mod progresiv mai restrictive (mai puternice) ca format i mai puin vulnerabile la anomaliile de reactualizare. Pentru modelul relaional, numai prima form normal (1NF) este de importan critic n crearea de relaii adecvate. Toate formele normale urmtoare sunt opionale. Totui, pentru evitarea anomaliilor de reactualizare, se recomand efectuarea normalizrii pn la cel puin forma 3NF.

Unul din principalele scopuri urmrite la proiectarea BD relaionale, este gruparea atributelor n relaii n aa fel nct s se minimizeze redundana datelor i prin aceasta s se reduc spaiul de stocare necesar relaiilor de baz implementate. Problemele asociate redundanei datelor le vom ilustra printr-un exemplu.

Exemplu: S analizm urmtoarele alternative de relaii Personal (PersID, NumeP, AdresaP, Funcie, Salariu, FilialaID) i Filiala (FilialaID, AdresaF, TelF) fa de : PersonalFiliala (PersID, NumeP, AdresaP, Funcie, Salariu, FilialaID, AdresaF, TelF)
OBSERVATIE:
n relaia PersonalFiliala exist date redundante: detaliile referitoare la filial sunt repetate pentru fiecare membru al personalului aflat la filiala respectiv. Aceast analiz arat c relaiile Personal i Filiala au o structur mai bun dect PersonalFiliala. Procesul de normalizare furnizeaz o tehnic de proiectare a unor relaii mai bine structurate.

Dependena funcional

Dependena funcional
Dependena funcional descrie legturile dintre atributele unei relaii: fie A i B dou atribute ale relaiei R; atributul B este dependent funcional de A (notat AB) dac fiecrei valori a atributului A i corespunde o singur valoare a atributului B. A i B pot fi: simple sau compuse.

Atributul din stnga sgeii se numete determinant.

Conceptul de dependen funcional este elementul central n procesul de normalizare.

Exemplu: 1 S considerm atributele PersID i Salariu din relaia Personal:


Personal (PersID, NumeP, AdresaP, Funcie, Salariu, FilialaID) PersID Salariu deci un membru al personalului are un singur salariu Salariu PersID un salariu nu determin un singur membru al personalului

Exemplul: 2 S identificm dependenele funcionale din relaia PersonalFiliala

OBSERVATII

Forma nenormalizata
Forma nenormalizat (UNF) este un tabel care conine unul sau mai multe grupuri repetitive. Un grup repetitiv este un atribut sau grup de atribute din cadrul tabelului, care apare cu valori multiple pentru o singur instan a atributului cheie.

Forma normala 1
Prima form normal (1NF) este o relaie n care intersecia fiecrui rnd cu fiecare coloan conine o singur valoare i numai una, adic toate atributele relaiei iau valori unice.

VOM PORNI ANALIZA DE LA UN FORMAT DE TABEL NENORMALIZAT.


Pentru a-l transforma n prima form normal (1NF), vom identifica i vom elimina grupurile repetitive. Pentru eliminarea grupurilor repetitive dintrun tabel nenormalizat, exist DOU TRATRI UZUALE, sau dou strategii de lucru

Exemplu: o agenie imobiliar


Pornim analiza de la un formular clasic, cu date despre proprietile nchiriate de un anumit client. Pentru a simplifica
exemplul, vom presupune c un client nchiriaz o anumit proprietate o singur dat i nu nchiriaz mai multe proprieti n acelai timp.

Datele referitoare la proprietile nchiriate de cei doi clieni le transferm din formularele Detalii Client_nchiriere n urmtorul format de tabel:

Acesta este un exemplu de tabel nenormalizat. Putem identifica atributul cheie ca fiind NrClient. Identificm grupurile repetitive ca fiind detaliile despre proprietatea nchiriat, care se repet pentru fiecare client care a nchiriat proprietatea respectiv. Structura acestui grup repetitiv este: GrupRepetitiv (NrProprietate, AdresaProprietate, nceputnchir, Sfritnchir, Chiria, NrProprietar, NumeProprietar)

Deci exist valori multiple la intersecia dintre anumite rnduri i coloane. De ex, exist dou valori ale atributului NrProprietate (4 i 16), corespunztoare clientului Ion Buflea. Pentru a transforma un tabel nenormalizat n forma 1NF, trebuie s ne asigurm c exist o singur valoare la intersecia dintre fiecare rnd i fiecare coloan. Aceasta se realizeaz prin eliminarea grupului repetitiv. Vom analiza procesul eliminare prin ambele strategii prezentate:

1.Se elimin grupurile repetitive prin introducerea de date adecvate n coloanele goale ale rndurilor cu date repetitive. Cu alte cuvinte, se completeaz spaiile libere prin dublarea datelor nerepetitive, acolo unde este necesar. Aceast tratare este denumit aplatizarea tabelului. Tabelul rezultant, denumit acum relaie, conine valori singulare la intersecia fiecrui rnd cu fiecare coloan. n cadrul acestei tratri se introduce o redundan n relaia rezultant, redundan ce va trebui ulterior eliminat n procesul de normalizare.

1. strategia aplatizrii tabelului


Prin acest mod se elimin grupul repetitiv prin transformarea unui rnd cu valori multiple ale unui atribut n mai multe rnduri cu valori singulare pentru acel atribut (de fapt, prin introducerea datelor adecvate pe fiecare rnd). Relaia rezultat, Clientnchiriere, se afl deja n prima form normal. Identificm cheile candidat ale relaiei Clientnchiriere ca fiind cheile compuse (NrClient, NrProprietate), (NrClient, nceputnchir) i (NrProprietate, nceputnchir). Selectm drept cheie primar atributele (NrClient, NrProprietate) i pentru claritate, le grupm n stnga relaiei.

Relaia prezentata este n forma 1NF deoarece exist o singur valoare la intersecia dintre fiecare coloan i rnd. Relaia conine date care se repet de mai multe ori, deci este expus anomaliilor de reactualizare. Pentru a le elimina va trebui transformat n 2NF.

2. strategia crearii unei relaii separate


Se nominalizeaz un atribut (sau un grup de atribute) ca o cheie a tabelului nenormalizat, dup care se elimin grupurile repetitive prin plasarea datelor care se repet mpreun cu o copie a atributului cheie iniial, ntr-o relaie separat. Se identific apoi cheile primare ale noilor relaii. Dac tabelul nenormalizat conine mai mult de un grup repetitiv, aceast tratare se aplic n mod repetat, pn nu mai rmn grupuri repetitive. Un set de relaii se afl n prima form normal dac nu conine grupuri repetitive.

n cazul celei de-a doua tratri, se elimin grupul repetitiv prin plasarea ntr-o relaie separat a datelor respective mpreun cu o copie a atributului cheie iniial (NrClient). Apoi vom identifica o chei primar pentru noua relaie. Formatele relaiilor 1NF rezultante sunt:

OBSERVATIE

AMBELE TRATRI SUNT CORECTE, dar a doua produce relaii aflate n cel puin forma 1NF cu redundan mai mic.

A doua form normal (2NF)


Se bazeaz pe conceptul de dependen funcional total.
Dependena funcional total arat c, dac A i B sunt atribute ale unei relaii R, se spune c B este total dependent funcional de A, dac B este dependent funcional de A dar nu i de orice submulime a lui A. O dependen funcional A B este total dac eliminarea oricrui atribut din A are ca rezultat anularea dependenei. O dependen funcional A B este parial dac exist un atribut care poate fi eliminat din A i totui dependena s se menin.

De ex, s considerm urmtoarea dependen funcional:


NrPersonal, NumePersonal NrFilial Este corect s afirmm c fiecare valoare din (NrPersonal, NumePersonal) este asociat unei singure valori a atributului NrFilial. Dar asta nu e o dependen funcional total, deoarece atributul NrFilial este dependent funcional i de un subset al atributelor (NrPersonal, NumePersonal), i anume NrPersonal.

Definirea 2NF
A doua form normal (2NF): o relaie este n a doua form normal dac ndeplinete condiiile pentru prima form normal i fiecare atribut care nu este cheie primar este total dependent funcional de cheia primar.
Normalizarea relaiilor 1NF la forma 2NF presupune eliminarea dependenelor pariale. Asta se face prin eliminarea din relaie a atributelor parial dependente funcional, i plasarea lor ntr-o nou relaie, mpreun cu o copie a determinantului acestora.

A treia form normal (3NF)


Cu toate c relaiile 2NF conin mai puin redundan dect cele 1NF, ele tot mai sunt vulnerabile la anomaliile de reactualizare. De exemplu: dac dorim reactualizarea numelui unui proprietar, trebuie ca n relaia ProprietateProprietar s modificm toate rndurile n care apare acel nume. Aceast anomalie de reactualizare este cauzat de dependena tranzitiv. Astfel de dependene trebuie eliminate prin trecerea la 3NF.

Pentru a descrie aceast trecere, s explicm nti noiunea de dependen tranzitiv.

De exemplu, s considerm urmtoarele dependene funcionale:

Denormalizare
Este important de reinut c regulile de normalizare pot fi nclcate uneori, pentru un design optimal al bazei de date. De pild, anumite probleme de performan pot fi rezolvate prin introducerea voit a unei anumite redundane a datelor.

Aplicatie 1

Se consider urmtoarea relaie nenormalizat.

CONTRACT (NRC, DATAC, VALC, CODF, DENF, ADRESAF, PREFIX, TEL, CONTBANCA, MATERIAL, ESALONARE)

Se cere s se normalizeze relaia pn la forma normal 3.

Observatie
CONTRACT (NRC, DATAC, VALC, CODF, DENF, ADRESAF(CODLOC, DEN LOC), PREFIX, TEL, CONTBANCA, MATERIAL (CODMAT, DENMAT, UM, PRET_LIVR), ESALONARE ( LUNA, CANT_CONTR, CANT_LIVR ))

Pasul 1: Aducerea la FN1 Toate valorile asociate atributelor se gsesc la nivel atomic - din punct de vedere al utilizarii; - din punct de vedere al obinerii; - din punct de vedere al tipurilor de date existente; Nu exista atribute sau grupuri de atribute repetitive?
CONTRACT(NRC, DATAC, VALC, CODF, DENF, ADRESAF, PREFIX, TEL, CONTBANCA, MATERIAL (CODMAT, DENMAT, UM, PRET_LIVR, ESALONARE ( NR_LUNA, CANT_CONTR, CANT_LIVR )))

Baza de date n FN1 CONTRACT = (NRC, DATAC, CODF, VALC, DENF, CODLOC, DENLOC, PREFIX, TEL, CONTBANCA) MATERIAL = (NRC, CODMAT, DENMAT, UM, PRET_LIVR) ESALONARE = (NRC, CODMAT, NR_LUNA, CANT_CONTR, CANT_LIVR)

Pasul 2: Aducerea la FN2 Toate atributele non-cheie depind de ntreaga cheie a relaiei. CONTRACT = {NRC, DATAC, VALC, CODF, DENF, CODLOC, DENLOC, PREFIX, TEL, CONTBANCA} MATERIAL = {NRC, CODMAT, DENMAT, UM, PRET_LIVR} ESALONARE = {NRC, CODMAT, NR_LUNA, CANT_CONTR, CANT_LIVR}

Baza de date n FN2 CONTRACT = {NRC, DATAC, VALC, CODF, DENF, CODLOC, DENLOC, PREFIX, TEL, CONTBANCA} MAT_CONTR = {NRC, CODMAT, PRET_LIVR} MAT_NOMENCLATOR = {CODMAT, DENMAT, UM} ESALONARE = {NRC, CODMAT, NR_LUNA, CANT_CONTR, CANT_LIVR}

Pasul 3: Aducerea la FN3 Nu prezint dependene funcionale tranzitive.


CONTRACT = {NRC, DATAC, VALC, CODF, DENF, CODLOC, DENLOC, PREFIX, TEL, CONTBANCA} MAT_CONTR = {NRC, CODMAT, PRET_LIVR} MAT_NOMENCLATOR = {CODMAT, DENMAT, UM} ESALONARE = {NRC, CODMAT, NR_LUNA, CANT_CONTR, CANT_LIVR}

Baza de date n FN3


CONTRACT = {NRC, DATAC, VALC, CODF} FURNIZOR={CODF, DENF,CODLOC,TEL,CONTBANCA} LOCALITATE = {CODLOC, DENLOC, PREFIX} MAT_CONTR = {NRC, CODMAT, PRET_LIVR} MAT_NOMENCLATOR = {CODMAT, DENMAT, UM} ESALONARE = {NRC, CODMAT, NR_LUNA, CANT_CONTR, CANT_LIVR}

Aplicatie 2
S se aduc la forma normala 3: AGENTIE IMOBILIARA = {Nr_client, Nume_client, Nr_proprietate, Adresa_proprietate, Incep_Inchiiere, Sfarsit_Inchiriere, Chiria, Nr_proprietar, Nume_proprietar}

Aplicatie 3
1. S se aduc la forma normala 3: PROIECT = {CODP, MARCA, NR_ORE, DENUMIRE, COD_LOC, NR_DEPT}