Sunteți pe pagina 1din 101

1. INTRODUCERE 1.1.

ORGANIZAREA DATELOR Principala form de lupt a omului mpotriva timpului este micorarea intervalului de desfurare a diferitelor activiti, care dau impresia prelungirii perioadei de via. Pentru realizarea acestui deziderat omul modern utilizeaz creaia sa, calculatorul, care pe lng calcule aritmetice poate prelucra mari cantiti de informaie ntr-un timp scurt, datorit noii sale configuraii i a limbajelor de programare. Eficiena unui sistem informatic dat de regsirea automat a datelor, dup diferite criterii, ntr-un timp ct mai scurt, depinde n mare msur de modul de organizare a datelor. Prin organizarea datelor se nelege definirea, structurarea, ordonarea i gruparea lor n colecii a cror elemente sunt omogene i stabilirea de relaii ntre colecii i ntre elementele unei colecii precum i nregistrarea lor pe un suport informaional prelucrabil ntr-un sistem de calcul. Organizarea datelor are ca urmare i micorarea spaiului de memorie ocupat de date, care apar o singur dat n sistem, precum i flexibilitatea datelor fr a modifica programele care le gestioneaz. n organizarea datelor se utilizeaz trei concepte de baz: entitate, atribut i valoare. Relaia dintre aceste noiuni este dat de asocierea mai multor atribute unei entiti i a unei mulimi de valori atributelor. Noiunea de entitate nu poate fi definit, deoarece este o noiune primar. Mai multe elemente de acelai tip reprezint o entitate. Cteva exemple de entiti sunt: tranzistor, rezistor, persoan, student etc. Entitatea este un obiect concret sau abstract reprezentat prin proprietile sale. Proprietile eseniale care descrie o entitate se numesc atribute, care pentru anumite elemente ale entitii poate lua valori din anumite mulimi numite domeniul atributului respectiv. Deobicei aceste mulimi sunt submulimi ale mulimii numerelor reale, ale mulimii numerelor ntrgi sau a mulimii irurilor de caractere. Deci orice proprietate a unui obiect poate fi exprimat printr-o pereche (atribut,valoare). Cum o entitate are mai multe proprieti ea poate fi reprezentat de mai multe perechi (atribut,valoare). Exemplu. Un tranzistor poate avea atributele nume, beta, tensiune de alimentare, frecven maxim, putere. Tranzistorul poate fi reprezentat de perachile (atribut,valoare) (nume,BC 107), (beta, 100), (tensiune de alimentare,10 V), (frecven maxim 10MHz), (putere, 0,5W). Se observ c atributul nu caracterizeaz o entitate ci o clas de entiti numit entitate grup, care n exemplul nostru este tranzistor i se mai numete i tip de entiti. Noiunea de atribut este cunoscut i sub numele de cmp sau caracteristic. Fiecare atribut este caracterizat de natura valorilor pe care le poate lua. Se numete cheie atributul sau mulimea de atribute pentru care valorile asociate determin n mod unic orice element al unei entiti. Dac exist elemente care s aib aceleai valori pentru toate atributele se ia un atribut suplimentar reprezentat de numrul asociat elementului n entitatea dat. Conceptul de dat este un model de reprezentare a informaiei, accesibil unui anumit procesor (om, program, calculator) care prelucreaz informaia PENTRU a obine informaii noi despre fenomenle lumii reale. Logic o dat se definete prin identificator,atribut i valoare. Exemplu: TNR - IDENTIFICATOR

PROFESIA STUDENT

- ATRIBUT - VALOARE

1.2. RELAII NTRE DATE Numim relaie ntre entitile E1 , E 2 ,..., E n orice submulime a produsului ( e1 , e 2 , ..., e n ) unde cartezian al mulimilor elementelor de forma e1 E1 , e2 E 2 ,..., e n E n . O astfel de relaie o notm cu REL( E1 , E 2 ,..., E n ) unde REL este numele asociat relaiei care are aritatea k. De cele mai multe ori k=2 Definiia 1. Se numete relaie binar pe mulimea A nevid de date o submulime R a produsului cartezian AxA care ndeplinete o proprietate (relaie). Exemplu. Se consider mulimea A a tranzistoarelor dintr-o magazie i relaia de tipul BC107 asociaz fiecrui tranzistor din A pe toi cei care sunt de tipul BC107 cu condiia s fac parte din A. R={(x,y)AxA/x,yA i x este de acelai tip cu y} Elementele asociate prin relaia R sunt acele elemente x,y pentru care (x,y) R, deci x i y sunt de acelai tip (BC107) i simbolizm prin xRy. Proprieti ale relaiei binare dintre date. 1. Reflexivitatea. Relaia R peste mulimea A este reflexiv dac pentru orice x A avem xRx. 2. Simetria. Relaia R peste mulimea A este simetric dac pentru orice x,y A relaia xRy implic yRx. 3. Antisimetria. Relaia R este antisimetric pe mulimea A dac pentru orice x,y A din xRy i yRx rezult x=y. 4. Tranzitivitatea. Relaia R peste mulimea A este tranzitiv dac pentru orice x,y,zA care ndeplinesc xRy i yRz satisface i relaia xRz Definiia 2. O relaie binar R definit pe A care este reflexiv, simetric i tranzitiv se numete relaie de echivalen. Definiia 3. Relaia R definit pe A se numete de ordine total dac pentru orice x,yA avem xRy sau yRx. Definiia 4. Dac relaia R definit pe A este reflexiv, asimetric i tranzitiv se numete relaie de ordine. Definiia 5. Relaia R definit pe A este de preordine dac este reflexiv i tranzitiv. Dup numrul de elemente dintr-o entitate care corespund unui element dintr-o alt entitate se pote face o clasificare a relaiilor binare astfel: - Relaie de unu- la- unu notat (1:1), cnd fiecrui element dintr-o entitate i corespunde cel mult un element dintr-o alt entitate i invers. - Relaie unu- la -mai muli notat (1:N), cnd fiecrui element din prima entitate i corespunde N elemente din a doua entitate i fiecrui element din a doua entitate i corespunde cel mult un element din prima entitate. - Relaie mai muli -la- mai muli notat (M:N ), cnd unui element din prima entitate i corespunde mai multe elemente din a doua entitate i reciproc. n practic cele mai ntlnite sunt ultimele dou tipuri de relaii.
1.3.

STRUCTURI DE DATE

Definiia 6. O colecie de date ntre care sau stabilit o mulime de relaii care ne ajut n realizarea de modaliti de selecie i identificare a elementelor se numete structur de date.
2

Structura de date poate conine datele unui tip sau a mai multor tipuri de colecii. Structura de date are un acces secvenial dac localizarea unui element al ei se face innd cont de elenentele care se afl naintea sa n ordinea specificat. Structura are acces direct dac un element al ei poate fi selectat fr a ine cont de celelalte. Elementele unei structuri de date pot fi ele la rndul lor o structur de date. Crearea unei structuri de date ncepe cu memorarea datelor sub form iniial ntr-o memorie. Pentru prelucrarea datelor este necesar accesul la elementele structurii care poate fi secvenial sau direct. Datele structurii trebuiesc actualizate ceea ce duce la adougarea,tergerea unor elemente, modificarea valorii i a relaiilor dintre elemente. Alte operaii asupra structurii sunt: sortare care const n aranjarea elementelor dup anumite criterii; ventilarea prin care structura se sparge n mai multe structuri; fuzionarea prin care din mai multe structuri se face o nou strucur. Eficiena realizrii operaiilor asupra structurii de memorie depinde de relaiile ntre datele materializate pe suportul de memorie. Structurile de date sunt de acelai tip dac au aceeai organizare i sunt supuse acelorai operaii. Definiia 7. O mulime de date ntre care s-au stbilit relaii i pentru realizarea operaiilor se utilizeaz un grup de operatori de baz cu o anumit semantic poart numele de tip de structur de date. 1.3.1. Clasificarea structurilor de date. Clasificarea structurilor de date se face dup mai multe criterii. 1. Astfel, dup tipul componentelor avem:

omogene cu elementele de acelasi tip; structuridedate eterogene, cuelementediferite.


2.

Dup posibilitatea modificrii valorilor sau structurii sau a valorii i structurii avem:

statice, careauacelasinumrdeelemente petimpul existentei; structuridedate dinamice, care permit mod ificareavalorilor sistrucurilor.
3.

Dup nivelul de structurare al datelor avem:

log ice, serefer la ordonarea datelor sioperatori detratare a datelor; structuri de date fizice, se refer la implementarea si reprezentarea pe sup orti inf ormationali.
1.3.2. Tipuri de structuri de date

Structura punctual este reprezentat de o entitate izolat care nu are relaii cu alte entiti.
1.

Structura liniar este reprezentat de o colecie de date ntre elementele creia este stabilit o relaie de ordine total. Acestei structuri i corespunde o mulime de colecii de date care este n relaii ierarhice de includere ( fiecare colecie are o singur colecie la nivel superior i inferior). Fiecrei nregistrri din colecia de nivel superior i corespunde una sau mai multe nregistrri ale coleciei de nivel inferior.
2.

Fig.1. Structuri liniare a) simpl b) inelar

Pentru structura simpl din figura 1 cardinalul mulimii elementelor iniiale i terminale este egal cu 1. Card(M(D))=Card(m(D))=1. Primul i ultimul element nu au predecesori respectiv succesori. Dac ntre ultimul i primul element exist o relaie de cuplu atunci structura liniar devine inelar sau circular figura . Structura arborescent este o colecie de date ntre elementele crea exist o relaie de ordine. Aceast structur are urmtoarele proprieti: Exist un singur element numit rdcin; Orice nod are un predecesor imediat unic; Orice nod neterminal are un numr finit de succesori imediai; Relaiile stabilite ntre noduri sunt de tipul (1:m).
3.
a

b c

f 4

h i

a
a

e f g h i j k

b Fig. 2. Arbori de date a) binar b) stratificat Definiia 9. Se numete drum de lungime n-1 de la n i1 la n in succesiunea de noduri ( n i1 , n i 2 ,..., n in ) unde n ik este succesorul lui n i k 1 , pentru orice k, kn+1. Drumul de lungime maxim reprezint nlimea arborelui. Un arbore care are ordinul 2 se numete arbore binar iar cel cu ordin mai mare ca 2 se numete arbore multici. Definiia 10. Un arbore se numete echilibrat dac diferena dintre drumurile de la rdcin la punctele terminale este cel mult 1. Structura arborescent poate avea elementele structurate arborescent, n reea sau liniar.
4.

Structura reea este structura unei colecii de date ntre elementele creia exist o relaie de preordine. Acast structur are urmtoarele proprieti: O reea este un graf care realizeaz o legtur bidirecional ntre dou noduri. Un nod poate avea mai muli predecesori I el poate fi pedecesorul predecesorului su. n acest caz n reea apar cicluri pentru care nodul final coincide cu cel iniial. Cardinalul mulimii nodurilor iniiale este mai mare ca 1, relaie ndeplinit i de cardinalul nodurilor finale.

b f d h g

a c

a)

b a c

d e

b) Fig. 3 Reele de date a) simpl b) complex


ntre elementele reelei se stabilesc relaii de tipun (n:m). Dac orice cuplu al reelei este simetric reeaua este simpl n caz contrar este complex. 5.

Structura relaional este format din mai multe tabele (relaii, tablouri) de date elementare, fr o legtur aparent ntre ele componentele unei tabele fiind aduse ntruna din formele normate, figura 4. Starea n care se gsete structura tabelului n funcie de cerinele impuse se numete form normal. Operaiile pe aceste structiri se realizeaz cu operatori relaionali ai algebrei relaionale sau ai calculului relaional. TRANZISTOARE

MARCA

NUME

Umax.al.

BETA

f MAX

PUTERE

Fig. 4

Tabel de date

1.4. Componentele unei baze de date folosite n Access 95 O baz de date n Access 95 este compus din mai multe entiti, numite obiecte . Acestea sunt : tabele ( tables), interogri ( queries), formulare (forms), rapoarte ( reports), comenzi macro ( macros) i module ( modules) . O baz de date Access 95 este prezentat n figura 1. Observai n partea de sus a ferestrei exact obiectele amintite (sub form de etichete), ce compun baza de date . Fig. 1 - Fereastra unei baze de date Access 95 .

4.1. Descrierea obiectelor 4.1.1. Tabele Am spus mai nainte c o BD este o colecie de date corelate, cu referire la un anumit subiect ( sau entitate). Toate aceste date( informaii) vor fi stocate n tabele. Pentru fiecare subiect ( entitate) trebuie creat un nou tabel . De exemplu, dac se dorete o BD cu referire la o bibliotec, atunci ne-am putea gndi la colecionarea datelor despre : - cri( cu numele i prenumele autorului, titlul crii, editura, anul apariiei, numar ISBN, numrul de cot al crii respective .a.) ; - gestionarea persoanelor nscrise la acea bibliotec( fiele de nscriere, cu numele i prenumele cititorului, adres, numr de telefon etc.) ;
7

mprumuturi ( ce titlu, cui, pe ce perioad) ; achiziii i mprosptarea fondului de carte( titlul nou achiziionat, numrul de buci, disponibilul din depozit) . Pentru fiecare dintre aceste posibile entiti trebuie creat un tabel. Structura unui tabel Access 95 este artat n figura urmtoare( figura 2) .

Fig. 2 - Structura unui tabel . Coninutul unui tabel

Orice tabel este organizat sub forma unei grile, cu rnduri i coloane . ( vedei figura 2) . Rndurile se numesc nregistrri (tuple), iar coloanele se numesc cmpuri (domenii). Un rnd conine informaii despre un exemplar al entitii respective( n exemplul dat anterior, pentru entitatea carte vom avea mai multe titluri, pentru cititor mai multe persoane). O coloan ine un anumit atribut ( o caracteristic) al ( a) entitii reprezentate n acel tabel( n exemplul anterior autorul unei cri, titlul crii sau perioada de mprumut sunt fiecare o caracteristic a entitii de care aparin) . Fiecare cmp al unui tabel va conine acelai tip de dat pentru toate exemplarele . Deci un tabel conine dou tipuri de informaie : - informaiile care descriu modul de alctuire al tabelului, adic structura tabelului , care este dat de nregistrri ; - datele propriu-zise, adic informaia coninut n cmpuri . 1.4.2. Interogri ( queries) O interogare reprezint o ntrebare pe care o formulm, n legtur cu informaiile colectate n baza de date. n urma unei astfel de ntrebri, mediul Access ne ntoarce o mulime de nregistrri, care pot face parte din unul sau mai multe tabele ale BD interogate . Mulimea de nregistrri poart numele de set dinamic rezultat al interogrii, sau mai scurt set dinamic rezultat . Am subliniat dinamic, deoarece este o calitate important. Ea ne spune c dac n tabelul, sau tabelele surs ( care au furnizat setul) apar modificri, acestea se vor reflecta i n set ( el coninnd valorile cele mai recente) . Utilizarea interogrilor
8

Rolul unei interogri este s extrag din tabelele BD datele care ne sunt necesare la un moment dat . O interogare are diferite utilizri : afiarea numai a nregistrrilor care corespund criteriilor pe care le stabilim; afiarea nregistrrilor ntr-o anumit ordine ( tot pe baza unor condiii) ; combinarea nregistrrilor din mai multe tabele ; realizarea de modificri similare n mai multe nregistrri dintr-un tabel, simultan ; tergerea unor nregistrri ; .a. .

n majoritatea situaiilor, Access permite editarea datelor afiate de o interogare. Rezultatul editrii este scris napoi n tabelul( tabelele) care au furnizat setul . Atenie : aceast comportare trebuie s fie privit i dintr-un alt punct de vedere, diferit de cel ce o consider un avantaj . Astfel, o interogare poate furniza un numr de titluri de cri ce trebuie nlocuite din cauza uzurii. Printre ele se poate ntmpla s existe i una( sau mai multe) care la o a doua privire s nu necesite nlocuirea. Deci le tergem din rndul celor ce trebuie neaprat schimbate. tergerea va fi reflectat i n tabelul care a furnizat acele titluri pentru nlocuire. Rezultatul ? Se pierde definitiv nregistrarea corespunztoare acelui titlu ! Trebuie reinut : o interogare nu are date proprii , ci opereaz cu ceea ce se citete din tabele sau cu ceea ce se scrie n tabele . Analogia cu o funcie C cu parametri luai prin referin este evident . 4.3. Formulare ( forms) Formularul este o fereastr prin care se pot : introduce date n BD ( cel mai adesea) ; vizualiza datele unei nregistrri sau din setul dinamic rezultat al unei interogri ; modifica sau elimina date .

Putei vedea cum arat un formular n figura 3.

Fig. 3 Un tip de formular Access 95 Coninutul unui formular

Un formular poate conine subformulare pentru afiarea de date asociate . De exemplu cte cri s-au primit n ultima sptmn, sau ce cititori au ntrziat predarea. Formularele pot conine i butoane ( controale) care realizeaz aciuni specifice : deschiderea altor formulare sau tiprirea rapoartelor. Avnd n vedere toate acestea se poate spune c formularul reprezint interfaa utilizator a unei BD Access 95 . Reinei c un formular conine dou tipuri de informaie : - informaii de structur care dau nfiarea i alctuirea( adic : amplasarea; mrimea i forma; numrul, tipul i caracteristicile seciunilor; numrul, tipul, amplasarea i atributele controalelor .a. ) ; - datele propriu-zise, afiate . 4.4. Rapoarte( reports) n opoziie cu formularele ( folosite la operaiile de intrare intr-o BD Access 95) rapoartele ndeplinesc operaiile de ieire . Datele sunt dirijate cel mai adesea ctre o imprimant, astfel c orice dorii s tiprii va arta cel mai bine sub form de raport. Atunci cnd vom crea rapoarte vom avea la dispoziie din partea Access 95 programe wizard pentru crearea tipurilor uzuale ale unui astfel de obiect. Un raport arat ca n figura urmtoare ( figura 4).

Fig. 4 Un raport Access 95 . 4.5. Comenzi macro( macros) O comand macro ( sau macro-comand) este un obiect al unei BD Access95 ce conine o secven de aciuni ce se repet la dorina noastr . V putei gndi la acest obiect ca la un macro din limbajul de asamblare . Ele se pot ataa unui formular, raport, unui buton( numit i control, ca la interfeele grafice Windows), unui element de meniu sau unei combinaii de taste .
10

Comenzile macro nlocuiesc programarea( care n Access 95 se face folosind Visual Basic pentru aplicaii VBA) pentru aciunile de rutin, ca deschiderea unui formular sau tiprirea unui raport . Pot fi folosite n cazul proiectrii unei interfee simple ctre baza noastr de date . Nu trebuie ns exagerat folosirea comenzilor macro, deoarece oricum ele nu sunt att de eficiente precum o funcie a limbajului de programare. De asemenea duce la pierderea unor posibiliti oferite de module( vezi 2.1.6). Comenzile macro au rol important i n : - verificarea i validarea datelor ; - stabilirea valorilor pentru proprietile obiectelor( controale, formulare, machete) ; - crearea interfeelor ntre aplicaii i user . Cum sunt create comenzile macro ? Comenzile maco sunt create de ctre programator. Nu se poate ca o astfel de comand s fie creat prin nregistrarea unei secvene de combinaii de taste . O comand de acest fel este compus din aciuni aa cum am amintit mai sus . Aciunea ndeplinete o sarcin bine-definit. Unele aciuni au nevoie de informaii suplimentare. Acestea sunt argumentele . De exemplu dorim s deschidem un formular. Care ? Numele acestuia este absolut necesar macro-ului de deschidere al formularului. Trebuie, deci, furnizat ca atare, pentru a da sens operaiei de deschidere. Aciunile ce compun o macro-comand sunt oferite de Access 95 . Mediul ne pune la dispoziie o list derulant de aciuni pe care le putem folosi. Dar detaliile fiecrei operaii trebuie furnizate de noi . Reinei c : o macro-comand Access 95 reprezint un set de aciuni ; o macro-comand Access 95 este analog unui macro din limbajul de asamblare sau din C. Ea este codificat aici n limbajul definit de setul de aciuni disponibile; folosind macro-comenzile facem tot o programare, dar la un nivel mai rudimentar.

4.6. Module( modules) Pentru a discuta despre un modul trebuie s spunem cte ceva despre programarea n VBA . Astfel, ca n orice limbaj de programare, un program VBA este compus din instruciuni . Mai multe instruciuni formeaz o procedur ( denumirea trebuie respectat, ca n limbajul de asamblare ; nu asociai procedura cu funcia din C). Procedurile sunt de dou feluri : - dac realizeaz o activitate sau operaie se numesc proceduri Sub . Cu o astfel de procedur se trateaz evenimentele din cadrul unui formular, raport sau control( buton) . De aceea mai poart numele de proceduri de tratare a evenimentelor ; dac realizeaz calculul unei valori se numesc proceduri Function ;

11

Deducei de aici c procedura nu poate fi numit funcie . Putei folosi totui termenul de funcie pentru uurin, dar trebuie s facei diferena ntre funcie i procedur . Coninutul unui modul Modulul este un obiect Access ce conine o colecie de declaraii, instruciuni i proceduri din VBA . V putei gndi la el ca la un mic program, dar care nu are puterea de a rula ! De obicei se memoreaz n acelai modul proceduri nrudite pentru rezolvarea unei anumite sarcini. Tot ce se face cu o comand macro se poate face cu un modul, i chiar mai mult. Un modul poate fi de trei feluri : - modul pentru machete ; - modul pentru rapoarte ; - modul global . . Forma unui modul Un modul asigur organizarea procedurilor unei aplicaii. Fiecare modul conine : o seciune pentru declaraii ; o seciune de proceduri, unde apar procedurile ce prezint legturi logice ntre ele ( aa cum am spus mai sus) .

Dup cum se vede, forma unui modul este apropiat ca structur de cea a unui program, din care lipsete acea parte ce i-ar justifica denumirea ( i anume funcia main( ) n C, sau etichetele Start end Start din limbajul de asamblare ). 4.1.1. Crearea unei noi baze de date O BD nou se poate crea n dou moduri, depinznd de momentul ales pentru creare . Astfel : 1. La start : atunci cnd lansai mediul Access 95, va aprea o caset de dialog ( figura 5) .

12

Fig. 5 Caseta de dialog ce apare automat la lansarea Access 95 . De aici avei dou opiuni : 1. Fr ajutorul programului wizard : prin selectarea opiunii Blank Database ( figura 6), ajungei la fereastra artat n figura 7. Aceasta este fereastra n care dai un nume noii baze de date pe care o creai.

13

Fig. 6 n caseta de dialog de la start, se alege opiunea BlankDatabase. Fig. 7 Ce nume va primi noua baz de date ? Apsnd OK ajungei la fereastra din figura 8. Ce vedei n figura 8 este o BD nou, necompletat ; prin selecia oricreia din etichetele cu numele obiectelor unei BD ( tables, queries .a.) ce apar n partea de sus a ferestrei, vei vedea c nu exist nimic creat. Sarcina noastr este s crem, pe parcursul lucrrilor de laborator, fiecare dintre aceste obiecte ;

Fig. 8 Fereastra noii baze de date, aa cum apare dup ce a primit un nume. 2.

14

Cu wizard : prin selectarea opiunii Database Wizard ( figura 9) vei intra n fereastra New ( figura 10).

Fig. 9 Selectai Database Wizard dac dorii asisten din partea Access 95 Exist dou etichete disponibile : General i Blank Database . Alegnd General ( figura 10) vei crea o BD nou fr a folosi abloanele de BD oferite de Access 95 ; se ajunge apoi la figura 7, dup care figura 8, adic o nou BD gata de lucru ;

15

Fig. 10 Dup selectarea n caseta de dialog de la start a opiunii Database Wizard, ajungei la aceast fereastr . Alegnd Databases vei putea opta dintr-o mulime de BD predefinite

Fig. 10.1 Fereastra New cu eticheta Databases marcat . Se observ variatele

modele predefinite de BD oferite de Access 95 . ( figura 10.1). Alegnd unul dintre abloane i confirmnd cu OK urmeaz ferestrele din figurile 7 i 8. Se lanseaz apoi automat Database Wizard i se intr ntr-o sucesiune de pai pentru specificarea unui model al bazei de date. Figura 11 v arat programul Database Wizard n aciune .

16

Fig. 11 Unul din paii pe care i execut Database Wizard . Trebuie selectate informaiile dorite, dup care se trece la pasul urmtor( Next). Se poate i reveni folosind Back . La final se ncheie procesul de creare cu Finish . Ceea ce avei de fcut la fiecare pas din Wizard este s fii ateni la ntrebrile ce vi se pun, astfel nct s dai rspunsurile corecte. Odat rspunsurile fiind date, apsai butonul Next.

Fig. 12 Fereastra de final a programului Wizard. Butonul Next este inactiv. Se apas Finish i astfel este finalizat modelul bazei de date . Se repet succesiunea aceasta pn cnd butonul Next devine inactiv ( figura 11.1). Acum trebuie apsat butonul Finish, moment n care, folosindu-se toate informaiile pe care le-ai furnizat la fiecare pas, se va crea o nou BD ( vezi i figura 12) . CAPITOLUL 2 2.1. Crearea unui tabel Fr tabele, o baz de date i pierde nelesul, deoarece tabelele sunt cele care stocheaz informaia primar. Ca o analogie, gndii-v la un calculator( PC) fr harddisk ! i vei nelege imediat afirmaia anterioar. ! Nu uitai : nregistrare se numete orice rnd dintr-un tabel, iar cmp se numete orice coloan . nainte de a trece la crearea propriu-zis trebuie s cunoatem caracteristicile cmpurilor. Astfel, un cmp este un obiect cu urmtoarele atribute : - nume, care identific un fiecare cmp; este de maxim 64 de caractere, inclusiv spaiile ce apar ; - tip de dat, care ne spune : - ce fel de valori se pot introduce n acel cmp ; - ct memorie se aloc ;
17

ce operaii sunt permise cu acel cmp ; dac poate fi folosit n cazul unor indexri sau sortri ale nregistrrilor dup valorile acestuia ; text ( not) explicativ( ) , unde putem nsemna ce dorim pentru a descrie acel cmp i utilitatea sa ( un fel de pro memoria). 1.1 Tipuri de date Se face o descriere succint a tipurilor de date acceptate de Access 95. Acest paragraf este foarte util n nelegerea manevrrii nregistrrilor. 1.1.1 Tipul text ( text)

Acesta este tipul de dat cel mai ntlnit. Access permite o lungime implicit( default) de 50 de caractere, dar putei folosi oricte caractere ntre 1 i 255. Evident c sub form de text se pot stoca, unde este cazul: numele i prenumele, adresa, denumirea unui produs, titlul unei cri .a. Pe lng acestea, tipul text poate fi util i n alte situaii care la prima vedere ar necesita alte tipuri de date. De exemplu un numr de telefon poate fi mai avantajos stocat ca ir de caractere dect ca numr pe 4 octei( cazul numerelor noastre de telefon). De ce? S presupunem c cineva gsete c este mai la ndemn s-i noteze numerele de telefon sub forma : 312-5678, pentru a le reine mai uor ; sau sub forma 89.89.989. ntr-o astfel de scriere observai c apar i caractere ( -, .). Atunci este natural s folosim tipul de dat text pentru stocarea lor. 1.1.2 Tipul memo( memo)

Tipul memo const numai din text . Limita unui cmp memo este de 64KB pentru fiecare nregisrare, adic aproximativ 4 pagini text scrise la un rnd . Cmpurile memo pot aprea de mai multe ori ntr-o nregistrare. Se d astfel posibilitatea user-ului de a-i face nsemnri acolo unde are nevoie de ele. 1.1.3 Tipul numr( number)

Iat care sunt numerele acceptate, n ordinea cresctoare a numarului de octei necesari pentru stocarea lor : ntregi : 1. byte : este stocat pe un octet i poate ine valori ntregi numai pozitive ( de la 0 la 255) ; 2. integer : este stocate pe doi octei i poate ine numere negative i pozitive ( de la 2^4 pn la 2^4 1) ;

18

3. long integer : este stocat pe patru octei i poate ine valori negative i pozitive ( -2^64 2^64 1) ; n virgul mobil : 1. single : permite 7 cifre semnificative ; 2. double : permite 2 cifre semnificative ; Tip special : ReplicationID ( IdentificatorDuplicare sau IdentificatorMultiplicare) : este stocat pe 4 octei. Are scopul de a asigura un identificator global unic ( GUID Globally Unique Identifier) pentru acele BD ce administreaz cantiti mari de date. Modul intern de memorare impune o utilizare atent a acestuia. Se recomand folosirea lui doar n cazul n care numrul de nregistrri crete foarte mult ntre dou sincronizri ale unei BD asupra creia se opereaz din partea mai multor utilizatori. 1.1.4 Tipul dat calendaristic/or( date/time)

Access stocheaz intern data calendaristic folosind un numr n virgul mobil pe 8 octei. Ziua este interpretat ca o fraciune dintr-o zi. Modificnd proprietile acestui tip de dat se pot obine diferite comportri. Proprietile unui cmp se modific din partea de jos a ferestrei unui tabel deschis n modul Design. Mai trziu vei vedea cum se ajunge la modul Design( proiectarea unui tabel). Deocamdat reinei doar c : dac dorii ca Access 95 s introduc automat data curent, trebuie setat proprietatea unui cmp de acest tip la =Date() . Pentru a se obine automat i data i ora trebuie folosit opiunea =Now() . proprietatea Format trebuie setat( stabilit) pentru toate cmpurile de tipul date/time. Aceast definiie va fi transmis din tabel ctre interogri, formulare i rapoarte . Avei opiunile : - Short Date : reprezintarea anului n format cu dou cifre . Este suficient n majoritatea cazurilor ; - Short Date redefinit : reprezentare anului n format cu patru cifre. Modificarea se face astfel : Start->Settings->Control Panel->Regional Settings. Aici selectai eticheta Time i unde apare Short date modificai valoarea astfel nct n dreptul anului s apar yyyy n loc de yy. Apoi dai Apply urmat de OK . 1.1.5 Tipul valut( currency)

Acest tip este reprezentat intern n virgul fix. Puterea lui de memorare este : pentru numere ntregi poate ine pn la 3 cifre ( deci pn la 10 la puterea 3) ; pentru numere fracionare poate ine pn la sutimi dintr-o unitate . Pe scurt : 3 cifre nainte de virgul ( la dreapta virgulei) i 4 cifre dup virgul ( la stnga virgulei) .

19

Reprezentarea intern confer tipului valut precizia necesar calculelor financiare, dar i o comportare inferioar d.p.d.v. al vitezei ( este mai lent) relativ la tipul numr ( ntreg sau virgul mobil).

1.1.6

Tipul numr cu incrementare automat( autonumber)

Tipul implicit n reprezentarea intern este ntreg lung( long integer), deci pe 4 octei. O dat de acest tip poate fi : secvenial, ce ajut la generearea unor numere unice ; aleatoare, cu ajutorul creia se pot genera numere aleatoare. Aceste numere pot fi utile de exemplu ntr-o problem de amestec, sau ntr-un concurs cu premii, la desemnarea ctigtorului.

Reinei c dei acest tip are o reprezentare intern implicit, Access permite user-ului s modifice aceast reprezentare . Deoarece acest tip este tot un numr se poate folosi i ReplicationID n loc de valoarea implicit. Se recomand folosirea lui ReplicationID atunci cnd se lucreaz simultan cu aceeai BD, iar numrul de nregistrri are variaii rapide ( crete foarte repede ntre dou sincronizri ale BD curent folosite). La ce folosete numrul cu incrementare automat ?

Numrul cu incrementare automat d o ordine nregistrrilor. Fiecare nregistrare, pe msur ce este introdus, capt un numr de ordine. Dac se renun la introducerea unei nregistrri, numrul cu autoincrementare corespunztor este srit i nu va mai fi atribuit ulterior. De asemenea, n cazul tergerii unei nregistrri nu exist posibilitatea crerii unei alte nregistrri cu acelai numr. Acel numr nu mai poate fi folosit. Este cel mai bine ca n relaiile ntre tabele s folosii un numr cu autoincrementare . 1.1.7 Tipul da/nu( Yes/No)

Este corespunztor tipului boolean din limbajele de programare. Poate conine opoziii ca: Yes/No; On/Off; True/False . Cum poate fi folosit ? Dac dintr-un tabel sunt dorite anumite nregistrri se poate folosi acest tip pentru selecie/deselecie. Alegerea nu se face automat, ci o facei dvs. Prin stabilirea tipului la una din cele dou valori logice.

20

1.1.8

Tipul obiect OLE ( OLE object)

La specificarea acestui tip acel cmp permite folosirea unor obiecte provenite din alte aplicaii( programe Windows 95) care s-au nregistrat ca servere OLE. Este permis stocarea ntr-o baz de date a unor documente ( create cu un procesor de text), foi de calcul Excel, imagini ( de diferite formate), sunete .a. . 1.1.9 Tipul wizard de cutare ( Lookup Wizard)

Un cmp cu acest tip este capabil de a cuta n alte tabele. Ce caut ? Depinde de BD respectiv. De exemplu ce cititor are mprumutat cartea al crei titlu se cunoate. n tabelul crilor se va crea un cmp cu tipul Lookup Wizard care va stoca valoarea identificatorului tabelului cititorilor i va afia numele acestuia. 1.2 Proprietile cmpurilor Acestea apar n partea de jos a ferestrei de proiectare a unui tabel 1). ( figura

Fig. 1 Proprietile cmpurilor. Observai n partea de jos a ferestrei dou etichete : General i Lookup. Din cauz c tabelul nu are nici un cmp completat, aceste etichete nu conin nimic . 1.2.1 Format ( format)

21

Este sub form de ir. Are influen asupra modului de afiare ( output) al datelor. Putei s v gndii la irul de formatare al funciei printf() din C. Specificatorii de format foreaz funcia s afieze datele dup cum i stabilim noi, innd cont de contextul respectiv. irul de format Access poate conine : un format predefinit cum sunt : Currency, Percent( procent) sau Short Date( anul n format cu dou cifre) ; un format personalizat stabilit de utilizator ; personalizarea se face pe baza unor caractere de formatare speciale specifice tipului de cmp. 1.2.2 Masca de intrare ( input mask)

n opoziie cu Format, Input Mask controleaz modul de introducere al datelor ( partea de input). Pentru fiecare caracter introdus Input Mask determin dac : - este caracter opional sau obligatoriu ; - tipul de caracter : numeric, alfabetic, alfa-numeric sau orice caracter . In plus se poate stabili dac se introduc caractere majuscule sau minuscule i dac ele se dau de la dreapta la stnga sau invers. Access 95 are introdus i o nou masc fa de versiunile anterioare. Aceasta este masca password care determin ca toate caracterele unui cmp s fie afiate ca asteriscuri. 1.2.3 Titlu ( caption)

Pentru un cmp care nu are stabilit aceast proprietate se va folosi ca titlu al cmpului chiar numele introdus n acel cmp . Unde se folosete ? Valoarea acestei proprieti este folosit : la afiarea numelor de cmpuri, n situaia cnd un tabel este prezentat n modul Datasheet ( Foaie de date). Acesta este modul implicit utilizat de Access 95 ; n cadrul unui formular, ca etichet a unui control legat de un anume cmp ; pentru afiarea unui spaiu ntr-un nume de cmp care nu-l are n mod obinuit. De exemplu un cmp are denumirea Fisamprumut. Putem folosi acest nume ca Fia mprumut dac i stabilim proprietatea caption la Fia mprumut.

1.2.4

Valoare implicit ( default value)

22

Access 95 folosete anumite valori implicite pentru diferitele tipuri ale unui cmp ( vezi paragraful tipurilor de cmp). Trebuie s intervenim i s modificm ceea ce Access tie dinainte, dac dorim o alt valoare dect cea prestabilit. De exemplu tipul Yes/No are valoarea prestabilit 1( adic true). Pentru a nelege mai bine gndii-v la un nou program instalat. nainte de a-l configura dup dorin, el totui funcioneaz utiliznd anumite setri implicite ale productorului. Sau, rezoluia implicit a lui Windows 95 la instalare este 640*480*4. Cine dorete altceva poate schimba aceast setare. 1.2.5 Regul de validare( Validation Rule) i text de validare ( Validation Text) -> Regula de validare este un text pe care l introducei pentru a stabili o anumit limitare asupra datelor. Restriciile sale sunt : - accept maximum 255 de caractere ; - nu poate conine o trimitere la un alt cmp sau obiect ; - nu poate include funcii definite de dvs. i nici funcii domeniu( cum este Dlookup() ) . Pe baza regulii de validare se verific limitele intervalului n cazul unui cmp. De exemplu dintre toate datele de tip numr ce se pot introduce ne intereseaz doar acelea din intervalul [ 0, 100] . Regula de validare va fi atunci stabilit la Between 0 and 100 . Regula de validare folosete n crearea ei operatori oferii de Access. n exemplul dat operatori sunt : Between i and. -> Textul de validare reprezint mesajul afiat n cazul n care se ncalc regula de validare. Este un mesaj de eroare ce d lmuriri asupra modului de rezolvare. 1.2.6 Necesar ( required)

Spune dac acel cmp trebuie neaprat s apar sau nu, adic dac trebuie sau nu s fie completat . Dac dorii ca un cmp s fie neaprat completat atunci stabilii valoarea Required la Yes. Un cmp care trebuie s apar este cheia primar a oricrui tabel. Acesta apare pe prima poziie ( primul rnd al unui tabel). Access v va ateniona cu urmtorul mesaj dac nu stabilii un cmp primar pentru un tabel.

23

Este foarte util la cmpurile Foreign Key ( Cheie strin) pentru c impune o valoare pentru acel cmp, valoare necesar n relaia stabilit ntre acel tabele. 1.2.7 Proprietatea Permite valoare zero( Allow Zero Length)

Ce utilitate are ? - Este folosit doar pentru cmpuri de tip text ! - Apare n Access 95 pentru compatibilitate cu alte baze de date . n Access 95 este permis n lucru att valoarea zero ct i valoarea nul . Atenie ! Facei distincia ntre o valoare nul i o valoare zero. Valoarea nul arat c nu se tie nimic despre un anumit cmp. Acel cmp nu exist dac are valoare nul ! Valoarea zero arat c se cunoate ceva despre acel cmp, i anume c acel cmp trebuie s rmn necompletat. Dar el exist ! Exist o valoare implicit pentru Allow Zero Length i anume No . 1.2.8 Indexat ( Indexed)

Se refer la folosirea unor indeci pentru numerotarea nregistrrilor unui tabel. Putei vedea n figura 2 cum apare aceast proprietate de cmp. Cnd este util ? atunci cnd valoarea coninut de un cmp are o vitez mare de variaie ; atunci cnd cmpul este folosit intens n criteriile de selecie sau sortare .

Fig. 2 Valorile posibile ale lui Indexed . Proprietatea de cmp Indexed are ca valori posibile pe :

24

Yes/No : dorim ca acel cmp s fie sau nu indexat ; Yes( No Duplicates) : cmpul este indexat dar nu se poate repeta ; Yes( Duplicates OK) : cmpul este indexat i se poate repeta( de exemplu numele unui autor de carte care are n bibliotec mai multe titluri) .

Pe lng indexarea separat a cmpurilor exist posibilitatea de a indexa i o mulime de cmpuri, care vor fi privite apoi ca o unitate. Aceasta se face folosind fereastra Indexed din meniul View. Reinei : tot un index este i cheia primar( Primary key) !

1.2.9

Cutare ( Lookup)

In Access 95 orice cmp accept o etichet Lookup nou n cadrul proprietilor sale. Vedei figura 3 unde este prezentat eticheta Lookup din partea de jos a unui tabel deschis n mod design .

Fig. 3 Eticheta Lookup activ pentru un cmp de tip text. Observai opiunea implicit pentru tipul de control : combo box . Rezultatul este selectarea tipului de control ce va reprezenta cmpul respectiv n modul Datasheet de lucru cu tabelele, precum i n noile formulare ce vor fi create. Astfel : cmpurilor de tip Yes/No le corespunde implicit controlul de tip Check Box ( caset de validare) ; cmpurilor de tip Text i Number le corespunde implicit controlul de tip Text Box( caset de text) .
25

Obs.: putei schimba controlalele de mai sus cu altele. Eticheta Lookup este valabil doar pentru cmpuri de tipul dat mai sus . 1.3 Crearea unui tabel nou Dup partea teoretic din 3.2.2 deosebit de necesar trecem la partea practic referitoare la crearea de tabele. Prezentarea se face pe pai ; la fiecare pas este dat i o figur pentru ca astfel aceast platform s v poat fi de un real folos ( chiar i n lucrul acas). Crearea unui tabel presupune parcuri paii de creare a unei noi BD ( vezi paragraful 3.1) .

Pasul 1 : Din fereastra unei noi BD( adic o BD necompletat) se selecteaz eticheta Tables i apoi se apas butonul New, dealtfel singurul activ( vezi figura 4 de mai jos) . Fig. 4 Eticheta Tables este selectat. Rmne s apsai butonul New.

Pasul 2 : Ajungei n fereastra urmtoare( figura 5). Aici putei alege ntre cele dou moduri de creare a unui tabel : cu i fr Table Wizard . a) b)

26

Fig. 5 a) Opiunea fr Wizard ; b) Opiunea cu Wizard .

Pasul 2.1 : Fr Table Wizard Selectai modul Design View( figura 5-a). Dup ce confirmai cu OK ajungei n fereastra prezentat n figura 6. Ce vedei este un tabel n modul de proiectare( Design).

Fig. 6 Un nou tabel la nceputul fazei de proiectare( Design). Ce date introducem n noul tabel? Observai c fereastra unui tabel n faza Design prezint trei coloane ( care nu sunt aceleai cu coloanele tabelului !) : FieldName( Numele cmpului), Data Type ( Tipul de dat al cmpului) i Description ( Descriere) . n procesul de creare a tabelului se parcurg aceste coloane de la stnga la dreapta i se coboar apoi la cmpul urmtor, unde se reia parcurgerea coloanelor .a.m.d. pn se introduc toate cmpurile dorite . Primul cmp al unei nregistrri este bine s fie mereu cheia primar ( Primary Key). Aceasta identific unic fiecare nou nregistrare ce se adaug tabelului. Dai acestui cmp denumirea StaffID ( IdentificatorPersonal). Ca tip de dat alegei AutoNumber . Se asigur astfel c

27

fiecare nou nregistrare primete un numr unic. Acest cmp este stabilit apoi cheie primar prin apsarea butonului Primary Key din bara de instrumente ( din toolbar). Odat introdus acest tip dac v uitai n josul ferestrei, la propriettile cmpului, vedei cum tipul intern de reprezentare este cel implicit( long integer) i cum acest tip de dat este indexat/fr repetare: Yes( No Duplicates) ( vezi 3.2.2.8 proprietatea Indexed) . Urmtoarele dou cmpuri sunt NumeFamilie ( Surname) i Prenume( First Name) ambele de tip text. n Field Properties putem alege o dimensiune acoperitoare, de exemplu 30. Deoarece sunt dou cmpuri cu utilizare intens n operaii de selecie sau sortare putem stabili proprietatea Indexed la Yes. Mrim astfel viteza de manipulare a lor. Dac dorii ca numele de familie s fie afiat cu un spaiu putei stabili Caption la Nume Familie. Cmpul urmtor poate fi cel de stare( Status). Semnificaia lui este aceea de angajat cu norm ntreag, cu parte dintr-o norm, sau angajat pensionar( a crei angajare a ncetat). Fiecare dintre aceste situaii este simbolizat printr-o liter : F pentru angajarea full-time, P pentru angajare part-time i R pentru cel retras din munc. Dac firma face noi angajri iar cei mai muli dintre noii angajai sunt cu norm ntreag, atunci se pote stabili proprietatea Default Value la F ( full-time). Urmeaz un cmp ce ine persoana care supervizeaz ( Supervisor). Supervizorul este una din persoanele acestui tabel. Aceast cmp este de tip Number cu Field Length setat la Long Integer, adic de acelai tip cu cel al identificatorului ( StaffID) . Deoarece cmpul acesta va fi dat ca o referin, n loc s se introduc ntreg numele supervizorului se poate face identificarea acestuia prin numrul su de ordine din tabel. De aceea este dat de tip numr. Trebuie s ne gndim c fiecare angajat este pltit funcie de numrul de ore de munc. Deci un cmp util este tariful orar ( HourlyRate). Tipul este Currency ( Valut). Apoi cmpurile ce compun adresa : Address, City, District ( s spunem judeul), State( ara) . Toate sunt de tip Text, cu Field Length pus la 80. Codul potal va fi i el de tip Text cu Field Length de 5 caractere.

- Mai alegem i un cmp ce spune data naterii ( BirthDate). Acesta are tipul evident Date/Time pe care l vom stoca sub forma scurt a anului( pe doi digii), deci Short Date n proprietatea Format. - Penultimul cmp este cel ce ne spune data angajrii JoinDate. El este de tipul Date/Time cu formatul scurt pentru an : Format este Short Date. Bineneles c putem aduga i alte cmpuri( ca data nceperii angajrii, data pensionrii, dac este transferat din alt instituie .a.) dar nu o vom face. Ultimul cmp poate fi util : o scurt descriere a angajatului. S-l numim Note ( Note). Este evident de tip text i putem pune pentru el 100 de caractere.

28

Acesta este primul tabel creat de dvs. . Sau poate c ai mai lucrat n alte baze de date. El arat ca n figura 7.

Fig. 7 Noul tabel este gata. Proiectarea lui a luat sfrit. Tabelul trebuie salvat. Mergei n meniul File -> Save As, sau folosii din toolbar iconia dischetei( fiind prima salvare v este cerut numele tabelului). Vedei figura 8. a) b)

Fig. 8 Noul tabel trebuie salvat sub un nume n cadrul BD curente: a) Forma de salvare prin meniu ( File->Save As) ; b) Forma de salvare folosind iconia dischetei din bara de instructiuni

1.4.

MODELE DE DATE

29

Modelele de date ne ajut la prelucrarea datelor i obinerea de informaii, cu ajutorul calculatorului, asupra unor domenii de activitate. In acest mod realitatea poate fi cunoscut la orice monent de timp, pentru a putea lua decizii optime. Modelul de date impune realizarea urmtoareloe etape: structura modelului; operatorii cu care se lucreaz asupra structurilor de date; reguli pentru pstrarea integritii datelor. 1. Structura modelului const n definirea entitilor i a proprietilor lor. Elementele generice care realizeaz structura de date sunt: cmpul (cel mai mic element al structurii care poate fi identificat n vederea prelucrrii); grupul simplu sau compus (format din mai multe cmpuri sau grupuri ) ; nregistrarea ( un ansamblu de cmpuri i grupuri care constituie i elementul generic al structurii. Relaia ntre nregistrri aparinnd unui obiect independent sau la mai multe obiecte independente se materializeaz ntr-o legtur ntre o realizare a nregistrrii printe i una sau mai multe realizri ale nregistrii fiu. Realizrile nregistrrilor de tip fiu formeaz clase de echivalen. Scopul formalizrii relaiilor ntre nregistrri n cadrul unui model de date este reducerea redundanei datelor. Relaia dintre nregistrri poate pune n eviden dou tipuri de legturi
CLASA DE ECHIVALENT

D1

D2

D3

L1

L2

L3

L4

L5

L6

L7

LUCRRI

Fig. 5. Legturi ntre nregistrri 1. Legturi orizontale ce permit localizarea claselor de echivalen; 2. Legturi verticale care localizeaz nregistrrile printe. Legtura dintre entiti (obiecte) se mai numete asociere. Legturile dintre entiti pot fi de trei tipuri: Legtura unu la unu (11). Un astfel de exemplu poate fi dat de

30

BURSE

STUDENTI

relaia dintre burse i studenii bursieri. O burs poate fi dat unui singur student i un student poate primi o singur burs. Legtura unu la muli (1 n) . Un exemplu de acest tip l constituie legtura dintre student i grup. Un student poate face parte dintr-o singur grup i o grup are mai muli studeni.
GRUPA

STUDENT1

STUDENT2

STUDENTn

Fig. 7. Legtura unu la muli


Legtura de muli la muli . Relaia dintre cursurile oblgatorii audiate de o serie se studeni i studenii seriei este de acest tip.

31

CURS1

CURS2

CURS N

STUDENT1

STUDENT2

STUDENT M

Fig.8. Legtura muli la muli


2. Operatorii care acioneaz asupra bazelor de date pot fi de citire, memorare,modificare,tergere, inserare etc. 3. Reguli de integritate a bazelor de date pot fi neaacceptarea modificrii sau nscrierii valorii asociate caracteristicii unui element dac nu se cunoate valoarea cheii lui sau alte restricii.

Modelul ierarhic 1.8.1 Modelul de date ierarhic Acest model este primul model care a stat la baza realizrii SGBD. Modelul ierarhic folosete dou forme de structurare a datelor tipurile de nregistrri, pentru reprezentarea tipurilor de entiti i legturile expplicite pentru reprezentarea relaiilor ntre mulimi de entiti. Diagrama structurii de date este un graf orientat reprezentnd tipuri de entiti i legturi funcionale ntre acestea. Nodurile grafului corespund tipurilor de entiti. Fiecare arc al grafului reprezint o legtur funcional ntre tipurile de entiti de la capetele arcului. Sinusul funcionalitii este opus sensului arcului. Instanierile tipului de nregistrare din extremitatea arcului determin funcional instanierile tipului de entitate din originea acestuia. n sens invers de la tipul de entitate din originea arcului spre cea din extremitate corespunde o legtur de tip funcional cu o relaie de tip 1:N (n particular 1:1) ntre mulimile de entiti corespunztoare. Intensitatea sau modelul conceptual al bazei de date ierarhice se poate reprezenta printr-o diagram a structurii de date care nu este un graf oarecare, ci satisface restricia unui arbore ordonat. Adic, nodurile sunt organizate pe nivele, fiecare nod are o singur legtur cu un nod de pe nivelul superior (excluznd rdcina) numit nodul tat i un numr arbitrar de legturi ctre nomuri de pe nivelul imediat inferior (numite noduri fii), iar poziia nodurilor avnd acelai printe este semnificativ. Sensul legturilor funcionale este ntotdeauna de la nodul tat ctre nodurile fiu. O diagram a structurii de date care satisface aceste restruicii port numele de arbore de definiie ierarhic sau simplu arbore de definiie. Un arbore de definiie este intensiunea unei baze de date ierarhice. Exemplu: Structura unui arbore de definiie ierarhic pentru o baz de date ierarhice care conine informaii referitoare la faculti este dat n figur

32

FACULTATE

PERSONAL

PROFESOR

SALA

STUDENT

Tipurile de nregistrri care reprezint entiti din arborele din figuri sunt definite astfel: FACULTATE (Cod, Nume, Adres) PERSONAL (Nume, Funcie, Salariu) PROFESOR (Nume, Funcie, Disciplina) SALA (Numr, Adres, Capacitate) STUDENT (Nume, ncadrare, Sit_colar, An, Sex) Extensiunea unui arbore de definiie deci a unei baze de date de tip ierarhic const din instanieri ale tipurilor de nregistrri corespunztoare tipurilor de entiti i din legturile dintre acestea. Extensiunea de tip nregsitrare poate fi reprezentat sub forma unui atbel. n tabele pot fi duplicate deci pot fi doi instanieri identici ai aceluiai tip de entitate.

33

COD 01 02 03

NUME ELECTRONICA AUTOMATICA ELECTROTEHNICA

ADRESA Armata Popor Spl. Indep Spl. Indep

NUME IONESCU POPA LUCA

FUNCIE Tehnician Secretar Operatoare

SALARIU 420000 450000 500000

NUME VASILE TEOTOI MITEA MITEA

FUNCIE Asistent Sef lucrari Conf.

DISCIPL MN EI BD

NUMR 306 212 206 MITEA

ADRESA Spl. Indep Leu Leu

CAPACIT 40 60 80

NUME Ionescu Lupu Pana Codru Ionescu Lupu

NCADRARE Zi Zi Zi Zi Zi Zi

SIT_scol B FB B B B FB

AN 1 2 3 4 4 3

Sex M M F M M M

34

Descrierea bazei de date de tip ierarhic, folosind un LDD, presupune definrea celor trei elemente eseniale din sturctura acesteia: - arborele de definiie ierarhic (nod rdcin i legturile tat - fiu); - tipuri de nregistrri (nodurile arborelui); - cmpurile din acdrul nregistrrilor (tipul i dimensiunea); Descrierea prin LDD este: TREE Faculti RECORD Facultate ROOT Codf INTEGER, NUME CHAR (15), ADRESA CHAR (20) RECORD personal PARENT = Facultate NUME CHAR (15), FUNCIE CHAR (10), SALAR REAL RECORD profesori PARENR = Facultate NUME CHAR (15), FUNCIE CHAR (10), DISCIPLINA CHAR (20) RECORD SALA PARENT = Facultate NUMR integer ADRESA CHAR (20), CAPACITATE integer RECORD STUDENT PARENT=Profesori NUME CHAR (15), NCADRARE CHAR (5), SIT_SCOLAR CHAR (1) AN INTEGER SEX CHAR (1) n entitatea STUDENT exist duplicarea instanierilor corespunztoare studenilor IONESCU i LUPU. Aceti instanieri sunt legai cu instanieri diferii ale entitilor profesor. Modelul ierarhic dfolosete reprezentarea relaiilor ntre entiti prin legturi funcionale explicite de tipul tat - fiu, ceea ce face ca relaiile de tipul 1:1 i 1:N s fie convenabil reprezentate. Relaia dintre facultate i profesori este o relaie de 1:N dac fiecare profesor este angajat al unei faculti. n rdcin avem o instaniere a entitii Facultate i un numr de instanieri ale entitii Profesori ca descendeni. Exemplu: 01 - Electronic - Armata poporului VASILE - AS - MN MITEA - conf - BD 02 - Automatic TEOTOI - S.l. - EI Pot aprea legturi de tipul M:N de exemplu ntre entitatea profesor i studeni. Deoarece un profesor pred la mai muli studeni i un student studiaz la mai muli profesori. Exemplu: VASILE - AS - MN IONESCU - ZI - B - 1 - M

35

LUPU - ZI - FB - 2 - M MITEA - conf - MF IONESCU - ZI - B - 1 - M LUPU - ZI - FB - 2 - M PAN - ZI - B - 3 - M Relaiile de tip M:N prin modelul ierarhic introduce o mare redundan n respectarea datelor. Necesitatea introducerii duplicatelor este o consecin a relaiilor ntre nregistrri i anume orice instaniere a unui tip de nregistrare fiu s fie legat cu o singur instaniere a unui tip de nregistrare tat. nregistrrile: 1. Cine sunt studenii care lucreaz cu asistentul VASILE? Rspunsul este uor, explorndu-se subarborele modului VASILE. 2. Cine sunt profesorii cu care lucreaz IONESCU? Rspunsul este mai dificil, deoarece trebuie explorate toi subarborii profesorilor i reinerea instanierilor din nodurile rdcin ale acelor subarbori care conin pe IONESCU. Anomalia de adugare - nu pot fi adugate date, referotoare la un student pn nu se cunoate un profesor al acestuia. Anomalia de tergere. tergerea unui nod dice la tergerea tuturor descendenilor si. tergerea numelui unui profesor duce la tergerea datelor studenilor care au lucrat cu el. Anomalia de actualizare. Atunci cnd se pune modificarea unui atribut al unei entiti trebuie explorat ntreaga baz de date pentru a depista apariiile entitii i a-i modifica atributul. Exemplu bursier pentru un student. Dac nu se exploateaz ntreaga BD se pot gsi nregistrri n care studentul apare nebursier. Modelul ierarhic nu prezint o flexibilittae nu are n structurarea datelor, fiind adecvat modelrii doar a relaiilor 1:N. Modelul limiteaz sever gama interogrilor care pot fi adresate BD. Avantajul modelului este c este simplu, uor de neles i are un nur de operatori de manipulare redus i poste fi implementat eficient chiar n cazul unor operaii de memorare cu acces strict secvenial (benzi magnetice). 1.8.2. Modelul de tip reea Modelul de tip reea se bazeaz pe tabele i grafuri corespunztor celor duo forme de structurare a datelor folosite: tipul de nregistrare i legturile explicite. Nodurile corespund tipurilor de nregistrri date sub form de tabele, iar arcele grafului corespund relaiilor dintre mulimi de entiti i sunt reprezentate sub formp de legturi ntre tabele. Intensiunea sau modelul coceptual al bazei de date de tip reea este reprezentat printr-o diagram a structurii de date care dup cum s-a artat i la cel ierarhic, este un graf ale crui noduri reprezint legturi funcionale ntre acestea. Sensul arcelor este invers relaiei de funcionalitate. Un anumit tip de entiti poate fi legat la mai multe entiti printe i chiar prin mai multe arce la aceeai entitate de tip printe. Aici arcele sunt marcate i se numesc tip de set i reprezint o legtur logic ntre dou tipuri de nregistrri i PROPRIETAR I MEMBRU. Arcul este orientat de la PROPRIETAR LA MEMBRU. Numele tipului de set este eticheta arcului. Tipul funcionalitii este de la tipul mebru la tipul proprietar. Un tip set repreint legturile 1:1 sau 1:N dar nu pentru legturile M:N. Exemplu:BD Faculti

36

FACULTATE Angajai PERSONAL Cadre didactice

Sli SALA

PROFESORI Note acordate NOTE Note primite STUDENI

Fig. Model conceptual al BD de tip reea. Tipurile de nregistrri: Facultate (cod, Nume, Adres), Personal (Nume, funcie, Salar), Profesor (Nume, funcie, Disciplin), Sala (Numr, Adres, Capacitate), Not (Not), Student (Nume, ncadrare, Sit_scolar, An, Sex) Extensiunea unei diagrame a structurii de date pentru o BD de tip reea const n instanieri de tip nregistrri i instanieri de tip set. Extensiunea de tip nregistrare este un tabel i n el sunt permise duplicatele, iar nregistrrile pot fi ordonate. Extensiunea unui tip de set poate fi reprezentat ca o colecie de arce ntre tabele, reprezentnd tipul de nregistrare proprietar i tipul de nregistrare membru. Un set este reprezentarea unui legturi funcionale de tip 1:1 sau 1: N ntre o nregistrare de tip proprietar i una sau mai multe de tip membru. Proprietile seturilor 1. Fiecare tip de set are un tip de nregistrare proprietar. 2. Fiecare instaniere a unui tip de proprietar este proprietarul unui set. Un set poate s nu includ nregistrri membru. 3. fiecare tip de set include cel puin un tip de nregistrare membru. Unele tipuri de set pot include mai multe tipuri membru, rezult tipuri de set multi - membru. 4. Un tip de articol nu poate fi i proprietar i membru al aceluiai tip de set. 5. Nici o instaniere de nregistrare nu poate participa la mai mult de o instaniere a unui tip de set.

37

COD 01 02 03

NUME ELECTRONICA AUTOMATICA ELECTROTEHNICA

ADRESA LEU Spl. Indep Spl. Indep

NUME IONESCU POPA

FUNCIE Tehnician Secretar

SALARIU 420000 450000

NUME VASILE TEOTOI MITEA MITEA

FUNCIE Asistent Sef lucrari Conf.

DISCIPL MN EI BD

NUMR 306 212 206 MITEA

ADRESA Spl. Indep Leu Leu

CAPACIT 40 60 80

NOTA 7 9 10 7 9 10 8

NUME Ionescu Lupu Pana Codru Marcu Ilea

NCADRARE Zi Zi Zi Zi Zi Zi

SIT_scol B FB B B B FB

AN 1 2 3 4 4 3

Sex M M F M M M

Figura Extensiunea bazei de date de tip reea

38

Implementarea seturilor este realizat n majoritatea sistemelor prin lanuri de pointeri dei propunerile (DBTG Data Base Task Group) nu exclud reprezentarea cum ar fi matricea de pointeri. Seturile implementate cu lanuri de pointeri se prezint sub forma unor liste circulare avnd cap de list o nregistrare a tipului proprietar. Pentru nlnuirea nregistrrilor ntr-un set adminstrator bazei de date (ABD) are la dispoziie folosirea mai multor tipuri de pointeri: - pointeri de tip NEXT - pentru nlnuirea simpl nainte a nregistrrilor, prezena acestor pointeri este obligatorie n orice set. - pointeri de tip PRIOR - pentru nlnuirea napoi a nregistrrilor, pointer opional. - pointer de tip OWNER - leag o nregsitrare de tip membru cu proprietarul setului: pointer opional. Cele trei tipuri de pointeri se pot combina rezultnd mai multe structuri posibile pentru reprezentarea seturilor. Structura cu pointeri Next Este structura cea mai simpl i economic. Permite accesul secvenial unidirecional la membrii setului pornind de la proprietarul acestuia. Dezavantajul este c la tergerea unui membru Mk pentru actualizarea lanului de legturi este necesar s accesm membrul Mk-1, ceea ce n lipsa pointerilor de tip PRIOR se poate realiza numai prin parcurgerea lanului PROPRIETAR - membru Mk-1 care poate fi costisitoare pentru k - mare.
P

M1

Mk-1

Mk

Mn

Figura Structura cu pointeri Next. Structura cu pointeri Next i Prior Este o list circular bidirecional care permite accesul nainte i napoi la membrii setului. Dei implic consum mare de memorie i costuri suplimentare pentru actualizarea pointerilor, structura este util cnd sunt multe tergeri, deoarece permite accesul direct de la Mk-1 la Mk cel care se terge prin legtura PRIOR Mk la Mk-1.
P

M1

Mk-1

Mk

Mn

Figura Structura cu pointeri Next i Prior. Structura cu pointeri Next i Owner Se utilizeaz cnd este necesar regsirea direct a proprietarului pornind de la membrii si.
P

M1

Mk-1

Mk

Mn

Figura structura cu pointeri Next i Owner. Structura cu pointeri Next, Prior i Owner

39

Este cea mai complicat structur i implic cele mai ridicate costuri. Trebuie o justificare pentru utilizatori.
P

M1

Mk-1

Mk

Mn

Figura Structura cu pointeri Next, Prior i Owner. O descriere minimal a strcuturii de baze de date de tip reea implic descrierea tipurilor de nregistrri (Nume, Numele cmpului, Tipul, Dimensiunea cmpului) i descrierea tipurilor de set (numele tipului de set, precizarea tipului de proprietar i a tipurilor de membru). LDD au o sintax complex i permit specificarea unor opiuni cum ar fi: modul de acces la nregistrri, structurile folosite pentru reprezentarea seturilor, ordonarea membrilor etc. Exemplu: RECORD NAME IS FACULTATE CODF TYPE IS FIXED 2 NUME TYPE IS CHARACTER 15 ADRESA TYPE IS CHARACTER 20 RECORD NAME IS PERSONAL NUME TYPE IS CHARACTER 15 FUNCIE TYPE IS CHARACTER 10 SALAR TYPE IS FIXED 5 RECORD NAME IS PROFESORI NUME TYPE IS CHARACTER 15 FUNCIE TYPE IS CHARACTER 10 DISCIPLINA TYPE IS CHARACTER 20 RECORD NAME IS SALA NUMR TYPE IS CHARACTER 20 CAPACITATE TYPE FIXED 3 RECORD NAME IS NOTE NOTA TYPE IS FIXED 2 RECORD NAME IS STUDENT NUME TYPE IS CHARACTER 15 NCADRARE TYPE IS CHARACTER 5 SIT SCOLAR TYPE IS CHARACTER 2 AN TYPE IS FIXED 1 SEX TYPE IS CHARACTER 1 SET NAME IS ANGAJAI OWNER IS FACULTATE MEMBER IS PROFESORI SET NAME IS CADRE OWNER IS FACULTATE MEMBER IS PROFESORI SET NAME IS SALI OWNER IS FACULTATE MEMBER IS SALA SET NAME IS NOTE ACORDATE OWNER IS PROFESOR MEMBER IS NOTE SET NAME IS NOTE_PRIMITE
40

OWNER IS STUDENI MEMBER IS NOTE Se observ c n descrierea de mai sus un anumit tip de nregistrare poate s apar ca membru a mai multor tipuri de set. Cazul nregistrrii Note care face parte din dou seturi dar caestea trebuie s fie diferite Note_acordate i Note_primite. tim c orice nregistrare nu poate fi membru n mai multe instanieri ale aceluiai tip de set. Reprezentarea direct a legturilor de tip M:_N ntre tipuri de entiti este imposibil. Folosind un tip de nregistrare intermediar aceste relaii pot fi reprezentate dac avem dou tipuri de legturi funcionale. Exemplu: reprezentarea relaiei dintre entitile Profesor i Student.
VASILE MITEA

10

10

IONESCU

LUPU

PANA

CODRU

MARCU

ILEA

Figura STRUCTURA SETURILOR DINTRE TIPURILE DE ENTITI PROFESOR I STUDENT Natura funcional a legturilor impus ntre entiti se explic prin considerente de implementare. Dac n-ar fi aceast restricie o anumit nregistrare poate aprea ca membru la un numr de seturi care nu poate fi cunoscut la momentul respectiv (al descrierii modelului conceptual al bazei de date) i acest numr s-ar modifica dinamic n timpul exploatrii BD ceea ce duce la un numr variabil de pointeri asociai unei nregsitrri. O astfel de structur devine posibil. DECI O NREGISTRARE POATE S APAR N ORICTE SETURI DE TIPURI DIFERITE (Nr. cunoscut n momentul decrierii BD) dar numai o singur dat ntr-un anumit tip de set. Anomalia de adugare Operaia de adugare a unui nou student este simpl. Ea nu are legturi cu celelalte entiti. Exist un singur pointer de la nregistrare student la ea nsi. Anomalia de tergere Se poate terge nregistrarea unui cadru didactic fr a afecta nregsitrrile corespunztoare studenilor care au o existen de sine stttoare. Anomalia de actualizare Putem modifica atributele unui student fr pericolul afectrii bazei de date, deoarece fiecare student apare ntr-o singur nregistrare a bazei de date. Dezavantajul acestui model reea este c are o structur apropiat de structura de memorare. Legtuirle dintre entiti devinexplicite realizate prin pointeri a cror gestiune de manipulare este n sarcina utilizatorului. ntreaga structur de lanuri devine vizibil utilizatorului. 1.8.3 Modelul de date relaional a aprut trziu. Acest model este foarte util i mai ales din punctul de vedere al realizrii SGBD - urilor performabile. Primul model a fost propus de cercettorul american E.F. Godd . SGBD pentru aceste modele au condus la limbaje pentru manipularea datelor de nivel nalt. Structuri de reprezentare

41

Intensiunea unei BD relaionale este specificat printr-o schem relaional care const din una sau mai multe scheme de relaie. Exemplu de schem relaional Facultate (Codf, Nume, Adres), Personal (Codf, Nume, funcie, salar), Profesor (Codf, Nume, funcie, disciplin), Sala (Codf, Numr, Adres, Capacitate), Student (Nume, ncadrare, sit_scolar, An, Sex), Note (Nume_profesor, Nume_student, Nota) O schem de relaie poate fi folosit n mod direct pentru reprezentarea unui tip de entitate. Pentru reprezentarea legturilor dintre tipurile de entiti se utilzeaz dou tehnici: 1. Propagarea cheilor dintr-o schem de relaie ntr-alta. Aceast tehnic se utilizeaz pentru reprezentarea legturilor de tip funcional (relaii de tip 1:1 i 1:N). Legtura funcional dintre tipuirile de entiti Personal i Facultate. Atributul Codf din facultatea se propag entitii Personal. 2. Crearea unei scheme de relaie separate prin care se reprezint legtura dintre dou tipuri de entiti. Aceast tehnic se poate utiliza pentru a reprezenta orice tip de legtur inclusiv M:N. Considernd legtura dintre entitile Profesor i student aceasta poate fi reprezentat printr-o schem de relaie separat. n cazul nostru NOTE care are ca atribute cheile celor dou entiti atributele, Nume i rebotezate Nume_profesor i Nume_student n schema de relaie Note. Mai pot aprea i alte atribute care arat legtura dintre cele dou entiti cum este n cazul nostru nota. Extensiunea unei baze de date relaionale este reprezentat sub form de tabele. Fiecare tabel corespunde unei scheme de relaie din cadrul schemei relaionale. n aceste tabele nu sunt permise duplicatele, iar ordinea liniilor este arbitrar. Un tabel corespunde unei relaii din punct de vedere matematic i este denumit relaie n sensul BD. O coloan a tabelului corespunde unui atribut al unui tip de entitate i se numete atribut. O linie a tabelului reprezint o instaniere a unui tip de entitate sau a unui tip de legtur i se numete tripl. Tabelul reprezint o mulime de entiti de un tip dat, fie mulimea legturilor existente ntre dou sau mai multe mulimi de entiti. FACULTATE Codf Nume Adresa 01 Electronica LEU 02 Automatica Spl. Independenei Codf 01 02 Codf 02 01 Codf 01 01 Nume IONESCU POPA Nume 306 212 Nume VASILE MITEA PERSONAL Funcie Tehnician Secretar SALA Adresa Spl. Independenei LEU PROFESOR Funcia Ass Conf
42

Salariu 420 000 450 000 Capacitatea 40 60 Disciplina MN BD

Nume_profesor VASILE VASILE VASILE MITEA MITEA MITEA MITEA Nume Ionescu Lupu Pana Codru Marcu Incadrare Zi Zi Zi Zi zi

NOTE Nume_student LUPU PANA CODRU CODRU MARCU ILEA IONESCU STUDENT Sit_scolara B FB B B B An 1 2 3 4 4

Nota 9 7 10 7 9 10 7 Sex M M F M M

Definirea modelului conceptual pentru o baz de date relaional const n specificarea fiecrei scheme de relaie din cadrul schemei relaionale. Aceasta se face cu LDD. LDD pe lng definirea relaiilor include i faciliti pentru definirea vederilor i a indecilor, pentru stabilirea de constrngeri asupra datelor pentru specificarea cheilor primare, etc. n majoritatea sistemelor relaioanle LDD este integrat n modulul software care implementeaz LMD. Acest lucru s-a realizat datorit faptului c multe funciuni ale LDD fac apel la facilitile de formulare a interogrilor din LDD. n acest mod exist un singur modul LDD - LMD i o singur interfa utilizator pentru ambele funciuni. Descrierea Bd prin LDD din SGBD relaional System R Comanda SQL pentru definirea relaiilor este CRATE TABLE i permite specificarea complet a unei scheme de relaie. CREATE TABLE Facultate Codf INTEGER (3) NOT NULL, NUME CHAR (15), Adresa CHAR (20)) CREATE TABLE Personal (Codf INTEGER (3), NUME CHAR (15) NOT NULL, FUNCTIE CHAR (10), DISCIPLIN CHAR (20)) CREATE TABLE Student (Nume CHAR (15) NOT NULL, INCADRARE CHAR (2), SITUAIE_ Scolar CHAR (1), An studiu DECIMAL (1), SEX CHAR (1)) CREATE TABLE Note (Nume_Profesor CHAR (15): NOT NULL, Nume_student CHAR (15): NOT NULL, Nota Decimal (2)) NOT NULL specific c toate liniile din tabelul corespunztor trebuie s aib o valoare specific pentru acest atribut. Aceast specificare este necesar pentru acele atribute

43

care particip la identificarea unic a tuplelor unei relaii (ex: fac parte dintr-o cheie primar.) Acest model este simplu i se bazeaz pe structuri de reprezentare arborescente . Are o rdcin i fiecare nod din arbore care nu este rdcin sau nod final are un singur nod superior i mai multe noduri inferioare, deci legturi de tipul 1 1 respectiv 1m. Modul ierarhic pune la dispoziie dou structuri: tipuri de nregistrri i ierarhia. Datorit acestor structuri modelul ofer urmtorii operatori: operatori de citire pentru tipul de nregistrare, operatori de citire pentru ierarhie, operatori de memorare pentru tipuri de inregistrare i operatori de memeorare pentru ierarhie. La acest model apar restriciile: nu se pot nsera noi realizri ale unei nregistrri subordonate dac nu sunt cunoscui superiorii i prin tergerea unei realizri rdcin se terg automat toate nregistrrile subordonate. Modelul reea Acest model este asemntor cu cel ierarhic cu deosebirea c fiecare inferior poate avea mai muli superiori, deci avem legturi de tipul m la n. Aici avem dou structuri : tipul de nregistrri dau atributele unei entiti i tipul de set care d legturile dinte tipurile de nregistrare. Actualizrile sunt adugarea,tergerea,modificarea care se pot opera att n tipurile nregistrrilor logice ct i n legturi. Interogarea se poate referi la atributele unui singur tip de nregistrri logice ,legturile dintre dou tipuri de nregistrri sau mai multe. Modelul relaional Acest model are la baz teoria matematic a relaiilor. Are o singur structur de date : relaia (tabelul), o submulime a produsului cartezian al unor domenii (domeniul fiind o mulime de valori a entitilor). n concluzie, un astfel de modelpoate fi privit ca o mulime de tabele obinute prin metoda normalizrii. Normalizarea pleac de la o mulime de atribute (cmpuri de date) i o mulime de dependene funcionale dintre atribute care conduc la o schem conceptual a modelului relaional ntr-o form normalizat fr restricii de actualizri.
1.5. BAZE DE DATE Utiliznd calculatorul se pot stoca pe perioade mari de timp informaii despre diferite elemente care intervin ntr-un proces i diferite relaii ntre ele, care pot fi utilizate n orice moment sub forma bazelor de date. Definiia 1. Se numete baz de date (BD) un sistem de colecii de date ntre care exist o interdependen logic multipl, potrivit unor relaii prestabilite cu ocazia descierii conceptuale, sistemul de colecii de date putnd fi exploatat de mai muli utilizatori n viziuni diferite. Putem spune c bazele de date reprezint o structur deoarece este format dintr-o mulime de date (informaii) , cu relaii logice i operaii de prelucrare. In aceast mulime se relizeaz o simplificare prin eliminarea informaiilor redundante, astfel c mai multe fiiere pot fi privite n ansamblu realizndu-se n acest mod o integrarea a datelor. Accesul diferitelor persoane, la aceleai baze de date indiferent de locul unde sunt situate, se face simultan.

44

Datele referitoare la totalitatea circuitelor integrate dintr-o magazie, datele studenilor unei faculti, datele angajailor dintr-un fiet, fiecare dintre ele reprezint o baz de date. Creerea acestor baze de date, stocarea, prelucrarea lor i obinerea de informaii asupra lor se realizeaz cu ajutorul sistemului de gestiune a bazelor de date. Definiia 2. Se numete sistem de gestiune a bazelor de date (SGBD), sistemul de programe care permite construirea unor baze de date, introducerea informaiilor n bazele de date i dezvoltarea de aplicaii privind bazele de date. Cu ajutorul SGBD-ului se realizeaz interfaa utilizator -sistem de operare, prin care utilizatorul cu un limbaj de nivel nalt obine informaii asupra bazelor de date. 1.8 MODELUL DE DATE 1.8.1 Modelul de date ierarhic Acest model este primul model care a stat la baza realizrii SGBD. Modelul ierarhic folosete dou forme de structurare a datelor tipurile de nregistrri, pentru reprezentarea tipurilor de entiti i legturile expplicite pentru reprezentarea relaiilor ntre mulimi de entiti. Diagrama structurii de date este un graf orientat reprezentnd tipuri de entiti i legturi funcionale ntre acestea. Nodurile grafului corespund tipurilor de entiti. Fiecare arc al grafului reprezint o legtur funcional ntre tipurile de entiti de la capetele arcului. Sinusul funcionalitii este opus sensului arcului. Instanierile tipului de nregistrare din extremitatea arcului determin funcional instanierile tipului de entitate din originea acestuia. n sens invers de la tipul de entitate din originea arcului spre cea din extremitate corespunde o legtur de tip funcional cu o relaie de tip 1:N (n particular 1:1) ntre mulimile de entiti corespunztoare. Intensitatea sau modelul conceptual al bazei de date ierarhice se poate reprezenta printr-o diagram a structurii de date care nu este un graf oarecare, ci satisface restricia unui arbore ordonat. Adic, nodurile sunt organizate pe nivele, fiecare nod are o singur legtur cu un nod de pe nivelul superior (excluznd rdcina) numit nodul tat i un numr arbitrar de legturi ctre nomuri de pe nivelul imediat inferior (numite noduri fii), iar poziia nodurilor avnd acelai printe este semnificativ. Sensul legturilor funcionale este ntotdeauna de la nodul tat ctre nodurile fiu. O diagram a structurii de date care satisface aceste restruicii port numele de arbore de definiie ierarhic sau simplu arbore de definiie. Un arbore de definiie este intensiunea unei baze de date ierarhice. Exemplu: Structura unui arbore de definiie ierarhic pentru o baz de date ierarhice care conine informaii referitoare la faculti este dat n figur
FACULTATE

PERSONAL

PROFESOR

SALA

STUDENT

Tipurile de nregistrri care reprezint entiti din arborele din figuri sunt definite astfel: FACULTATE (Cod, Nume, Adres) PERSONAL (Nume, Funcie, Salariu) PROFESOR (Nume, Funcie, Disciplina)
45

SALA (Numr, Adres, Capacitate) STUDENT (Nume, ncadrare, Sit_colar, An, Sex) Extensiunea unui arbore de definiie deci a unei baze de date de tip ierarhic const din instanieri ale tipurilor de nregistrri corespunztoare tipurilor de entiti i din legturile dintre acestea. Extensiunea de tip nregsitrare poate fi reprezentat sub forma unui atbel. n tabele pot fi duplicate deci pot fi doi instanieri identici ai aceluiai tip de entitate.

46

COD 01 02 03

NUME ELECTRONICA AUTOMATICA ELECTROTEHNICA

ADRESA Armata Popor Spl. Indep Spl. Indep

NUME IONESCU POPA LUCA

FUNCIE Tehnician Secretar Operatoare

SALARIU 420000 450000 500000

NUME VASILE TEOTOI MITEA MITEA

FUNCIE Asistent Sef lucrari Conf.

DISCIPL MN EI BD

NUMR 306 212 206 MITEA

ADRESA Spl. Indep Leu Leu

NUME Ionescu Lupu Pana Codru Ionescu Lupu

NCADRAR Zi Zi Zi Zi Zi Zi

47

Descrierea bazei de date de tip ierarhic, folosind un LDD, presupune definrea celor trei elemente eseniale din sturctura acesteia: - arborele de definiie ierarhic (nod rdcin i legturile tat - fiu); - tipuri de nregistrri (nodurile arborelui); - cmpurile din acdrul nregistrrilor (tipul i dimensiunea); Descrierea prin LDD este: TREE Faculti RECORD Facultate ROOT Codf INTEGER, NUME CHAR (15), ADRESA CHAR (20) RECORD personal PARENT = Facultate NUME CHAR (15), FUNCIE CHAR (10), SALAR REAL RECORD profesori PARENR = Facultate NUME CHAR (15), FUNCIE CHAR (10), DISCIPLINA CHAR (20) RECORD SALA PARENT = Facultate NUMR integer ADRESA CHAR (20), CAPACITATE integer RECORD STUDENT PARENT=Profesori NUME CHAR (15), NCADRARE CHAR (5), SIT_SCOLAR CHAR (1) AN INTEGER SEX CHAR (1) n entitatea STUDENT exist duplicarea instanierilor corespunztoare studenilor IONESCU i LUPU. Aceti instanieri sunt legai cu instanieri diferii ale entitilor profesor. Modelul ierarhic dfolosete reprezentarea relaiilor ntre entiti prin legturi funcionale explicite de tipul tat - fiu, ceea ce face ca relaiile de tipul 1:1 i 1:N s fie convenabil reprezentate. Relaia dintre facultate i profesori este o relaie de 1:N dac fiecare profesor este angajat al unei faculti. n rdcin avem o instaniere a entitii Facultate i un numr de instanieri ale entitii Profesori ca descendeni. Exemplu: 01 - Electronic - Armata poporului VASILE - AS - MN MITEA - conf - BD 02 - Automatic TEOTOI - S.l. - EI Pot aprea legturi de tipul M:N de exemplu ntre entitatea profesor i studeni. Deoarece un profesor pred la mai muli studeni i un student studiaz la mai muli profesori. Exemplu: VASILE - AS - MN IONESCU - ZI - B - 1 - M

48

LUPU - ZI - FB - 2 - M MITEA - conf - MF IONESCU - ZI - B - 1 - M LUPU - ZI - FB - 2 - M PAN - ZI - B - 3 - M Relaiile de tip M:N prin modelul ierarhic introduce o mare redundan n respectarea datelor. Necesitatea introducerii duplicatelor este o consecin a relaiilor ntre nregistrri i anume orice instaniere a unui tip de nregistrare fiu s fie legat cu o singur instaniere a unui tip de nregistrare tat. nregistrrile: 1. Cine sunt studenii care lucreaz cu asistentul VASILE? Rspunsul este uor, explorndu-se subarborele modului VASILE. 2. Cine sunt profesorii cu care lucreaz IONESCU? Rspunsul este mai dificil, deoarece trebuie explorate toi subarborii profesorilor i reinerea instanierilor din nodurile rdcin ale acelor subarbori care conin pe IONESCU. Anomalia de adugare - nu pot fi adugate date, referotoare la un student pn nu se cunoate un profesor al acestuia. Anomalia de tergere. tergerea unui nod dice la tergerea tuturor descendenilor si. tergerea numelui unui profesor duce la tergerea datelor studenilor care au lucrat cu el. Anomalia de actualizare. Atunci cnd se pune modificarea unui atribut al unei entiti trebuie explorat ntreaga baz de date pentru a depista apariiile entitii i a-i modifica atributul. Exemplu bursier pentru un student. Dac nu se exploateaz ntreaga BD se pot gsi nregistrri n care studentul apare nebursier. Modelul ierarhic nu prezint o flexibilittae nu are n structurarea datelor, fiind adecvat modelrii doar a relaiilor 1:N. Modelul limiteaz sever gama interogrilor care pot fi adresate BD. Avantajul modelului este c este simplu, uor de neles i are un nur de operatori de manipulare redus i poste fi implementat eficient chiar n cazul unor operaii de memorare cu acces strict secvenial (benzi magnetice). 1.8.2. Modelul de tip reea Modelul de tip reea se bazeaz pe tabele i grafuri corespunztor celor duo forme de structurare a datelor folosite: tipul de nregistrare i legturile explicite. Nodurile corespund tipurilor de nregistrri date sub form de tabele, iar arcele grafului corespund relaiilor dintre mulimi de entiti i sunt reprezentate sub formp de legturi ntre tabele. Intensiunea sau modelul coceptual al bazei de date de tip reea este reprezentat printr-o diagram a structurii de date care dup cum s-a artat i la cel ierarhic, este un graf ale crui noduri reprezint legturi funcionale ntre acestea. Sensul arcelor este invers relaiei de funcionalitate. Un anumit tip de entiti poate fi legat la mai multe entiti printe i chiar prin mai multe arce la aceeai entitate de tip printe. Aici arcele sunt marcate i se numesc tip de set i reprezint o legtur logic ntre dou tipuri de nregistrri i PROPRIETAR I MEMBRU. Arcul este orientat de la PROPRIETAR LA MEMBRU. Numele tipului de set este eticheta arcului. Tipul funcionalitii este de la tipul mebru la tipul proprietar. Un tip set repreint legturile 1:1 sau 1:N dar nu pentru legturile M:N. Exemplu:BD Faculti

49

FACULTATE Angajai PERSONAL Cadre didactice

Sli SALA

PROFESORI Note acordate NOTE Note primite STUDENI

Fig. Model conceptual al BD de tip reea. Tipurile de nregistrri: Facultate (cod, Nume, Adres), Personal (Nume, funcie, Salar), Profesor (Nume, funcie, Disciplin), Sala (Numr, Adres, Capacitate), Not (Not), Student (Nume, ncadrare, Sit_scolar, An, Sex) Extensiunea unei diagrame a structurii de date pentru o BD de tip reea const n instanieri de tip nregistrri i instanieri de tip set. Extensiunea de tip nregistrare este un tabel i n el sunt permise duplicatele, iar nregistrrile pot fi ordonate. Extensiunea unui tip de set poate fi reprezentat ca o colecie de arce ntre tabele, reprezentnd tipul de nregistrare proprietar i tipul de nregistrare membru. Un set este reprezentarea unui legturi funcionale de tip 1:1 sau 1: N ntre o nregistrare de tip proprietar i una sau mai multe de tip membru. Proprietile seturilor 1. Fiecare tip de set are un tip de nregistrare proprietar. 2. Fiecare instaniere a unui tip de proprietar este proprietarul unui set. Un set poate s nu includ nregistrri membru. 3. fiecare tip de set include cel puin un tip de nregistrare membru. Unele tipuri de set pot include mai multe tipuri membru, rezult tipuri de set multi - membru. 4. Un tip de articol nu poate fi i proprietar i membru al aceluiai tip de set. 5. Nici o instaniere de nregistrare nu poate participa la mai mult de o instaniere a unui tip de set.

50

COD 01 02 03

NUME ELECTRONICA AUTOMATICA ELECTROTEHNICA

ADRESA LEU Spl. Indep Spl. Indep

NUME IONESCU POPA

FUNCIE Tehnician Secretar

SALARIU 420000 450000

NUME VASILE TEOTOI MITEA MITEA

FUNCIE Asistent Sef lucrari Conf.

DISCIPL MN EI BD

NUMR 306 212 206 MITEA

ADRESA Spl. Indep Leu Leu

CAPACIT 40 60 80

NOTA 7 9 10 7 9 10 8

NUME Ionescu Lupu Pana Codru Marcu Ilea

NCADRARE Zi Zi Zi Zi Zi Zi

SIT_scol B FB B B B FB

AN 1 2 3 4 4 3

Sex M M F M M M

Figura Extensiunea bazei de date de tip reea

52

Implementarea seturilor este realizat n majoritatea sistemelor prin lanuri de pointeri dei propunerile (DBTG Data Base Task Group) nu exclud reprezentarea cum ar fi matricea de pointeri. Seturile implementate cu lanuri de pointeri se prezint sub forma unor liste circulare avnd cap de list o nregistrare a tipului proprietar. Pentru nlnuirea nregistrrilor ntr-un set adminstrator bazei de date (ABD) are la dispoziie folosirea mai multor tipuri de pointeri: - pointeri de tip NEXT - pentru nlnuirea simpl nainte a nregistrrilor, prezena acestor pointeri este obligatorie n orice set. - pointeri de tip PRIOR - pentru nlnuirea napoi a nregistrrilor, pointer opional. - pointer de tip OWNER - leag o nregsitrare de tip membru cu proprietarul setului: pointer opional. Cele trei tipuri de pointeri se pot combina rezultnd mai multe structuri posibile pentru reprezentarea seturilor. Structura cu pointeri Next Este structura cea mai simpl i economic. Permite accesul secvenial unidirecional la membrii setului pornind de la proprietarul acestuia. Dezavantajul este c la tergerea unui membru Mk pentru actualizarea lanului de legturi este necesar s accesm membrul Mk-1, ceea ce n lipsa pointerilor de tip PRIOR se poate realiza numai prin parcurgerea lanului PROPRIETAR - membru Mk-1 care poate fi costisitoare pentru k - mare.
P

M1

Mk-1

Mk

Mn

Figura Structura cu pointeri Next. Structura cu pointeri Next i Prior Este o list circular bidirecional care permite accesul nainte i napoi la membrii setului. Dei implic consum mare de memorie i costuri suplimentare pentru actualizarea pointerilor, structura este util cnd sunt multe tergeri, deoarece permite accesul direct de la Mk-1 la Mk cel care se terge prin legtura PRIOR Mk la Mk-1.
P

M1

Mk-1

Mk

Mn

Figura Structura cu pointeri Next i Prior. Structura cu pointeri Next i Owner Se utilizeaz cnd este necesar regsirea direct a proprietarului pornind de la membrii si.
P

M1

Mk-1

Mk

Mn

Figura structura cu pointeri Next i Owner. Structura cu pointeri Next, Prior i Owner

Este cea mai complicat structur i implic cele mai ridicate costuri. Trebuie o justificare pentru utilizatori.
P

M1

Mk-1

Mk

Mn

Figura Structura cu pointeri Next, Prior i Owner. O descriere minimal a strcuturii de baze de date de tip reea implic descrierea tipurilor de nregistrri (Nume, Numele cmpului, Tipul, Dimensiunea cmpului) i descrierea tipurilor de set (numele tipului de set, precizarea tipului de proprietar i a tipurilor de membru). LDD au o sintax complex i permit specificarea unor opiuni cum ar fi: modul de acces la nregistrri, structurile folosite pentru reprezentarea seturilor, ordonarea membrilor etc. Exemplu: RECORD NAME IS FACULTATE CODF TYPE IS FIXED 2 NUME TYPE IS CHARACTER 15 ADRESA TYPE IS CHARACTER 20 RECORD NAME IS PERSONAL NUME TYPE IS CHARACTER 15 FUNCIE TYPE IS CHARACTER 10 SALAR TYPE IS FIXED 5 RECORD NAME IS PROFESORI NUME TYPE IS CHARACTER 15 FUNCIE TYPE IS CHARACTER 10 DISCIPLINA TYPE IS CHARACTER 20 RECORD NAME IS SALA NUMR TYPE IS CHARACTER 20 CAPACITATE TYPE FIXED 3 RECORD NAME IS NOTE NOTA TYPE IS FIXED 2 RECORD NAME IS STUDENT NUME TYPE IS CHARACTER 15 NCADRARE TYPE IS CHARACTER 5 SIT SCOLAR TYPE IS CHARACTER 2 AN TYPE IS FIXED 1 SEX TYPE IS CHARACTER 1 SET NAME IS ANGAJAI OWNER IS FACULTATE MEMBER IS PROFESORI SET NAME IS CADRE OWNER IS FACULTATE MEMBER IS PROFESORI SET NAME IS SALI OWNER IS FACULTATE MEMBER IS SALA
54

SET NAME IS NOTE ACORDATE OWNER IS PROFESOR MEMBER IS NOTE SET NAME IS NOTE_PRIMITE OWNER IS STUDENI MEMBER IS NOTE Se observ c n descrierea de mai sus un anumit tip de nregistrare poate s apar ca membru a mai multor tipuri de set. Cazul nregistrrii Note care face parte din dou seturi dar caestea trebuie s fie diferite Note_acordate i Note_primite. tim c orice nregistrare nu poate fi membru n mai multe instanieri ale aceluiai tip de set. Reprezentarea direct a legturilor de tip M:_N ntre tipuri de entiti este imposibil. Folosind un tip de nregistrare intermediar aceste relaii pot fi reprezentate dac avem dou tipuri de legturi funcionale. Exemplu: reprezentarea relaiei dintre entitile Profesor i Student.
VASILE MITEA

10

10

IONESCU

LUPU

PANA

CODRU

MARCU

ILEA

Figura STRUCTURA SETURILOR DINTRE TIPURILE DE ENTITI PROFESOR I STUDENT Natura funcional a legturilor impus ntre entiti se explic prin considerente de implementare. Dac n-ar fi aceast restricie o anumit nregistrare poate aprea ca membru la un numr de seturi care nu poate fi cunoscut la momentul respectiv (al descrierii modelului conceptual al bazei de date) i acest numr s-ar modifica dinamic n timpul exploatrii BD ceea ce duce la un numr variabil de pointeri asociai unei nregsitrri. O astfel de structur devine posibil. DECI O NREGISTRARE POATE S APAR N ORICTE SETURI DE TIPURI DIFERITE (Nr. cunoscut n momentul decrierii BD) dar numai o singur dat ntr-un anumit tip de set. Anomalia de adugare Operaia de adugare a unui nou student este simpl. Ea nu are legturi cu celelalte entiti. Exist un singur pointer de la nregistrare student la ea nsi. Anomalia de tergere Se poate terge nregistrarea unui cadru didactic fr a afecta nregsitrrile corespunztoare studenilor care au o existen de sine stttoare. Anomalia de actualizare Putem modifica atributele unui student fr pericolul afectrii bazei de date, deoarece fiecare student apare ntr-o singur nregistrare a bazei de date. Dezavantajul acestui model reea este c are o structur apropiat de structura de memorare. Legtuirle dintre entiti devinexplicite realizate prin pointeri a cror
55

gestiune de manipulare este n sarcina utilizatorului. ntreaga structur de lanuri devine vizibil utilizatorului. 1.8.3 Modelul de date relaional a aprut trziu. Acest model este foarte util i mai ales din punctul de vedere al realizrii SGBD - urilor performabile. Primul model a fost propus de cercettorul american E.F. Godd . SGBD pentru aceste modele au condus la limbaje pentru manipularea datelor de nivel nalt. Structuri de reprezentare Intensiunea unei BD relaionale este specificat printr-o schem relaional care const din una sau mai multe scheme de relaie. Exemplu de schem relaional Facultate (Codf, Nume, Adres), Personal (Codf, Nume, funcie, salar), Profesor (Codf, Nume, funcie, disciplin), Sala (Codf, Numr, Adres, Capacitate), Student (Nume, ncadrare, sit_scolar, An, Sex), Note (Nume_profesor, Nume_student, Nota) O schem de relaie poate fi folosit n mod direct pentru reprezentarea unui tip de entitate. Pentru reprezentarea legturilor dintre tipurile de entiti se utilzeaz dou tehnici: 1. Propagarea cheilor dintr-o schem de relaie ntr-alta. Aceast tehnic se utilizeaz pentru reprezentarea legturilor de tip funcional (relaii de tip 1:1 i 1:N). Legtura funcional dintre tipuirile de entiti Personal i Facultate. Atributul Codf din facultatea se propag entitii Personal. 2. Crearea unei scheme de relaie separate prin care se reprezint legtura dintre dou tipuri de entiti. Aceast tehnic se poate utiliza pentru a reprezenta orice tip de legtur inclusiv M:N. Considernd legtura dintre entitile Profesor i student aceasta poate fi reprezentat printr-o schem de relaie separat. n cazul nostru NOTE care are ca atribute cheile celor dou entiti atributele, Nume i rebotezate Nume_profesor i Nume_student n schema de relaie Note. Mai pot aprea i alte atribute care arat legtura dintre cele dou entiti cum este n cazul nostru nota. Extensiunea unei baze de date relaionale este reprezentat sub form de tabele. Fiecare tabel corespunde unei scheme de relaie din cadrul schemei relaionale. n aceste tabele nu sunt permise duplicatele, iar ordinea liniilor este arbitrar. Un tabel corespunde unei relaii din punct de vedere matematic i este denumit relaie n sensul BD. O coloan a tabelului corespunde unui atribut al unui tip de entitate i se numete atribut. O linie a tabelului reprezint o instaniere a unui tip de entitate sau a unui tip de legtur i se numete tripl. Tabelul reprezint o mulime de entiti de un tip dat, fie mulimea legturilor existente ntre dou sau mai multe mulimi de entiti. FACULTATE Codf Nume Adresa 01 Electronica LEU 02 Automatica Spl. Independenei Codf Nume PERSONAL Funcie
56

Salariu

01 02 Codf 02 01 Codf 01 01 Nume_profesor VASILE VASILE VASILE MITEA MITEA MITEA MITEA Nume Ionescu Lupu Pana Codru Marcu

IONESCU POPA Nume 306 212 Nume VASILE MITEA

Tehnician Secretar SALA Adresa Spl. Independenei LEU PROFESOR Funcia Ass Conf Nota 9 7 10 7 9 10 7 An 1 2 3 4 4

420 000 450 000 Capacitatea 40 60 Disciplina MN BD

NOTE Nume_student LUPU PANA CODRU CODRU MARCU ILEA IONESCU Incadrare Zi Zi Zi Zi Zi STUDENT Sit_scolara B FB B B B

Sex M M F M M

Definirea modelului conceptual pentru o baz de date relaional const n specificarea fiecrei scheme de relaie din cadrul schemei relaionale. Aceasta se face cu LDD. LDD pe lng definirea relaiilor include i faciliti pentru definirea vederilor i a indecilor, pentru stabilirea de constrngeri asupra datelor pentru specificarea cheilor primare, etc. n majoritatea sistemelor relaioanle LDD este integrat n modulul software care implementeaz LMD. Acest lucru s-a realizat datorit faptului c multe funciuni ale LDD fac apel la facilitile de formulare a interogrilor din LDD. n acest mod exist un singur modul LDD - LMD i o singur interfa utilizator pentru ambele funciuni. Descrierea Bd prin LDD din SGBD relaional System R Comanda SQL pentru definirea relaiilor este CRATE TABLE i permite specificarea complet a unei scheme de relaie. CREATE TABLE Facultate Codf INTEGER (3) NOT NULL, NUME CHAR (15), Adresa CHAR (20)) CREATE TABLE Personal
57

(Codf INTEGER (3), NUME CHAR (15) NOT NULL, FUNCTIE CHAR (10), DISCIPLIN CHAR (20)) CREATE TABLE Student (Nume CHAR (15) NOT NULL, INCADRARE CHAR (2), SITUAIE_ Scolar CHAR (1), An studiu DECIMAL (1), SEX CHAR (1)) CREATE TABLE Note (Nume_Profesor CHAR (15): NOT NULL, Nume_student CHAR (15): NOT NULL, Nota Decimal (2)) NOT NULL specific c toate liniile din tabelul corespunztor trebuie s aib o valoare specific pentru acest atribut. Aceast specificare este necesar pentru acele atribute care particip la identificarea unic a tuplelor unei relaii (ex: fac parte dintr-o cheie primar.) 1.8.3.1 Modele total relaionale Un SGBD este total relaional dac ndeplinete condiiile de integritate: 1. Integritatea domeniului 2. Integritatea entitii sau al relaiei 3. Integritatea referinei i furnizeaz utilizatorului un LMD cel puin echivalent ca putere de expresie cu algebra relaional. 1. Principiul integritii domeniului const n posibilitatea SGBD-ului de a verifica din punct de vedere sintactic i semantic orice valoare din BD sau operaie efectuat asupra acestuia folosind definiia domeniului din care face parte. Realizarea acestui principiu face imposibil nregsitrarea unor valori din afara domeniului corespunztor unui atribut i efectuarea de operaii aritmetice ntre valori din domenii diferite. 2. Principiul integrotii entitii se refer la condiiile ipuse cheilor primare de a avea valori unice i nenule. 3. Principiul integritii referinei este enunat pentru prima dat de Codd n 1979 astfel: Definiie: Dca A este o cheie primar monoatribut n relaia R1 i B o component a unei chei primare multiatribut n relaia R2 , B fiind definit pe aceleai domeniu cu atributul A, atunci mulimea valorilor lui B n R2 trebuie s fie inclus n mulimea valorilor lui A n R1. Acest principiu se extinde n 1981 i asupra atributelor B care nu fac parte dintr-o cheie, dar sunt definite pe un domeniu primar. Un domeniu poate fi declarat primar dac i numai dac pe acesta exist definit o cheie primar monoatribut. Dca B este o cheie strin n R2 rezult prin propagarea unei chei primare A din R1 atubnci orice valoare a lui B din R2 trebuie s se regseasc n valorile lui A din R1. Exemplu:

58

Pentru BD Facultate, principiul integritii referinei cere ca orice valoare a atributului Codf din relaiile Personal, profesor, sli s se regseasc printre valorile atributului Codf din facultate. Altfel ar fi personal, profesori, sli care ar aparine altor faculti inexistente. Chei strine, integritate referenial n modelul relaional legturile dintre ce reprezint tipuri de entiti se realizeaz prin mecanismul de propagare a cheilor, ceea ce conduce la conceptul de cheie strin. Deci cheia strin este rezultatul propagrii unei chei primare. O definiie mai relaxant pentru cheia strin este: Definiie: Un subset, Fk, al atributelor unei relaii R2, este o cheie strin dac: Exist o relaie R1 (nu neaprat distinct) avnd o cheie K; Pentru fiecare valoare a lui Fk din relaia R2 exist o valoare identic a cheii k din relaia R1. Deci o cheie strin poate fi rezultatul programrii oricrei chei fie ea primar sau candidat. Valoarea unei chei strine este o referin la tulpa a crei cheie are o valoare identic cu cea a cheii strine. Relaia care conine cheia strin este numit relaie de referin iar relaia care conine cheia din care s-a propagat se numete relaie referit. Condiia de integritate referenial cere ca toate valoarile unei chei strine s se regseasc printre valorile cheii corespunztoare din relaia referit. Aceast condiie introduce nite constrngeri ntre relaii numite constrngeri refereniale, care se pot reprezenta prin diagrame refereniale. Diagramele refereniale sunt grafuri ale cror noduri reprezint relaii, iar arcele reprezint contrngeri refereniale. Sensul arcului la diagrama de referin de la relaia de referin la relaia referent. Pot exista cicluri refereniale i dac ciclul are lungimea unitar relaia de referin este identic cu cea referit i avem relaie autoreferit. Exemple: 1) Diagrama referenial pentru relaii FACULTATE; PROFESOR; NOTE; STUDENT este: FACULTATE PROFESOR NOTE STUDENT Arcele coincid cu sensul funcionalitii legturii existente ntre relaiile de la capetele arcului. 2) Fie BD referitoare la o activitate comercial a unei firme reprezentat prin schema relaional: Furnizor (condF, Nume, Ora), Beneficiar (codB, Nume, Ora), Produs (codP, Nume, Ora), Oferte (codF, codP, Pre, Cantitate), Cereri (codb, codP, Pre, Cantitate), Tranziii (codT, codF, codB, codP, Pre, Cantitate) Atributele CodF, CodB, CodP, sunt chei primare n relaiile Furnozor, beneficiar i produs. Atributele codF, codP din relaiile Oferte sunt chei strine i reprezint referine ctre atributele omonime din relaiile furnizor i Produs. Integritatea referenial se exprim prin faptul c nu exist posibilitatea unei oferte fr furnizor care s fac oferta i un produs care s fie oferit de acesta. Analog codB i codP sunt chei strine n relaia Cereri.

59

n relaia Tranzacii avem trei chei strine, codF, codB, codB, codP, care sunt referine la relaiile Furnizor, Beneficiar i Produs. ntr-o tranzacie este necesar s existe cele trei relaii. Pot exista i alte constrngeri refereniale altele dect cele menionate, acestea depind de proiectant care d semnificaia structurii BD. Dac admitem c orice furnizor are o ofert unic pentru un produs dat, atunci perechea CodfcodP este cheie n relaia Oferte. Tranzacia este o ofert dac rezult c codFcodP este cheie strin n relaia tranzacie. La fel codBcodP din relaia cereri este o cheie n aceast relaie i perechea codBcodP din tranzacii este o cheie strin. Deci relaia tranzacii are cinci chei strine codF, codB, codP, codFcodP i codBcodP.
FURNIZOR BENEFICIAR

TRANZACII

OFERTE

CERERI

PRODUS

Figura diagrama referent pentru BD a activitii unei firme. 3) Descendent (Tat - fiu) Este o relaie de descenden Tat - Fiu. Orice fiu are un tat unic, rezult c orice tupl a relaiei Descenden este univoc determinat de atributul Fiu care este cheie a relaiei. Dar tat este i el fiul uni tat, deci orice valoare a unui atribut tat - se afl ntre valorile atributului Fiu deci atributul tat este cheie strin n relaia Descendent i reprezint o referin la aceeai relaie deci relaia de Descenden este autoreferent. Operaii Meninerea integritii refereniale conduce la o serie de tehnici de realizare a operaiilor de adugare, tergere i actualizare n relaiile de referin i n cele referite. Relaii de referin La operaia de adugare a unei tulpe trebuie s ne asigurm c valorile tuturor atributelor care fac parte dintr-o cheie strin se regsesc printre valorile atributelor pe care le refer n relaia referit. Altfel nu se realizeaz operaia. Exemplu: La relaia OFERTE nu poate fi adugat o nou ofert dac n relaiile Furnizor - Produs nu exist furnizorul care face ofert i produsul pe care - l ofer. Operaia de tergere. n relaiile de referin se pot face tergeri fr nici un fel de restricii din punct de vedere al restriciilor condiiilor de integritate. Operaia de actualizare n relaiile de referin se poate vedea ca una de tergere i una de adugare. Rezult o combinaie a celor dou reguli precedente. Relaii referite Operaia de adugare - se poate face fr nici un fel de restricie din punct de vedere al condiiilor de integritate referenial.
60

Operaia de tergere - la stingerea unei tuple dintre o relaie referent este posibil ca la relaiile de referin s fie tuple care se refer la tupla tears. Meninerea integritii refereniale a bazei de date se face prin: a) tergerea restricionat sau tergerea cascad. a) tergerea restricionat - nu se accept tergerea unei tuple din relaia referit dac ea exist n cel puin o tupl dintr-o relaie de referin. b) tergerea cascadat - tergerea unei tuple dintr-o relaie referit va fi urmat de tergerea tuturor tuplelor din relaiile de referin care fac referire la tupla tears. Dac tuplele din relaia de referin sunt la rndul lor referite la alte tuple, atunci tergerea se propag n cascad. Operaia de actualizare. Actualizarea unei chei ntr-o relaie referin se poate face: - actualizarea restricionat. MU se admite actualizarea valorii unui atribut din relaia referit atta timp ct exist cel puin o tupl n relaiile de referin care se refer la aceast valoare. - actualizare cascadat modificarea valorii unui atribut ntr-o relaie duce la mopdificarea corespunzztoare a tuturor tuplelor din relaiile de referin care se refer la valoarea modificat. Problema integritii refereniale poate fi abordat la nivelul SGBD - ului n dou variante: declarativ i procedural. n cele mai multe SGBD relaionale permit definirea n cadrul descrierii BD a cheilor strine care apar n relaii i a regulilor de meninere a integritii refereniale. Elementele specifice la definirea unei chei strine din acdrul unei relaii sunt lista atributelor componente i relaia referit. La acestea se pot aduga sub form de opiuni regulile de aplicat restricionale sau cascadarea n operaiile de tergere i actualizare. Aceasta este varianta declarativ. n varianta procedural apare posibilitatea unei tratri mai specializate de la caz la caz a constrngerilor refereniale avnd n vedere c opiunile de restricionare i cascadare nu epuizeaz toate modalitile de meninere a integritii refereniale. Acest lucru se realizeaz atand cheilor strine nite proceduri permanente care se activeaz n mod automat ori de cte ori se execut o operaie de tergere sau modificare asupra unei chei strine creia i este ataat procedura. Operaiile de actualizare trebuie s conin acelai principiu ori restricioanar ori cascadat. Fie R3 R2 R1 un lan de referne unde cheii strine din R 3 i este ataat opiunea de tergere restricionat iar cheii strine din relaia R2 i este ataat opiunea de tergere cascadat. La comanda de tergere a unei tuple din R1 aceasta poate duce la tergeerea unor tuple din R2, unde avem o opiune restricionar n relaia R 2. Ca urmare tergerea este revocat. MODELUL DE DATE ENTITATE - RELAIE (E / R) Aceste modele sunt cunoscutze sub numele de modele extinse sau modele semantice. Cele trei modele: ierarhic, reea, relaional au o expresivitate limitat pentru c nu spun prea mult utilizatorului despre semnificaia datelor din BD. Aceste modele las n seama utilizatorului interpretarea i semnificaia datelor. Interesul pentru mbuntirea semanticii modelelor de date este justificat pentru a avea Bd care s manifeste un corespondent mai inteligent n interaciunea cu utilizatorul i care s permit dezvolatarea unor interfee utilizator de nivel nalt. Aspectul semantic este prezentat n orice model de date. Astfel, conceptele de domeniu, cheie candidat, cheie strin reprezint aspecte semantice ale modelului relaional. Principalul motiv pentru care modelelor date li se impun restricii din punct
61

de vedere semnatic este acela de a permite o implementare eficient la nivelul structurilor bazei de date fizice. Aa de exemplu se explic restricia legturilor M:N n cte trei modele. Prin studiul modelelor de date semantice se urmrete depirea restriciilor i de a ngloba n model ct mai mult din semantica datelor. Modelul E / R permite descrierea modelelor conceptuale fr restricii din punct de vedre al eficienei i fr a fi preocupat de modul cum modelul su ar fi transpus ntr-o structur a unei baze de date fizice. Se realizeaz o diagram E / R. deci modelul E / R este util proiectantului dedate fiind o etap intermediar spre modele de baze dedate. Concepte ce stau la baza modelului E / R. Entitate, tip de entitate Entitatea este ceva care exist i se poate distinge de restul universului. Tipul de entitate este mulimea tuturor entitilor care sunt similare prin raportarea la anumite criterii.
PERSOANA ENTITATE

Atribute i chei Tipurile de entiti au proprieti numite atribute, care asociaz fiecrei entiti o valoare dintr-un anumit domeniu de valori asociat atributului respectiv. Aceast submulime de atribute poart numele de cheie a tipului de entitate.
Adresa ATRIBUT

Dac atributul face parte din cheia tipului de entitate atunci numele atributului este subliniat.
Nume Atribut parte a unei chei

Relaii, tipuri de legtur O relaie reprezint un tip de legtur ntre dou sau mai multe tipuri de entiti. Formal o relaie R peste tipul de entiti E1, E2, ..., En se definete ca o list ordonat a acestor tipuri de entiti. Acelai tip de entitate poate s apar de mai multe ori n list. Relaia este reprezentat printr-un avnd n interior numele asociat legturii. Orice relaie este conectat prin arce orientate sau nu la fiecare entitate care compun relaia. Dac legtura este funcional n raport cu entitatea E 1 atunci legtura este conectat cu arce orientate spre entitatea E1. n caz contrar dac legtura este de tip nefuncional arcul este neorientat. O relaie R=(E1, E2, ..., En) se consider funcional n raport cu tipul de entitate E i 1 i n, dac i numai dac pentru orice ansamblu de entiti E 1, E2, ..., En, exist cel mult o entitate ei Ei care s fie n legtur cu entitile e1, e2, ..., en. Altfel spus entitile e1, e2, ..., en determin n mod univoc entitatea ei prin relaia R10. 1. O relaie poate fi funcional cu anumite tipuri de entiti i nefuncional cu alte tipuri. 2. Modelul E /R permite reprezentarea direct i fr restricii a relaiilor de tip M la M i n general a relaiilor nefuncionale de orice aritate.
62

Tranzacii

Tip de legtur (relaie)

Relaia R este funcional raportat la tipul de entitate E

Relaia R este nefuncional raportat la tipul de entitate E

Subtipuri. Orice entitate aparine cel puinunui tip de entitate, dar ea poate s aparin n acelai timp mai multor tipuri de entiti. Exemplu Entitatea de tipul PERSOAN aparine tipului ANGAJAT i NOTE entitile de tipul ANGAJAT este un subtip al tipului PERSOAN, iar PERSOAN este un suoertip al tipului SNGAJAT. Entitile tipului ANGAJAT motenesc toate proprietile entitilor tipului PERSOAN i pot avea unele proprieti suplimentare ale acestora. Reciproca nu este adevrat. Entitile tipului ANGAJAT particip n mod automat la toate relaiile n care sunt implicate entitile tipului PERSOAN. Fiecrei entiti de tipul PERSOAN i corespunde cel mult o entitate de tip ANGAJAT, reprezentnd aceeai persoan n calitatea de nagajat. O entitate a subtipului ANGAJAT nu poate exista fr entitatea corespunztoare a tipului PERSOAN. La rndul su un subtip poate avea subtipuri, rezultnd ierarhii de subtipuri.
ANGAJAT subtip

TIP Conexiunile tip - subtip SUBTIP

PROFESOR

STUDENT

ORAR

SALA

63

Relaia ternar ORAR este nefuncional n raport cu cele trei entiti. Un anumit profesor i un anumit student se pot ntlni n sli diferite la ore i zile diferite, deci ORAR nefuncional cu SALA. Un profesor i o anumit sal poate fi locul de curs pentru mai muli studeni i un student poate avea curs n aceeai sal cu mai muli profesori la ore diferite rezult c relaia ORAR este nefuncional cu entitile PROFESOR i STUDENT.
STUDENT ORA

ORAR

SALA

Relaia ORAR este funcional cu entitatea SAL. Un student la ora de BD ntr-o anumit sal. Un student i o sal pot fi la mai multe cursuri i o sal i un curs poate fi pentru mai muli studeni. Legtura nefuncional ORAR cu entitatea studeni i ORAR cu entitatea ORA nu sunt funcionale.
PROFESOR SALA

ORAR

OR

Un profesor la un curs este ntr-o anuit sal ORAR - SAL - funcional. O sal i o anumit or au un singur profesor. Un profesor i o sal pot fi la mai multe ore.
PROFESOR STUDENT

ORAR

SALA

ORA

un profesor - un student la o anumit or conform sunt ntr-o anumit sal (funcional ORAR - SAL). Un profesor - un student i o sal conform orarului pot fi la mai multe ORE. Legtur nefuncional ORAR - ORA. Un profesor o sal i o or

64

pot avea mai muli studeni. Un student o sal i o or pot avea un singur profesor legtur funcional ORAR - PROFESOR.
MITEA
CodF Nume FURNIZOR Ora CodB Nume BENEFICIAR Ora

Cantit CodP Pre CodF Oferte

Tranzacii CodP CodB Cereri PRODUS Cantit Pre

CodP

Nume

Ora

Entiti, BENEFICIAR, FURNOZOR, PRODUS cu cheile: codF, codB, codP. Pot fi trei relaii binare. Relaia binar FURNIZOR - BENEFICIAR nu prezint interes. Dac furnizorul are mai multe oferte pentru acelai produs atunci se poate pune o cheie pentru OFERTE, codO i analog se poate face i pentru cereri. Comparaia modelelor de date Modelul ierarhic - cronologic i primul utilizat n conducerea SGBD. - forme de structurare a datelor: nregistrri i legturi explicite - legturile sunt restricionate pentru a se ncadra ntr-un arbore ordonat - are structuri fizice de reprezentare, eficiente - nu se poate aplica aceslai model cnd modelarea realitii nu este ierarhic - nu are soluie satisfctoare pentru reprezentarea legturilor de tip m:n - nregistrrile care nu se potrivesc structurii ierarhice sunt imposibile. 2. Modelul reea este mai general dect cel ierarhic: - structura legturilor explicite este arbitrar i reprezentat prin graf - restricia la legturi este s fie tip funcional, deci nu pot fi reprezentate direct legturile de tip M:N. Soluia pentru reprezentarea acestor legturi este folosirea tipurilor de legtur - permite reprezentarea unor structuri complexe - orice interogare poate fi rezolvat eficient dac s-au prevzut pentru acestea legturile explicite necesare. - dezavantaj c pentru aplicaii mai complexe structurile de reprezentare devin foarte complicate - scrierea i ntreinerea programului este dificil i costisitoare. Caracteristica comun a celor dou modele este folosirea limbajelor navigaionale pentru formularea interogrilor. Aceste limbaje se bazeaz pe utilizarea conceptului
65

cursor care indic poziia curent n baza de date. Utilizatorul poate modifica poziia cursorului, poate efectua operaii asupra datelor de la poziia curent. Aceste limbaje exploateaz direct legturile explicite existente n baza dedate iar interogrile presupun navigaia cursorului pe lanurile de legturi. n mabele modele sunt permise duplicatele iar dou obiecte similare pot fi distinse, obiectele avnd identitate proprie. 3. Modelul relaional este o colecie de relaii care reprezint fie cte un tip de entitate, fie o legtur n general de tip m:n ntre dou sau mai multe tipuri de entiti. - n relaii nu sunt permise duplicatele, nu are principiul identitii obiectelor - este orientat pe valoare, distincia ntre dou tuple fiind fcut exclusiv pe baza valorilor atributelor componente - ntre diferite relaii nu exist legturi explicite - la interogri apare necesitatea de conexiuni ntre diferite relaii. Acest lucru se realizeaz prin cuplarea dinamic a lor. Aceste operaii de cuplare sunt costisitoare din punct de vedere a volumului de calcul i a necesarului de memorie. - dezvoltarea hardului a dus la dezvolatrea acestui model - relativa ineficien a modelului relaional este copensat de AVANTAJELE: - simplificarea structurii BD relaionale - lipsa legturilor explicite; faciliteaz formularea interogatorului prin limbaje de nivel nalt cum este algebra relaional sau orice limbaj echivalent, numit limbaj relaional - caracteristic acestor limbaje obinute sunt tot relaii. Nu exist noiunea de cursor, se opereaz cu relaiile n ntregul lor - limbajele relaionale sunt deosebit de simple i flexibile - aceste limbaje au dus ls folosirea BD de multe categorii de utilizatori - pot fi formulate cele mai diverse nterogri - prin folosirea unui singur concept pentru reprezentarea asociaiilor n BD relaioanle, limbajele relaionale au un caracter unitar i un set mai restrns de operatori pentru accesul la date, fa de celelalte modele - flexibilitatea n BD relaionale se manifest prin cuplarea dinamic relaiilor (dei nu exist legturi explicite) - utilizatorul poate formula interogri pe care proiectantul BD nu le-a prevzut n mod explicit -descrierea BD relaioanle const n dewcrierea relaiilor (domenii, atribute, etc.) structura BD fiind foarte simpl -natura interogrilor nu influeneaz structura BD Limbaje de manipulare a datelor (LMD) relaionale Partea esenial o oricrei LMD este cea care formuleaz interogrile adresate BD. Uneori LMD este numit i limbaj de interogare. Partea din LMD care nu serefer la interogri este restrns i se ocup cu operaiile deinserie, tergere i modificare a tuplelor. Limbajele de interogare pentru modelul relaional se mpart n dou grupe ce au la baz formalisme abstracte numite i limbaje abstracte utilizate pentru exprimarea interogrilor adresate BD. Aceste formalisme sunt: 1. Algebra relaional, unde interogrile sunt exprimate prin aplicarea unor operatori specializai asupra relaiilor. Limbajele derivate se numesc limbaje algebrice. 2. Calculul relaional, unde interogrile descriu mulimea tuplelor rezultat prin specificarea unui predicat (condiie) pe care aceste tuple trebuie s-l satisfac. Funcie
66

de natura obiectelor primitive cu care se opereaz care pot fi tuple sau valori din domeniile calcului relaional al domeniilor. Algebra relaional, calculul relaional al tuplelor i calculul relaional al doeniilor sunt limbaje abstarcte care nu unt implementate n nici un SGBD. Aceste limbaje servesc pentru evaluarea limbajelor care sunt implementate n diferite SGBD, care provin din aceste formalisme abstracte. Aceste formalisme au fost introduse de Codd i cuprind facilitile minime pe care trebuie s le posede orice limbaj real de interogare relaional. Un limbaj care ndeplinete condiiile mimime este un limbaj relaioanl complet. Limbajele complete mai cuprind i faciliti suplimnetare cum ar fi: - posibilitate de efecturi de calcule aritmetice - funcii de tiprire a relaiilor i de atribuire a acestora unor nume de variabile - funcii de agregare care efectueaz operaii cum ar fi: media, suma, minimul i maximul valorilor unei coloane dintr-o relaie. Limbaje reale derivate din aceste formalisme sunt: a) Libajul ISBL (Information System Base Language) dezvoltat n acdrul firmei IBM la Centrul tiinific al acestuia din Peterlee, Marea Britanie, este un limbaj bazat pe algebra relaional b) Limbajul QUEL care deriv din libajul relaional al tuplelor, dezvoltat n Universitatea Berkley din California cu sisteme de operare UNIX. c) Limbajul QBE (Query - by - Exemple) dezvoltat n IBM i are la baz calcul relaional al domeniului. Acest limbaj ctig tot mai mult teren pentru neprofesioniti datorit interfeei prietenoase calculator - utilizator. Se menioneaz i limbajele SQUARE i SEQUEL (SQL) care sunt limbaje intermediarre ntree algebra relaional i calculul relaional. Sunt dezvoltate n secia San Jose a firmei IBM ca limbaje de integrare pentru SGBD relaional System RSQL i este limbajul perfecional a lui SQUARE i este recunoscut ca un cvasistandart al limbajelor de interogare relaionale. Algebra relaional Ea are la baz un set de operatori care se folosesc ca priitive pentru construirea interogrilor. Algebra relaional este un limbaj abstract de tip procedural ntruct interogrile exprimate cu ajutorul ei sunt secvene de operatori prin care se specific n mod explicit modul de obinere al relaiei rezultat corespunztoare fiecrei interogri. OPERATORII ALGEBREI RELAIONALE Algebra relaioanl este o colecie de operatori unari sau binari care acioneaz asupra relaiilor. Rezultatele care se obin n urma aplicrii operatorilor sunt tot relaii. Operatorii se mpart n dou grupe: - operatori pe mulimi care acioneaz asupra relaiilor vzute ca mulimi de elemente fr a lua n considerare caracterul de tupl a elementelor. Sunt operatorii pe mulimi din matematic. - operatori relaioanli speciali care iau n considerare caracterul de tupl al elementelor operanzilor. Operaii pe mulimi Pentru operaiile REUNIUNE, INTERSECIE i DIFEREN cele dou relaii operand trebuie s fie compatibile la reuniune ceea cde nseamn c trebuie sp fie derivate din acelei domeniu.

67

Reuniunea a dou relaii A i B notat AUB este o relaie R care conine toate tuplele cu proprietatea c, aparin relaiei A sau relaiei B. Intersecia a dou relaii A i B notat AB este o relaie R care conine toate tuplele cu proprietatea c aparin att relaiei A ct i relaiei B. Diferena a dou relaii A i B notat A-B este o relaie R care conine toate tuplele cu proprietatea c aparin lui A i nu aparin lui B. Produs cartezain a dou relaii A i B notat AxB, A fiind de gradul m i B de gradul n, este o relaie R de gradul m+n care conine toate tuplele obinute prin concatenarea fiecrei tuple din relaia A cu fiecare tupl din relaia B. Pentru dou tuple a(a1, a2, ...., am) i b(b1, b2, ..., bn) concatenarea este tupla r (a1, a2, ...., am, bm+1, ..., bm+n) Operatori relaionali speciali Aceti operatori sunt unari (proiecia i selecia) sau binari (cuplarea- join - i diviziunea) Selecia printr-un predicat P a unei relaii A notat cu p(A) este o relaie R care conine toate tuplele din relaia A cu proprietatea c satisfac predicatul P. Predicatul este o formul ce poate conine - operanzi care sunt nume de atribute sau constante - operatori de comparaie =, <, >, , , , - operatori logici: &, |, ! Exemple: 1. Bursieri=situaia scolar="B"(STUDENT) este o selecie a relaiei student care conine studenii bursieri. 2. Studenii bursieri din anul I de studiu Bursierii 1=situaia scolar="B"&AN="1"(STUDENT) Dac exist deja relaia bursier atunci Bursier 1= =AN="1"(BURSIERI) Proiecia pe atributele A1, A2, .., An notat cu A1, ..., An (B) este o relaie R de gradul n obinut din relaia B astfel: - se elimin din relaia B atributele care nu sunt specificate nn lista de proiecie astfel nct rmn doar coloanele corespunztoare atributelor A1, A2, ..., An; se reordoneaz atributele rmase n ordinea simplificat n lista de proiecie A1, A2, ..., An; - se elimin tuplele duplicat Deci proiecia unei relaii este o soluie vertical a acestuia (se selecteaz coloanele coresounztoare atributelor specificate) cu eliminarea tuplelor duplicat care ar putea s apar datorit seleciei verticale. Exemplu: Avem s obinem notele date de un profesor Note_prof= NUME_PROF, NOTA(Note) Nume_prof Vasile Vasile Vasile Costea Costea Costea
68

Note 7 8 9 10 9 7

Costea

8 Proiecia relaiei NOTE

Cuplarea (join) Fie un operator decomparaie: =, <, >, , , i x un atribut al relaiei A i Y un atribut al relaiie B, x i Y fiind atribute definite pe domenii compatibile. Numim - cuplare a relaiilor A i B dup atributele X i Y notate A B XY o relaie R care conine acele tuple ale produsului cartezian AxB care au proprietatea c valorile x i y corespunztoare atributelor Xi Y sunt n relaia xy. Cuplarea natural a dou relaii A i B notat A B avnd atributele X respectiv Y definite pe domenii compatibile se obine astfel: - se calculeaz AxB; - se selecteaz acele tuple din axB pentru care valoarea corespunztoare atributelor lui X este egal cu valoarea atributelor Y -se efectueaz o proiecie a rezultatului obinut pentru a elimina coloana coresounztoare atributului Y. Operatorul de cuplare este echivalentul aplicrii a doi operatori produsul cartezian urmat de o selecie. A B= xy(AxB) xy Exemple: 1. Prin echiparea relaiilor Profesor i Note dup atributele Nume i Nume_profesor definite pe domeniul coun al numelor de persoane obinem relaia Note disciplin. Nume Funcia Disciplina Nume_profesor Nume_student Nota Vasile As MN Vasile Ionescu 7 Vasile As MN Vasile Lupu 8 Vasile As MN Vasile Codru 10 Costea Conf BD Costea Ionescu 9 Costea Conf BD Costea Lupu 10 Costea Conf BD Costea Popescu 8 Costea Conf BD Costea Tatu 7 Cuplarea relaiilor Profesori i note Note_disciplin = Profesor Note Nume=Nume profesor 2. Prin cuplarea natural a relaiilor Profesor i Note dup atributele indicate mai sus rezult Note_Disciplin_Natural n care coloana redundan Nume_profesor nu mai apare. Note_Disciplin_Natural=Profesor Note Nume Funcia Disciplina Nume_student Nota Vasile As MN Ionescu 7 Vasile As MN Lupu 8 Vasile As MN Codru 10 Costea Conf BD Ionescu 9 Costea Conf BD Lupu 10
69

Costea Costea

Conf Conf

BD BD

Popescu Tatu

8 7

3. Din relaia Student se poate obine prin cuplarea Student_student = Student 1 Student 2 sex1>sex2 Nume 1 Ionescu Ionescu Codru Codru Tatu Tatu I1 Zi zi Zi Zi Zi Zi SI B B B B B B An I 1 1 2 2 3 3 Sex I M M M M M M Nume 2 Lupu Popescu Lupu Popa Lupu popa I2 Zi Zi Zi Zi Zi Zi An 2 1 2 1 2 1 1 Sex II F F F F F F

Diviziunea relaia A de grad m, prin relaia B de grad n notat AB este o relaie R de grad m-n format de mulimea tuplelor r cu proprietatea c pentru orice tupl b din B exist o tupl a n A egal cu rezultatul concatenrii tuplelor r i b. Mulimea atributelor relaiei B sunt o submulime a atributelor relaiei A. Relaia R are acele atribute a relaiei A care nu apar n relaia B. O tupl din relaia A este reinut n urma operaiei de diviziune numai dac este legat de fiecare tupl a relaiei B printr-o condiie predefinit. RxBA. Notnd cu Rest mulimea tuplelor din relaia A care nu apar n produsul cartezian al relaiilor B i R putem scrie. A= BxRURest Exemple: 1. Diviziunea relaiei Studeni_studente prin relaia studente studeni=studeni_studente studente Studeni Nume_student Incadr Sit_scolara An Sex Lupu Zi N 1 F Popescu zi N 2 F Nume Ionescu Codru Tatu Incadr Zi Zi Zi Studeni Sit_scolara A A A An 1 2 3 Sex M M M

Analog diviziunea studeni_studente la studeni relaia studente 2. Numele studenilor care au primit note de la toi profesorii de electronic. Se face diviziunea proieciei relaiei Note pe atributele Nume_profesor i Nume_student, reprezentat prin relaia Profesori_studeni cu relaia Profesori_electronic. Absolveni_electronic = Profesor_studeni Profesori_electronic
70

Nume profesor Vasile Vasile Vasile Costea Costea Costea Costea

Nume student Ionescu Lupu Codru Ionescu Lupu Popescu Tatu

Formularea interogrilor n algebra relaional Orice interogarea poate fi exprimat prin mai multe secvene echivalente posibile i este de dorit de a se lua secvena optim din punct de vedere al volumului de calcul i al consumului de memorie. Exemple: 1. Numele profesorilor cu care studiaz studentul? Se poate obine rspunsul din relaia Note printr-o selecie i o proiecie. Variabila T este rspunsul la prima operaie. T=NUME_STUDENT="LUPU"(NOTE) R=NUME_PROFESOR, FUNCIE(T) Sau R=NUME_PROFESOR, FUNCIE(NUME STUDENT="LUPU"(NOTE)) NUME VASILE COSTEA 2. Numele profesorilor care au cel puin un student bursier T1=sit_scolara="B"(STUDENT) T2=NUME(T1) T3=NUME_PROFESOR,NUME STUDENT(NOTE) T4=T3 T2 R=NUME_PROFESOR,(T4) T1 NUME INCADR SIT_SCOLARA IONESCU ZI B LUPU ZI B T2 NUME IONESCU LUPU T3 NUME_PROF VASILE VASILE VASILE
71

AN 1 2

SEX M F

NUME_STUD IONESCU LUPU CODRU

COSTEA COSTEA COSTEA COSTEA T4 NUME_PROF VASILE VASILE COSTEA COSTEA T5

IONU LUPU POPESCU TATU NUME_STUD IONESCU LUPU IONU LUPU

NUME VASILE COSTEA 3. Numele studenilor bursieri care au luat note mai mici de 8? T1=sit_scolara="B"(STUDENT) T2=NUME_student(T1) T3=NOTE<8(NOTE) T4=NUME_student(T3) R= T2 T4 4. Numele studenilor de la zi care au luat note mai mici ca 8 i la disciplina la care au luat. T1=NUME_STUDENT="zi"(STUDENT) T2=NUME_student(T1) T3=NOTE<8(NOTE) T4=NUME_PROFESOR, NUME_student(T3) T5=T2 T4 T6=NUME_PROFESOR, DISCIPLINA(PROFESOR) T7=T5 T6 R=NUME_STUDENT, DISCIPLINA(T7) 5. Numele studenilor i notele celor care au luat la MN note mai mari ca LUPU. T1=DISCIPLINA="MN"(Profesori) T2=NUME(T1) T3=NOTE T2 T4= NUME_STUDENT="LUPU"(T3) T5=T3 T4
NOTA3>NOTA4

R=NUME_student, NOTA(T5) 6. Numele studenilor care au luat la MN note mai mari ca la BD. T1=DISCIPLINA="MN"(Profesori) T2=DISCIPLINA="BD"(Profesori) T3=NUME(T1) T4= =NUME(T2)
72

T5=Note T2 T6=Note T3 T7=NUME_student, NOTE(T4) T8=NUME_student, NOTE(T5) T9=T4 T8 T10=NOTA7>NOTA8(T9) R=NUME_student, (T10) 7. Numele profesorilor care au predat la toi studenii bursieri. T1=SIT_SCOLARA="B"(STUDENT) T2=NUME(T1) T3= NUME_PROFESOR, NUME_student(NOTE) R= T3T2 Limitri ale algebrei relaionale Algebra relaional i formalismele echivalente cu aceasta sunt relaional complete. Puterea de expresie a limbajelor relaional complete este mult mai limitat dect cea a limbajelor computaional complet cum sunt PSCAL sau C care sunt echivalente cu maina Turing. Limbajele relaionale nu permit manipularea structurilor recursive i nici formulri de interogri cu caracter recursiv. Limita la care eueaz limbajele relaionale este dat de clasa problemelor care presupun calcularea nchiderii tranzitive a unei relaii binare. Exemplul clasic este problema legturilor aeriene ntre un grup de orae: Fiind dat o relaie binar care conine toate legturile aeriene directe dintre o mulime de orae se cere s se determine toate legturile aeriene directe sau indirecte posibile ntre aceste orae. SURSA DESTINAIA BUCURETI BERLIN BUCURETI AMSTERDAM BUCURETI ROMA PARIS NEW-YORK ROMA MADRID BERLIN PARIS MOSCOVA BUCURETI Pentru relaia DIRECT dat prin tabel ne punem ntrebarea dac putem ajunge cu avionul fcnd escale de la Bucureti la Madrid. Din tabel se vede c nu avem relaie direct. Se vede din tabel c se poate face escal la Roma. Trasee 2=Direct Direct, Trasee2 conine toate traseele aeriene cu 2 legturi. Pentru alte ntrebri Trasee2 nu este suficient Bucureti - New York. Trasee3=Trasee2 Direct Pentru alte legturi aeriene se poate ajunge la Trasee4, Trasee5, etc. Dac pentru o relaie Direct nu se poate preciza numrul de operaii de cuplri necesare pentru a stabili legtura, acest numr este dat de nurul cel mai mare de escale, deci nu exist o expresie algebric care s garanteze rezolvarea problemei
73

formulate. Mulimea traseelor posibile este dat de nchiderea tranzitiv a relaiei DIRECT, calculul creia presupune repetarea recursiv a operaiei de cuplare, de un numr de ori care este necunoscut. Calculul relaional Formalismul calcului relaional permite formularea interogrilor ntr-o manier diferit de algebra relaional. n acest formalism interogarea este o descriere a relaiei rezultat, descriere care stabilete mulimea tuplelor rezultatului prin precizarea unei proproieti comune tuturor acestor tuple i aceasta este exprimat printr-o formul din calculul relaional. Deci o interogare n calculul relaional arat care este rezultatul fr a arta modul de obinere. Limbajele derivate din calculul relaional sunt neprocedurale sau declarative fa de limbajele derivate din algebra relaional care se numesc procedurale. Formulele calculului relaional Orice formul din calculul relaional este o expresie care reprezint o relaie, posibil infinit. n aceste formule apar o serie de variabile dintre care unele sunt libere iar altele legate. Variabilele din calculul relaional pot fi variabile de tupl sau variabile de domeniu. ntr-o formul pot aprea numai variabile de tupl i avem calcul relaional al tuplelor (CRT) al domeniilor (CRD). O variabil de tupl ia valori peste tuplele unei relaii n timp ce variabilele de domeniu corespund unui atribut dintr-o relaie. O formul a calculului relaional este construit din atomi conectai prin operatori logici. Atomii din formule pot fi : 1. Literele de forma R(X1, X2, ... , Xn) unde R este un numr de relaie, iar X 1, X2, ... , Xn sunt variabile constante. n calculul relaional al tuplelor avem n=1, iar X 1=X este o variabil de tupl sau o constant, posibil cu mai multe componente. R(X1, X2, ... , Xn) semnific c X1, X2, ... , Xn formeaz o tupl n relaia R, respectiv o tupl n relaia R. Exemplu: Relaia PROFESOR. Dac X1, X2 i X3 sunt variabile de domeniu cu valorile: X1=POP; X2=ASISTENT; X3=MN; Sau X o variabil de tupl cu valoarea X =("POP", "ASISTENT", "MN") Atunci att PROFESOR (X1, X2, X3) ct i PROFESOR (X) sunt adevrate. Dac X1 = POP; X2=ASISTENT; X3=BD Sau X=("POP", "ASISTENT", "BD") Atunci att PROFESOR (X 1, X2, X3) ct i PROFESOR (X) sunt false deoarece POP nu pred BD. 2. Comparaii aritmrtice de forma XY unde este un operator aritmetic de comparaii (=, , <, >, , ) i X i Y sunt variabile de domeniu, respectiv componente de variabile de tupl (de forma Xa) sau constante. Exemple: a) Dac STUDENT (X) i STUDENTE (Y) (adic X este o variabil de tupl peste relaia STUDENI i y variabila de tupl peste relaia STUDENTE) atunci avem; XSEX>YSEX Ceea ce nseamn c M>F
74

b) Dac NOTE (X1, X2, X3), atunci avem X35 deoarece toi studenii au luat note mai mari de 5. Pentru a putea aprecia valoarea de adevr a unei formule n formalismul calculului relaional n raport cu mulimile n care iau valori variabilele de domaniu sau de tupl se introduc urmtorii operatori unari numii cuantificatori care aciomeaz asupra ariabilelor. - cuantificatorul universal Se noteaz cu i are semnificaia c formula preficxat cu acest cuantificator aplicat unei variabile (X) este valid pentru toate valorile posibile ale variabilei X. Exemplu: (X) (STUDENI (x) X. An 11X.An 6) este valabil pentru orice student n anii de studiu 1,2,3,4,5 sau 6. - cuantificatorul existenial Se noteaz i are semnificaia c formula prefinat cu acest cuantificator aplicat unei variabile, X este valid pentru cel puin o valoare a variabilei X. Exemplu: Formula (X) (STUDENT(X) X.SEX="F") este valid pentru c exist cel puin o student n relaia STUDENT. Variabilele ce apar ntr-o formul precedate de un cuantificator se numesc variabile legate. Toate celelalte variabile se numesc libere. Pornind de la cele dou tipuri de atomi definii o formul F din calculul relaional se definete recursiv prin urmtoarele reguli: 1. Orice atom este o formul. Toate variabilele menionate ntr-un atom sunt libere. 2. Dac F este o formul atunci (X)F i (X)F sunt formule i variabile X n aceste formule sunt legate. Celelalte variabile sunt libere sau legate dac sunt legate n F. 3. Dac F1 i F2 sunt formule atunci F1F2, F1F2, -F1, (F1) sunt formule. Toate apariiile variabilelor de tuple sunt legate sau libere dup cum sunt n formulele F1 i F2. n formulele calculului relaioanl se pot defini paranteze pentru gruparea operanzilor i forarea unei ordini de evaluare a operatorilor. Dac lipsesc parantezele ordinea de evaluare a operatorilor este: a) operatorii unari , , i au cea mai mare prioritate i se evalueaz de la dreapta la stnga. b) operatorii se situeaz pe urmtorul loc de prioritate i se evalueaz de la stnga la dreapta. c) operatorul se situeaz pe nivelul de prioritate cel mai sczut i se evalueaz de la stnga la dreapta. 4. Un ir de simboluri este o formul dac i numai dac se obine prin aplicarea regulilor 1 - 3 de un numr finit de ori. Calculul relaional al domeniilor (CRD) Formulele calculului relaional pot fi folosite la exprimarea de interogri. Orice formul din CRD avnd una sau mai multe variabile de domaniu libere, definate o relaie ale crei atribute corespund acestor variabile libere. Prin convenie notaia F(X 1,

75

X2, ..., Xn) semnific faptul c singurele variabile libere din formula F sunt X 1, X2, ..., Xn. O interogare n CRD este {( X1, X2, ..., Xn)| F(X1, X2, ..., Xn)}, Definete o relaie rezultat ca fiind mulimea tuplelor de forma (a 1, a2, ..., an) astfel nct substituirea variabilelor Xi cu ai, formula F (a1, a2, ..., an) devine adevrat. Interogrile definite ca mai sus permit definirea unor relaii care ar putea fi infinite. Astfel expresia {(X, Y)| . R (X, Y)}, este o interogare legat n CRD i definete o relaie infinit care conine toate tuplele de forma (X, Y) care nu apar n relaia R. Pentru evitarea acestei situaii se restrnge CRD la un sub al acestuia care garanteaz obinerea unor rezultate finite. Formule independente de domeniu Fie formula F din CRD, se definete DOM (F) ca fiind reuniunea dintre mulimea constantelor care apar n F i mulimea tuturor valorilor de atribute care apar n relaiile specificate ca parametri n cadrul formulei F. DOM este o funcie de formula F i de relaiile ale cror nume apar invocate ca parametri n formula F. Fie F (X1, X2,..., Xn) o formul cu CRD i D o mulime de valori cu proprietatea DOM(F)D. Definim relaia corespunztoare formulei F n raport cu mulimea de valori D ca fiind mulimea tuplelor: (a1, a2,..., an) DxDx...xD (de n ori) astfel nct prin substituirea fiecrei variabile de domaniu X prin valoarea corespunztoare a, expresia F(a1, a2,..., an) devine adevrat. Formula F este independent de domeniu dac relaia corespunztoare acesteia n raport cu orice DDOM (F) nu depinde de mulimea de valori D. Pentru o formul F independent dedomaniu, relaia corespunztoare n raport cu orice mulime de valori D nu depinde de aceast mulime i este aceeai cu relaia corespunztoare a lui F n raport cu DOM (F). Independena de domaniu a unei formule F corespunde principiului c orice relaie rezultat corespunztoare acestei formule nu poate s apar alte vaklori dect cele existente n relaiile invocate ca parametri n F sau cele care apar explicit n F. Exemplu: Formula F(X, Y) = - R (X, Y) Nu este independent de domaniu. Fie: R (X, Y) = {(a,a), (b,b)} DOM(F)={a,b} Fie D1={a,b} i D2={a,b,c} Relaia formulei F n raport cu mulimea de valori D este R1(X, Y)= {(a,b), (b,a)}iar relaia R2(x,y)={(a,b), (b,a), (a,c), (c,a), (b,c), (c,b), (c,c)}. Evident R1(x,y) R2(x,y) F (x,y) = - R(x,y) este dependent de domeniu. Pentru evitarea ambiguitilor este necesar ca n formularea interogrilor s fie folosit doar acel subset de formule F din CRD care sunt independente de domeniu. nc nu exist un algoritm care s stabileasc c o formul este independent de domeniu. Formule sigure n CRD Datorit faptului c nu se poate stabili dac o formul din CRD este sau nu independent de domeniu, limbajele de interogare reale pe CRD folosesc un subset mai
76

restrictiv de formule sigure. Aceste formule sunt subset al mulimii formulelor independente de domeniu i este definit un criteriu prin care se poate stabili dac o formul aparine sau nu acestui subset. Aceast submulime trebuie s permit formularea oricrei interogri din CRD. Mulimea formulelor sigure are urmtoarele proprieti: 1. orice formul sigur din CRD este independent de domeniu 2. pentru o formul oarecare din CRD se poate stabili cu uurin dac este sau nu sigur 3. Formulele sigure din CRD permit exprimarea oricrei interogri care poate fi exprimat n algebra relaional. Prin definiie ulimea formulelor sigure din CRD includ acele formule din CRD care ndeplinesc condiiile: 1. Formula nu conine cuantificatorul universal . Dac nu el poate fi eliminat prin transformarea (X)F= (X)F 2. Oricare dou subformule F1 i F2 conectate prin operatorul disjuncie () trebuie s aib acelai set de variabile libere. Deci sunt permise construciile de forma: F1(X1, X2,..., Xn) F2(X1, X2,..., Xn) 3. Orice variabil liber dintr-o subformul maximal costnd din conjuncia a una sau mai multe formule: F1F2 ... Fm trebuie s fie limitat. Variabilele libere limitate se definesc astfel: a) O variabil este limitat dac apare ca variabil liber n cel puin una din subformulele Fi, unde Fi nu este o comparaie arotmetic sau negaia altei formule. b) Dac Fi este de forma : x=a sau a=x unde a este o constant. Atunci variabila X este limitat. c) Dac Fi este de forma x=y sau y=x i y este o variabil limitat, atunci X este de asemenea limitat. 4. n orice conjuncie de tipul celor de la punctul 3 trebuie s existe cel puin o formul pozitiv (care nu este negaia unei alte formule). Calculul relaional al tuplelor (CRT) Aici variabilele sunt tuplele relaiilor. Orice formul din CRTR avnd o singur variabil de tupl liber, definete o relaie ale crei atribute corespund coponentelor acestei variabile. O interogare n CRT este: {X| F(X)} i definete o relaie rezultat ca fiind mulimea tuplelor t pentru care formula F(t) este adevrat. i aici ca i n CRD se folosete clasa formular CRT sigure care au aceleai proprieti. Limbajele de interogare reale bazate pe CRT folosesc doar formuleel CRT sigure. ntre CRD i CRT nu sunt deosebiri de fond ci chiar de notaia variabilelor de domeniu din CRD le corespund componentele variabilelor de tupl din CRT i invers. Formulele sigure din CRT i CRD permit realizarea acelorai interogri. Formularea interogrilor n CRD i CRT 1. Numele profesorilor cu care studiaz studentul Lupu? CRD
77

R={x|(np)(ns)(nt)(Note (np, ns,nt)ns="Lupu"x=np)} CRT R={t| (u)(Note (u)u.Nume_student="Lupu"t.Nume_profesor=u.Nume_profesor)} Relaia rspuns R este formulat din mulimea tuplelor t cu proprietatea c exist cel puin o tupl u n relaia Note pentru care atributul Nume_student are valoarea Lupu iar atributul Nume_profesor al acestuia d valoarea atributului cu numele Nume al tuplei t. Tupla t are o singur component care corespunde singurului atribut al relaiei rezultat R i cu denumirea Nume_profesor. 2. numele profesorilor care au cel puin un student bursier? CRD R={x|(np)(ns)(nt)( n)( Ss)( Sex)(Note (np, ns,nt)student(n,in, Ss, An, Sex)Ss="B"n=nsnp=x)} CRT R={t| (u)( v)(Note (u)student ().Situaia_scolara="B".Nume= u.Nume_ student u.Nume_profesor=t.Nume} 3. Numele studenilor, disciplinele la care au luiat note i notele obinute? CRD R={(x,y,z)|(Cnp)(ns)(E(nt)(En)(f)(Ed)(Note(np,ns,nt)Profesori(n,f,d)np=n x=ns y=dz=nt)} CRT R={t| (u)( v)(Note (u)Profesori ()u.Nume_profesor=v.Nume t.Nume= u. Nume_ student t.Disciplina= V.Disciplinat.Nota=u.Nota)} Limbajul QBE QBE (Query By exemple) - limbaj de interogare prin exemple - dezvoltat de firma IBM. Limbajul posed o interfa utilizator deosebit de prietenoas care permite asamblarea interogrilor folosind un editor mod ecran. Prin apsarea unei singure taste pe ecranul terminalului pot fi vizualizate una sau mai multe capete de tabel care urmeaz a fi completate de utilizator cu numele relaiilor care urmeaz a fi implicate n interogare. Drept rspuns sistemul completeaz capetele de coloan cu numele atributelor din fiecare relaie. Interrogrile se formuleaz folosind variabilele de domeniu sau conastante la fel ca i n calcululul relaioanl al domeniului pentru a forma tuple model pentru tuplele care urmeaz s fie incluse n relaia rezultat. Atunci cnd o tupl sau u grup de tuple corespund modelului indicat acesta este inclus n relaia rezultat. La formarea tuplelor model variabilele vor fi precedate de operatori de tiprire P. (toi operatorii QBE se termin cu ".") indicnd c valorile atributelor corespunztor acestor coloane vor fi tiprite. Se consider c limbajul QBE estre bidimensional, are o sintax bidimensional (tabele bidimensionale), celelalte limbaje au o sintax liniar. Formularea interogrilor n limbajul QBE Studiul se face pe exemple: 1. Numele profesorilor cu care studiaz studentul Lupu? n capul de tabel vid prezentat de sistem pe ecran se introduc relaiile Note n prima coloan i se obine rspunsul la interogarea dorit. Note Nume_profesor Nume_student Nota

78

Sistemul completeaz capul de tabel Formularea interogrii continu s introduc pe rnd n coloanele tabelului elementele care definesc relaia rezultat Note Nume_profesor Nume_student Nota P._Nume Lupu

n aceast interogare Lupu este o constant i reprezint condiia de selecie a tuplelor din relaia Note, iar -Nume este o variabil de domeniu (n QBE variabilel de domeniu ncep cu - ) i este precedat de operatorul de tiprire P. P poate fi pus i n prima coloan i determin tiprirea valorilor pentru variabilele de domeniu care apar n aceeai linie cu acesta. Astfel: Student Nume Incadrare Sit_scolar An sex P. _Nx -Ix -Sx _An -Sx Returneaz toate informaiile despre toi studenii din relaii STUDENT. Se mai poate scrie: Student Nume Incadrare Sit_scolar An sex P. 2. Numele studenilor care au obinut note peste 8 i numele profesorilor de la care au obinut aceste note? Note Nume_prof Nume_student Nota P. _Numeprof -Numestudent >8 3. numele profesorilor care au cel puin STUDENT i NOTE. Legtura dintre Numestudent. Note Nume_prof P._Numeprof Student Nume -Numestudent Incadrare un student bursier? Se indic dou relaii relaii seface cu variabila de domeniu Nume_student -Numestudent Sit_scolar B An Nota sex

4. Numele studenilor de la zi care sunt bursieri Student Nume Incadrare Sit_scolar P.-Numestudent zi B

An

sex F

Cnd condiia de selecie este format din conjuncia a mai multor atomi acetia se trec n aceeai linie. Interogarea s-ar putea face pe mai multe linii. Student Nume Incadrare Sit_scolar An sex P. - Numestud -Numest zi B
79

- Numest 5. numele profesorilor care au date note de 9 i 10 Note Nume_prof Nume_student P._Numeprof -Numeprof Nota 9 10

6. Numele studenilor din anul I sau bursieri. Cnd avem interogri ce implic disjuncia a doi atomi se face specificarea acestora pe linii succesive ale tabelului i se folosesc variabile de domeniu diferite pentru fiecare condiie. Student Nume Incadrare Sit_scolar An sex P. - Numestx -Numesty B 1 7. Numele studenilor care au luat note mai mici de 5 i disciplinele la care au luat aceleai note? Note Nume_prof Nume_student Nota _Numeprof -Numest <5 Profesor Nume Funcia Disciplina _Numeprof -Disc Restan P. Nume -Numest Disciplina -Disc

8. Numele profesorilor de MN alii dect Vasile? Se folosete caseta de condiie. Pentru unele interogri este imposibil exprimarea condiiilor de selecie n coloanele din tabele. Asemenea condiii pot fi formulate ntr-o caset separat activat la cererea utilizatorului. Profesor Nume Funcia Disciplina P._Numeprof MN Condition _NumeprofVasile Problema 6. Numele studenilor din anul I sau bursieri Student Nume Incadrare Sit_scolar P. - Numest _Ssx Condition _Ssx=B or _Ax=1 Folosirea negaiei () Introducerea negaiei n prima coloan a unei linii are ca efect negarea conjunciei condiiilor din acea linie. 9. Numele profesorilor care nu predau MN
80

An _Ax

sex

Profesor

Nume P._Numeprof

Funcia

Disciplina MN

Schimbarea negaiei Profesor Nume P._Numeprof

Funcia

Disciplina MN

Ne d numrul profesorilor care predau toate disciplinele exceptnd MN. ntrebarea 8. Se poate scrie. Profesor Nume Funcia Disciplina MN P.Vasile Folosirea operatorului ALL Conform conveniei din QBE - variabilele de domeniu sunt cuantificate existenial. Pentru a cuantifica universal o variabil de domeniu aceasta trebuie precedat de operatorul ALL. 10. Numele profesorilor care predau la toi studenii? Note Nume_prof Nume_student P._Numeprof ALL._numest Student Nume ALL._Numest Incadrare Sit_scolar An Nota sex

11. Numele profesorilor a cror studeni sunt toi bursieri. Note Nume_prof Nume_student P._Numeprof ALL._numest Student Nume [ALL._Numest *] Incadrare Sit_scolar B An

Nota sex

ALL._Numest - este mulimea studenilor buirsieri a oricrui profesor din relaia rezultat i * ne arat c mai pot fi i alii. [] pune toate condiiile n una singur. 12. Numele profesorilor care predau la toi studenii bursieri. Note Nume_prof Nume_student P._Numeprof [ALL._numest*] Student Nume ALL._Numest Incadrare Sit_scolar B An Nota sex

13. Numele studenilor care au obinut o not mai mare la MN dect studentul Lupu. Profesor Nume Funcia Disciplina _Nprof MN

81

Note

Nume_prof _Nprof _Nprof

Nume_student P. Lupu

Nota _Nota <_Nota

Operatorul de grupare G Apariia ntr-o coloan a unui tabel nseamn partiionarea mulimii de tuple a relaiei respective n grupuri de tuple avnd aceeai valoare a atributului corespunztor coloanei n care apare operatorul de grupare. Relaia rezultat poate conine doar valori care constituie caracteristici unice de grup adic valoarea atributului de grupare sau rezultatul unei funcii de agregare aplicat asupra tuplelor unui grup. 14. Numele studenilor i media obinut dac aceasta este mai mare de 8? Note Nume_prof Nume_student Nota P.G._Numest P.AVG ALL._Note Condition AVG.ALL._Note>8 Operatori de tergere, inserare i actualizare Operatorul de tergere n QBE este D (Delete) Dac n prima coloan dintr-o linie a unei interogri apare operatorul D atunci tabelele care satisfac condiia exprimat n acea linie vor fi terse din relaia la care se refer interogarea. 1. tergerea tuplei corespunztoare studentului Ionescu din relaia Student: Student Nume Incadrare Sit_scolar An sex D. Ionescu 2. tergerea tuturor studenilor nebursieri Student Nume Incadrare D. _Numest Sit_scolar N An sex

Este nevoie la tergere ca utilizatorul s furnizeze cel puin o valoare de cheie primar pentru tupla ce se terge. Inserarea (I) a uneia sau mai multe tuple ntr-o relaie seface cu operatorul (I). C ai la tergere este necesar precizarea unei chei primare care s fie diferit fa de valorile existente n relaia n care se face inserarea. Exemple: 1. Dac studentul Ionescu primete nota 9 la MN (la as. Vasile) atunci tupla corespunztoare (Vasile - Ioenscu - 9) se insereaz n Note astfel: Note Nume_prof Nume_student Nota I. Vasile Ionescu 9 2. Inserm studentul Codru a primit la MN de la Vasile aceeai not ca i Popescu la BD de la Costea. Note Nume_prof Nume_student Nota I. Vasile Codru _Nota Costea popescu _Nota
82

Actualizarea se face cu operatorul U (update) pe prima coloan, tupla cu care se face modificarea a) se acord nota 5 tuturor studenilor care au luat sub 5 la unul din examene. Note Nume_prof Nume_student Nota U. _Numeprof _Numest 5 _Numeprof _Numest <5 b) pentru a mri cu un punct notele de la MN mai mici ca 5 Note Nume_prof Nume_student U. Profesor Condition _Nota <5 Operatori de agregare Limbajul QBE are urmtorii operatori de agregare SUM - suma valorilor unui atribut; AVG - media valorilor unui atribut MAX - maximul valorilor unui atribut MIN - minimul valorilor unui atribut CNT - numrul de tuple din relaie Mai sunt ALL., UN (unic) ALL. aplicat unei variabile de domeniu produce un multiset al valorilor pe care le parcurge variabila i conine i repetiiile de valori identice. Operatorul UN transform un multiset general de operatorul ALL ntr-un set (el elimin repetiiile de valori). Exemplu: Note Nume_prof Nume_student Nota P.CNT.ALL._Numepr are ca efect tiprirea numrului 7 Note Nume_prof P.CNT.UN.ALL._Numepr are ca efect scrierea valorii 2 Definirea datelor n QBE Limbajul de interogare QBE la fel ca i alte limbaje reale au asociat i o parte de definire a datelor care teoretic constituie limbajul de definire a datelor (LDD) care este o component logic a SGBD - urilor. n practic LDD i LMD sunt implementate n acelai modul. n QBE pentru operaiile din LDD se folosete aceeai interfa grafic Nume_student Nota _Numeprof _Numeprof Nume _Numepr _Numest _Numest Funcia Nota Nota+1 Nota Disciplina MN

83

ca i pentru formularea interogrilor iar comenzile LDD au o structur similar cu aceea a operaiilor n LMD. Definirea relaiilor Limbajul QBE menine o list numit directorul tabelelor a tuturor numelor de relaie din BD mpreun cu atributele lor i anumite informaii referitoare la aceste atribute. Utilizatorul are acces la aceast list pentru interrogri. tergeri sau inserri, folosind aceleai notaii ca pentru operaiile obinuite asupra relaiilor. Exemple: 1. Introducnd operatorul de tiprire P. sau P._Numerel (unde Numerel este o variabil oarecare) n poziia corespunztoare numelui de relaie ntr-un cap de tabel vid, sistemul va afia ca rspuns numele tuturor relaiilor din baza de date. 2. Dac se introduce P._Numerel P. atunci pe lng numele relaiilor se vor tipri i numele atributelor acestora (al doilea operator indic aceasta). 3. Pentru crearea unei relaii se va folosi operatorul I. Pentru aceasta se va introduce n prima coloan a unui cap de tabel vid o comand I.R.I unde R este numele relaiei care se creaz. Al doilea operator I. indic faptul c urmeaz a se defini atributele relaiei i proprietile acestora. Atributele oricrei relaii au o serie de proprieti ale cror valori pot fi stabilite de ctre utilizator. Limbajul QBE poate permite controlul asupra urmtoarelor proprieti ale atributelor. a) KEY - este proprietatea prin care se stabilete dac atributul face parte dintr-o cheie primar i are valorile Y sau N b) TYPE - indic tipul, de dat al atributului, cum ar fi: CHAR - pentru ir de caractere FLOAT - pentru numere reale FIXED - pentru numere ntregi c) DOMAIN - numele domeniului din care este derivat atributul d) INVERSION - indic faptul dac se dorete (Y) sau nu (N) crearea unui index pe atributul respectiv. Exemplu pentru crearea relaiei NOTE I.NoteI. Nume_prof Nume_student Nota Key Y Y N Type Char Char Fixed Domain Nume Nume Note Inversion N N N Domeniul Note este NOTE={1,2,3,4,5,6,7,8,9,10}iar domeniul NUME indic nemele de persoane pe care le admite sistemul n lista de nume. Definirea vederilor Conceptul de vedere din QBE este realizat prin folosirea unui mecanism de evaluare ntrziat . crearea unei vederi se face similar cu a unei relaii folosind comanda I. n prima coloan a unui tabel vid i urmat de cuvntul cheie VIEW (vedere) i apoi de numele vederii care se creaz. Dac dup numele vederii se pune I. atunci sistemul ateapt specificarea de ctre utilizator a numelor atributelor vederii dup care urmeaz definirea vederii.

84

Exemplu: Pentru crearea vederii Bursieri cu atributele NUME, AN i MEDIA care s conin informaiile corespunztoare acestor atribute pentru studenii bursieri, procedm astfel: I.VIEW Bursieri I. Nume An Media _Numestudent _Anul AVG.ALL_Nota Student Nume _Numestud Note Nume_prof Incadrare Sit_scolar B An _Anul Nota _Nota sex

Nume_student G._Numestud

Interogarea care definete o vedere nu este evaluat n momentul introducerii acesteia ci este asociat numelui vederii i memorat n directorul tabelelor. Evaluarea acestei definiii se face ori de cte ori numele vederii corespunztoare este invocat ntr-o interogare QBE. Vederile din QBE sunt de tip read - only sunt folosite n operaii de interogare i nu permit modificri asupra vederilor. Vederile n QBE sunt folosite pentru simplificarea formulrii unor interogri care exprimate n termenii relaiilor de baz ar fi complicate sau pentru limitarea accesului la BD fa de anumite categorii de utilizatori. Dorim acesul studenilor la informaiile din relaia PROFESOR fr a putea face modificri n aceast relaie. Se interzice studenilor accesul la relaia profesor i se definete vederea Public - profesori. I.VIEW Public_profesori I. Nume Funcia Disciplina Aceast vedere conine aceeai informaie ca i relaia PROFESORI.
LIMBAJUL SQL Limbajul SQL (cunoscut iniial sub numele SEQUEL) este limbajul de interogare al SGBD System R dezvoltat n localitatea San Jose al firmei IBM. SQL a evoluat din precedentul su SQUARE. Cele dou limbaje au aceleai concepii de baz dar deosebirea const n sintax, SQUARE are o sintax bazat pe notaii matematice iar SQL are o sintax mai apropiat de limba englez (SQL sau SEQUEL - Structural English Query Language). Sintaxa SQL este mai adecvat programrii pe calculator. n prezent SQL este cea mai rspndit interfa pentru SGBD - urile relaionale. nafar de Sistemul R limbajul SQL este disponobil i pentru SGBD-urile relaionale cum ar fi SGBD ORACLE (pentru sisteme mari dar i pentru calculatoare personale profesionale) sau chiar DBase. Din anul 1986 SQL a devenit standard ANSI pentru limbajele de interogare ale bazelor dedate relaionale. n 1989 i 1992, ANSI a mai publicat dou standarde. Standardul n uz la ora actual este SQL'92 sau SQL2. S-a trecut la proiectarea standardului SQL3 pentru anul 1995 dar obiectivele ambiioase propuse nu au putut fi realizate i a condus la amnarea apariiei. Noul standard se bazeaz pe SQL2 urmrind extensii ale lui. Faciliti ale limbajului SQL

85

1. Faciliti orientate pe obiect se refer la posibilitile de definire la nivelul utilizator a tipurilor de date abstracte incluznd metode, identitatea obiectelor, subtipuri i , polimorfism, etc. 2. Structuri de control specifice limbajelor computaioanle: if, for, while, etc. ceea ce transform limbajul SQL ntr-un limbaj de sine stttor, a crui putere de expresie nu va mai fi limitat la nivelul limbajelor relaionale. 3. Faciliti pentru exprimarea prelucrrilor cu caracter recursiv. 4. Faciliti de comuniacre n reea. 5. Faciliti de prelucrare distribuit inclusiv pentru tehnoilogic client - server. Presupune mecanisme pentru crearea, memorarea i execuia procedurilor la nivelul serverelor de date. 6. Faciliti multi - media, care sunt nglobate n modulul specializat Multi-Media SQL (MMSQL) 7. Faciliti pentru tratarea timpului n bazele de date, faciliti ce fac parte din componenta Temporal SQL (TSQL) Sintaxa construciilor SELECT SQL este un limbaj intermediar avnd unele caracteristici provenite din algebra relaional i altele provenite din calculul relaional al tuplelor. Operaia fundamnetal n SQL este MAPAREA reprezentat din punct de vedere sintactic printr-o construcie SELECT - FROM - WHERE (construcie select). Aceast construcie corespunde unei succesiuni de operatori algebrici de forma selecie - proiecie - cuplare foarte frecvent n algebra relaional. Clauza SELECT realizeaz operaia de proiecie i este urmat de lista atributelor care se rein n relaia rezultat. Ea nu trebuie confundat cu operaia selecie din algebra relaional i proiecia n SQL difer de operaia proiecie din algebra relaional, deoarece el nu elimin duplicatele n SQL. Eliminarea tuplelor duplicat trebuie solicitat n mod explicit de utilizator prin operatorul DISTINCT. S-a adoptat acest operator deoarece eliminarea duplicatelor este costisitoare. Operaia de cuplare se realizeaz cu clauza FROM atunci cnd ea este urmat de o list format din cel puin dou nume de relaie, mpreun cu condiia de cuplare formulat n cadrul predicatului din clauza WHERE. Selecia este realizat prin cea de a treia clauz WHERE care este de multe ori urmat de un predicat (calificator) referitor la atributele relaiei (relaiilor) din clauza FROM. Clauza WHERE este ns mai complex dect operaia de selecie din algebra relaional, deoarece expresia care o urmeaz poate conine att comparaii de atribute i / sau expresii aritmetice, ct i operatori logici (AND, OR, NOT) operatorim pe mulimi (UNION, INTERSECT, MINUS) i operatori de apartenen la mulimi cu negrile acestora (XINS, XNOTINS, S CONTAINTS X, S DOES NOT CONTAIN X, unde S este o relaie iar X este o tupl sau o relaie n care este vorba de operaii de incliziune ntre mulimi). Expresia ce urmeaz clauzei WHERE poate de asemenea s conin operanzi care sunt relaii rezultate din alte construcii SELECT ceea ce asigur posibilitatea mbrcrii acestora n interogri orict de complexe. Facilitile limbajului SQL provenite din calculul relaional al tuplelor se refer la posibilitatea de a declara variabile de tuple asociate unor relaii. Asocierea se face n clauza FROM sub forma: SELECT ... FROM R T WHERE... Unde R este o relaie iar T o variabil de tupl. Variabila de tuppl poate fi utilizat n expresia care urmeaz clauzei WHERE unde se pot face referiri la valoarea componentei A din tupla T prin notaia T.A. Construcia complet a sintaxei SELECT este: SELECT [DISTINCT] nume_atribut 1... FROM nume_relaie [variabil_de_tupl]... [WHERE calificator1]
86

[GROUP BY nume_atribut2... [HAVING codificator2]] [ORDER BY nume_atribut 3[ASC| DESC]...]. unde [] desemneaz o component opional a construciei iar "..." indic repetarea de unul sau mai multe ori a parametrului clauzei curente (list de parametri). Valoarea (valorile) corespunztoare parametrului (parametrilor) nume_atribut 1 precizeaz n mod explicit atributele dup care se face proiecia. Dac exist incertitudini referitor la relaiile din care fac parte atributele specificate atunci acestea vor fi precedate de numele relaiei, corespunztoare fiecrui atribut. Dac n locul acestei liste se folosete simbolul * atunci proiecia se face dup toate atributele relaiei (relaiilor) specificate n clauza FROM. n lipsa operatorului opional DISTINCT proiecia se face fr eliminarea duplicatelor, dac apare se elimin toate duplicatele rezultate n urma operaiei de proiecie. n cazul cel mai general parametrul nume_atribut 1 poate fi o expresie aritmetic coninnd atribute i / sau funcii de agregare avnd ca operanzi unul sau mai multe atribute. Prin operatorul nume_relaie se specific relaia (relaiile) care constituie operandul (operanzii) operatorului de mapare. Prin parametrul variabil_de_tupl putem asocia fiecrei relaii cte o variabil de tupl. Parametrul calificator 1 precizeaz criteriul de selecie al tuplelor unei relaii. Clauza GROUP BY are ca efect gruparea tuplelor unei relaii pe baza valorilor unui atribut sau grup de atribute. Parametrul nume_atribut 2 furnizeaz criteriul de grupare (partiionare) al tuplelor unei relaii n submulimi de tuple toate aavnd aceeai valoare pentru atributul (atributele) nume_atribut 2. Criteriul de grupare este format din unul sau mai multe atribute. Aceste submulimi sau grupuri de tuple urmeaz a fi tratate ca un tot unitar n anumite operaii cum ar fi aplicarea funciilor de agregare care se calculeaz nu pe ntreaga relaie, ci pentru fiecare grup de tuple n parte. Relaia rezultat al oricrei interogri care are o clauz GROUP BY caracterizeaz aceste grupuri de tuple i nu tuple individuale. Parametrii clauzei SELECT dintr-o construcie SELECT n care apare clauza GROUP BY trebuie s reprezinte o proprietate mic de grup. Prin aceasta nelegem fie un atribut de grupare, fie o funcie de agregare, aplicat tuplelor unui grup, fie o expresie format pe baza primelor dou. Clauza HAVING, opiune a clauzei GROUP BY este o form special a clauzei WHERE caracterizat prin faptul c se aplic nu unor tuple individuale ci unor submulimi (grupuri) de tuple, rezultate ca urmare a partiionrii prin clauza GROUP BY. Parametrul calificator 2 furnizeaz criteriul de selecie al grupurilor de tuple. Acest parametru se refer ntotdeauna la proprietile globakle ale unui grup de tuple i nu la tuple individuale. Astfel tuplele unui grup sunt tratate mpreun, n bloc, conform criteriului dat de parametrul calificator 2. Exprimarea acestui criteriu se face cu ajutorul atributelor de grupare i al funciilor de agregare aplicate grupurilor. Clauza ORDER BY specific ordonarea tuplelor unei relaii rezultat dup valorile parametrului nume_atribut 3, iar cuvintele cheie ASC i DESC indic modul n care se face ordonarea dup valorile cresctoare respectiv descresctoare ale atributului specificat. Formularea interogrilor n limbajul SQL Pentru o nelegere a limbajului SQL prezentm un set de exemple de interogri rezolvate prin construcii SELECT. Relaiile la care se fac referiri sunt cele din curs. 1. Numele profesorilor cu care studiaz studentul Lupu? Interogarea se exprim prin secvena SQL SELECT NUME_PROFESOR FROM NOTE WHERE NUME_STUDENT="LUPU" Exprimarea este corect dac fiecare student are o singur not dat de fiecare profesor. n lipsa acestei ipoteze, studentul (Lupu poate avea mai multe note la o anume disciplin), atunci
87

este necesar operatorul DISTINCT pentru a elimina eventualele repetri ale numelui aceluiai profesor. n acest caz interogarea este: SELECT DISTINCT FROM NOTE WHERE NUME_STUDENT="LUPU" 2. Numele profesorilor care au dat cel puin o not. n acest caz ne intereseaz profesorii de la relaia NOTE. Aceasta se realizeaz printr-o proiecie (cu eliminarea duplicatelor) a acestei relaii pe atributul NOTE_PROFESOR. Secvena SQL este: SELECT DISTINCT Nume_profesor FROM Note 3. Dac ne intereseaz toate informaiile din relaia note utiliuzm secvena: SELECT* FROM Note *indic c selecia se face dup toate atributele relaie dat n clauza FROM. 4. Dac dorim ca onformaiile de mai sus s fie ordonate n mod descresctor a notelor, atunci vom aduga la interogarea precedent o clauz ORDER BY SELECT* FROM Nopte ORDER BY Nota DESC, Nume_Student ASC, Note_profesor ASC. Dac exist mai multe tuple cu aceeai valoare a notei acestea vor fi sortate n ordinea alfabetic a numelui studenilor iar dac acelai student a primit note similare de la profesori diferii atunci tuplele corespunztoare vor fi sortate dup ordinea alfabetic a numelui profesorilor. 5. Numele studenilor care au obinut note peste 8 i numele profesorilor de la care au obinut aceste note? SELECT NUME_PROFESOR, Nume_student FROM NOTE WHERE Nota >8 n clauza WHERE se poate specifica o condiie compus folosind operatorii logici AND, OR i NOT astfel: 6. Numele studenilor de la zi care sunt bursieri? SELECT Nume FROM Student WHERE Inadrare = "zi" AND sit_scolar = "B" AND Sex = "F". 7. Numele studenilor din anul I sau bursieri? SELECT Nume FROM Student WHERE AN=1 OR sit_scolar="B" 8. Numele studenilor bursieri i a studenilor din anul I? SELECT Nume FROM Student WHERE sit_scolar="B" OR An=1, AND Sex = "F" ntr-o combinaie cu operatori OR i AND se evalueaz operatorii AND i apoi operatorii OR. 9. Numele studenilor bursieri i aceleai note din anul I? SELECT Nume FROM Student WHERE (AN=1 OR sit_scolar="B") AND sex = "F" Prin folosirea parametrilor se poate fora modificarea ordinii normale de evaluare a operatorilor logici cu schimbarea corespuntoare a sensului interogrii. A se compara interogrile 8 i 9. 10. Numrul studenilor din fiecare an de studiu? SELECT An, COUNT (Nume) FROM Student GROUP BY An
88

Lipsete clauza WHERE ntruct nu este nici o condiie care s restricioneze selectarea tuplelor i de asemenea folosirea clauzei GROUP BY pentru gruparea tuplelor dup atributul AN. Ca parametri ai clauzei SELECT dintr-o construcie care conine clauza GROUP BY pot s apar doar acele atribute care constituie proprieti unice de grup (avnd aceeai valoare pentru fiecare tupl din grup, n spe atributele de grupare) sau valori care caracterizeaz grupukl n ansamblul su valoi care de regul se obin prin aplicarea unui operator de agregare asupra tuplelor grupului (n cazul nostru COUNT (nume)) care returneaz numrul de studeni din fiecare grup. Folosirea opewratorului DISTINCT pentru atributul de grupare nu este necesar. 11. Numele profesorilor i media pentru profesorii la care media notelor acordate studenilor este mai mare ca 8? SELECT Nume_profesor, AVG (Nota) FROM Note GROUP BY Nume_profesor HAVING AVG (Nota)>8 Operatorul de agregare AVG din interogarea dat se aplic grupurilor de tuple care au aceeai valoare a tributului Nume:profesor i returneaz media notelor acordate de fiecare profesor. Prin clauza HAVING i calificatorul care i urmeaz se selecteaz acele grupuri pentru care aceast medie este mai mare ca 8. Rezultatul seleciei este format din unul sau mai multe grupuri de tuple avnd aceeai valoare a atributului Nume_profesor. Din fiecare grup se reine doar cte o singur dat valoarea atributului Nume_profesor i valoarea calculat pe grup a mediei notelor. Nu este necesar folosirea operatorului DISTINCT. 12. Media notelor obinut de fiecare student de la fiecare profesor al su? SELECT Nume_profesor, Nume_student, AVG (Nota) FROM Note GROUP BY Nume_profesor, Nume_student n acest caz criteriul de grupare este format din perechea dea tribute Nume_profesor i Nume:student, iar rezultatul returnat se refer la mediile obinute de studeni la diferite discipline. 13. Numele profesorilor care au cel puin un student bursier? SELECT DISTINCT Nume_profesor FROM Note WHERE Nume_student IS IN (SELECT Nume FROM Student WHERE sit_scolar = "B") Interogrile care implic mai multe relaii, dar returneaz date dintr-o singur relaie pot fi rezolvate prin imbricarea a mai multe construcii SELECT. Datorit posibilitii de imbricare datele rezultate dintr-un tabel pot fi folosite la selecia datelor dintr-un alt tabel. Dei aceast facilitate este aproappe similar cu operatorul de cuplare, difer de acesta prin faptul c din rezultatul final nu pot face parte dect datele rezultate din ultimul tabel. Majoritatea implementrilor n SQL permit imbinarea pe mai multe nivele, la cele mai performante fiind posibile pn la 16 nivele de imbricare a construciilor SELECT. n exemplul dat construcia interioar returneaz studenii bursieri. Construcia exdterioar returneaz numele profesorilor pentru care numele student asociat aparine mulimii returnate de construcia interioar. Adic a studenilor bursieri. Este necesar folosirea operatorului DISTINCT deoarece pot exista mai muli studeni bursieri care studiaz cu acelai profesor. Limbajul SQL nu dispune de cuantificatori, aa cum apar ei n calculul relaional de aceea efectul acestora trebuie simulat prin folosirea relaiilor de apartene de tipul element - mulime de incluzine mulime - mulime sau de egalitate ntre mulimi. n SQL relaia de apartene a unei valori la o mulime este reprezentat prin operatorul IS IN sau simplu IN. a fel se reprezint i relaia de incluziune

89

ntre mulimi. Deci A IN B semnific A aparine lui B, dac A este o valoare, sau A este inclus n B dac A este o mulime, iar B este o valoare sau omulime. Simetricul operatorului IN este operatorul CONTAINS A CONTAINS B semnific, A conine pe B, unde A este mulimea iar B este o valoare sau o mulime. Se pot folosi i negaiile acestor operatori NOT IN, DOES NOT CONTAIN. Testarea egalitii sau a inegalitii a dou mulimi se face prin operatori = i (sau != sau <>). 14. numele profesorilor ai cror studeni sunt toi bursieri? Interogarea se poate reformula "Numele profesorilor pentru care mulimea studenilor crora le predau este inclus n mulimea studenilor bursieri"? SELECT Nume FROM Profesor WHERE ( SELECT Nume_student FROM Note WHERE Nume_profesor=Profesori.Nume) IN ( SELECT Nume FROM Student WHERE sit_scolar="B") 15. Numele studenilor care predau la toi studenii bursieri? Singura deosebire fa de precedenta interogare este c se inverseaz relaia de incluziune ntre cele dou mulimi destudeni deci operatorul IN va fi nlocuit cu CONTAINS SELECT Nume FROM Profesori WHERE ( SELECT Nume_student FROM Note WHERE Nume_profesor=Profesori.Nume) CONTAIN (SELECT Nume FROM Student WHERE sit_scolar="B") n unele implementri ale limbajului SQL mai apar i operatorii ANY care poate fi folosit ca un cuantificator existenial i ALL care corespunde cuantifiactorului universal. Aceti operatori nu se aplic unor variabile ci unor mulimi care de cele mai multe ori sunt definite prin construcii SELECT imbricate. Numele studenilor care au o not mai mare dect cea mai mic not acordat SELECT Nume_Student FROM Note WHERE Nota >ANY (SELECT Nota FROM Note) n general efectul operatorilor ANY i ALL poate fi simulat folosind ceilali operatori prezentai mpreun cu funciile de agregare MIN i MAX. 16. Numele studenilor care au luat note mai mici de 8 i disciplina la care au luat aceste note? SELECT Note.Nume_student, Profesori.Disciplina FROM Note, Profesori WHERE Note.Nume_profesori=Profesori.Nume AND Note.Nota<8 Pentru a returna valori din mai multe relaii simultan, este necesar efectuarea unei operaii de cuplare. Limbajul SQL are o sintax specific pentru exprimarea unei operaii de cuplare aa cum se observ i n exemplul dat. Acest lucru este mai uor de neles dac punem n eviden faptul c produsul cartezian al relaiilor A i B este: SELECT * FROM A, B
90

Reamintim c operaia de cuplare este echivalent cu produsul cartezian urnat de o selecie. 17. Numele studenilor de la zi care au luat note mai mici de 8 i disciplina la care au luat aceste note. Exprimarea acestei interogri prin formalismul algebrei relaioanle presupune aa cum s-a vzut efectuarea a dou operaii de cuplarer. Limbajul SQL ofer cel pun dou ci de exprimare a acestei interogri. a) Prin efectuarea simultan a dou operaii de cuplare (de fapt un produs cartezian al celor trei relaii Note, Profersori, Student urnmat de selecia adecvat) SELECT Student.Nume, Profesori. Discilina FROM Student, Note, Profesori WHERE Note.Nume_profesori=Profesori.Nume AND Student.Nume=Note.Nume_Student AND Note.Nota <8 AND student. Incadrare="zi" b) prin folosirea unei operaii de cuplare i a unei imbricri SELECT Student.Nume, Profesori. Discilina FROM Student, Note, Profesori WHERE Note.Nume_profesori=Profesori.Nume AND Note.Nota <8 AND Note.Nume_student IN (SELECT NUME FROM Student WHERE Incadrare = zi") Observaie: Dup cum se observ din exemplele de pn acum calificarea numelor de atribute nu este obligatorie. Ea este necesar doar atunci cnd pot s apar ambiguiti. Dac n clauza FROM a unei construcii SELECT apare un singur nume de relaie, atunci implicit toate numele de atribute fr califiacre din blocul curent se consider aparinnd acestei relaii. Dac un nume de atribut dintr-un bloc exterior este folosit ntr-un bloc imbricat sau n acelai bloc apar mai multe nume de relaii, atunci este necesar calificarea atributelor prin numele relaiilor crora le aparin. 18. numele studenilor i notele celor care au obinut o not mai mare la Metode numerice dect studentul Lupu. i pentru aceast interogare se prezint dou soluii diferite. a) Prima soluie face apel la posibilitatea de a imbrica pe mai multe nivele construciile SELECT. SELECT Nume_student, Nota FROM Note WHERE Nume_Profesor IN (SELECT Nume FROM Profesori WHERE Disciplina="Metode numerice" AND Nota> (SELECT Nota FROM Note WHERE Nume_student = "Lupu" AND Nume_profesor IN (SELECT Nume FROM Profesori WHERE Disciplina="Metode numerice")) b) A doua soluie poate mai puin eficient ca prima, arat modul n care se utilizeaz variabilele de tupl. SELECT N1. Nume_student, N1.Nota FROM Note N1, Note N2
91

WHERE N1. Nota>N2.Nota AND N2.NUme_student="Lupu" AND N1.NUme_profesor IN (SELECT Nume FROM Profesori WHERE Disciplina ="Metode numerice") AND N2.Nume_profesor IN (SELECT Nume FROM Profesori WHERE Disciplina="Metode numerice") Variabilele de tupl se pot folosi pentru calificarea atributelor la fel ca orice nume de relaie i de mai multe ori sunt considerate ca redenumiri ale relaiilor crora le sunt asociate. 19. numele studenilor care studiaz cu cel puin doi profesori? SELECT DISTINCT Nume_student FROM NotexNote WHERE Nume_student IN (SELECT Nume_student FROM Note WHERE Nume_profesor#xNote.Nume_profesor) Se folosete variabila de tupl XNote asociat relaiei Note. 20.Numele i nota pentru primii 5 dintre studenii care au obinut cele mai mari note de la profesorul Costea? SELECT Nume_student, Nota FROM Note N WHERE Nume:profesor ="Costea" AND 5> (SELECT COUNT (*) FROM Note WHERE Nume_profesor="Costea" AND Nota>N. Nota) Construcia SELECT interioar returneaz numrul structurilor care au obinut de la profesorul Costea o not mai mare dect studentul curent din construcia SELECT exterioar. De remarcat faptul c dac exist 6 studeni cu nota 10 atunci toi vor fi inclui n relaia rezultat. 21. Numele studenilor care nu studiaz metode numerice? (SELECT Nume_student FROM Note) MINUS (SELECT nume_student FROM Note WHERE Nume_profesor IN (SELECT Nume FROM Profesori WHERE Disciplina = "Metode numerice")) Interogarea este dat ca diferen a dou mulimi: - mulimea studenilor care studiaz cel puin o disciplin - mulimea studenilor care tudiaz metode numerice n limbajul SQL mai sunt disponibili pentru operatorii pe mulimi a operatorilor: - UNION pentru reuniunea mulimilor de tuple a dou mulimi - INTERSECT pentru intersecie. Fiecare din cei trei operatori accept ca operanzi doar mulimi, dupicatele sunt eliminate automat nainte de aplicarea operatorului cerut fr a necesita folosirea operatorilor

92

DISTINCT. De menionat c operanzii care operanzii care n general sunt relaii (mulimi de tuple) trebuie s satisfac condiia de compatibilitate la reuniune. 22. Numele profesorilor care predau studenilor din anul I sau bursieri? Presupunem c relaiile anul I i Bursieri sunt realizate (exemplul 7). SELECT DISTINCT Note.Nume_profesor FROM Note, Anul I, Bursieri WHERE Note.Nume_profesor=Anul I.Nume OR Note.Nume_studeni=Bursieri.Nume Rezultatul interogrii trebuie s.fie numele profesorilor care predau cel puin unui student din mulimea studenilor din anul I reunit cu mulimea studenilor bursieri. Rezultatul este corect numai dac relaiile AN I i Bursieri nu sunt vide, deoarece n cazul nostru se realizeaz mai nti produsul cartezian al relaiilor Note, Anul I iu Bursieri dup care se analizeaz condiia din clauza WHERE. Pentru interogarea dat se poate obine un rezultat corect dac se utilizeaz operatorul UNION. (SELECT DISTINCT Note, Nume_profesori FROM Note, Anul I WHERE Note.Nume_student=Anul I.Nume) UNION (SELECT DISTINCT Note.Nume_profesor FROM Note, Bursieri WHERE Note.Note_student=Bursieri.Nume) Operaii de tergere, inserare i actualizare Fiecare dintre aceti operatori acioneaz la un moment dat asupra unei singure relaii. Operatorul SQL pentru operaia de tergere este DELETE FROM a crui sintax complet este: DELETE FROM nume_relaie [variabil_de_tupl] [WHERE calificator] Exemple: 1. tergerea tururor tuplelor din relaia Note: DELETE FROM Note Relaia note va exista dar este vid. 2. tergerea din relaia Note a tuplelor n care nota este sub 5. DELETE FROM Note WHERE Nota <5 Operatorul SQL pentru inserare este INSERT INTO i prezint dou variante - inserare simpl pentru inserarea unei tuple individuale - inserarea multipl pentru inserarea a mai multe tuple Pentru inserarea simpl avem sintaxa INSERT INTO nume_relaie (nume_atribut) VALUES (valoare) ntre valori i atribute trebuie s fie o coresponden de unu la unu. Pentru atributele care accept valoarea NULL (vezi comanda CREATE TABLE) specificarea unei valori n operaia de inserare este opional. Acestea vor fi omise din lista de atribute i vor lua implicit valoarea NULL, eventual, urmnd a fi modificate ulterior cnd valorile lor sunt cunoscute. Valorile din lista de valori pot fi ori literale, ori expresii atribuite. Exemple: 1. Inserarea n relaia Profesori a unei tuple. Popovici conf metode numerice se realizeaz astfel: INSERT INTO Profesori (Popovici, conf, metode numerice) 2. Comanda
93

INSERT INTO Profesori (Nume) VALUES (Popa) are ca efect inserarea n relaia Profesori a tuplei Popa_NULL_NULL (n ipoteza c atributul Nume este singurul declarat ca opiune NOT NULL). Comanda pentru inserarea multipl are sintaxa: INSERT INTO nume relaie (nume_atribut) Construcie SELECT i permite inserarea la relaia dat a unei mulimi de tuple (relaie) care se obine ca rezultat al unei construcii SELECT. Exemple: Presupunem c avem o relaie Bursieri cu atributele Nume i Media n care am inclus toi studenii cu media peste 8. Dac se coboar acest barem la 7 relia bursoeri va fi completat astfel: INSERT INTO Bursieri (Nume, Nota) SELECT Nume_student, AVG (nota) FROM Note GROUP BY Nume_student HAVING AVG (Nota)>7 AND AVG (Nota<=8) Operatorul SQL pentru actualizarea tuplelor este UPDATE i are sintaxa UPDATE nume_relaie [variabil_de_tupl] SET nume_atribut = expresie_de_actualizare [WHERE calificator] Operatorul de actualizare ndeplinete dou funcii tuplele care urmeaz a fi actualizate (n lipsa clauzei WHERE se actualizeaz imploicit toate tuplele relaiei specificate) *n tuplele selectate modific valorile atrbutelor specificate. Expresiile de actualizare pot conine constante, nume de atribute valoarea NULL sau expresii atributice constituite cu acestea. n limabjul SQL este permis chiar i actualizarea atributelor care fac parte dintr-o cheie primar. Exemple: 1.Asistentul Pop este avansat ef de lucrri. UPDATE Profesori SET FUNCIE=SL WHERE Nume=Pop 2.n relaia Note se mresc cu un punct toate notele mai mici de 5. UPDATE Note SET Nota=Nota+1 WHERE Nota<5 Operatori de agregare Operatorii cei mai uzuali n orice implementare a limbajului SQL sunt: COUNT (numrare), SUM(suma valorilor unei coloane) AVG (media valorilor unei coloane), MAX (valoarea maxim dintr-o coloan), MIN (valoarea minim dintr-o coloan). Toi aceti operatori pot fi folosii att n calificatori ct i n clauze SELECT. Exemple: 1. Care este numrul studenilor bursieri? SELECT COUNT (NUME) FROM Student WHERE sit_scolar=B 2. Care este cea mai mic not obinut de un student bursier? SELECT MIN (Nota) FROM Note WHERE Nume_student 1N (SELECT Nume FROM Student
94

WHERE sit_scolar=B) 3. Care este media notelor obinut de studeni la metode numerice? SELECT AVG (Nota) FROM Note WHERE Numele_profesor 1N (SELECT Nume FROM Profesori WHERE Disciplina=Metode numerice) 4. Numele i media notelor acordate de fiecare profesor? SELECT Nume_profesor, AVG (Nota) FROM Note GROUP BY Nume_profesor. Operatorul de asignare Operatorul de asignare ASSIGN TO permite asignarea rezultatului returnat de o clauz SELECT unei variabile care va ndeplini funcia de nume a relaiei rezultat, nume cu ajutorul creia aceast relaie poate fi referit n continuare. Sintaxa operatorului este: ASSIGN TO nume_relaie. Acest operator se folosete atunci cnd dorim reinerea unor rezultate intermediare n cazul unor interogri mai complexe. Exemplu: Numele studenilor i notele celor care au obinut o not mai mare la metode numerice dect Lupu? SELECT Note WHERE Nume_profesor IN ASSIGN TO NPP: (SELECT Nume FROM Profesori WHERE Disciplina=Metode numerice) AND NOTA>(SELECT Nota FROM Note WHERE Nume_student=Lupu AND Nume_profesor IN NPP) Definirea datelor n SQL Comenzile pentru definirea datelor fac parte din modulul corespunztor componentei LDD al SGBD-urilor. Totui n majoritatea implementrilor SQL comenzile de definire a datelor sunt prelucrate de aceleai interpretor care rezolv interogrile i celelalte operaii de manipulare a datelor prezentate anterior. Aadar componentele LMD i LDD ale SGBD-urilor sunt implementate prin aceleai modul software. Crearea tabelelor (relaiilor) Definirea unei relaii se face prin comanda CREATE TABLE. Relaiile definite prin aceast comand sunt numite relaii de baz. Definiia acestor relaii este automat memorat ntr-un dicionar dedate numit i catalogul sistem. Sintaxa comenzii de definire a tabelelor este: CREATE TABLE nume relaie (nume_atribut 1 tip_dat [NOT NULL], [Nume_atribut 2 tip_dat[NOT NULL]]) Comanda spoecific numele relaiei care se creaz precum i una sau mai multe descrieri de atribute. Descrierea fiecrui atribut specifgic numele atributului i tipul de dat corespunztor(CHAR, INTEGER, etc) mpreun cu dimensiunea asociat. Opiunea NOT ALL asociat unui atribut, indic faptul c n coloana corespunztoare acestuia nu pot s apar valori nedefinitive (NULL). Aceast opiune estze util n special la definirea atributelor care compun cheia primar a relaiei. Exemplu:

95

n ipoteza c fiecare profesor acord oricrui student o singur not, relaia note poate fi definit astfel: CREATE TABLE Note (Nume_profesor CHAR (20) NOT NULL Nume_student CHAR (20) NOT NULL Nota INTEGER (2)) Cheia relaiei Note este format din atributele Note_profesor i Nume_ student, iar pentru aceste atribute nu se accept valori nedefinite. Comanda simetric celei de creare a unei relaii este DROP TABLE care are ca efect eliminarea din catalogul sistem a relaiei specificate. Dup executarea acestei comenzi nu se mai pot face nici un fel de referiri la relaia n cauz, descrierea acesteia mpreun cu informaiile coninute fiind terse. Sintaxa comenzii este: DROP TABLE nume_relaie Crearea vederilor O vedere este o relaie virtual care nu exist fizic n baza dedate. n SQL o vedere este definit ca o relaie derivat al crei coninut este determinat de una sau mai multe relaii de baz conform definiiei vederii n cauz. Comanda pentru definirea uneim vederi este CREATE VIEW i are sintaxa: CREATE VIEW nume_vedere (nume_atribut) AS construcie_SELECT. Comanda CREATE VIEW creaz n catalogul sistem o intrare corespunztoare denumirii nume_vedere, creia i asociaz definiia specificat prin comand, lista de atribute i comstrucia SELECT. Atunci cnd numele vederii este invocat ntr-o interogare definiia vederii este combinat cu interogarea dat pentru a obine o interogare n termenii relaiilor de baz . n general construcia SELECT din definiia unei vederi poate avea orice form excepie fiind clauza ORDER BY care nu poate s apar ntr-o comand CREATE VIEW. Aceast restricie este impus de necesitatea de a conferi vederilor un statut ct mai apropiat de cel al relaiilor de baz n care, prin definiie, ordinea tuplelor este arbitrar. Deci definiia unei vederi nu poate conine clauza ORDER BY, n schimb aceast caluz poate s apar ntr-o construcie SELECT care face referire la o vedere, la fel ca n orice interogare obinuit. Dac este omis lista nume_atribut din definiia vederii atunci atributele acesteia vor avea aceeai denumire ca cele specificate n construcia SELECT asociat. Acest lucru este posibil numai dac atributele unor funcii de agregare sau a unor expresii aritmetice, caz n care este necesar specificareantregii liste de atribute ale vederii. Exemple: 1. Vederile sunt adesea percepute ca mecanusme de limitare a accesului unor categorii de utilizatori la anumite date mai mult sau mai puin confideniale. Dac se dorete ca informaia referitoare la funciile profesorilor s nu fie accesibil studenilor atunci se interzice dreptul de acces la relaia Profesori a oricrui utilizator din categoria student. Totui studenii au nevoie s tie care profesor ce disciplin pred, de aceea pentru uzul acestora se definete vederea Profesori_disciplin, astfel: CREATE VIEW Profesori_disciplin (Nume, Disciplin) AS SELECT Nume, Disciplin FROM Profesori 2. Vederile sunt de asemenea utile pentru simplificarea viziunii utilizatorilor asupra bazei de date. Putem crea o vedere numit Bursieri cu atributele Nume, An, Media care s conin toi studenii cu media notelor peste 8 folosind comanda: CREATE VIEW Bursieri (Nume, An , Media) AS SELECT Nume, An, AVG (Nota) FROM Studeni, Note WHERE Nume=Nume_student GROUP BY Nume
96

HAVING AVG (Nota)>8 Numele acestei vederi poate fi apoi invocat ntr-o serie de interogri implicnd studenii bursieri. Forma acestotr interogri va fi simplificat prin folosirea vederii. Mai mult, putem modifica definiia conceptului de bursier fr a fi necesar s modificm interogrile n care apare. Exemplu: Lista primilor 5 bursieri n ordinea descresctoare a mediilor obinute. SELECT Nume, An, Media FROM Bursieri B WHERE 5>(SELECT (*) FROM Bursieri WHERE Media>B. Media) Spre deosebire de vederile din QBE care sunt de tip read-only, numele unei vederi SQL poate fi indicat nu numai n interogri ci i n comenzile DELETE, INSERT, i UPDATE, caz n care relaiile de baz din definiia vederii pot suferi modificri. Pentru ca aceste operaii s aib sens este necesar s se respecte urmtoarele restricii: - vederea invocat s nu fie rezultatul unei operaii de cuplare (sau echivalente) - construcia SELECT care definete vederea s nu conin clauza GROUP BY, opiunea DISTINCT sau funcii de agregare. - vedrea s nu aib atribute calculate (definite printr-o selecie aritmetic). Chiar cu restriciile de mai sus, executarea comenzilor DELETE, INSERT i UPDATE asupra vederilor poate produce fenomene mai puin obinuite de care utilizatorul avizat trebuie s in cont. Exemplu: Fie vederea Note_Metode numerice care este derivat din relaia de baz Note selectnd doar tuplele pentru care Nume_profesor="VASILE" CREATE VIEW Note_Metode numerice (Nume_profesor, Nume_student, Nota) AS SELECT Nume_profesor, Nume_student, Nota FROM Note WHERE Nume_profesor="Pop" Vederea Note_metode numerice poate fi invocat ntr-o operaie de inserare de forma: INSERT INTO Note_metode numerice (Nume_profesor, Nume_student, Nota) VALUES ("COSTEA", "LUPU", 10) Comanda de mai sus nu este perfect legal, iar efectul cncret al execuiei sale este inserarea n relaia de baz Note a tuplei ("Costea", "Lupu", 10). Totui aceast tupl dei aparent a fost inserat n vederea Note_metode numerice, nu poate face parte din aceasta deoarece nu corespunde defdiniiei vederii. n consecin rezultatul produs de o interogare de forma: SELECT * FROM Note_metode numerice Nu va conine tupla ("Costea", Lupu", 10) chiar dac este formulat dup execuia operaiei de inserare de mai sus. Efecte similare se pot evidenia i n cazul comenzilor de tip DELETE i UPDATE , aplicate asupra vederilor ( operaii de tergere a unor tuple ce nu exist n vedere sau actualizri) care au ca efect "dispariia" a unor tuple din vedere. tergerea unei vederi dintr-o baz de date se face cu comanda DROP VIEW a crei sintax este DROP VIEW nume_vedere Crearea indecilor Folosirea indecilor permite creterea substanial a vitezei de acces la date, fiind una din principalele ci pentru optinizarea interogrilor. Indecii permit accesul la date fr a fi necesar parcurgerea secvenial a relaiilor din care fac parte. Pentru o relaie se pot defini unul sau mai muli indeci, fiecare avnd la baz unul sau ai multe dintre atributele relaiei.
97

Comanda SQL pentru crearea unui index este CREATE INDEX i are sintaxa: CREATAE (UNIQUE) INDEX nume_index ON Nume_relaie (Nume_atribut 1, [DESC], nume_atribut 2[DESC]...) Odat creat un index nu mai poate fi invocat n interogri sau programe utilizator. Indecii sunt folosii exclusiv pentru a gsi calea de acces cea mai rapid la date i sunt actualizai automat n cazul operaiilor de inserare, tergere sau actualizare a relaiilor. Intrrile unui index sunt ordonate implicit n ordinea cresctoare a valorilor atributelor specificate. Dac se dorete o ordonare descresctoare dup valorile unui anumit atribut, atuncipentru acesta se va specifica opiunea DESC. Opiunea UNIQUE specific faptul c n indexul corespunztor nu pot exista dou intrri avnd valori identice ale atributelor pe care acesta este definit. Aceast condiie este verificat automat n cazul comenzilor INSERT i UPDATE refuznduse execuia la apariia unui duplicat. Prin folosirea opiunii UNIQUE atributele care stau la baza indexului corespunztor vor forma o cheie n relaia asociat. Dac aceste atribute au fost, la rndul lor definite cu opiunea NOT NULL, atunci vom avea o cheie primar. Aadar n SQL o cheie primar se definete ca un index unic fr valuri nule. Exemple: 1.Crearea unui index cu numele Iprof, definit pe atributul Nume_profesor din relaia Note se realizeaz prin comanda: CREATE INDEX Iprof ON Note (Nume_profesor) n relaia Note vor putea exista n continuare mai multe tuple cu aceeai valoare a atributului Nume_profesor. 2. Putem crea o cheie primar cu numele Note, definit pe atributele Nume_profesor i Nume_student ale relaiei Note prin comanda CREATE UNIQUE INDEX Inote ON Note (Nume_profesor, Nume_student) n comanda CREATE TABLE prin care s-a creat relaia Note atributele Nume_profesor i Nume_student au fost definite cu opiunea NOT NULL. Folosind opiunea UNIQUE la definirea indexului Inote perechea de atribute Nume_profesor i Nume_student capt statut de cheie primar. Prin indexul Inote se foreaz n relaia Note condiia ca oricare profesor s acorde cel mult o not fiecrui student. Eliminarea unui index dintr-o baz de date se face prin comanda DROP INDEX avnd sintaxa: DROP INDEX nume_index. Indecii constituie instrumentul ideal pentru mbuntirea performanei unei baze de date att timp ct este vorba numai de operaii de interogare. Cu ct avem mai muli indeci definii atributele relaiilor de baz cu att vom obine rspunsuri mai prompte la o gam mai variat de interogri. Cu toate acestea dac lum n considerare operaiile de tergere, inserare i actualizare, atunci lucrurile apar astfel. ntra-adevr orice modificare a unei tuple dintr-o relaie de baz necesit actualizarea tuturor indecilor definii peste acea relaie (reindexarea). Actualizarea fiecrui index implic de regul una sau mai multe accese suplimentare la date. Acest fapt mrete costul oricrei operaii de modificare a bazei de date i acest cost este cu att mai mare cu ct avem un numr mai mare de indeci. Rezult c existena unui numr prea mare de indeci va diinua performanele bazei de date atunci cnd se fac operaii de inserare, tergere i actualizare. Concluzia care se impune este c trebuie liitat numrul de indeci n cazul bazelor de date la care operaiile de tergere, inserare i actualizare sunt frecvente. n schimb indeci pot fi folosii pentru optimizarea accesului la date n cazul bazelor de date la care domin operaiile de tip regsire. Normalizarea relaiilor Se trateaz problema normalizrii care face parte din proiectarea conceptual a bazelor de date i n special a bazelor de date relaionale.Pornind de la conceptele de dependen funcional
98

i dependen multivaloric sunt prezentate formele normale ale relaiilor de la forma normal nti (FN1) pn la forma noirmal cinci (FN 5) precum i principiile care stau la baza proiectrii unor scheme relaionale avnd anumite proprieti convenabile. Ideea central care st la baza criteriilor de proiectare a unei baze de date relaionale este aceea de dependen a datelor. Aceasta se refer la faptul c ntre atributele unei relaii sau ntre atributele unei relaii diferite pot exista anumite legturi logice (dependenei) i acestea influeneaz proprietile schemelor de relaie n raport cu operaiile curente care intervin n timpul exploatrii bazei de date, adugare, tergere, actualizare. S-au studiat dependenele funcionale i dependenele multivalorice. Exemple: Fie schema de relaie Furnizeaz (Nume, adres, Produs, Pre) Unde se observ dependena atributului Adres fa de atributul Nume. n ipoteza c fiecare furnizor are o singur adres. Numele determin univoc adresa. Rezult o redundan relativ la atributul Adres a crui valoare este repetat pentru fiecare produs livrat de acelai furnizor. Aceast redundan duce la urmtoarele anomalii: - anomalia de adugare. Nu se poate inregistra adresa unui furnozor dac el nu livreaz cel puin un produs - anomalia de tergere, este invers anomaliei de adugare i se refer la faptul c dac se terg toate produsele unui furnizor se terge i adresa furnizorului - anomalia de actualizare , atunci cnd se schimb adresa unui furnizor este necesar parcurgerea ntregii relaii pentru a actualiza adresa acestui furnior. n caz contrar un furnozor apare cu dou adrese diferite. Aceste probleme pot fi eliminate dac se nlocuiete relaia Furnizor cu dou relaii FA i FPP cu schemele de relaie: FA (nume, Adres) FPP (Nume, Produs, Pre) FA conine Numele i Adresa furnizorului, fr redundan FPP arat produsele fiecrui furnizor i preurile lor. Anomaliile prezentate nu mai apar n aceast schem. Un dezavantaj al acestei descompuneri este c pentru a aflaadresa unui furnizor de produs trebuie s realizezi de cuplare a relaiilor FA, FPP care este costisitoare. Deci n proiectare este necesar descompunerea relaiilor pentru a elimina anomaliile care decurg din ele. Dependenele funcionale Fie R (A1, A2, ..., An) o schem de relaie, iar X i Y dou atribute simple sau compuse, submulimi ale mulimii de atribute (A1, A2, ..., An) Definiie: Atributul X (simplu sau compus) determin funcional atributul Y (sau Y depinde funcional de X) i notm XY dac i numai dac oricrei valori (set de valori ale atributelor componente) a atributului X i corespunde o singur valoare a atributului Y. Dependena funcional XY este total dac nu exist nici un subset Z al atributului X(ZX) astfel nct ZY respectiv este particul n caz contrar. Proprieti: - dac XY atunci orice subset Z a lui Y XZ - dac XY i X este un atribut simplu atunci Y este dependent funcional total fa de X. - dac Y este dependent funcional total de Z atunci avem XY pentru orice compus X care conine pe Z. Exemplu: Fie schema de relaie: Furnizor (Nume, Adres, Produs, Pre) Pot fi identificate urmmtoarele dependene funcionale
99

a) Nume Adresa este total pe baza ipotezei c fiecare furnozor are o adres unic b) Nume produs Pre. Dependena total a atributului Pre fa de atributul compus Nume Produs dedus pe baza ipotezei c fiecare furnizor are un pre propriu pentru produs. Mai exist dependenele funcionale pariale: Nume Adresa Produs Pre Unde atributul Adres este redundant n determinarea valorii atributului Pre Nume Produs Pre Adresa Nume Produs Adresa Nume Pre Adresa Pentru a epuiza dependenele funcioanle mai exist dependenele funcionale triviale Nume Nume , Adresa Adresa , Produs Produs, Pre Pre Care nu conin nici o informaie la fel ca Nume Produs Pre AdresaAdresa Dependenele funcioanle totale netriviale din exemplul dat sunt:
NUME ADRESA NUME PRE PRODUS

Toate celelalte dependene se deduc din aceste dou dependene funcionale. Aceste dependene se pot deduce cu ajutorul axiomelor lui Armstrong. Fie X, Y, Z submulimi de atribute {A1, A2, ..., An}. Cele trei axiome ale lui Armstrong sunt: A1 (reflexivitatea) Dac YX atunci X Y. Aceast axiom genereaz dependene triviale i nu aduce nimic n plus din punct de vedere informaional. A2 (augumentarea) Dac X Y atunci X U Z YUZ A3 (tranzitivitate) Dac X Y i Y Z atunci X Z Aceasta este singura axiom care conduce la obinerea de dependene noi i netriviale. Mulimea dependenelor funcionale care se pot obine prin aplicarea repetat n toate modurile posibiloe a regulilor A1 - A3 asupra unui set iniial F de dependene funcionale poart numele de nchidere a setului de dependene funcionale F i se noteaz cu F* Axiomele lui Armstrong constituie un set compact i sigur de reguli care permit deducerea tuturor dependenelor funcionale i numai ale acelora care sunt logic deductibile din setul iniial de dependene funcionale F. Aceasta nseamn c orice relaie care satisface setul iniial de dependene funcionale F va satisface de asemenea orice dependen din nchiderea F*. n orice relaie atributele sunt dependente funcional de cheile acesteia deorece dup cum se tie orice cheie are proprietatea c identific n mod unic fiecare tupl deci determin n mod univoc atributele tuplei. Dependenele funcionale existente n cadrul unei scheme de relaie se datoreaz semanticii segmentului din lumea real care se modeleaz prin aceast schem i reprezint constrngeri referitoare la realitatea modelat. ntr-un anumit sens aceste constrngeri constituie informaii suplimenatre asociate relaiei i care nu pot fi nglobate n reprezentarea relaiei dei se reflect indirect n aceast reprezentare prin valorile concrete pe care le iau atributele relaiei. Aceste dependene nu pot fi demonstrate ele sunt aseriuni (ipoteze de lucru) relativ la lumea real i are implicaii n modelarea acesteia. Din acest motiv atunci cnd dorim s determinm dependenele funcionale dintr-o relaie, trebuie s analizm ce anume reprezint relaia de fapt i care este semnificaia fiecrui atribut al ei. ntr-un fel stabilirea dependenelor constituie o
100

decizie de proiectare la fel ca stabilirea relaiilor i atributelor, i poate conduce la un model conceptual mai mult sau mai puin bun, dup cum ipotezele de lucru reflect mai mult sau mai puin fidel realitatea modelat. Descompunerea schemelor de relaie Principala cale de eliminare a dependenelor funcionale din schemele de realie i a consecinelor acestora, redundana datelor respectiv anomaliile de adugare, tergere i actualizri este descompunerea schemei date ntr-o colecie de scheme mai simple care evit aceste neajunsuri. n cele ce urmeaz este convenabil s asimilm o schem de relaie cu mulimea atributelor sale. O schem de relaie R (A1, A2, ..., An) poate fi privit ca o mulime de atribute R={ A1, A2, ..., An }. n continuare vom folosi alternativ aceste dou relaii n funcie de cerinele contextului dat. Prin descompunerea unei scheme de relaie R={ A1, A2, ..., An }se nelege nlocuirea acestuia printr-o colecie ={ R1, R2, ..., Rk } de submulimi ale lui r astfel nct R=R1UR2U ... U Rk unde R1, R2, ..., Rk nu sunt neaprat disjuncte. Relaiile corespunztoare schemelor R1, R2, ..., Rk vor fi defapt proiecii nedisjuncte ale relaiei corespunztoare schemei iniiale R. Din punct de vedere semantic o astfel de descompunere urmrete s realizeze o separare a coninutului de informaie din relaie iniial astfel nct fiecare din schemele de relaie rezultate s reprezinte un singur tip de entitate sau o legtur ntre dou tipuri de entiti. Dintre aceste descompuneri numai o parte au proprietatea c din relaiile corespunztoare schemelor descompunerii se poate reconstitui relaia iniial. Metoda uzual de realizare a unie asemenea reconstituiri este prin folosirea operatorului de cuplare. Posibilitatea de a reconstitui relaia iniial se refer att la coninutul de informaie ct i la regrsirea dependenelor funcionale existente n relaia iniial. O descompunere a unei scheme de relaie R este considerat ca fiind echivalent cu R dac are proprietile: - cuplare fr pierdere de informaie (lossless join property) - conservare a dependenelor (dependency preservation) Cuplarea fr pierdere de informaie se refer la proprietatea unei descompuneri de a conserva coninutul de informaie al oricrei relaii asupra creia se aplic aceast descompunere. Fie R o schem de relaie descompus n schemele R1, R2, ..., Rk. Descompunerea are o proprietate de cuplare fr pierdere de informaie dac pentru orice relaie r, valoarea actual a schemei de relaie R, avem: r = R1(r) R2(r) Rk(r) adic r este rezultatul cuplrii proieciilor sale dup schemele de relaie R 1, R2, ..., Rk. Lipsa proprietii mai sus enunat se manifest n mod cocret i aparent paradoxal prin apariia n urma cuplrii proieciilor rezultate prin descompunerea unor tuple suplimentare, inexistente n relaia iniial. Apariia acestor tuple suplimentare sau parazite are drept consecine pierderea unor informaii din relaia iniial prin efectul de "diluare" al informaiei coninut n tuplele legitime. Pentru cazul partivular al descompunerii unei scheme de relaie R n dou proiecii R 1 i R2 se poate formula o regul simpl pentru verificarea proprietii de conservare a coninutuluzi de informaie. Aceast regul este dat de teorema lui Ullman: Teorem: Fie p={R1, R2} o descompunere a schemei de relaie R, atunci p constituie o descompunere fr pierdere de informaie, n raport cu un set dat de dependene funcionale iniiale, dac n urma descompunerii avem una din urmtoarele dependene funcionale: (R1 R2)(R1 - R2 ), (R1 R2)(R2 - R1 )

101

Un corolar al teoremei de mai sus este acela c dac intersecia celor dou proiecia unei descompuneri R1 R2 este sau conine o cheie a uneia dintre componentele R1 sau R2 atunci descompunerea este fr pieredere de informaie, lucru verificat prin existena cel puin uneia dintre dependenele : (R1 R2)R1 (R1 - R2 ), (R1 R2)R2 (R2 - R1 ) Din forularea teoremei de mai sus se constat c proprietatea de conservare a informaiei depinde nu numai de descompunerea p ci i de setul iniial de dependene funcionale existente n schema de relaie R. Exemplu: Fie schema de relaie R(Contract, Manager, Angajat) Cu urmtoarele ipoteze: - pentru fiecare contract exist un singur manager, rezult dependena funcional Contract Manager - fiecare angajat are un singur manager, rezult dependena Angajat Manager - un manager poate conduce mai multe contracte - un angajat poate lucra la mai multe contracte dintre cele conduse de managerul su S considerm urmtoarea descompunere a schemei R R1 (Contract, Manager) R2 (Manager, Angajat) Dac seafce cuplarea dintre R 1 i R2 dup atributul Manager se obine o relaie n care angajaii figureaz n acdrul tuturor contractelor conduse de managerul lor, deci vor figura i n cadrul unor contarcte la care nu lucreaz de fapt. n consecin prin apariia unor tuple suplimentare n rezultatul cuplrii dintre R1 i R2 s-a pierdut informaia referitoare la contractul la care lucreaz fiecare angajat. Descompunerea lui R n R1 i R2 se face deci cu pierdere de informaie. Acest lucru se poate verifica i cu ajutorul teoremei enunate. R1 R2 = Manager R1 - R2 = Contract R2 - R1 = Angajat Dar nici una dintre dependenele funcionale ManagerContract sau Manager Angajat nu este verificat. Dac se introduce restricia ca un manager s conduc un singur contract ceea ce implic dependena Manager Contract atunci este uor de verificat faptul c descompunerea lui R n R1 i R2 se afce fr pierdere de informaie. Se poate constata din acest exemplu c aceeai descompunere poate s fie sau nu cu pierdere de informaie i acest lucru depinde de setul de dependene funcioanle din schema de relaie iniial.

102

S-ar putea să vă placă și