Documente Academic
Documente Profesional
Documente Cultură
-formele normale pot fi definite in 2 moduri 1. modul academic 2.modul practice de implementare Definirea formelor normale in modul academic Prima forma normala: se elimina grupurile repetitive astfel incat toate inreg din toate tabelele pot fi identificate unic de o cheie unica in fiecare tabela; cu alte uvinte toate campurile care nu sunt chei primare treb sa depinda de cheile primare A doua forma normala: toate valoriel non-cheie trebuie sa fie dependente functional total de cheia primara; nu se admit dependente partiale; o dependenta partiala exista atunci cand un camp este dependent total de o parte a unei chei composite primare A treia forma normala: elimina dependintele transitive, adica un camp este determinat indirect de cheia primara; aceasta deoarece campul este dependent functional de alt camp, cand celalat camp este dependent de cheia primara Forma normala Boyce-Codd: orice determinat al unei tabele este o cheie candidat; daca exista o cheie candidat, , a trei aforma noramla coincide ci forma normala B-C A patra forma normala: elimina multimile multiple de dependente multivaloare A cincea forma normala: elimina dependentele ciclice; ac f n dse mai numeste fi forma normala a proiectiei Forma normala de cheie de domeniu: este cea mai inalta treapta a normalizarii si este mai mult o masura a unui concept abstract decat o transformare proproi-zisa -acest limbaj precis poate fi foarte derutant; -intretinerea datelor relativ la accesarea inregistrarilor individuale ale db poate fi gestionata cu usurinta utilizand a treia forma normala sau o forma mai inalta -o interogare in acest caz va afecta mai multe tabele ceea ce poate duce la scaderea drastic a perfoemantelor db -sunt necesare formele normale mai inalte decat a treia forma? Posibil dar in multe situatii comerciale nu este necesar -implementarea excesica a formelor normale introduce prea mulr afunctionalitate bazei de date
Definirea practica a formelor normale -multe aplicatii comerciale ale db relationale utilize fomrme normale mai inalte decat forma a treia -acest lucru conduce la generarea prea multor tabele ceea ce conduce la prea multe join-uri SQL -prea multe jin-uri scad performanta db -in general performanta este mai importanta decat perfectiunea granular a designului unei db relationale -normalizarea este in cele mai multe cazuri- usor de implementat Prima forma normala: elimina campurile care se repeta creand o noua tabela astfel incat tabela originala si noua tabela sunt relationate master detail cu o relatie one-to-many -de ex, o tabela master contin inregistrari ce reprezinta toate vasele ce apartin unei firme; o tabela detail va contine inreg de detaliu, cum ar fi toti paragenii unui vas;
-trebuie create chei in ambele tabele: tabela detail va avea o cheie primara compozita ce contine cheia primara a tabelei master ca prefix al cheii sale primare; acest camp prefix este deasemenea foreign key pentru tabela master A doua forma normala: creaza o tabela unde valorile care se repeta (si nu campurile care se repeta) sunt eliminate intr-o nooua tabela -rezultatul este o relatie many-to-one create intre tabela originala si noile tabele create -noua tabela va avea o cheie primara ce va fi formata dintr-un singur camp; tabela master contine o cheie foreign catre cheia primara a noii tabele - cheia straina nu este parte a cheii primare a tabelei originale A treia forma normala: este dificil de explicat intr-un lb simplu; eliminrea dependintelor tranzitive implica crearea unei noi tabele pentru niste date care depend indirect de cheia primara a unei tabele existente -exista o multime de moduri in care poate fi interpretata a treia forma normala Peste a treia forma normala: multe db relationale nu trec de a treia forma normala; uneori nic a treia forma normal anu este atinsa; -aceasta deoarece sunt generate prea multe tabele ceea ce conduce la prea multe join-uri SQL, ceea ce conduce la timpi de raspuns foarte mari ai bazei de date - cazul care trebuei mentionat este eliminarea campurilor cu valori NULL in tabele noi prin relatii one-to-many -spatiul pe disk este ieftin, iar nr mare de join-uri conduce la performante slabe ale db
-aceasta tabela trebuie impartita in 2 tabele in care fiecare Nume produs sa aiba mai multe Componente - mai intai vom elimina campurile care se repeta(Componente) astfel:
-acum vom separa campul Nume produs intr-o tabela separata, si restul campurilor in alta tabela ac tabele fiind relationate printr-o relatie one-to-many
-se creaza chei primare in ambele tabele, iar tabela medicamente (medicamente1) are o cheie primara compozita, care contine cheie cheia primara a tabelei master ca prefix al cheii sale primare -campul prefix Nume produs al tabelei medicamente2 este cheia straina catre tabela Componente
- fig urmatoare prezinta tabela medicamente2 in prina forma normala dupa separarea componentelor medicamntelor care se repeta
-informatiile referitoare la Firma producatoare si Pret sunt relative statice in raport cu medicamentele -in aceasta situatia tabela medicamente reprezinta informatii dinamice referitoare la Firma producatoare, Cod produs, etc. -fig urmatoare prezinta un prim pas spre forma a doua normala, eliminand datele statice si in tabela medicamente2; astfel vom avea 3 tabele: medicamente3, pretul si :
-obs ca in tabela cod , fiecare articol apare o singura data(cod produs este cheie primara) -iar in tabela pretul, fiecare Pret apare o singura datapretul este cheie primara -fig urmatoare prez relatii many-to-one intre tabelele dinamice (cod si pret) si cele statice (medicamente3)
-in fig urmatoare sunt create chei primare in ambele tabele cod si pretul pt a identifica unic codul si pretul in interiorul celor 2 tabele respective. -identificarea relatilor medicamente3-cod si medicamente3-pretul face ca cheile primare cod produs si pret sa fie incluse in cheia compozita a tabelei medicamente3 -in fig urm cheile primare in tabelele statice sunt copiate in tabela dinamica medicamente2 ca parti ale cheii primare compozite a tabelei dinamice medicamente2
-includerea cheilor primare ale tabelei statice in cheia compozita primara a tabelei dinamice este incorecta in aceasta situatie -fig urmatoarea prez situatia corecta, modificand relatiile dintre tabelele dinamice si statice din identifyind in non-identifying - aceasta deoarece existent datelor statice nu este dependenta de existent datelor dinamice(copil) -cu alte cuvinte, un articol al tabelei cod nu este dependent de existent unui component cu acel cod - aceasta nu este o regula generala pt a doua forma normala, dar in general este adevarat
-realtiile celei de-a doua forme normale treb intelese astfel: articolele din tabela Medicamente depind de existent articolelor din tabelele Cod si Pret; fiecare medicament treb sa aiba un cod si un pret; -relatia dintre tabela Medicamente si Pret plus Cod produs si Pret sunt de fapt one-to-zero, one sau many; -se pare ca plasand tabela medicamente in a doua forma normala se face economie de spatiu; s-au eliminat inreg duplicat (in tabelele cod si pret)