Baze de date
Modelul de date relationalModelul de date relationalModelul relational a fost propus de E. F. Codd in 1970 care prin articolul Un model relational de date pentru banci de date partajate de dimensiuni mari a stabilit cerintele teoretice pentru modelul de date relational. Modelul relational este un model formal de organizare conceptuala a datelor, destinat reprezentarii legaturilor dintre date si bazat pe teoria matematica a relatiilor. Modelul relational a fost definit cu rigoare matematica deosebita, fiind un mijloc performant de studiu al proprietatilor logice ale unui sistem de baze de date. Modelul relational este orientat spre multimi in timp ce sistemele ierarhice si retea sunt orientate spre fisiere. In modelul relational relatiile sunt utilizate pentru a reprezenta informatiile despre obiectele reprezentate in baza de date. Conform modelului relational datele sunt structurate logic sub forma de tabele care definesc relatii. Fiecare relatie are o denumire si este definita prin atribute care sunt coloanele tabelei. O relatie este reprezentata printr-un tabel bidimensional, in care coloanele corespund atributelor, iar liniile corespund inregistrarilor individuale. Ordinea coloanelor (atributelor) este arbitrara, relatia fiind invarianta la modificarea ordinii atributelor. Pentru fiecare atribut exista un domeniu de valori posibile. Domeniile pot fi diferite pentru fiecare atribut, dar este posibil ca mai multe atribute sa aiba acelasi domeniu. Conceptul de domeniu permite definirea sensului si a sursei de valori pentru fiecare atribut. Un element unei relatii este numit tuplu, si corespunde unei linii a tabelei. Tuplurile pot aparea in orice ordine fara a modifica semnificatia relatiei fiind formate din valori concrete pentru toate atribute ce definesc relatia. Numim intensitate a relatiei componenta fixa, invarianta, in timp a unei relatii, formata din structura relatiei impreuna cu domeniile de valori pentru atribute si eventualele restrictii asupra valorilor posibile. Numim extensie (stare) a relatiei partea care se modifica in timp, adica tuplurile. Gradul relatiei reprezinta numarul de coloane (atribute), iar cardinalitatea relatiei numarul de linii (tupluri) pe care le are tabela ce defineste relatia. Gradul relatiei este o parte a intensitatii relatiei. Cardinalitatea exprima starea relatiei la un moment dat si se modifica prin adaugarea, respectiv stergerea de tupluri. Spunem ca o relatie este normalizata daca este structurata adecvat. Baza de date relationala este o multime de relatii normalizate. Numim schema a relatiei denumirea relatiei urmata de o multime de perechi atribut, domeniu. Un domeniu este o multime de valori care poate fi definita fie enumerand elementele componente, fie definind o proprietate distincta a domeniului valorilor. Fie atributele A1, A2, . . ., An si domeniile finite D1, D2, . . ., Dn, nu neaparat disjuncte. Multimea reprezinta schema de relatie. Numim tuplu, sau n-tuplu, un element (V1,V2, . . .,Vn) al produsului cartezian D1 D2 Dn al domeniilor D1, D2, . . ., Dn, unde V1є D1, . , Vn є Dn. O relatie R pe multimile D1, D2, . . ., Dn este o submultime a produsului cartezian D1 D2 Dn, adica o multime de tupluri. Multimea numelor atributelor corespunzatoare unei relatii o numim schema relationala si o notam cu R (A1, A2, . . ., An). Putem reprezinta o relatie printr-un tabel bidimensional in care fiecare linie corespunde unui tuplu, iar fiecare coloana unui domeniu din produsul cartezian, de fapt unui atribut. Atunci cand se reprezinta o relatie sub forma unui tabel in care antetul coloanelor sunt inscrise numele atributelor, iar fiecare linie reprezinta tuplurile (V1,V2, . . .,Vn) in care fiecare valoare este luata din domeniul corespunzator. Numele atributului exprima semnificatia valorilor din calcul coloanei respective. Numarul atributelor defineste gradul relatiei, iar numarul de tupluri din relatie defineste cardinalitatea relatiei. O relatie are urmatoarele proprietati: are o denumire care identifica relatia in mod unic; fiecare element (celula) al relatiei contine exact o valoarea atomica (singulara); fiecare atribut are o denumire unica in cadrul relatiei; toate valorile unui tribut apartin domeniului de valori al atributului; ordinea atributelor nu este semnificativa; fiecare tuplu este distinct; nu exista tupliri duplicate; ordinea tuplurilor nu este semnificativa, dar poate optimiza accesul individual la fiecare tuplu. Atunci cand inseram tupluri intr-o relatie, este posibil ca un atribut sa fie necunoscut sau nedefinit. Pentru a reprezenta acest tip de atribut a fost introdusa o valoare conventionala in relatie, si anume valoarea null, care reprezinta o modalitate de a trata datele incomplete sau deosebite. Exista sistemele relationale care nu accepta conceptul de null, care nu are corespondent in logica booleana, din care face parte calculul predicatelor folosit pentru modelul relational. Numim relatie de baza o relatie caracterizata printr-o denumire, care corespunde unei entitati din schema conceptuala, ale carei tupluri sunt memorate in baza de date. O vizualizare este rezultatul dinamic al mai multor operatii relationale, care actioneaza asupra relatiilor de baza pentru a realiza o alta relatie. Numim relatie virtuala o vizualizare. Spunem ca un tabel este de tip virtual (view, vizualizare, vedere), daca reprezinta o relatie virtuala. Relatia virtuala nu exista fizic ca tabel in baza de date, ci doar ca definitie a relatiei, deoarece datele pe care le contine nu sunt in realitate memorate, ele fiind incluse in alte tabele reale care reprezinta relatii reale. Tabelul de tip view (vizualizare, filtru, relatie virtuala) reprezinta o filtrare a unui tabel initial, sau mai multor tabele legate intre ele, necesara unei anumite abordari, unei anumite aplicatii. Utilizarea vizualizarilor asigura securitatea tabelelor initiale si permite prezentarea informatiei in conformitate cu drepturile de acces al fiecarui utilizator, asigura accesul la date personalizat pentru fiecare utilizator si in plus simplifica operatiile complexe asupra relatiilor de baza. Deoarece vizualizarile sunt relatii virtuale toate reactualizarile efectuate asupra relatiilor de baza care sunt folosite la definirea relatiilor virtuale trebuie sa fie imediat reflectate imediat de toate vizualizarile afectate. Pentru o relatie trebuie sa fie posibila identificarea in mod unic a fiecarui tuplu prin valorile atributelor ce definesc relatia. Numim supercheie un atribut sau o multime de atribute care identifica in mod unic fiecare tuplu relatiei. Numim cheie candidat o supercheie pentru care nici o submultime de atribute nu este supercheie. Cheia candidat are doua proprietati: unicitatea si ireductibilitatea. Numim cheie primara cheia candidat selectata pentru a identifica in mod unic tuplurile din cadrul relatiei. Cheile candidat care nu sunt cheie principala se numesc chei alternative. Numim cheie straina un atribut sau o multime de atribute care sunt identice cu cele din cheia candidat ale unei alte relatii. Model relational este caracterizat de trei elemente: structura relationala a datelor; operatorii de tip relational folositi in model; regulile de integritate care se aplica asupra cheilor in model. In anul 1985, E.F. Codd a publicat un set de 13 reguli de fidelitate pe baza carora se apreciaza daca un sistem de gestiune de baze de date poate fi considerat relational. Majoritatea sistemelor de gestiune de baze de date considerate ca fiind de tip relational nu respecta absolut toate regulile definite de Codd, mai mult, in prezent, lista este reformulata si cuprinde 100 de regulii. Regula 0 regula gestionarii datelor: Un SGBD considerat ca fiind relational trebuie sa fie capabil sa gestioneze o baza de date prin posibilitatile sale relationale. Aceasta inseamna ca SGBD nu va folosi pentru definirea si manipularea datelor operatii care nu sunt de tip relational. Practic, majoritatea implementarile existente de SGBD nu respecta aceasta regula. Regula 1 regula reprezentarii datelor: Intr-o baza de date relationala, informatia este reprezentata explicit la nivel logic sub forma unor tabele ce poarta numele de relatii. Este regula cea mai importanta si conform lui E.F. Codd si in cazul in care un SGBD care nu respecta aceasta regula, nu poate fi considerat relational. Referirea la nivelul logic precizeaza ca elemente de constructii logice, cum sunt indecsi, nu au obligatoriu o reprezentare sub forma de tabele.
Regula 2 regula accesului garantat la date: Fiecare valoare de data (valoare atomica) dintr-o baza de date trebuie sa poata fi adresata in mod logic printr-o combinatie formata din numele relatiei, valoarea cheii primare si numele atributului. Se poate regasi orice valoare apartinand oricarui atribut al unei relatii, daca sunt specificate numele relatiei, numele atributului si valoarea cheii primare. Regula 3 regula reprezentarii informatiei necunoscute (tratarea sistematica a valorilor null): Un sistem relational trebuie sa permita utilizatorului definirea unui tip de date numit null pentru reprezentarea unei informatii necunoscute la momentul respectiv indiferent de tipul de data. Intr-un SGBD relational trebuie sa putem face diferenta intre valoarea zero, un sir vid de caractere si o valoare necunoscuta. Regula 4 regula dictionarelor de date (catalog dinamic on-line, bazat pe modelul relational): Asupra descrierii bazelor de date (informatii relative la relatii, vizualizari, indecsi, etc) trebuie sa se poata aplica aceleasi operatii ca si asupra datelor din baza de date. Descrierea bazei de date este reprezentata la nivel logic sub forma unor tabele care pot fi accesate in acelasi mod ca si datele efective. Regula 5 regula limbajului de interogare (sub-limbaje de date cuprinzatoare): Trebuie sa existe cel putin un limbaj care sa permita: (1) definirea datelor, (2) definirea vizualizarilor, (3) manipularea datelor (interactiv sau prin intermediul programului), (4) constrangerile de integritate, (5) autorizarea, (6) limitele tranzactiilor (inceput, executie, reluare). In general, toate implementarile SQL respecta aceasta regula. Limbajul permite utilizatorilor sa defineasca relatii si vizualizari, sa regaseasca informatia si sa o poata actualiza, sa verifice si sa corecteze datele de intrare etc. Regula 6 regula de reactualizare a vizualizarii: Toate vizualizarile care sunt teoretic reactualizabile pot fi reactualizate de sistem. Un SGBD trebuie sa poata determina daca o vizualizare poate fi actualizata si sa stocheze rezultatul interogarii intr-un dictionar de tipul unui catalog de sistem. Trebuie sa existe un mecanism prin care sa se poata determina daca anumite vizualizari pot fi actualizate sau nu. Majoritatea implementarilor SQL stabilesc aceasta, in functie de variantele instructiunii de selectie utilizate. Regula 7 regula limbajului de nivel inalt (operatiile de inserare, reactualizare si stergere de nivel inalt): Regulile de manipulare asupra unei relatii luata ca intreg sunt valabile atat pentru operatiile de regasire a datelor, cat si asupra operatiilor de inserare, actualizare si stergere a datelor. Un SGBD relational nu trebuie sa oblige utilizatorul sa caute intr-o relatie, tuplu cu tuplu, pentru a regasi informatia dorita. Operatiile de manipulare a datelor pot fi aplicate atat in mod interactiv cat si prin program, intr-un limbaj gazda. Regula 8 regula independentei fizice a datelor: Programele de aplicatie si activitatile utilizatorilor nu depind de modul de stocare a datelor sau de modul de acces la date. Intr-un SGBD relational trebuie sa se separe aspectul fizic al datelor (stocare sau acces la date) de aspectul logic al datelor. Regula 9 regula independentei logice a datelor: Programele de aplicatie si activitatile utilizatorilor trebuie sa fie transparente la modificarile de orice tip efectuate asupra datelor. Orice modificare efectuata asupra unei relatii, nu trebuie sa afecteze operatiile de manipulare a datelor, programele de aplicatie si mecanismele de interogare directa nu sunt afectate de modificarile facute asupra datelor. Regula 10 regula independentei datelor din punct de vedere al integritatii: Constrangerile de integritate specifice unei baze de date relationale nu vor fi definite programele de aplicatie ci de sub-limbajul relational de date, urmand a fi memorate in catalogul sistem. (Regulile de integritate trebuie sa fie definite intr-un sub-limbaj relational, nu in programul de aplicatie). Limbajul SQL permite definirea de restrictii privind integritatea datelor si stocarea lor in catalogul de sistem prin aceasta asigurandu-se controlul centralizat asupra constrangerilor. Regula 11 regula independentei datelor din punct de vedere al distribuirii: Sub-limbajul de manipulare a datelor trebuie sa permita utilizarea acelorasi programe de aplicatie si interogari (sa fie invariante din punct de vedere logic)pentru a accesa date centralizate sau distribuite (Distribuirea datelor pe mai multe calculatoare dintr-o retea de comunicatii de date, nu trebuie sa afecteze programele de aplicatie si interogarile, daca si ori de cate ori datele sunt centralizate sau distribuite fizic). Independenta de distributie presupune ca un program de aplicatie care acceseaza sistemul SGBD pe un singur calculator trebuie sa functioneze fara modificari si intr-o retea chiar daca datele sunt mutate de pe un calculator pe altul, utilizatorul percepand datele fara a cunoaste locul in care sunt stocate. Programele de aplicatie trebuie sa functioneze fara modifica si intr-o retea, chiar daca datele sunt transferate de pe un calculator pe altul. Regula 12 regula versiunii procedurale a SGBD (nonsubversiune): Orice componenta procedurala a unui SGBD trebuie sa respecte aceleasi reguli de integritate ca si componenta relationala (orice limbaj de nivel inferior trebuie sa respecte aceleasi reguli de integritate exprimate in limbajul relational de nivel inalt). Cele 13 reguli pot fi grupate in cinci domenii de functionalitate: - reguli fundamentale (regula 0 si regula 12); - reguli structurale (regula 1 si regula 6); - reguli de integritate (regula 3 si regula 10); - reguli de manipulare a datelor (regula 2, regula 4, regula 5, regula 7); - reguli privind independenta de date (regula 8, regula 9 si regula 11). Un SGBD este minimal relational daca datele din cadrul bazei de date sunt reprezentate prin valori in tabele, nu exista pointeri observabili de catre utilizatori, iar sistemul suporta operatorii relationali de proiectie, selectie si compunere naturala, fara limitari impuse din considerente interne. Un SGBD este complet relational daca este minimal relational si, in plus, sistemul suporta restrictiile de integritate de baza (unicitatea cheii primare, constrangerile de referinta, integritatea entitatii) si precum si toate operatiile de baza ale algebrei relationale. Un SGBD relational indeplineste functiile unui SGBD, cu anumite particularitati care decurg din conceptia de organizare a datelor, respectiv din modelul relational. Fiecare SGBD relational implementeaza modelul relational intr-o maniera proprie care il diferentiaza de restul sistemelor relationale. Caracterizarea unui SGBD relational se poate realiza la nivelul clasei de SGBD relationale, in sensul caracterizarii globale, unitare in raport cu celelalte tipuri de SGBD, sau la nivelul unui SGBD relational individual in sensul caracterizarii particularitatilor sale, in raport cu alte SGBD de tip relational. Realizarea functiilor unui SGBD relational se face cu ajutorul unor instrumentele si mecanisme de lucru specifice de tip relational, care le separa de sistemele considerate ca fiind nerelationale: - un limbaj relational pentru descrierea datelor la nivel fizic, logic si conceptual; - un limbaj relational pentru manipularea datelor; - mecanisme pentru controlul integritatii semantice a datelor; - mecanisme pentru optimizarea cererilor de date; - mecanisme pentru asigurarea coerentei datelor in conditiile accesului la date; - utilitare pentru generarea de formulare si rapoarte, utilitare pentru generarea de aplicatii, utilitare pentru generarea unor statistici referitoare la starea si activitatea bazei de date, etc. Un obiectiv important a proiectarii unei baze de date de tip relational il reprezinta gruparea atributelor in relatii astfel incat redundanta datelor sa fie minima. Relatiile care contin date redundante pot crea probleme, denumite anomalii de reactualizare, care clasificate in: anomalii de stergere constau in faptul ca anumite date care urmeaza sa fie sterse, fac parte din tupluri in care se gasesc si alte date care mai sunt necesare in continuare, ori stergerea facandu-se la nivelul tuplului, acestea se pierd; anomalii de inserare adaugare constau in faptul ca anumite date care urmeaza sa fie adaugate fac parte din tupluri incomplete (pentru care nu se cunosc toate datele), ceea ce face ca acestea sa nu poata fi adaugate; anomalii de modificare rezulta din faptul ca este dificil de modificat o valoare a unui atribut atunci cand ea apare in mai multe tupluri ale relatiei. Spunem ca un atribut B al unei relatii R depinde functional de un alt atribut A, atunci cand fiecarei valori a atributului A ii corespunde exact o anumita valoare atributului B (A B). Dependenta functionala este o proprietate a semnificatiei sau a semanticii atributelor. Semantica indica modul in care atributele sunt legate unele de altele si specifica dependentele functionale ale acestora. Dependenta functionala este specificata ca o constrangere intre atribute. Daca atributul B depinde functional de atributul A, spunem ca atributul A este determinatul atributului B. Spunem ca o dependenta functionala este totala sau completa daca cele doua atribute au o dependenta functionala in ambele sensuri (A B si B A). Pentru trei atribute A, B si C, in care A B si B C spunem ca C este dependent tranzitiv de A prin intermediul atributului B, daca avem si A C. In acest caz spunem ca exista o dependenta tranzitiva. Eliminarea acestor anomalii se realizeaza cu ajutorul operatiei numite normalizare, care este o tehnica formala care se bazeaza pe cheile primare, respectiv cheile candidat ale relatiilor si pe dependentele functionale. Tehnica include o multime de reguli care pot fi utilizate pentru testarea relatiilor individuale. Daca o anumita cerinta nu este indeplinita pentru o anumita relatie, atunci relatia in cauza va fi descompusa in relatii care satisfac in mod individual cerintele normalizarii. Normalizarea presupune parcurgerea unei succesiuni de pasi, fiecare pas corespunzand unei forme normale. Prin parcurgerea etapelor de normalizare relatiile devin progresiv mai restrictive ca format si mai putin vulnerabile la anomaliile de actualizare. Procesul de normalizare a relatiilor se realizeaza in mai multi pasi, incepand cu forma normala unu (1NF) si ajungand la forma normala cinci (5NF). Pentru modelul relational doar prima forma normala (1NF) este de importanta critica, celelalte forme normale fiind optionale. Pentru a inlatura aceste anomalii, E.F. Codd a stabilit initial trei forme normale pentru relatii si a introdus procesul de normalizare care se bazeaza pe notiunea de dependenta functionala ca relatie intre atributele unei entitati care are un caracter invariant. Teoria normalizarii se ocupa cu imbunatatirea succesiva a schemei conceptuale, fiind satisfacute, in acelasi timp, urmatoarele conditii: conservarea datelor, adica in schema conceptuala finala sa existe toate datele din cadrul schemei initiale; conservarea dependentelor dintre date, adica sa se pastreze tipurile de relatii dintre entitati; descompunerea minimala a relatiilor initiale, adica in schema conceptuala finala nici o relatie nu trebuie sa fie continuta intr-alta. O relatie este in forma normala unu (1NF), daca si numai daca toate atributele ei contin numai valori atomice, adica o sigura valoare si numai una. In plus, un tuplu nu trebuie sa contina atribute sau grupuri de atribute repetitive. Este forma de baza a relatiilor, care figureaza ca cerinta minimala la majoritatea sistemelor de gestiune a bazelor de date de tip relational. O relatie este in a doua forma normala (2NF), daca este in forma normala unu si oricare dintre atributele non-cheie este dependent functional complet de cheia primara a relatiei. O relatie este in a treia forma normala (3NF), daca se gaseste in forma normala doi si toate atributele non-cheie sunt dependente tranzitiv de cheia primara. In afara primelor trei forme normale au fost introduse si formele normale: forma normala Boyce Codd (BCNF), a patra forma normala (4NF si a cincia forma normala 5NF care conduc la diminuarea redundantei in baza de date. Trecerea de la forma 3FN la 4FN si 5FN se face operand asupra cheilor compuse intre ale caror atribute apar relatii care genereaza dependente ce nu sunt functionale, numite dependente multi-valoare. O relatie este in forma normala Boyce Codd (BCNF), daca fiecare determinant este o cheie candidat. A patra forma normala (4NF elimina redundantele datorate relatiilor de tip n:m, adica a dependentelor multiple. A cincia forma normala (5NF elimina dependentele multiple de tip ciclic, avand ca rezultat o descompunerea a relatiilor de tip uniune fara pierderi, din relatiile rezultate in urma descompunerii putand fi reconstituita relatia initiala. Dependenta de tip uniune fara pierderi este o proprietate a operatiei de descompunere, care garanteaza ca nu sunt introduse linii false atunci cand relatiile rezultare in urma descompunerii sunt reunite printr-o operatie de uniune naturala. Operatorii modelului relational Operatorii modelului relational definesc operatiile care pot fi efectuate asupra relatiilor, pentru realizarea functiilor de prelucrare asupra datelor din baza de date. Modelul relational foloseste operatori relatie din algebra relationala si calculul relational. Algebra relationala si calculul relational sunt limbaje formale utilizate pentru bazele de date relationale ca suport pentru limbajul de manipulare a datelor, de nivel inalt. Algebra relationala a fost introdusa de E.F. Codd in 1971 ca o multime de operatii formale in care operantii si rezultatul sunt relatii si care actioneaza asupra uneia sau a mai multor relatii pentru a defini o noua relatie, fara a modifica relatiile initiale. Cei cinci operatorii fundamentali ai algebrei relationale sunt fie operatori folositi pentru operatiile de regasire: selectia (sau restrictia), proiectia, produsul cartezian, reuniunea si diferenta, si alti trei operatori pentru operatiile de uniune, intersectie si impartire, adica operatori traditionali pe multimi (UNION, INTERSECT, PRODUCT, DIFFERENCE) si operatori relationali speciali (PROJECT, SELECT, JOIN, DIVISION). Operatorii de selectie si proiectie sunt unari, operand asupra unei singure relatii, iar ceilalti sunt operatori binari, actionand asupra unei perechi de relatii. In algebra relationala se specifica in mod explicit o anumita ordine pentru evaluarea oricarei expresii, ceea ce implica o anumita strategie de evaluare a interogarii bazei de date. In calculul relational o interogare precizeaza ce va fi extras din baza de date fara a se preciza modul de evaluare a unei interogari. Calculul relational este o adaptare a calculului predicatelor din logica simbolica aplicat pentru interogarea bazelor de date. In logica simbolica, un predicat este o functie de mai multe variabile, care are o valoare de adevar. Inlocuind variabile cu valori se obtine o expresie numita propozitie, care poate fi adevarata sau falsa. Variabilele iau valori dintr-un domeniu dat. Calculul relational se prezinta sub doua forme: orientat spre tupluri si orientat spre domenii. Pe baza unor predicate initiale, prin aplicarea unor operatori ai calculului cu predicate (conjunctia, disfunctia, negatia, cuantificatorul existential si cuantificatorul universal) se pot defini noi predicate, noi relatii. J.D. Ullmann a demonstrat echivalenta dintre algebra relationala si calculul relational. Motiv pentru care orice relatie posibil de definit in algebra relationala poate fi definita si in cadrul calculului relational, si reciproc. Integritatea referentiala Constrangerile de domeniu sunt restrictii care se aplica asupra multimi de valori permise pentru atributele relatiilor. Regulile de integritate sunt constrangeri sau restrictii ce se aplica tuturor instantelor din baza de date, adica asertiuni pe care datele continute in baza trebuie sa le satisfaca si prin care se asigura corectitudinea datelor. Se face distinctie intre regulile structurale, care sunt inerente modelarii datelor si regulile de functionare (comportament), care sunt specifice unei aplicatii particulare. Exista trei tipuri de constrangeri structurale (de cheie, de referinta, de entitate) ce constituie multimea minimala de reguli de integritate pe care trebuie sa le respecte un SGBD relational si care sunt definite in raport cu notiunea de cheie a unei relatii. Integritatea entitatilor impune ca intr-o relatie de baza (care corespunde unei entitati in schema conceptuala) nici un atribut al unei chei primare nu poate fi null. Conform reguli de integritate referentiale daca o relatie are o cheie externa atunci orice valoare a cheii externe va coincide cu valoarea unei chei candidat a unui tuplu in relatia de baza a acesteia sau este o valoare null. Sunt formulate trei reguli de integritate structurala: - unicitatea cheii: cheia primara trebuie sa fie unica si minimala; - integritatea entitatii: atributele cheii primare trebuie sa fie diferite de valoarea null; - integritatea referirii: o cheie externa trebuie ori sa fie null in intregime, ori sa corespunda la o valoare a cheii primare asociate.
|