Normalizarea
Proiectarea unei baze de date este un proces complex, care presupune modelarea datelor unei organizatii. Proiectarea unei baze de date consta dintr-un numar de procese iterative, care implica dezvoltarea unei structuri pentru o baza de date plecand de la o serie de informatii si cerinte stabilite in cadrul organizatiei.
Proiectarea unei baze de date include urmatoarele etape:
• analiza datelor: presupune colectarea de informatii cu privire la natura datelor, facilitatile necesare, functii specializate; aceasta etapa ofera informatii in limbaj natural, pe baza carora vor fi definite elementele unei baze de date; are in vedere identificarea atributelor, gruparea lor in relatii, stabilirea cheilor primare;
• normalizarea: aplicarea formelor normale asupra relatiilor, pentru a reduce redundanta datelor; stabilirea de constrangeri pentru eliminarea anomaliilor de actualizare.
Normalizarea reprezinta procesul prin care modelul unei baze de date este descompus in mai multe relatii, in functie de anumite reguli numite forme normale. Prin intermediul normalizarii proiectantii unei baze de date dispun de o serie de teste care pot fi aplicate relatiilor, astfel incat sa reduca la maxim redundanta datelor si implicit sa elimine anomaliile de actualizare.
studenti (idStudent, numeStudent, idFacultate, numeFacultate, adresaFacultate, telefonFacultate)
Relatia studenti pastreaza date cu privire la studentii unor facultati. Aceasta relatie contine date redundante; datele care descriu facultatea se repeta pentru studentii aceleiasi facultati.
Astfel de relatii care contin date redundante pot introduce diferite situatii, denumite anomalii de actualizare; apar la inserarea, stergerea sau modificarea inregistrarilor:
• anomalii de inserare: in relatia precedenta nu pot fi introduse date cu privire la o facultate, daca nu se cunosc datele unui student (atributele care participa la realizarea cheii primare, idStudent, nu pot lua valoarea NULL);
• anomalii de stergere: daca sunt stersi toti studentii de la o anumita facultate, se pierd si datele corespunzatoare facultatii;
• anomalii de modificare: daca se modifica numarul de telefon al unei facultati, trebuie actualizate toate inregistrarile in care apare facultatea pentru care s-a modificat numarul de telefon.
Forma normala 1: 1NF
Normalizarea unei baze de date se realizeaza gradual, prin verificarea relatiilor dupa formele normale. Aducerea relatiilor intr-o forma normala presupune extragerea unor atribute din relatii si introducerea, pe baza lor, a unor noi relatii.
Procesul de normalizare se poate desfasura pe baza urmatoarelor forme normale: 1NF, 2NF, 3NF, BCNF (Boyce-Codd), 4NF, 5NF, DKNF (Domain-Key). In general, pentru normalizarea unei baze de date multi proiectanti considera necesare primele trei forme normale.
Fiecare forma normala preia constrangerile formei normale precedente, la care adauga noi restrictii.
O relatie respecta prima forma normala (1NF), daca domeniile atributelor cuprind doar valori atomice si fiecare atribut ia o singura valoare din domeniul sau de definitie.
Valoarea atomica este o valoare care nu poate fi descompusa fara a-si pierde semnificatia.
Un grup repetitiv este un atribut sau grup de atribute din cadrul relatiei care apare cu valori multiple pentru o singura instanta a cheii primare. O relatie poate fi adusa in prima forma normala daca au fost definite atributele care fac parte din cheia primara (idStudent) si au fost eliminate grupurile repetitive.
studenti +-----------+----------------+-------------+---------------+-----------------+------------------+ | idStudent | numeStudent | idFacultate | numeFacultate | adresaFacultate | telefonFacultate | +-----------+----------------+-------------+---------------+-----------------+------------------+ | 1 | Popescu Virgil | 7 | Hidrotehnica | George Enescu | +40.256.404.082 | | | | 3 | Chimie | Piata Victoriei | +40.256.403.063 | | 2 | Nitu Valentina | 7 | Hidrotehnica | George Enescu | +40.256.404.082 | | 3 | Ana Raicovici | 3 | Chimie | Piata Victoriei | +40.256.403.063 | | | | 4 | Constructii | Traian Lalescu | +40.256.404.000 | +-----------+----------------+-------------+---------------+-----------------+------------------+
Se observa in tabelul precedent un grup repetitiv (idFacultate, numeFacultate, adresaFacultate, telefonFacultate) in cazul in care consideram ca un student poate fi inscris la mai multe facultati. Acesta este un exemplu de tabel care nu respecta forma normala 1NF.
studenti (idStudent, numeStudent, idFacultate, numeFacultate, adresaFacultate, telefonFacultate)
studenti (idStudent, numeStudent) facultatiS (idStudent, idFacultate, numeFacultate, adresaFacultate, telefonFacultate)
Aducerea tabelului anterior la forma normala 1NF se realizeaza prin extragerea grupului repetitiv din tabel si prin crearea unui nou tabel care sa contina cheia primara a tabelului initial si campurile care fac parte din grupul repetitiv. In tabelul nou format se identifica atributele care vor forma cheia primara (idStudent, idFacultate).
studenti +-----------+----------------+ | idStudent | numeStudent | +-----------+----------------+ | 1 | Popescu Virgil | | 2 | Nitu Valentina | | 3 | Ana Raicovici | +-----------+----------------+
facultatiS +-----------+-------------+---------------+-----------------+------------------+ | idStudent | idFacultate | numeFacultate | adresaFacultate | telefonFacultate | +-----------+-------------+---------------+-----------------+------------------+ | 1 | 7 | Hidrotehnica | George Enescu | +40.256.404.082 | | 1 | 3 | Chimie | Piata Victoriei | +40.256.403.063 | | 2 | 7 | Hidrotehnica | George Enescu | +40.256.404.082 | | 3 | 3 | Chimie | Piata Victoriei | +40.256.403.063 | | 3 | 4 | Constructii | Traian Lalescu | +40.256.404.000 | +-----------+-------------+---------------+-----------------+------------------+
Forma normala 2: 2NF
O relatie respecta forma normala 2NF, daca respecta 1NF si orice atribut care nu face parte din cheia primara este total dependent functional de cheia primara a relatiei (nu exista dependente functionale partiale).
O dependenta functionala X->Y este totala, daca eliminarea oricarui atribut din X determina anularea dependentei. O dependenta functionala X->Y este partiala, daca exista un atribut din X care prin eliminare determina pastrarea dependentei.
Forma normala 2NF are relevanta doar pentru tabelele care detin o cheie primara compusa.
Tabelul facultatiS, rezultat in urma aplicarii formei normale 1NF (pasul anterior), este un exemplu de nerespectare a formei normale 2NF (tabelul contine o dependenta functionala partiala).
idFacultate -> numeFacultate, adresaFacultate, telefonFacultate
Aducerea unui tabel la forma normala 2NF presupune extragerea din tabel a campurilor dependente partial si introducerea lor intr-un nou tabel, impreuna cu determinantul lor.
facultatiS (idStudent, idFacultate, numeFacultate, adresaFacultate, telefonFacultate)
facultati (idFacultate, numeFacultate, adresaFacultate, telefonFacultate) studentiFacultati (idStudent, idFacultate)
facultati +-------------+---------------+-----------------+------------------+ | idFacultate | numeFacultate | adresaFacultate | telefonFacultate | +-------------+---------------+-----------------+------------------+ | 7 | Hidrotehnica | George Enescu | +40.256.404.082 | | 3 | Chimie | Piata Victoriei | +40.256.403.063 | | 4 | Constructii | Traian Lalescu | +40.256.404.000 | +-------------+---------------+-----------------+------------------+
studentiFacultati +-----------+-------------+ | idStudent | idFacultate | +-----------+-------------+ | 1 | 7 | | 1 | 3 | | 2 | 7 | | 3 | 3 | | 3 | 4 | +-----------+-------------+
Forma normala 3: 3NF
O relatie respecta forma normala 3NF, daca respecta forma normala 2NF si niciun atribut care nu face parte din cheia primara nu este dependent tranzitiv de cheia primara.
Daca atributul Y este dependent functional de atributul X si atributul Z este dependent functional de atributul Y, atunci spunem ca atributul Z este dependent tranzitiv de atributul X.
Orice atribut neprim trebuie sa depinda de o cheie (1NF), de intreaga cheie (2NF) si numai de cheie (3NF).
Consideram urmatorul tabel care nu respecta forma normala 3NF, dar respecta formele normale precedente. Se poate observa prezenta unei dependente tranzitive, determinate de campul numarCamin.
studentiCamine +-----------+----------------+------------+-------------------+ | idStudent | numeStudent | numarCamin | adresaCamin | +-----------+----------------+------------+-------------------+ | 1 | Popescu Virgil | 2MV | Mihai Viteazu | | 2 | Nitu Valentina | 22C | Aleea Studentilor | | 3 | Ana Raicovici | 22C | Aleea Studentilor | +-----------+----------------+------------+-------------------+
idStudent -> numeStudent, numarCamin numarCamin -> adresaCamin
Aducerea unui tabel la forma normala 3NF presupune extragerea din tabel a campurilor dependente tranzitiv si introducerea lor intr-un nou tabel, impreuna cu determinantul lor.
studentiCamine (idStudent, numeStudent, numarCamin, adresaCamin)
studenti (idStudent, numeStudent, numarCamin) camine (numarCamin, adresaCamin)
studenti +-----------+----------------+------------+ | idStudent | numeStudent | numarCamin | +-----------+----------------+------------+ | 1 | Popescu Virgil | 2MV | | 2 | Nitu Valentina | 22C | | 3 | Ana Raicovici | 22C | +-----------+----------------+------------+
camine +------------+-------------------+ | numarCamin | adresaCamin | +------------+-------------------+ | 2MV | Mihai Viteazu | | 22C | Aleea Studentilor | +------------+-------------------+
Diagrama entitate-asociere
Modelul Entitate-Asociere (Entity-Relationship) este un model logic introdus in anul 1976 de Peter Chen. Conceptele utilizate in cadrul acestui model sunt: entitatea, atributul si asocierea.
O entitate este o colectie logica de elemente, care poate reprezenta orice instanta a lumii reale: individ, lucru, concept. Corespondentul fizic al unei entitati il reprezinta tabelul unei baze de date relationale.
Elementele care descriu proprietatile unei entitati se numesc atribute. Un atribut reprezinta o caracteristica descriptiva sau cantitativa a unei entitati. Corespondentul fizic al unui atribut il reprezinta coloana unui tabel.
O asociere reprezinta o legatura logica intre doua entitati. Exista trei tipuri de asocieri:
• unu-la-unu (1:1) (one-to-one): presupune ca o instanta a unei entitatii refera o singura instanta a unei alte entitatii;
• unu-la-multi (1:N) (one-to-many): majoritatea asocierilor intre entitati sunt de tipul one-to-many; presupune ca o instanta a unei entitati (entitate parinte) refera mai multe instante ale unei alte entitati (entitate copil);
• multi-la-multi (M:N) (many-to-many): presupune ca mai multe instante ale unei entitati refera mai multe instante ale unei alte entitati.
Asocierile de tip M:N trebuie rezolvate pentru a evita aparitia datelor redundante. Ele pot fi rezolvate prin crearea unei entitati intermediare, cunoscuta sub numele de entitate referinta transversala (XREF). Aceasta entitate este alcatuita din cheile primare ale entitatilor de baza. Entitatile de baza devin entitati parinte pentru entitatea referinta (entitate copil). In acest fel, o asociere many-to-many poate fi transformata in doua asocieri one-to-many.
Cardinalitatea unei asocieri reprezinta numarul maxim de instante ale unei entitati care pot fi asociate cu o instanta a unei alte entitati. Cardinalitatea unei asocieri are rol in intelegerea relatiilor dintre entitatea copil si entitatea parinte. Raportul dintre valorile cardinalitatii, pentru o asociere, se numeste raport de cardinalitate (1:1, 1:N, M:N).
O diagrama entitate-asociere (ERD) este o tehnica de modelare a datelor, care presupune reprezentarea grafica a entitatilor si a asocierilor dintre acestea. Intr-o diagrama entitate-asociere, entitatile sunt simbolizate prin intermediul unor dreptunghiuri, iar asocierile prin linii care unesc dreptunghiurile.
Asocierile dintre doua entitati mai pot fi clasificate in asocieri cu identificare si asocieri fara identificare.
Asocieri cu identificare apar cand cheia primara a entitatii parinte este inclusa in cheia primara a entitatii copil; sunt simbolizate prin linie continua.
Asocieri fara identificare apar atunci cand cheia primara a entitatii parinte este inclusa in entitatea copil, dar nu face parte din cheia primara a entitatii copil; sunt simbolizate prin linie punctata. In plus, asocierile fara identificare pot fi obligatorii (apar in momentul in care valorile corespunzatoare din entitatea copil nu pot fi nule) si optionale (apar cand valorile copespunzatoare din entitatea copil pot fi nule).