4 NORMALIZAREA RELATIILOR
4.1 Scopul normalizarii
La proiectarea unei BD relationale, principalul obiectiv in realizarea unui model logic este crearea unei reprezentari corecte a datelor, relatiilor dintre ele si a constrangerilor. Pentru atingerea acestui obiectiv, trebuie identificat un set adecvat de relatii. Normalizarea reprezinta o tratare de jos in sus a proiectarii bazelor de date, care incepe prin examinarea relatiilor dintre atribute. Totusi, de multe ori metodologia de proiectare abordeaza o tratare de sus in jos a BD (care incepe prin identificarea principalelor entitati si relatii), caz in care normalizarea este folosita ca tehnica de validare.
Unul din principalele scopuri urmarite la proiectarea BD relationale, este gruparea atributelor in relatii in asa fel incat sa se minimizeze redundanta datelor si prin aceasta sa se reduca spatiul de stocare necesar relatiilor de baza implementate. Problemele asociate redundantei datelor le vom ilustra printr-un exemplu.
Procesul de normalizare este o metoda formala, care identifica relatiile bazandu-se pe cheile primare ale acestora si pe dependentele functionale dintre atributele lor. Normalizarea ajuta proiectantii de BD, prin prezentarea unei serii de teste care pot fi aplicate relatiilor individuale, pentru a preveni aparitia anomaliilor de reactualizare.
Exemplu: sa analizam urmatoarele alternative de relatii:
Personal (PersID, NumeP, AdresaP, Functie, Salariu, FilialaID)
si
Filiala (FilialaID, AdresaF, TelF)
fata de
PersonalFiliala (PersID, NumeP, AdresaP, Functie, Salariu, FilialaID, AdresaF, TelF)
In relatia PersonalFiliala exista date redundante: detaliile referitoare la filiala sunt repetate pentru fiecare membru al personalului aflat la filiala respectiva. Relatiile care contin date redundante pot crea probleme, denumite anomalii de reactualizare.
Anomaliile de reactualizare se clasifica in:
o anomalii de inserare care pot fi de doua tipuri:
- anomalii privind identitatea datelor redundante: de ex, pentru inserarea noilor membri ai personalului, trebuie incluse detalii despre filiala la care vor lucra, detalii care trebuie sa coincida cu valorile aflate pe celelalte randuri ale relatiei, altfel provocam o incoerenta a BD.
- anomalii privind necesitatea introducerii de randuri cu null pentru cheia primara: de ex, pentru a insera o noua filiala, care nu are nici un personal, este necesara introducerea de null-uri pentru atributele personalului; dar PersID este cheie primara si nu e permis null-ul (deoarece se violeaza integritatea entitatilor)
o anomalii de stergere: stergerea anumitor inregistrari duce la pierderea unor detalii care nu sunt stocate in alta parte: daca se sterge ultimul membru al personalului de la o filiala, se pierd detaliile despre filiala
o anomalii de modificare: necesiatatea modificarii unei date redundante, presupune modificarea ei in toate inregistrarile in care ea apare: daca trebuie modificat unul din atributele unei filiale, este necesara reactualizarea randurilor corespunzatoare pentru toti membrii personalului de la filiala respectiva, altfel BD devine incoerenta.
Aceasta analiza arata ca relatiile Personal si Filiala au o structura mai buna decat PersonalFiliala. Procesul de normalizare furnizeaza o tehnica de proiectare a unor relatii mai bine structurate.
4.2 Dependente functionale
Dependentele functionale sunt concepte fundamentale in procesul de normalizare.
Cand exista o dependenta functionala, ea este specificata ca o constrangere intre atribute. Atributul din stanga sagetii se numeste determinant.
Dependenta functionala descrie legaturile dintre atributele unei relatii: fie A si B doua atribute ale relatiei R; atributul B este dependent functional de A (notat A->B) daca fiecarei valori a atributului A ii corespunde o singura valoare a atributului B. A si B pot fi simple sau compuse.
Exemplu: sa consideram atributele PersID si Salariu din relatia Personal
Personal (PersID, NumeP, AdresaP, Functie, Salariu, FilialaID)
PersID -> Salariu deci un membru al personalului are un singur salariu
Salariu x-> PersID un salariu nu determina un singur membru al personalului
Exemplu: Sa identificam dependentele functionale din relatia PersonalFiliala
PersonalFiliala (PersID, NumeP, AdresaP, Functie, Salariu, FilialaID, AdresaF, TelF)
PersID -> NumeP
PersID -> AdresaP
PersID -> Functie
PersID -> Salariu
PersID -> FilialaID
PersID -> AdresaF
PersID -> TelF
FilialaID-> AdresaF
FilialaID-> TelF
AdresaF-> FilialaID
AdresaF-> TelF
TelF-> FilialaID
TelF-> AdresaF
In aceasta relatie sunt 13 dependente functionale cu PersID, FilialaID, AdresaF si TelF ca determinanti. Un format alternativ de afisare a acestor dependente este:
PersID -> NumeP, AdresaP, Functie, Salariu, FilialaID, AdresaF, TelF
FilialaID -> AdresaF, TelF
AdresaF -> FilialaID, TelF
TelF -> FilialaID, AdresaF
Pentru a descărca acest document,
trebuie să te autentifici in contul tău.