Curs Baze de Date (Prof. Ioan Rusu)

148
1. INTRODUCERE 1.1. ORGANIZAREA DATELOR Principala formă de luptă a omului împotriva timpului este micşorarea intervalului de desfăşurare a diferitelor activităţi, care dau impresia prelungirii perioadei de viaţã. Pentru realizarea acestui deziderat omul modern utilizează creaţia sa, calculatorul, care pe lângă calcule aritmetice poate prelucra mari cantităţi de informaţie într-un timp scurt, datorită noii sale configuraţii şi a limbajelor de programare. Eficienţa unui sistem informatic dată de regăsirea automată a datelor, după diferite criterii, într-un timp cât mai scurt, depinde în mare măsură de modul de organizare a datelor. Prin organizarea datelor se înţelege definirea, structurarea, ordonarea şi gruparea lor în colecţii a cãror elemente sunt omogene şi stabilirea de relaţii între colecţii şi între elementele unei colecţii precum şi înregistrarea lor pe un suport informaţional prelucrabil într-un sistem de calcul. Organizarea datelor are ca urmare şi micşorarea spaţiului de memorie ocupat de date, care apar o singurã datã în sistem, precum şi flexibilitatea datelor fãrã a modifica programele care le gestioneazã. În organizarea datelor se utilizeazã trei concepte de bazã: entitate, atribut şi valoare. Relaţia dintre aceste noţiuni este datã de asocierea mai multor atribute unei entitãţi şi a unei mulţimi de valori atributelor. Noţiunea de entitate nu poate fi definitã, deoarece este o noţiune primarã. Mai multe elemente de acelaşi tip reprezintã o entitate. Câteva exemple de entitãţi sunt: tranzistor, rezistor, persoanã, student etc. Entitatea este un obiect concret sau abstract reprezentat prin proprietãţile sale. Proprietãţile esenţiale care descrie o entitate se numesc atribute, care pentru anumite elemente ale entitãţii poate lua valori din anumite mulţimi numite domeniul atributului respectiv. Deobicei aceste mulţimi sunt submulţimi ale mulţimii numerelor reale, ale 1

description

(Prof. Ioan Rusu)

Transcript of Curs Baze de Date (Prof. Ioan Rusu)

Page 1: Curs Baze de Date (Prof. Ioan Rusu)

1. INTRODUCERE

1.1. ORGANIZAREA DATELOR

Principala formă de luptă a omului împotriva timpului este micşorarea intervalului de desfăşurare a diferitelor activităţi, care dau impresia prelungirii perioadei de viaţã. Pentru realizarea acestui deziderat omul modern utilizează creaţia sa, calculatorul, care pe lângă calcule aritmetice poate prelucra mari cantităţi de informaţie într-un timp scurt, datorită noii sale configuraţii şi a limbajelor de programare. Eficienţa unui sistem informatic dată de regăsirea automată a datelor, după diferite criterii, într-un timp cât mai scurt, depinde în mare măsură de modul de organizare a datelor.

Prin organizarea datelor se înţelege definirea, structurarea, ordonarea şi gruparea lor în colecţii a cãror elemente sunt omogene şi stabilirea de relaţii între colecţii şi între elementele unei colecţii precum şi înregistrarea lor pe un suport informaţional prelucrabil într-un sistem de calcul.

Organizarea datelor are ca urmare şi micşorarea spaţiului de memorie ocupat de date, care apar o singurã datã în sistem, precum şi flexibilitatea datelor fãrã a modifica programele care le gestioneazã.

În organizarea datelor se utilizeazã trei concepte de bazã: entitate, atribut şi valoare. Relaţia dintre aceste noţiuni este datã de asocierea mai multor atribute unei entitãţi şi a unei mulţimi de valori atributelor.

Noţiunea de entitate nu poate fi definitã, deoarece este o noţiune primarã. Mai multe elemente de acelaşi tip reprezintã o entitate. Câteva exemple de entitãţi sunt: tranzistor, rezistor, persoanã, student etc. Entitatea este un obiect concret sau abstract reprezentat prin proprietãţile sale.

Proprietãţile esenţiale care descrie o entitate se numesc atribute, care pentru anumite elemente ale entitãţii poate lua valori din anumite mulţimi numite domeniul atributului respectiv. Deobicei aceste mulţimi sunt submulţimi ale mulţimii numerelor reale, ale mulţimii numerelor întrgi sau a mulţimii şirurilor de caractere. Deci orice proprietate a unui obiect poate fi exprimatã printr-o pereche (atribut,valoare). Cum o entitate are mai multe proprietãţi 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 entitãţi numitã entitate grup, care în exemplul nostru este tranzistor şi se mai numeşte şi tip de entitãţi.

Noţiunea de atribut este cunoscutã şi sub numele de câmp sau caracteristicã. Fiecare atribut este caracterizat de natura valorilor pe care le poate lua.

Se numeşte cheie atributul sau mulţimea de atribute pentru care valorile asociate determinã în mod unic orice element al unei entitãţi. Dacã existã elemente care sã aibã aceleaşi valori pentru toate atributele se ia un atribut suplimentar reprezentat de numãrul asociat elementului în entitatea datã.

Conceptul de datã este un model de reprezentare a informaţiei, accesibil unui anumit procesor (om, program, calculator) care prelucreazã informaţia PENTRU a obţine informaţii noi despre fenomenle lumii reale.

1

Page 2: Curs Baze de Date (Prof. Ioan Rusu)

Logic o datã se defineşte prin identificator,atribut şi valoare.Exemplu: TÂNÃR - IDENTIFICATOR PROFESIA - ATRIBUT STUDENT - VALOARE

1.2. RELAŢII ÎNTRE DATE

Numim relaţie între entităţile E E En1 2, , ... , orice submulţime a produsului cartezian al mulţimilor elementelor de forma ( , , ..., )e e en1 2 unde e E e E e En n1 1 2 2 , , ..., . O astfel de relaţie o notãm cu REL( E E En1 2, , ... , ) unde REL

este numele asociat relaţiei care are aritatea k. De cele mai multe ori k=2Definiţia 1. Se numeşte relaţie binarã pe mulţimea A nevidã de date o

submulţime R a produsului cartezian AxA care îndeplineşte o proprietate (relaţie). Exemplu. Se considerã mulţimea A a tranzistoarelor dintr-o magazie şi relaţia

“de tipul BC107” asociazã fiecãrui tranzistor din A pe toţi cei care sunt de tipul BC107 cu condiţia sã facã parte din A.

R={(x,y)AxA/x,yA şi “ x este de acelaşi tip cu y”}Elementele asociate prin relaţia R sunt acele elemente x,y pentru care

(x,y)R, deci x şi y sunt de acelaşi tip (BC107) şi simbolizãm prin xRy.Proprietãţi ale relaţiei binare dintre date.1. Reflexivitatea. Relaţia R peste mulţimea A este reflexivã dacã pentru

orice x A avem xRx.2. Simetria. Relaţia R peste mulţimea A este simetricã dacã pentru orice

x,y A relaţia xRy implicã yRx.3. Antisimetria. Relaţia R este antisimetricã pe mulţimea A dacã pentru

orice x,y A din xRy şi yRx rezultã x=y.4. Tranzitivitatea. Relaţia R peste mulţimea A este tranzitivã dacã

pentru orice x,y,zA care îndeplinesc xRy şi yRz satisface şi relaţia xRzDefiniţia 2. O relaţie binarã R definitã pe A care este reflexivã, simetricã şi

tranzitivã se numeşte relaţie de echivalenţã.Definiţia 3. Relaţia R definitã pe A se numeşte de ordine totalã dacã pentru

orice x,yA avem xRy sau yRx.Definiţia 4. Dacã relaţia R definitã pe A este reflexivã, asimetricã şi tranzitivã

se numeşte relaţie de ordine.Definiţia 5. Relaţia R definitã pe A este de preordine dacã este reflexivã şi

tranzitivã.Dupã numãrul de elemente dintr-o entitate care corespund unui element dintr-

o altã entitate se pote face o clasificare a relaţiilor binare astfel: - Relaţie de unu- la- unu notatã (1:1), când fiecãrui element dintr-o entitate îi corespunde cel mult un element dintr-o altã entitate şi invers. - Relaţie unu- la -mai mulţi notatã (1:N), când fiecãrui element din prima entitate îi corespunde N elemente din a doua entitate şi fiecãrui element din a doua entitate îi corespunde cel mult un element din prima entitate. - Relaţie mai mulţi -la- mai mulţi notatã (M:N ), când unui element din prima entitate îi corespunde mai multe elemente din a doua entitate şi reciproc.

În practicã cele mai întâlnite sunt ultimele douã tipuri de relaţii.

1.3. STRUCTURI DE DATE

2

Page 3: Curs Baze de Date (Prof. Ioan Rusu)

Definiţia 6. O colecţie de date între care sau stabilit o mulţime de relaţii care ne ajutã în realizarea de modalitãţi de selecţie şi identificare a elementelor se numeşte structurã de date.

Structura de date poate conţine datele unui tip sau a mai multor tipuri de colecţii. Structura de date are un acces secvenţial dacã localizarea unui element al ei se face ţinând cont de elenentele care se aflã înaintea sa în ordinea specificatã. Structura are acces direct dacã un element al ei poate fi selectat fãrã a ţine cont de celelalte. Elementele unei structuri de date pot fi ele la rândul lor o structurã de date.

Crearea unei structuri de date începe cu memorarea datelor sub formã iniţialã într-o memorie. Pentru prelucrarea datelor este necesar accesul la elementele structurii care poate fi secvenţial sau direct. Datele structurii trebuiesc actualizate ceea ce duce la adougarea,ştergerea unor elemente, modificarea valorii şi a relaţiilor dintre elemente. Alte operaţii 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ã. Eficienţa realizãrii operaţiilor asupra structurii de memorie depinde de relaţiile între datele materializate pe suportul de memorie.

Structurile de date sunt de acelaşi tip dacã au aceeaşi organizare şi sunt supuse aceloraşi operaţii.

Definiţia 7. O mulţime de date între care s-au stbilit relaţii şi pentru realizarea operaţiilor 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:

structuri de dateomogene cu elementele de acelasi tip

eterogene cuelementediferite

;

, .

2. Dupã posibilitatea modificãrii valorilor sau structurii sau a valorii şi

structurii avem:

structuri de datestatice care au acelasi numãr de elemente pe timpul existentei

dinamice care permit ificarea valorilor si strucurilor

, ;

, mod .

3. Dupã nivelul de structurare al datelor avem:

structuri de date

ice se referã la ordonarea datelor si operatori de tratare

a datelor

fizice se referã la implementarea si reprezentarea pe orti

ormationali

log ,

;

, sup

inf .

1.3.2. Tipuri de structuri de date

1. Structura punctualã este reprezentatã de o entitate izolatã care nu are relaţii cu alte entitãţi.

2. Structura liniarã este reprezentatã de o colecţie de date între elementele cãreia este stabilitã o relaţie de ordine totalã. Acestei structuri îi corespunde o mulţime de colecţii de date care este în relaţii ierarhice de includere ( fiecare colecţie are o singurã colecţie la nivel superior şi inferior). Fiecãrei înregistrãri din colecţia de nivel superior îi corespunde una sau mai multe înregistrãri ale colecţiei de nivel inferior.

3

Page 4: Curs Baze de Date (Prof. Ioan Rusu)

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

Pentru structura simplã din figura 1 cardinalul mulţimii elementelor iniţiale ş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 relaţie de cuplu atunci structura liniarã devine inelarã sau circularã figura .

3. Structura arborescentã este o colecţie de date între elementele cãrea existã o relaţie de ordine. Aceastã structurã are urmãtoarele proprietãţi:

Existã un singur element numit rãdãcinã; Orice nod are un predecesor imediat unic; Orice nod neterminal are un numãr finit de succesori imediaţi; Relaţiile stabilite între noduri sunt de tipul (1:m).

a

4

a

b

a

b

c

d

e

f

g

h

i

Page 5: Curs Baze de Date (Prof. Ioan Rusu)

b Fig. 2. Arbori de date a) binar b) stratificat

Definiţia 9. Se numeşte drum de lungime n-1 de la n la ni in1 succesiunea de noduri ( , , ... , )n n ni i in1 2 unde n ik este succesorul lui n i k 1 , pentru orice k, kn+1. Drumul de lungime maximã reprezintã înãlţimea arborelui. Un arbore care are ordinul 2 se numeşte arbore binar iar cel cu ordin mai mare ca 2 se numeşte arbore multicãi.

Definiţia 10. Un arbore se numeşte echilibrat dacã diferenţa dintre drumurile de la rãdãcinã la punctele terminale este cel mult 1.

Structura arborescentã poate avea elementele structurate arborescent, în reţea sau liniar.

4. Structura reţea este structura unei colecţii de date între elementele cãreia existã o relaţie de preordine. Acastã structurã are urmãtoarele proprietãţi: O reţea este un graf care realizeazã o legãturã bidirecţionalã între douã

noduri. Un nod poate avea mai mulţi predecesori şI el poate fi pedecesorul

predecesorului sãu. În acest caz în reţea apar cicluri pentru care nodul final coincide cu cel iniţial.

Cardinalul mulţimii nodurilor iniţiale este mai mare ca 1, relaţie îndeplinitã şi de cardinalul nodurilor finale.

5

a

bc d

e

f gh i j k

l mn

Page 6: Curs Baze de Date (Prof. Ioan Rusu)

a)

b) Fig. 3 Reţele de date a) simplã b) complexã

Între elementele reţelei se stabilesc relaţii de tipun (n:m).Dacã orice cuplu al reţelei este simetric reţeaua este simplã în caz contrar este

complexã.

5. Structura relaţionalã este formatã din mai multe tabele (relaţii, tablouri) de date elementare, fãrã o legãturã aparentã între ele componentele unei tabele fiind aduse într-una din formele normate, figura 4. Starea în care se gãseşte structura tabelului în funcţie de cerinţele impuse se numeşte formã normalã. Operaţiile pe aceste structiri se realizeazã cu operatori relaţionali ai algebrei relaţionale sau ai calculului relaţional.

TRANZISTOARE

MARCA NUME Umax.al. BETA f MAX PUTERE

6

b

c

a

d

e

f

g

h

i j

a

b

c

d

e

f

Page 7: Curs Baze de Date (Prof. Ioan Rusu)

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 entităţi, numite obiecte .

Acestea sunt : tabele ( ‘tables’), interogări ( ‘queries’), formulare (‘forms’), rapoarte ( ‘ reports’), comenzi macro ( ‘ macros’) şi module ( ‘modules’) . O bază de date Access 95 este prezentată în figura 1. Observaţi î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 colecţie de date corelate, cu referire la un anumit subiect ( sau entitate). Toate aceste date( informaţii) vor fi stocate în tabele. Pentru fiecare subiect ( entitate) trebuie creat un nou tabel . De exemplu, dacă se doreşte o BD cu referire la o bibliotecă, atunci ne-am putea gândi la colecţionarea datelor despre :- cărţi( cu numele şi prenumele autorului, titlul cărţii, editura, anul apariţiei, numar

ISBN, numărul de cotă al cărţii respective ş.a.) ;

7

Page 8: Curs Baze de Date (Prof. Ioan Rusu)

- gestionarea persoanelor înscrise la acea bibliotecă( fişele de înscriere, cu numele şi prenumele cititorului, adresă, număr de telefon etc.) ;

- împrumuturi ( ce titlu, cui, pe ce perioadă) ;- achiziţii şi împrospătarea fondului de carte( titlul nou achiziţionat, numărul de

bucăţi, disponibilul din depozit) . Pentru fiecare dintre aceste posibile entităţi trebuie creat un tabel. Structura unui tabel Access 95 este arătată în figura următoare( figura 2) .

Fig. 2 - Structura unui tabel .

Conţinutul unui tabel

Orice tabel este organizat sub forma unei grile, cu rânduri şi coloane . ( vedeţi figura 2) . Rândurile se numesc înregistrări (tuple), iar coloanele se numesc câmpuri (domenii). Un rând conţine informaţii despre un exemplar al entităţii 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) entităţii reprezentate în acel tabel( în exemplul anterior autorul unei cărţi, titlul cărţii sau perioada de împrumut sunt fiecare o caracteristică a entităţii de care aparţin) . Fiecare câmp al unui tabel va conţine acelaşi tip de dată pentru toate exemplarele . Deci un tabel conţine două tipuri de informaţie :- informaţiile care descriu modul de alcătuire al tabelului, adică structura tabelului ,

care este dată de înregistrări ;- datele propriu-zise, adică informaţia conţinută în câmpuri .

1.4.2. Interogări ( queries)

O interogare reprezintă o întrebare pe care o formulăm, în legătură cu informaţiile colectate în baza de date. În urma unei astfel de întrebări, mediul Access ne întoarce o mulţime de înregistrări, care pot face parte din unul sau mai multe tabele ale BD interogate . Mulţimea de înregistrări poartă numele de set dinamic rezultat al interogării, sau mai scurt set dinamic rezultat . Am subliniat ‘dinamic’, deoarece este o calitate importantă. Ea ne spune că dacă în tabelul, sau tabelele sursă (

8

Page 9: Curs Baze de Date (Prof. Ioan Rusu)

care au furnizat setul) apar modificări, acestea se vor reflecta şi în set ( el conţinând valorile cele mai recente) .

Utilizarea interogărilor

Rolul unei interogări este să extragă din tabelele BD datele care ne sunt necesare la un moment dat . O interogare are diferite utilizări :

- afişarea numai a înregistrărilor care corespund criteriilor pe care le stabilim;- afişarea înregistrărilor într-o anumită ordine ( tot pe baza unor condiţii) ;- combinarea înregistrărilor din mai multe tabele ;- realizarea de modificări similare în mai multe înregistrări dintr-un tabel,

simultan ;- ştergerea unor înregistrări ;- ş.a. .

În majoritatea situaţiilor, Access permite editarea datelor afişate de o interogare. Rezultatul editării este scris înapoi în tabelul( tabelele) care au furnizat setul .

Atenţie : 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 număr de titluri de cărţi ce trebuie înlocuite din cauza uzurii. Printre ele se poate întâmpla să existe şi una( sau mai multe) care la o a doua privire să nu necesite înlocuirea. Deci le ştergem din rândul celor ce trebuie neapărat schimbate. Ştergerea va fi reflectată şi în tabelul care a furnizat acele titluri pentru înlocuire. Rezultatul ? Se pierde definitiv înregistrarea corespunzătoare acelui titlu !

Trebuie reţinut : o interogare nu are date proprii , ci operează cu ceea ce se citeşte din tabele sau cu ceea ce se scrie în tabele .

Analogia cu o funcţie C cu parametri luaţi 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 înregistrări sau din setul dinamic rezultat al unei interogări ;- modifica sau elimina date .

Puteţi vedea cum arată un formular în figura 3.

9

Page 10: Curs Baze de Date (Prof. Ioan Rusu)

Fig. 3 – Un tip de formular Access 95

Conţinutul unui formular Un formular poate conţine subformulare pentru afişarea de date asociate . De exemplu câte cărţi s-au primit în ultima săptămână, sau ce cititori au întârziat predarea. Formularele pot conţine şi butoane ( controale) care realizează acţiuni specifice : deschiderea altor formulare sau tipărirea rapoartelor.

Având în vedere toate acestea se poate spune că formularul reprezintă interfaţa utilizator a unei BD Access 95 .

Reţineţi că un formular conţine două tipuri de informaţie :- informaţii de structură care dau înfăţişarea şi alcătuirea( adică : amplasarea;

mărimea şi forma; numărul, tipul şi caracteristicile secţiunilor; numărul, tipul, amplasarea şi atributele controalelor ş.a. ) ;

- datele propriu-zise, afişate .

4.4. Rapoarte( reports)

În opoziţie cu formularele ( folosite la operaţiile de intrare intr-o BD Access 95) rapoartele îndeplinesc operaţiile de ieşire . Datele sunt dirijate cel mai adesea către o imprimantă, astfel că orice doriţi să tipăriţi va arăta cel mai bine sub formă de raport. Atunci când vom crea rapoarte vom avea la dispoziţie din partea Access 95 programe ‘wizard’ pentru crearea tipurilor uzuale ale unui astfel de obiect.

Un raport arată ca în figura următoare ( figura 4).

Fig. 4 – Un raport Access 95 .

4.5. Comenzi macro( macros)

10

Page 11: Curs Baze de Date (Prof. Ioan Rusu)

O comandă macro ( sau macro-comandă) este un obiect al unei BD Access95 ce conţine o secvenţă de acţiuni ce se repetă la dorinţa noastră . Vă puteţi gândi la acest obiect ca la un macro din limbajul de asamblare .

Ele se pot ataşa unui formular, raport, unui buton( numit şi control, ca la interfeţele grafice Windows), unui element de meniu sau unei combinaţii de taste .

Comenzile macro înlocuiesc programarea( care în Access 95 se face folosind Visual Basic pentru aplicaţii – VBA) pentru acţiunile de rutină, ca deschiderea unui formular sau tipărirea unui raport . Pot fi folosite în cazul proiectării unei interfeţe simple către baza noastră de date . Nu trebuie însă exagerată folosirea comenzilor macro, deoarece oricum ele nu sunt atât de eficiente precum o funcţie a limbajului de programare. De asemenea duce la pierderea unor posibilităţi oferite de module( vezi 2.1.6).

Comenzile macro au rol important şi în :- verificarea şi validarea datelor ;- stabilirea valorilor pentru proprietăţile obiectelor( controale, formulare, machete) ;- crearea interfeţelor între aplicaţii şi user .

Cum sunt create comenzile macro ?

Comenzile maco sunt create de către programator. Nu se poate ca o astfel de comandă să fie creată prin înregistrarea unei secvenţe de combinaţii de taste . O comandă de acest fel este compusă din acţiuni aşa cum am amintit mai sus . Acţiunea îndeplineşte o sarcină bine-definită. Unele acţiuni au nevoie de informaţii 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 operaţiei de deschidere.

Acţiunile ce compun o macro-comandă sunt oferite de Access 95 . Mediul ne pune la dispoziţie o listă derulantă de acţiuni pe care le putem folosi. Dar detaliile fiecărei operaţii trebuie furnizate de noi .

Reţineţi că :- o macro-comandă Access 95 reprezintă un set de acţiuni ;- 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 acţiuni 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 câte ceva despre programarea în VBA .

Astfel, ca în orice limbaj de programare, un program VBA este compus din instrucţiuni . Mai multe instrucţiuni formează o procedură ( denumirea trebuie respectată, ca în limbajul de asamblare ; nu asociaţi procedura cu funcţia din C).

11

Page 12: Curs Baze de Date (Prof. Ioan Rusu)

Procedurile sunt de două feluri :

- dacă realizează o activitate sau operaţie 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 ; Deduceţi de aici că procedura nu poate fi numită funcţie . Puteţi folosi totuşi termenul de funcţie pentru uşurinţă, dar trebuie să faceţi diferenţa între funcţie şi procedură .

Conţinutul unui modul

Modulul este un obiect Access ce conţine o colecţie de declaraţii, instrucţiuni şi proceduri din VBA . Vă puteţi gândi la el ca la un mic program, dar care nu are puterea de a rula ! De obicei se memorează în acelaşi 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 aplicaţii.Fiecare modul conţine :

- o secţiune pentru declaraţii ;- o secţiune de proceduri, unde apar procedurile ce prezintă legături logice între ele (

aşa cum am spus mai sus) .

După cum se vede, forma unui modul este apropiată ca structură de cea a unui program, din care lipseşte acea parte ce i-ar justifica denumirea ( şi anume funcţia 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, depinzând de momentul ales pentru creare . Astfel :1. La start :

atunci când lansaţi mediul Access 95, va apărea o casetă de dialog( figura 5) .

12

Page 13: Curs Baze de Date (Prof. Ioan Rusu)

Fig. 5 – Caseta de dialog ce apare automat la lansarea Access 95 .

De aici aveţi două opţiuni : 1.

Fără ajutorul programului ‘wizard’ : prin selectarea opţiunii ‘Blank Database’ ( figura 6), ajungeţi la fereastra arătată în figura 7. Aceasta este fereastra în care daţi un nume noii baze de date pe care o creaţi.

13

Page 14: Curs Baze de Date (Prof. Ioan Rusu)

Fig. 6 – În caseta de dialog de la start, se alege opţiunea ‘BlankDatabase’.

Fig. 7 – Ce nume va primi noua bază de date ?

Apăsând OK ajungeţi la fereastra din figura 8. Ce vedeţi în figura 8 este o BD nouă, necompletată ; prin selecţia oricăreia din etichetele cu numele obiectelor unei BD ( ‘tables’, ‘queries’ ş.a.) ce apar în partea de sus a ferestrei, veţi vedea că nu există nimic creat. Sarcina noastră este să creăm, pe parcursul lucrărilor de laborator, fiecare dintre aceste obiecte ;

Fig. 8 – Fereastra noii baze de date, aşa cum apare după ce a primit un nume.

2.

14

Page 15: Curs Baze de Date (Prof. Ioan Rusu)

Cu ‘wizard’ : prin selectarea opţiunii ‘Database Wizard’ ( figura 9) veţi intra în fereastra ‘New’ ( figura 10).

Fig. 9 – Selectaţi ‘Database Wizard’ dacă doriţi asistenţă din partea Access 95

Există două etichete disponibile : ‘General’ şi ‘Blank Database’ .

- Alegând ‘General’ ( figura 10) veţi crea o BD nouă fără 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

Page 16: Curs Baze de Date (Prof. Ioan Rusu)

Fig. 10 – După selectarea în caseta de dialog de la start a opţiunii ‘Database Wizard’, ajungeţi la această fereastră .

- Alegând ‘Databases’ veţi putea opta dintr-o mulţime 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). Alegând unul dintre şabloane şi confirmând cu OK urmează ferestrele din figurile 7 şi 8. Se lansează apoi automat ‘Database Wizard’ şi se intră într-o sucesiune de paşi pentru specificarea unui model al bazei de date. Figura 11 vă arată programul ‘Database Wizard’ în acţiune .

16

Page 17: Curs Baze de Date (Prof. Ioan Rusu)

Fig. 11 – Unul din paşii pe care îi execută Database Wizard . Trebuie selectate informaţiile dorite, după care se trece la pasul următor( ‘Next’). Se poate şi reveni folosind ‘Back’ . La final se încheie procesul de creare cu ‘Finish’ .

Ceea ce aveţi de făcut la fiecare pas din Wizard este să fiţi atenţi la întrebările ce vi se pun, astfel încât să daţi răspunsurile corecte. Odată răspunsurile fiind date, apăsaţi 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 până când butonul ‘Next’ devine inactiv ( figura 11.1). Acum trebuie apăsat butonul ‘Finish’, moment în care, folosindu-se toate informaţiile pe care le-aţi furnizat la fiecare pas, se va crea o nouă BD ( vezi şi figura 12) .

CAPITOLUL 2

2.1. Crearea unui tabel

Fără tabele, o bază de date îşi pierde înţelesul, deoarece tabelele sunt cele care stochează informaţia primară. Ca o analogie, gândiţi-vă la un calculator( PC) fără hard-disk ! şi veţi înţelege imediat afirmaţia anterioară.

! Nu uitaţi : înregistrare se numeşte orice rând dintr-un tabel, iar câmp se numeşte orice coloană .

Înainte de a trece la crearea propriu-zisă trebuie să cunoaştem caracteristicile câmpurilor.

Astfel, un câmp este un obiect cu următoarele atribute :- nume , care identifică un fiecare câmp; este de maxim 64 de caractere, inclusiv

spaţiile ce apar ;- tip de dată, care ne spune :

- ce fel de valori se pot introduce în acel câmp ;

17

Page 18: Curs Baze de Date (Prof. Ioan Rusu)

- câtă memorie se alocă ;- ce operaţii sunt permise cu acel câmp ;- dacă poate fi folosit în cazul unor indexări sau sortări ale înregistrărilor după

valorile acestuia ;- text ( notă) explicativ( ă) , unde putem însemna ce dorim pentru a descrie acel

câmp ş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 înţelegerea manevrării înregistrărilor.

1.1.1 Tipul text ( text)

Acesta este tipul de dată cel mai întâlnit.

Access permite o lungime implicită( default) de 50 de caractere, dar puteţi folosi oricâte 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 cărţi ş.a. Pe lângă acestea, tipul text poate fi util şi în alte situaţii care la prima vedere ar necesita alte tipuri de date. De exemplu un număr de telefon poate fi mai avantajos stocat ca şir de caractere decât ca număr pe 4 octeţi( cazul numerelor noastre de telefon). De ce? Să presupunem că cineva găseşte că este mai la îndemână să-şi noteze numerele de telefon

sub forma : 312-5678, pentru a le reţine mai uşor ; sau sub forma 89.89.989. Într-o astfel de scriere observaţi 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 câmp memo este de 64KB pentru fiecare înregisrare, adică

aproximativ 4 pagini text scrise la un rând .Câmpurile ‘memo’ pot apărea de mai multe ori într-o înregistrare. Se dă astfel

posibilitatea user-ului de a-şi face însemnări acolo unde are nevoie de ele.

1.1.3 Tipul număr( number)

Iată care sunt numerele acceptate, în ordinea crescătoare a numarului de octeţi necesari pentru stocarea lor :

Întregi :1. ‘byte’ : este stocat pe un octet şi poate ţine valori întregi numai pozitive ( de la 0 la 255) ;

18

Page 19: Curs Baze de Date (Prof. Ioan Rusu)

2. ‘integer’ : este stocate pe doi octeţi şi poate ţine numere negative şi pozitive ( de la –2^4 până la 2^4 – 1) ;

3. ‘long integer’ : este stocat pe patru octeţi ş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 octeţi. Are scopul de a asigura un identificator global unic ( GUID –Globally Unique Identifier) pentru acele BD ce administrează cantităţi mari de date. Modul intern de memorare impune o utilizare atentă a acestuia. Se recomandă folosirea lui doar în cazul în care numărul de înregistrări creşte foarte mult între două sincronizări ale unei BD asupra căreia se operează din partea mai multor utilizatori.

1.1.4 Tipul dată calendaristică/oră( date/time)

Access stochează intern data calendaristică folosind un număr în virgulă mobilă pe 8 octeţi. Ziua este interpretată ca o fracţiune dintr-o zi.

Modificând proprietăţile acestui tip de dată se pot obţine diferite comportări. Proprietăţile unui câmp se modifică din partea de jos a ferestrei unui tabel deschis în modul ‘Design’. Mai târziu veţi vedea cum se ajunge la modul Design( proiectarea unui tabel).

Deocamdată reţineţi doar că :- dacă doriţi ca Access 95 să introducă automat data curentă, trebuie setată

proprietatea unui câmp de acest tip la ‘=Date()’ . Pentru a se obţine automat şi data şi ora trebuie folosită opţiunea ‘=Now()’ .

- proprietatea ‘Format’ trebuie setată( stabilită) pentru toate câmpurile de tipul date/time. Această definiţie va fi transmisă din tabel către interogări, formulare şi rapoarte . Aveţi opţiunile :- ‘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 selectaţi eticheta ‘Time’ şi unde apare ‘Short date’ modificaţi valoarea astfel încât în dreptul anului să apară ‘yyyy’ în loc de ‘yy’. Apoi daţi ‘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 până la 3 cifre ( deci până la 10 la puterea 3) ;

19

Page 20: Curs Baze de Date (Prof. Ioan Rusu)

- pentru numere fracţionare poate ţine până la sutimi dintr-o unitate . Pe scurt : 3 cifre înainte de virgulă ( la dreapta virgulei) şi 4 cifre după virgulă ( la stânga virgulei) . 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 număr ( întreg sau virgulă mobilă).

1.1.6 Tipul număr cu incrementare automată( autonumber)

Tipul implicit în reprezentarea internă este întreg lung( ‘long integer’), deci pe 4 octeţi. O dată de acest tip poate fi :

- secvenţială, ce ajută la generearea unor numere unice ;- aleatoare, cu ajutorul căreia 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 câştigătorului.

Reţineţi că deşi acest tip are o reprezentare internă implicită, Access permite user-ului să modifice această reprezentare . Deoarece acest tip este tot un număr se poate folosi şi ‘ReplicationID’ în loc de valoarea implicită. Se recomandă folosirea lui ‘ReplicationID’ atunci când se lucrează simultan cu aceeaşi BD, iar

numărul de înregistrări are variaţii rapide ( creşte foarte repede între două sincronizări ale BD curent folosite).

La ce foloseşte numărul cu incrementare automată ?

Numărul cu incrementare automată dă o ordine înregistrărilor. Fiecare înregistrare, pe măsură ce este introdusă, capătă un număr de ordine.

Dacă se renunţă la introducerea unei înregistrări, numărul cu autoincrementare corespunzător este sărit şi nu va mai fi atribuit ulterior. De asemenea, în cazul ştergerii unei înregistrări nu există posibilitatea creării unei alte înregistrări cu acelaşi număr. Acel număr nu mai poate fi folosit.

Este cel mai bine ca în relaţiile între tabele să folosiţi un număr cu autoincrementare .

1.1.7 Tipul da/nu( Yes/No)

Este corespunzător tipului boolean din limbajele de programare.Poate conţine opoziţii ca: Yes/No; On/Off; True/False .

Cum poate fi folosit ?

20

Page 21: Curs Baze de Date (Prof. Ioan Rusu)

Dacă dintr-un tabel sunt dorite anumite înregistrări se poate folosi acest tip pentru selecţie/deselecţie. Alegerea nu se face automat, ci o faceţi dvs. Prin stabilirea tipului la una din cele două valori logice.

1.1.8 Tipul obiect OLE ( OLE object)

La specificarea acestui tip acel câmp permite folosirea unor obiecte provenite din alte aplicaţii( 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 căutare ( Lookup Wizard)

Un câmp cu acest tip este capabil de a căuta în alte tabele. Ce caută ?Depinde de BD respectivă. De exemplu ce cititor are împrumutată cartea al cărei titlu se cunoaşte. În tabelul cărţilor se va crea un câmp cu tipul Lookup Wizard care va stoca valoarea identificatorului tabelului cititorilor şi va afişa numele acestuia.

1.2 Proprietăţile câmpurilor

Acestea apar în partea de jos a ferestrei de proiectare a unui tabel ( figura 1).

21

Page 22: Curs Baze de Date (Prof. Ioan Rusu)

Fig. 1 – Proprietăţile câmpurilor. Observaţi în partea de jos a ferestrei două etichete : ‘General’ şi ‘Lookup’. Din cauză că tabelul nu are nici un câmp completat, aceste etichete nu conţin nimic .

1.2.1 Format ( format)

Este sub formă de şir. Are influenţă asupra modului de afişare ( output) al datelor.

Puteţi să vă gândiţi la şirul de formatare al funcţiei ‘printf()’ din C. Specificatorii de format forţează funcţia să afişeze datele după cum îi stabilim noi, ţinând cont de contextul respectiv.

Şirul de format Access poate conţine :- 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 câmp.

1.2.2 Masca de intrare ( input mask)

În opoziţie cu ‘Format’, ‘Input Mask’ controlează modul de introducere al datelor ( partea de ‘input’).Pentru fiecare caracter introdus ‘Input Mask’ determină dacă :

- este caracter opţional 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 stânga sau invers.

22

Page 23: Curs Baze de Date (Prof. Ioan Rusu)

Access 95 are introdusă şi o nouă mască faţă de versiunile anterioare.Aceasta este masca ‘password’ care determină ca toate caracterele unui câmp să fie afişate ca asteriscuri.

1.2.3 Titlu ( caption)

Pentru un câmp care nu are stabilită această proprietate se va folosi ca titlu al câmpului chiar numele introdus în acel câmp .

Unde se foloseşte ?

Valoarea acestei proprietăţi este folosită :- la afişarea numelor de câmpuri, în situaţia când 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 câmp ;- pentru afişarea unui spaţiu într-un nume de câmp care nu-l are în mod obişnuit. De

exemplu un câmp are denumirea ‘FisaÎmprumut’. Putem folosi acest nume ca ‘Fişa Împrumut’ dacă îi stabilim proprietatea ‘caption’ la ‘Fişa Împrumut’.

1.2.4 Valoare implicită ( default value)

Access 95 foloseşte anumite valori implicite pentru diferitele tipuri ale unui câmp ( vezi paragraful tipurilor de câmp). Trebuie să intervenim şi să modificăm ceea ce Access ştie dinainte, dacă dorim o altă valoare decât cea prestabilită. De exemplu tipul Yes/No are valoarea prestabilită 1( adică ‘true’).

Pentru a înţelege mai bine gândiţi-vă la un nou program instalat. Înainte de a-l configura după dorinţă, el totuşi funcţionează utilizând anumite setări implicite ale producătorului. Sau, rezoluţia implicită a lui Windows 95 la instalare este 640*480*4. Cine doreşte 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 introduceţi pentru a stabili o anumită limitare asupra datelor.

Restricţiile sale sunt :- acceptă maximum 255 de caractere ;- nu poate conţine o trimitere la un alt câmp sau obiect ;- nu poate include funcţii definite de dvs. Şi nici funcţii domeniu( cum este

‘Dlookup()’ ) .Pe baza regulii de validare se verifică limitele intervalului în cazul unui câmp.

De exemplu dintre toate datele de tip număr ce se pot introduce ne interesează doar

23

Page 24: Curs Baze de Date (Prof. Ioan Rusu)

acelea din intervalul [ 0, 100] . Regula de validare va fi atunci stabilită la ‘Between 0 and 100’ . Regula de validare foloseşte în crearea ei operatori oferiţi de Access. În exemplul dat operatori sunt : Between şi and.

-> Textul de validare reprezintă mesajul afişat în cazul în care se încalcă regula de validare. Este un mesaj de eroare ce dă lămuriri asupra modului de rezolvare.

1.2.6 Necesar ( required)

Spune dacă acel câmp trebuie neapărat să apară sau nu, adică dacă trebuie sau nu să fie completat . Dacă doriţi ca un câmp să fie neapărat completat atunci stabiliţi valoarea ‘Required’ la Yes.

Un câmp care trebuie să apară este cheia primară a oricărui tabel.Acesta apare pe prima poziţie ( primul rând al unui tabel). Access vă va atenţiona cu următorul mesaj dacă nu stabiliţi un câmp primar pentru un tabel.

Este foarte util la câmpurile ‘Foreign Key’ ( Cheie străină) pentru că impune o valoare pentru acel câmp, valoare necesară în relaţia stabilită între acel tabele.

1.2.7 Proprietatea ‘Permite valoare zero’( Allow Zero Length)

Ce utilitate are ?- Este folosită doar pentru câmpuri de tip text !- Apare în Access 95 pentru compatibilitate cu alte baze de date .

În Access 95 este permisă în lucru atât valoarea zero cât şi valoarea nulă .

Atenţie ! Faceţi distincţia între o valoare nulă şi o valoare zero. Valoarea nulă arată că nu se ştie nimic despre un anumit câmp. Acel câmp nu

există dacă are valoare nulă ! Valoarea zero arată că se cunoaşte ceva despre acel câmp, şi anume că acel câmp

trebuie să rămână necompletat. Dar el există !

Există o valoare implicită pentru ‘Allow Zero Length’ şi anume ‘No’ .

24

Page 25: Curs Baze de Date (Prof. Ioan Rusu)

1.2.8 Indexat ( Indexed)

Se referă la folosirea unor indecşi pentru numerotarea înregistrărilor unui tabel.Puteţi vedea în figura 2 cum apare această proprietate de câmp.

Când este util ?

- atunci când valoarea conţinută de un câmp are o viteză mare de variaţie ;- atunci când câmpul este folosit intens în criteriile de selecţie sau sortare .

Fig. 2 – Valorile posibile ale lui ‘Indexed’ .

Proprietatea de câmp ‘Indexed’ are ca valori posibile pe :- Yes/No : dorim ca acel câmp să fie sau nu indexat ;- Yes( No Duplicates) : câmpul este indexat dar nu se poate repeta ;- Yes( Duplicates OK) : câmpul este indexat şi se poate repeta( de exemplu numele

unui autor de carte care are în bibliotecă mai multe titluri) .

Pe lângă indexarea separată a câmpurilor există posibilitatea de a indexa şi o mulţime de câmpuri, care vor fi privite apoi ca o unitate. Aceasta se face folosind fereastra Indexed din meniul ‘View’.

Reţineţi : tot un index este şi cheia primară( Primary key) !

1.2.9 Căutare ( Lookup)

In Access 95 orice câmp acceptă o etichetă ‘Lookup’ nouă în cadrul proprietăţilor sale.

Vedeţi figura 3 unde este prezentată eticheta ‘Lookup’ din partea de jos a unui tabel deschis în mod design .

25

Page 26: Curs Baze de Date (Prof. Ioan Rusu)

Fig. 3 – Eticheta ‘Lookup’ activă pentru un câmp de tip text.Observaţi opţiunea implicită pentru tipul de control : ‘combo box’ .

Rezultatul este selectarea tipului de control ce va reprezenta câmpul respectiv în modul Datasheet de lucru cu tabelele, precum şi în noile formulare ce vor fi create.

Astfel :- câmpurilor de tip Yes/No le corespunde implicit controlul de tip ‘Check Box’

( casetă de validare) ;- câmpurilor de tip Text şi Number le corespunde implicit controlul de tip ‘Text

Box’( casetă de text) .

Obs.: - puteţi schimba controlalele de mai sus cu altele.- Eticheta Lookup este valabilă doar pentru câmpuri 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 paşi ; 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 parcurşi paşii de creare a unei noi BD ( vezi paragraful 3.1) .

Pasul 1 :

26

Page 27: Curs Baze de Date (Prof. Ioan Rusu)

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ă. Rămâne să apăsaţi butonul ‘New’.

Pasul 2 :Ajungeţi în fereastra următoare( figura 5). Aici puteţi alege între cele două

moduri de creare a unui tabel : cu şi fără Table Wizard .a) b)

Fig. 5 – a) Opţiunea fără Wizard ; b) Opţiunea cu Wizard .

- Pasul 2.1 : Fără Table Wizard

27

Page 28: Curs Baze de Date (Prof. Ioan Rusu)

Selectaţi modul ‘Design View’( figura 5-a). După ce confirmaţi cu OK ajungeţi în fereastra prezentată în figura 6. Ce vedeţi 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?

Observaţi că fereastra unui tabel în faza ‘Design’ prezintă trei coloane ( care nu sunt aceleaşi cu coloanele tabelului !) : ‘FieldName’( Numele câmpului), ‘Data Type’ ( Tipul de dată al câmpului) şi ‘Description’ ( Descriere) . În procesul de creare a tabelului se parcurg aceste coloane de la stânga la dreapta şi se coboară apoi la câmpul următor, unde se reia parcurgerea coloanelor ş.a.m.d. până se introduc toate câmpurile dorite .

- Primul câmp al unei înregistrări este bine să fie mereu ‘cheia primară’ ( Primary Key). Aceasta identifică unic fiecare nouă înregistrare ce se adaugă tabelului. Daţi acestui câmp denumirea ‘StaffID’ ( IdentificatorPersonal). Ca tip de dată alegeţi ‘AutoNumber’ . Se asigură astfel că fiecare nouă înregistrare primeşte un număr unic. Acest câmp este stabilit apoi cheie primară prin apăsarea butonului ‘Primary Key’ din bara de instrumente ( din toolbar). Odată introdus acest tip dacă vă uitaţi în josul ferestrei, la proprietătile câmpului, vedeţi cum tipul intern de reprezentare este cel implicit( long integer) şi cum acest tip de dată este indexat/fără repetare: Yes( No Duplicates) ( vezi 3.2.2.8 proprietatea Indexed) .

- Următoarele două câmpuri 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ă câmpuri cu utilizare intensă în

28

Page 29: Curs Baze de Date (Prof. Ioan Rusu)

operaţii de selecţie sau sortare putem stabili proprietatea Indexed la Yes. Mărim astfel viteza de manipulare a lor. Dacă doriţi ca numele de familie să fie afişat cu un spaţiu puteţi stabili Caption la Nume Familie.

- Câmpul următor poate fi cel de stare( Status). Semnificaţia lui este aceea de angajat cu normă întreagă, cu parte dintr-o normă, sau angajat pensionar( a cărei angajare a încetat). Fiecare dintre aceste situaţii 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 angajări iar cei mai mulţi dintre noii angajaţi sunt cu normă întreagă, atunci se pote stabili proprietatea ‘Default Value’ la F ( full-time).

- Urmează un câmp ce ţine persoana care supervizează ( Supervisor). Supervizorul este una din persoanele acestui tabel. Aceast câmp este de tip Number cu Field Length setat la Long Integer, adică de acelaşi tip cu cel al identificatorului ( StaffID) . Deoarece câmpul acesta va fi dat ca o referinţă, în loc să se introducă întreg numele supervizorului se poate face identificarea acestuia prin numărul său de ordine din tabel. De aceea este dat de tip număr.

- Trebuie să ne gândim că fiecare angajat este plătit funcţie de numărul de ore de muncă. Deci un câmp util este tariful orar ( HourlyRate). Tipul este Currency ( Valută).

- Apoi câmpurile ce compun adresa : Address, City, District ( să spunem judeţul), State( Ţara) . Toate sunt de tip Text, cu Field Length pus la 80.

- Codul poştal va fi şi el de tip Text cu Field Length de 5 caractere.

- Mai alegem şi un câmp ce spune data naşterii ( BirthDate). Acesta are tipul evident Date/Time pe care îl vom stoca sub forma scurtă a anului( pe doi digiţi), deci Short Date în proprietatea Format.

- Penultimul câmp este cel ce ne spune data angajării JoinDate. El este de tipul Date/Time cu formatul scurt pentru an : Format este Short Date.

Bineînţeles că putem adăuga şi alte câmpuri( ca data începerii angajării, data pensionării, dacă este transferat din altă instituţie ş.a.) dar nu o vom face.

- Ultimul câmp 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.

29

Page 30: Curs Baze de Date (Prof. Ioan Rusu)

Acesta este primul tabel creat de dvs. . Sau poate că aţi mai lucrat în alte baze de date. El arată ca în figura 7.

Fig. 7 – Noul tabel este gata. Proiectarea lui a luat sfârşit.

Tabelul trebuie salvat. Mergeţi în meniul File -> Save As, sau folosiţi din toolbar iconiţa dischetei( fiind prima salvare vă este cerut numele tabelului). Vedeţi 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 iconiţa dischetei din bara de instructiuni

1.4. MODELE DE DATE

30

Page 31: Curs Baze de Date (Prof. Ioan Rusu)

Modelele de date ne ajutã la prelucrarea datelor şi obţinerea de informaţii, 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 urmãtoareloe etape:

structura modelului; operatorii cu care se lucreazã asupra structurilor de date; reguli pentru pãstrarea integritãţii datelor.1. Structura modelului constã în definirea entitãţilor şi a proprietãţilor

lor. Elementele generice care realizeazã structura de date sunt: câmpul (cel mai mic element al structurii care poate fi identificat în

vederea prelucrãrii); grupul simplu sau compus (format din mai multe câmpuri sau grupuri ) ; înregistrarea ( un ansamblu de câmpuri şi grupuri care constituie şi

elementul generic al structurii. Relaţia între înregistrãri aparţinând unui obiect independent sau la mai multe

obiecte independente se materializeazã într-o legãturã între o realizare a înregistrãrii pãrinte şi una sau mai multe realizãri ale înregistãrii fiu. Realizãrile înregistrãrilor de tip fiu formeazã clase de echivalenţã.

Scopul formalizãrii relaţiilor între înregistrãri în cadrul unui model de date este reducerea redundanţei datelor. Relaţia dintre înregistrãri poate pune în evidenţã douã tipuri de legãturi

Fig. 5. Legãturi între înregistrãri

1. Legãturi orizontale ce permit localizarea claselor de echivalenţã; 2. Legãturi verticale care localizeazã înregistrãrile pãrinte.Legãtura dintre entitãţi (obiecte) se mai numeşte asociere. Legãturile dintre entitãţi pot fi de trei tipuri: Legãtura “unu la unu” (11). Un astfel de exemplu poate fi dat de

31

LUCRÃRI

CLASA DE ECHIVALENTÃ

D1 D2 D3

L1 L2 L3 L4 L5 L6 L7

Page 32: Curs Baze de Date (Prof. Ioan Rusu)

relaţia dintre burse şi studenţii bursieri. O bursã poate fi datã unui singur student şi un student poate primi o singurã bursã.

Legãtura “ unu la mulţi “ (1 n) . Un exemplu de acest tip îl constituie legãtura dintre student şi grupã. Un student poate face parte dintr-o singurã grupã şi o grupã are mai mulţi studenţi.

Fig. 7. Legãtura unu la mulţi

Legãtura de “ mulţi la mulţi “. Relaţia dintre cursurile oblgatorii audiate de o serie se studenţi şi studenţii seriei este de acest tip.

32

GRUPA

STUDENT1 STUDENT2 STUDENTn

BURSE

STUDENTI

Page 33: Curs Baze de Date (Prof. Ioan Rusu)

Fig.8. Legãtura mulţi la mulţi

2. Operatorii care acţioneazã asupra bazelor de date pot fi de citire, memorare,modificare,ştergere, inserare etc.

3. Reguli de integritate a bazelor de date pot fi neaacceptarea modificãrii sau înscrierii valorii asociate caracteristicii unui element dacã nu se cunoaşte valoarea cheii lui sau alte restricţii.

Modelul ierarhic1.8.1 Modelul de date ierarhic

Acest model este primul model care a stat la baza realizării SGBD.

Modelul ierarhic foloseşte două forme de structurare a datelor tipurile de înregistrări, pentru reprezentarea tipurilor de entităţi şi legăturile expplicite pentru reprezentarea relaţiilor între mulţimi de entităţi.

Diagrama structurii de date este un graf orientat reprezentînd tipuri de entităţi şi legături funcţionale între acestea. Nodurile grafului corespund tipurilor de entităţi. Fiecare arc al grafului reprezintă o legătură funcţională între tipurile de entităţi de la capetele arcului. Sinusul funcţionalităţii este opus sensului arcului. Instanţierile tipului de înregistrare din extremitatea arcului determină funcţional instanţierile tipului de entitate din originea acestuia. În sens invers de la tipul de entitate din originea arcului spre cea din extremitate corespunde o legătură de tip funcţional cu o relaţie de tip 1:N (în particular 1:1) între mulţimile de entităţi corespunzătoare.

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 restricţia unui arbore ordonat. Adică, nodurile sunt organizate pe nivele, fiecare nod are o singură legătură cu un nod de pe nivelul superior (excluzînd rădăcina) numit nodul tată şi un număr arbitrar de lşegături către nomuri de pe nivelul imediat inferior (numite noduri fii), iar poziţia nodurilor avînd acelaşi părinte este semnificativă. Sensul legăturilor funcţionale este întotdeauna de la nodul tată către nodurile fiu. O diagramă a structurii de date care satisface aceste restruicţii portă numele de arbore de definiţie ierarhic sau simplu arbore de definiţie. Un arbore de definiţie este intensiunea unei baze de date ierarhice.

Exemplu:Structura unui arbore de definiţie ierarhic pentru o bază de date ierarhice care conţine informaţii referitoare la facultăţi este dat în figură

33

CURS1CURS2CURS N

STUDENT1 STUDENT2STUDENT M

Page 34: Curs Baze de Date (Prof. Ioan Rusu)

Tipurile de înregistrări care reprezintă entităţi din arborele din figuri sunt definite astfel:FACULTATE (Cod, Nume, Adresă)PERSONAL (Nume, Funcţie, Salariu)PROFESOR (Nume, Funcţie, Disciplina)SALA (Număr, Adresă, Capacitate)STUDENT (Nume, Încadrare, Sit_Şcolară, An, Sex)Extensiunea unui arbore de definiţie deci a unei baze de date de tip ierarhic constă din instanţieri ale tipurilor de înregistrări corespunzătoare tipurilor de entităţi şi din legăturile dintre acestea. Extensiunea de tip înregsitrare poate fi reprezentată sub forma unui atbel. În tabele pot fi duplicate deci pot fi doi instanţieri identici ai aceluiaşi tip de entitate.

34

Page 35: Curs Baze de Date (Prof. Ioan Rusu)

35

Page 36: Curs Baze de Date (Prof. Ioan Rusu)

Descrierea bazei de date de tip ierarhic, folosind un LDD, presupune definrea celor trei elemente esenţiale din sturctura acesteia:- arborele de definiţie ierarhic (nod rădăcină şi legăturile tată - fiu);- tipuri de înregistrări (nodurile arborelui);- cîmpurile din acdrul înregistrărilor (tipul şi dimensiunea);Descrierea prin LDD este:TREE Facultăţi

RECORD Facultate ROOT Codf INTEGER, NUME CHAR (15), ADRESA CHAR (20)

RECORD personal PARENT = FacultateNUME CHAR (15),FUNCŢIE CHAR (10),SALAR REAL

RECORD profesori PARENR = Facultate NUME CHAR (15), FUNCŢIE CHAR (10), DISCIPLINA CHAR (20)

RECORD SALA PARENT = FacultateNUMĂR integerADRESA 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 instanţierilor corespunzătoare studenţilor IONESCU şi LUPU. Aceşti instanţieri sunt legaţi cu instanţieri diferiţi ale entităţilor profesor.

Modelul ierarhic dfoloseşte reprezentarea relaţiilor între entităţi prin legături funcţionale explicite de tipul tată - fiu, ceea ce face ca relaţiile de tipul 1:1 şi 1:N să fie convenabil reprezentate.

Relaţia dintre facultate şi profesori este o relaţie de 1:N dacă fiecare profesor este angajat al unei facultăţi. În rădăcină avem o instanţiere a entităţii Facultate şi un număr de instanţieri ale entităţii Profesori ca descendenţi.Exemplu:

01 - Electronică - Armata poporuluiVASILE - AS - MNMITEA - conf - BD

02 - AutomaticăTEOTOI - S.l. - EI

Pot apărea legături de tipul M:N de exemplu între entitatea profesor şi studenţi. Deoarece un profesor predă la mai mulţi studenţi şi un student studiază la mai mulţi profesori.Exemplu:

VASILE - AS - MN

36

Page 37: Curs Baze de Date (Prof. Ioan Rusu)

IONESCU - ZI - B - 1 - M LUPU - ZI - FB - 2 - M MITEA - conf - MF IONESCU - ZI - B - 1 - M LUPU - ZI - FB - 2 - M PANĂ - ZI - B - 3 - MRelaţiile de tip M:N prin modelul ierarhic introduce o mare redundanţă în

respectarea datelor. Necesitatea introducerii duplicatelor este o consecinţă a relaţiilor între înregistrări şi anume orice instanţiere a unui tip de înregistrare fiu să fie legată cu o singură instanţiere a unui tip de înregistrare tată.

Înregistrările:1. Cine sunt studenţii care lucrează cu asistentul VASILE? Răspunsul este uşor, explorîndu-se subarborele modului VASILE.2. Cine sunt profesorii cu care lucrează IONESCU? Răspunsul este mai dificil, deoarece trebuie explorate toţi subarborii profesorilor şi reţinerea instanţierilor din nodurile rădăcină ale acelor subarbori care conţin pe IONESCU.Anomalia de adăugare - nu pot fi adăugate date, referotoare la un student pînă nu se cunoaşte un profesor al acestuia.Anomalia de ştergere. Ştergerea unui nod dice la ştergerea tuturor descendenţilor săi. Ştergerea numelui unui profesor duce la ştergerea datelor studenţilor care au lucrat cu el.Anomalia de actualizare. Atunci cînd se pune modificarea unui atribut al unei entităţi trebuie explorată întreaga bază de date pentru a depista apariţiile entităţii şi a-i modifica atributul.Exemplu bursier pentru un student. Dacă nu se exploatează întreaga BD se pot găsi înregistrări în care studentul apare nebursier. Modelul ierarhic nu prezintă o flexibilittae nu are în structurarea datelor, fiind adecvat modelării doar a relaţiilor 1:N. Modelul limitează sever gama interogărilor care pot fi adresate BD. Avantajul modelului este că este simplu, uţor de înţeles şi are un nuăr de operatori de maniăpulare redus şi poste fi implementat eficient chiar în cazul unor operaţii de memorare cu acces strict secvenţial (benzi magnetice).

1.8.2. Modelul de tip reţeaModelul de tip reţea se bazează pe tabele şi grafuri corespunzător celor duoă

forme de structurare a datelor folosite: tipul de înregistrare şi legăturile explicite. Nodurile corespund tipurilor de înregistrări date sub formă de tabele, iar arcele grafului corespund relaţiilor dintre mulţimi de entităţi şi sunt reprezentate sub formp de legături între tabele.

Intensiunea sau modelul coceptual al bazei de date de tip reţea este reprezentată printr-o diagramă a structurii de date care după cum s-a arătat şi la cel ierarhic, este un graf ale cărui noduri reprezintă legături funcţionale între acestea. Sensul arcelor este invers relaţiei de funcţionalitate. Un anumit tip de entităţi poate fi legat la mai multe entităţi părinte şi chiar prin mai multe arce la aceeaşi entitate de tip părinte. Aici arcele sunt marcate şi se numesc tip de set şi reprezintă o legătură logică între două tipuri de înregistrări şi PROPRIETAR ŞI MEMBRU. Arcul este orientat de la PROPRIETAR LA MEMBRU. Numele tipului de set este eticheta arcului. Tipul funcţionalităţii este de la tipul mebru la tipul proprietar. Un tip set repreintă legăturile 1:1 sau 1:N dar nu pentru legăturile M:N.Exemplu:BD Facultăţi

37

Page 38: Curs Baze de Date (Prof. Ioan Rusu)

Fig. Model conceptual al BD de tip reţea.

Tipurile de înregistrări:Facultate (cod, Nume, Adresă),Personal (Nume, funcţie, Salar),Profesor (Nume, funcţie, Disciplină),Sala (Număr, Adresă, Capacitate),Notă (Not),Student (Nume, încadrare, Sit_scolară, An, Sex)Extensiunea unei diagrame a structurii de date pentru o BD de tip reţea constă în instanţieri de tip înregistrări şi instanţieri de tip set. Extensiunea de tip înregistrare este un tabel şi în el sunt permise duplicatele, iar înregistrările pot fi ordonate.Extensiunea unui tip de set poate fi reprezentată ca o colecţie de arce între tabele, reprezentînd tipul de înregistrare proprietar şi tipul de înregistrare membru. Un set este reprezentarea unui legături funcţionale de tip 1:1 sau 1: N între o înregistrare de tip proprietar şi una sau mai multe de tip membru.Proprietăţile seturilor1. Fiecare tip de set are un tip de înregistrare proprietar.2. Fiecare instanţiere a unui tip de proprietar este proprietarul unui set. Un set poate să nu includă înregistrări membru.3. fiecare tip de set include cel puţin 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 aceluiaşi tip de set.5. Nici o instanţiere de înregistrare nu poate participa la mai mult de o instanţiere a unui tip de set.

38

Page 39: Curs Baze de Date (Prof. Ioan Rusu)

Figura Extensiunea bazei de date de tip reţea

39

Page 40: Curs Baze de Date (Prof. Ioan Rusu)

Implementarea seturilor este realizată în majoritatea sistemelor prin lanţuri de pointeri deşi propunerile (DBTG Data Base Task Group) nu exclud reprezentarea cum ar fi matricea de pointeri.

Seturile implementate cu lanţuri de pointeri se prezintă sub forma unor liste circulare avînd cap de listă o înregistrare a tipului proprietar. Pentru înlănţuirea înregistrărilor într-un set adminstrator bazei de date (ABD) are la dispoziţie folosirea mai multor tipuri de pointeri:

- pointeri de tip NEXT - pentru înlănţuirea simplă înainte a înregistrărilor, prezenţa acestor pointeri este obligatorie în orice set.

- pointeri de tip PRIOR - pentru înlănţuirea înapoi a înregistrărilor, pointer opţional.

- pointer de tip OWNER - leagă o înregsitrare de tip membru cu proprietarul setului: pointer opţional.

Cele trei tipuri de pointeri se pot combina rezultînd mai multe structuri posibile pentru reprezentarea seturilor.

Structura cu pointeri NextEste structura cea mai simplă şi economică. Permite accesul secvenţial

unidirecţional la membrii setului pornind de la proprietarul acestuia. Dezavantajul este că la ştergerea unui membru Mk pentru actualizarea lanţului de legături este necesar să accesăm membrul Mk-1, ceea ce în lipsa pointerilor de tip PRIOR se poate realiza numai prin parcurgerea lanţului PROPRIETAR - membru Mk-1 care poate fi costisitoare pentru k - mare.

Figura Structura cu pointeri Next.Structura cu pointeri Next şi PriorEste o listă circulară bidirecţională care permite accesul înainte şi înapoi la membrii setului. Deşi implică consum mare de memorie şi costuri suplimentare pentru actualizarea pointerilor, structura este utilă cînd sunt multe ştergeri, deoarece permite accesul direct de la Mk-1 la Mk cel care se şterge prin legătura PRIOR Mk la Mk-1.

Figura Structura cu pointeri Next şi Prior.

Structura cu pointeri Next şi OwnerSe utilizează cînd este necesară regăsirea directă a proprietarului pornind de la membrii săi.

Figura structura cu pointeri Next şi Owner.

40

Page 41: Curs Baze de Date (Prof. Ioan Rusu)

Structura cu pointeri Next, Prior şi OwnerEste cea mai complicată structură şi implică cele mai ridicate costuri. Trebuie o justificare pentru utilizatori.

Figura Structura cu pointeri Next, Prior şi Owner.O descriere minimală a strcuturii de baze de date de tip reţea implică descrierea tipurilor de înregistrări (Nume, Numele cîmpului, Tipul, Dimensiunea cîmpului) ş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 opţiuni cum ar fi: modul de acces la înregistrări, structurile folosite pentru reprezentarea seturilor, ordonarea membrilor etc.Exemplu:

RECORD NAME IS FACULTATECODF TYPE IS FIXED 2NUME TYPE IS CHARACTER 15ADRESA TYPE IS CHARACTER 20

RECORD NAME IS PERSONALNUME TYPE IS CHARACTER 15FUNCŢIE TYPE IS CHARACTER 10SALAR TYPE IS FIXED 5

RECORD NAME IS PROFESORINUME TYPE IS CHARACTER 15FUNCŢIE TYPE IS CHARACTER 10DISCIPLINA TYPE IS CHARACTER 20

RECORD NAME IS SALANUMĂR TYPE IS CHARACTER 20CAPACITATE TYPE FIXED 3

RECORD NAME IS NOTENOTA TYPE IS FIXED 2

RECORD NAME IS STUDENTNUME TYPE IS CHARACTER 15ÎNCADRARE TYPE IS CHARACTER 5SIT SCOLARĂ TYPE IS CHARACTER 2AN TYPE IS FIXED 1SEX TYPE IS CHARACTER 1

SET NAME IS ANGAJAŢIOWNER IS FACULTATEMEMBER IS PROFESORI

SET NAME IS CADREOWNER IS FACULTATEMEMBER IS PROFESORI

SET NAME IS SALIOWNER IS FACULTATEMEMBER IS SALA

SET NAME IS NOTE ACORDATE

41

Page 42: Curs Baze de Date (Prof. Ioan Rusu)

OWNER IS PROFESORMEMBER IS NOTE

SET NAME IS NOTE_PRIMITEOWNER IS STUDENŢIMEMBER 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 înregistrării 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 instanţieri ale aceluiaşi tip de set.Reprezentarea directă a legăturilor de tip M:_N între tipuri de entităţi este imposibilă. Folosind un tip de înregistrare intermediar aceste relaţii pot fi reprezentate dacă avem două tipuri de legături funcţionale.Exemplu: reprezentarea relaţiei dintre entităţile Profesor şi Student.

Figura STRUCTURA SETURILOR DINTRE TIPURILE DE ENTITĂŢI PROFESOR ŞI STUDENT

Natura funcţională a legăturilor impusă între entităţi se explică prin considerente de implementare. Dacă n-ar fi această restricţie o anumită înregistrare poate apărea ca membru la un număr de seturi care nu poate fi cunoscut la momentul respectiv (al descrierii modelului conceptual al bazei de date) şi acest număr s-ar modifica dinamic în timpul exploatării BD ceea ce duce la un număr variabil de pointeri asociaţi unei înregsitrări. O astfel de structură devine posibilă. DECI O ÎNREGISTRARE POATE SĂ APARĂ ÎN ORICÎTE SETURI DE TIPURI DIFERITE (Nr. cunoscut în momentul decrierii BD) dar numai o singură dată într-un anumit tip de set.Anomalia de adăugare Operaţia de adăugare a unui nou student este simplă. Ea nu are legături cu celelalte entităţi. Există un singur pointer de la înregistrare student la ea însăşi.Anomalia de ştergere Se poate şterge înregistrarea unui cadru didactic fără a afecta înregsitrările corespunzătoare studenţilor care au o existenţă de sine stătătoare.Anomalia de actualizarePutem modifica atributele unui student fără pericolul afectării bazei de date, deoarece fiecare student apare într-o singură înregistrare a bazei de date.Dezavantajul acestui model reţea este că are o structură apropiată de structura de memorare. Legătuirle dintre entităţi devinexplicite realizate prin pointeri a căror gestiune de manipulare este în sarcina utilizatorului. Întreaga structură de lanţuri devine vizibilă utilizatorului.1.8.3 Modelul de date relaţional

42

Page 43: Curs Baze de Date (Prof. Ioan Rusu)

a apărut tîrziu. Acest model este foarte util şi mai ales din punctul de vedere al realizării SGBD - urilor performabile. Primul model a fost propus de cercetătorul american E.F. Godd . SGBD pentru aceste modele au condus la limbaje pentru manipularea datelor de nivel înalt.Structuri de reprezentareIntensiunea unei BD relaţionale este specificată printr-o schemă relaţională care constă din una sau mai multe scheme de relaţie.Exemplu de schemă relaţionalăFacultate (Codf, Nume, Adresă),Personal (Codf, Nume, funcţie, salar),Profesor (Codf, Nume, funcşie, disciplină),Sala (Codf, Număr, Adresă, Capacitate),Student (Nume, încadrare, sit_scolară, An, Sex),Note (Nume_profesor, Nume_student, Nota)O schemă de relaţie poate fi folosită în mod direct pentru reprezentarea unui tip de entitate. Pentru reprezentarea legăturilor dintre tipurile de entităţi se utilzează două tehnici:1. Propagarea cheilor dintr-o schemă de relaţie într-alta. Această tehnică se utilizează pentru reprezentarea legăturilor de tip funcţional (relaţii de tip 1:1 şi 1:N). Legătura funcţională dintre tipuirile de entităţi Personal şi Facultate. Atributul Codf din facultatea se propagă entităţii Personal.2. Crearea unei scheme de relaţie separate prin care se reprezintă legătura dintre două tipuri de entităţi. Această tehnică se poate utiliza pentru a reprezenta orice tip de legătură inclusiv M:N.Considerînd legătura dintre entităţile Profesor şi student aceasta poate fi reprezentată printr-o schemă de relaţie separată. În cazul nostru NOTE care are ca atribute cheile celor două entităţi atributele, Nume şi rebotezate Nume_profesor şi Nume_student în schema de relaţie Note. Mai pot apărea şi alte atribute care arată legătura dintre cele două entităţi cum este în cazul nostru nota.Extensiunea unei baze de date relaţionale este reprezentată sub formă de tabele. Fiecare tabel corespunde unei scheme de relaţie din cadrul schemei relaţionale. În aceste tabele nu sunt permise duplicatele, iar ordinea liniilor este arbitrară. Un tabel corespunde unei relaţii din punct de vedere matematic şi este denumită relaţie în sensul BD. O coloană a tabelului corespunde unui atribut al unui tip de entitate şi se numeşte atribut. O linie a tabelului reprezintă o instanţiere a unui tip de entitate sau a unui tip de legătură şi se numeşte triplă. Tabelul reprezintă o mulţime de entităţi de un tip dat, fie mulţimea legăturilor existente între două sau mai multe mulţimi de entităţi.

FACULTATECodf Nume Adresa01 Electronica LEU02 Automatica Spl. Independenţei

PERSONALCodf Nume Funcţie Salariu01 IONESCU Tehnician 420 00002 POPA Secretar 450 000

SALA

43

Page 44: Curs Baze de Date (Prof. Ioan Rusu)

Codf Nume Adresa Capacitatea 02 306 Spl. Independenţei 4001 212 LEU 60

PROFESORCodf Nume Funcţia Disciplina01 VASILE Ass MN01 MITEA Conf BD

NOTENume_profesor Nume_student NotaVASILE LUPU 9VASILE PANA 7VASILE CODRU 10MITEA CODRU 7MITEA MARCU 9MITEA ILEA 10MITEA IONESCU 7

STUDENTNume Incadrare Sit_scolara An Sex Ionescu Zi B 1 MLupu Zi FB 2 MPana Zi B 3 FCodru Zi B 4 MMarcu zi B 4 M

Definirea modelului conceptual pentru o bază de date relaţională constă în specificarea fiecărei scheme de relaţie din cadrul schemei relaţionale. Aceasta se face cu LDD. LDD pe lîngă definirea relaţiilor include şi facilităţi pentru definirea vederilor şi a indecşilor, pentru stabilirea de constrîngeri asupra datelor pentru specificarea cheilor primare, etc. În majoritatea sistemelor relaţioanle LDD este integrat în modulul software care implementează LMD. Acest lucru s-a realizat datorită faptului că multe funcţiuni ale LDD fac apel la facilităţile de formulare a interogărilor din LDD. În acest mod există un singur modul LDD - LMD şi o singură interfaţă utilizator pentru ambele funcţiuni.

Descrierea Bd prin LDD din SGBD relaţional System R Comanda SQL pentru definirea relaţiilor este CRATE TABLE şi permite specificarea completă a unei scheme de relaţie.

CREATE TABLE FacultateCodf 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

44

Page 45: Curs Baze de Date (Prof. Ioan Rusu)

(Nume CHAR (15) NOT NULL,INCADRARE CHAR (2),SITUAŢIE_ 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 corespunzător trebuie să aibă o valoare specifică pentru acest atribut. Această specificare este necesară pentru acele atribute care participă la identificarea unică a tuplelor unei relaţii (ex: fac parte dintr-o cheie primară.)

Acest model este simplu şi se bazeazã pe structuri de reprezentare arborescente . Are o rãdãcinã şi fiecare nod din arbore care nu este rãdãcinã sau nod final are un singur nod superior şi mai multe noduri inferioare, deci legãturi de tipul 11 respectiv 1m.

Modul ierarhic pune la dispoziţie douã structuri: tipuri de înregistrãri şi ierarhia. Datoritã acestor structuri modelul oferã urmãtorii 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 restricţiile: nu se pot însera noi realizãri ale unei înregistrãri subordonate dacã nu sunt cunoscuţi superiorii şi prin ştergerea unei realizãri rãdãcinã se şterg automat toate înregistrãrile subordonate.

Modelul reţea

Acest model este asemãnãtor cu cel ierarhic cu deosebirea cã fiecare inferior poate avea mai mulţi superiori, deci avem legãturi de tipul m la n. Aici avem douã structuri : tipul de înregistrãri dau atributele unei entitãţi şi tipul de set care dã legãturile dinte tipurile de înregistrare.

Actualizãrile sunt adãugarea,ştergerea,modificarea care se pot opera atât în tipurile înregistrãrilor logice cât şi în legãturi. Interogarea se poate referi la atributele unui singur tip de înregistrãri logice ,legãturile dintre douã tipuri de înregistrãri sau mai multe.

Modelul relaţional

Acest model are la bazã teoria matematicã a relaţiilor. Are o singurã structurã de date : relaţia (tabelul), o submulţime a produsului cartezian al unor domenii (domeniul fiind o mulţime de valori a entitãţilor). În concluzie, un astfel de modelpoate fi privit ca o mulţime de tabele obţinute prin metoda normalizãrii. Normalizarea pleacã de la o mulţime de atribute (câmpuri de date) şi o mulţime de dependenţe funcţionale dintre atribute care conduc la o schemã conceptualã a modelului relaţional într-o formã normalizatã fãrã restricţii de actualizãri.

1.5. BAZE DE DATE

45

Page 46: Curs Baze de Date (Prof. Ioan Rusu)

Utilizând calculatorul se pot stoca pe perioade mari de timp informaţii despre diferite elemente care intervin într-un proces şi diferite relaţii între ele, care pot fi utilizate în orice moment sub forma bazelor de date.

Definiţia 1. Se numeşte bazã de date (BD) un sistem de colecţii de date între care existã o interdependenţã logicã multiplã, potrivit unor relaţii prestabilite cu ocazia descierii conceptuale, sistemul de colecţii de date putând fi exploatat de mai mulţi utilizatori în viziuni diferite.

Putem spune cã bazele de date reprezintã o structurã deoarece este formatã dintr-o mulţime de date (informaţii) , cu relaţii logice şi operaţii de prelucrare. In aceastã mulţime se relizeazã o simplificare prin eliminarea informaţiilor redundante, astfel cã mai multe fişiere pot fi privite în ansamblu realizându-se în acest mod o integrarea a datelor. Accesul diferitelor persoane, la aceleaşi baze de date indiferent de locul unde sunt situate, se face simultan.

Datele referitoare la totalitatea circuitelor integrate dintr-o magazie, datele studenţilor unei facultãţi, datele angajaţilor dintr-un fişet, fiecare dintre ele reprezintã o bazã de date. Creerea acestor baze de date, stocarea, prelucrarea lor şi obţinerea de informaţii asupra lor se realizeazã cu ajutorul sistemului de gestiune a bazelor de date.

Definiţia 2. Se numeşte sistem de gestiune a bazelor de date (SGBD), sistemul de programe care permite construirea unor baze de date, introducerea informaţiilor în bazele de date şi dezvoltarea de aplicaţii privind bazele de date.

Cu ajutorul SGBD-ului se realizeazã interfaţa utilizator -sistem de operare, prin care utilizatorul cu un limbaj de nivel înalt obţine informaţii asupra bazelor de date.

1.8 MODELUL DE DATE1.8.1 Modelul de date ierarhic

Acest model este primul model care a stat la baza realizării SGBD.Modelul ierarhic foloseşte două forme de structurare a datelor tipurile de

înregistrări, pentru reprezentarea tipurilor de entităţi şi legăturile expplicite pentru reprezentarea relaţiilor între mulţimi de entităţi.

Diagrama structurii de date este un graf orientat reprezentînd tipuri de entităţi şi legături funcţionale între acestea. Nodurile grafului corespund tipurilor de entităţi. Fiecare arc al grafului reprezintă o legătură funcţională între tipurile de entităţi de la capetele arcului. Sinusul funcţionalităţii este opus sensului arcului. Instanţierile tipului de înregistrare din extremitatea arcului determină funcţional instanţierile tipului de entitate din originea acestuia. În sens invers de la tipul de entitate din originea arcului spre cea din extremitate corespunde o legătură de tip funcţional cu o relaţie de tip 1:N (în particular 1:1) între mulţimile de entităţi corespunzătoare.

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 restricţia unui arbore ordonat. Adică, nodurile sunt organizate pe nivele, fiecare nod are o singură legătură cu un nod de pe nivelul superior (excluzînd rădăcina) numit nodul tată şi un număr arbitrar de lşegături către nomuri de pe nivelul imediat inferior (numite noduri fii), iar poziţia nodurilor avînd acelaşi părinte este semnificativă. Sensul legăturilor funcţionale este întotdeauna de la nodul tată către nodurile fiu. O diagramă a structurii de date care satisface aceste restruicţii portă numele de arbore de definiţie ierarhic sau simplu arbore de definiţie. Un arbore de definiţie este intensiunea unei baze de date ierarhice.

Exemplu:Structura unui arbore de definiţie ierarhic pentru o bază de date ierarhice care conţine informaţii referitoare la facultăţi este dat în figură

46

Page 47: Curs Baze de Date (Prof. Ioan Rusu)

Tipurile de înregistrări care reprezintă entităţi din arborele din figuri sunt definite astfel:FACULTATE (Cod, Nume, Adresă)PERSONAL (Nume, Funcţie, Salariu)PROFESOR (Nume, Funcţie, Disciplina)SALA (Număr, Adresă, Capacitate)STUDENT (Nume, Încadrare, Sit_Şcolară, An, Sex)Extensiunea unui arbore de definiţie deci a unei baze de date de tip ierarhic constă din instanţieri ale tipurilor de înregistrări corespunzătoare tipurilor de entităţi şi din legăturile dintre acestea. Extensiunea de tip înregsitrare poate fi reprezentată sub forma unui atbel. În tabele pot fi duplicate deci pot fi doi instanţieri identici ai aceluiaşi tip de entitate.

47

Page 48: Curs Baze de Date (Prof. Ioan Rusu)

48

Page 49: Curs Baze de Date (Prof. Ioan Rusu)

Descrierea bazei de date de tip ierarhic, folosind un LDD, presupune definrea celor trei elemente esenţiale din sturctura acesteia:- arborele de definiţie ierarhic (nod rădăcină şi legăturile tată - fiu);- tipuri de înregistrări (nodurile arborelui);- cîmpurile din acdrul înregistrărilor (tipul şi dimensiunea);Descrierea prin LDD este:TREE Facultăţi

RECORD Facultate ROOT Codf INTEGER, NUME CHAR (15), ADRESA CHAR (20)

RECORD personal PARENT = FacultateNUME CHAR (15),FUNCŢIE CHAR (10),SALAR REAL

RECORD profesori PARENR = Facultate NUME CHAR (15), FUNCŢIE CHAR (10), DISCIPLINA CHAR (20)

RECORD SALA PARENT = FacultateNUMĂR integerADRESA 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 instanţierilor corespunzătoare studenţilor IONESCU şi LUPU. Aceşti instanţieri sunt legaţi cu instanţieri diferiţi ale entităţilor profesor.

Modelul ierarhic dfoloseşte reprezentarea relaţiilor între entităţi prin legături funcţionale explicite de tipul tată - fiu, ceea ce face ca relaţiile de tipul 1:1 şi 1:N să fie convenabil reprezentate.

Relaţia dintre facultate şi profesori este o relaţie de 1:N dacă fiecare profesor este angajat al unei facultăţi. În rădăcină avem o instanţiere a entităţii Facultate şi un număr de instanţieri ale entităţii Profesori ca descendenţi.Exemplu:

01 - Electronică - Armata poporuluiVASILE - AS - MNMITEA - conf - BD

02 - AutomaticăTEOTOI - S.l. - EI

Pot apărea legături de tipul M:N de exemplu între entitatea profesor şi studenţi. Deoarece un profesor predă la mai mulţi studenţi şi un student studiază la mai mulţi profesori.Exemplu:

VASILE - AS - MN

49

Page 50: Curs Baze de Date (Prof. Ioan Rusu)

IONESCU - ZI - B - 1 - M LUPU - ZI - FB - 2 - M MITEA - conf - MF IONESCU - ZI - B - 1 - M LUPU - ZI - FB - 2 - M PANĂ - ZI - B - 3 - MRelaţiile de tip M:N prin modelul ierarhic introduce o mare redundanţă în

respectarea datelor. Necesitatea introducerii duplicatelor este o consecinţă a relaţiilor între înregistrări şi anume orice instanţiere a unui tip de înregistrare fiu să fie legată cu o singură instanţiere a unui tip de înregistrare tată.

Înregistrările:1. Cine sunt studenţii care lucrează cu asistentul VASILE? Răspunsul este uşor, explorîndu-se subarborele modului VASILE.2. Cine sunt profesorii cu care lucrează IONESCU? Răspunsul este mai dificil, deoarece trebuie explorate toţi subarborii profesorilor şi reţinerea instanţierilor din nodurile rădăcină ale acelor subarbori care conţin pe IONESCU.Anomalia de adăugare - nu pot fi adăugate date, referotoare la un student pînă nu se cunoaşte un profesor al acestuia.Anomalia de ştergere. Ştergerea unui nod dice la ştergerea tuturor descendenţilor săi. Ştergerea numelui unui profesor duce la ştergerea datelor studenţilor care au lucrat cu el.Anomalia de actualizare. Atunci cînd se pune modificarea unui atribut al unei entităţi trebuie explorată întreaga bază de date pentru a depista apariţiile entităţii şi a-i modifica atributul.Exemplu bursier pentru un student. Dacă nu se exploatează întreaga BD se pot găsi înregistrări în care studentul apare nebursier. Modelul ierarhic nu prezintă o flexibilittae nu are în structurarea datelor, fiind adecvat modelării doar a relaţiilor 1:N. Modelul limitează sever gama interogărilor care pot fi adresate BD. Avantajul modelului este că este simplu, uţor de înţeles şi are un nuăr de operatori de maniăpulare redus şi poste fi implementat eficient chiar în cazul unor operaţii de memorare cu acces strict secvenţial (benzi magnetice).

1.8.2. Modelul de tip reţeaModelul de tip reţea se bazează pe tabele şi grafuri corespunzător celor duoă

forme de structurare a datelor folosite: tipul de înregistrare şi legăturile explicite. Nodurile corespund tipurilor de înregistrări date sub formă de tabele, iar arcele grafului corespund relaţiilor dintre mulţimi de entităţi şi sunt reprezentate sub formp de legături între tabele.

Intensiunea sau modelul coceptual al bazei de date de tip reţea este reprezentată printr-o diagramă a structurii de date care după cum s-a arătat şi la cel ierarhic, este un graf ale cărui noduri reprezintă legături funcţionale între acestea. Sensul arcelor este invers relaţiei de funcţionalitate. Un anumit tip de entităţi poate fi legat la mai multe entităţi părinte şi chiar prin mai multe arce la aceeaşi entitate de tip părinte. Aici arcele sunt marcate şi se numesc tip de set şi reprezintă o legătură logică între două tipuri de înregistrări şi PROPRIETAR ŞI MEMBRU. Arcul este orientat de la PROPRIETAR LA MEMBRU. Numele tipului de set este eticheta arcului. Tipul funcţionalităţii este de la tipul mebru la tipul proprietar. Un tip set repreintă legăturile 1:1 sau 1:N dar nu pentru legăturile M:N.Exemplu:BD Facultăţi

50

Page 51: Curs Baze de Date (Prof. Ioan Rusu)

Fig. Model conceptual al BD de tip reţea.

Tipurile de înregistrări:Facultate (cod, Nume, Adresă),Personal (Nume, funcţie, Salar),Profesor (Nume, funcţie, Disciplină),Sala (Număr, Adresă, Capacitate),Notă (Not),Student (Nume, încadrare, Sit_scolară, An, Sex)Extensiunea unei diagrame a structurii de date pentru o BD de tip reţea constă în instanţieri de tip înregistrări şi instanţieri de tip set. Extensiunea de tip înregistrare este un tabel şi în el sunt permise duplicatele, iar înregistrările pot fi ordonate.Extensiunea unui tip de set poate fi reprezentată ca o colecţie de arce între tabele, reprezentînd tipul de înregistrare proprietar şi tipul de înregistrare membru. Un set este reprezentarea unui legături funcţionale de tip 1:1 sau 1: N între o înregistrare de tip proprietar şi una sau mai multe de tip membru.Proprietăţile seturilor1. Fiecare tip de set are un tip de înregistrare proprietar.2. Fiecare instanţiere a unui tip de proprietar este proprietarul unui set. Un set poate să nu includă înregistrări membru.3. fiecare tip de set include cel puţin 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 aceluiaşi tip de set.5. Nici o instanţiere de înregistrare nu poate participa la mai mult de o instanţiere a unui tip de set.

51

Page 52: Curs Baze de Date (Prof. Ioan Rusu)

Figura Extensiunea bazei de date de tip reţea

52

Page 53: Curs Baze de Date (Prof. Ioan Rusu)

Implementarea seturilor este realizată în majoritatea sistemelor prin lanţuri de pointeri deşi propunerile (DBTG Data Base Task Group) nu exclud reprezentarea cum ar fi matricea de pointeri.

Seturile implementate cu lanţuri de pointeri se prezintă sub forma unor liste circulare avînd cap de listă o înregistrare a tipului proprietar. Pentru înlănţuirea înregistrărilor într-un set adminstrator bazei de date (ABD) are la dispoziţie folosirea mai multor tipuri de pointeri:

- pointeri de tip NEXT - pentru înlănţuirea simplă înainte a înregistrărilor, prezenţa acestor pointeri este obligatorie în orice set.

- pointeri de tip PRIOR - pentru înlănţuirea înapoi a înregistrărilor, pointer opţional.

- pointer de tip OWNER - leagă o înregsitrare de tip membru cu proprietarul setului: pointer opţional.

Cele trei tipuri de pointeri se pot combina rezultînd mai multe structuri posibile pentru reprezentarea seturilor.

Structura cu pointeri NextEste structura cea mai simplă şi economică. Permite accesul secvenţial

unidirecţional la membrii setului pornind de la proprietarul acestuia. Dezavantajul este că la ştergerea unui membru Mk pentru actualizarea lanţului de legături este necesar să accesăm membrul Mk-1, ceea ce în lipsa pointerilor de tip PRIOR se poate realiza numai prin parcurgerea lanţului PROPRIETAR - membru Mk-1 care poate fi costisitoare pentru k - mare.

Figura Structura cu pointeri Next.Structura cu pointeri Next şi PriorEste o listă circulară bidirecţională care permite accesul înainte şi înapoi la membrii setului. Deşi implică consum mare de memorie şi costuri suplimentare pentru actualizarea pointerilor, structura este utilă cînd sunt multe ştergeri, deoarece permite accesul direct de la Mk-1 la Mk cel care se şterge prin legătura PRIOR Mk la Mk-1.

Figura Structura cu pointeri Next şi Prior.Structura cu pointeri Next şi OwnerSe utilizează cînd este necesară regăsirea directă a proprietarului pornind de la membrii săi.

Page 54: Curs Baze de Date (Prof. Ioan Rusu)

Figura structura cu pointeri Next şi Owner.Structura cu pointeri Next, Prior şi OwnerEste cea mai complicată structură şi implică cele mai ridicate costuri. Trebuie o justificare pentru utilizatori.

Figura Structura cu pointeri Next, Prior şi Owner.O descriere minimală a strcuturii de baze de date de tip reţea implică descrierea tipurilor de înregistrări (Nume, Numele cîmpului, Tipul, Dimensiunea cîmpului) ş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 opţiuni cum ar fi: modul de acces la înregistrări, structurile folosite pentru reprezentarea seturilor, ordonarea membrilor etc.Exemplu:

RECORD NAME IS FACULTATECODF TYPE IS FIXED 2NUME TYPE IS CHARACTER 15ADRESA TYPE IS CHARACTER 20

RECORD NAME IS PERSONALNUME TYPE IS CHARACTER 15FUNCŢIE TYPE IS CHARACTER 10SALAR TYPE IS FIXED 5

RECORD NAME IS PROFESORINUME TYPE IS CHARACTER 15FUNCŢIE TYPE IS CHARACTER 10DISCIPLINA TYPE IS CHARACTER 20

RECORD NAME IS SALANUMĂR TYPE IS CHARACTER 20CAPACITATE TYPE FIXED 3

RECORD NAME IS NOTENOTA TYPE IS FIXED 2

RECORD NAME IS STUDENTNUME TYPE IS CHARACTER 15ÎNCADRARE TYPE IS CHARACTER 5SIT SCOLARĂ TYPE IS CHARACTER 2AN TYPE IS FIXED 1SEX TYPE IS CHARACTER 1

SET NAME IS ANGAJAŢIOWNER IS FACULTATEMEMBER IS PROFESORI

SET NAME IS CADREOWNER IS FACULTATE

54

Page 55: Curs Baze de Date (Prof. Ioan Rusu)

MEMBER IS PROFESORISET NAME IS SALI

OWNER IS FACULTATEMEMBER IS SALA

SET NAME IS NOTE ACORDATEOWNER IS PROFESORMEMBER IS NOTE

SET NAME IS NOTE_PRIMITEOWNER IS STUDENŢIMEMBER 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 înregistrării 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 instanţieri ale aceluiaşi tip de set.Reprezentarea directă a legăturilor de tip M:_N între tipuri de entităţi este imposibilă. Folosind un tip de înregistrare intermediar aceste relaţii pot fi reprezentate dacă avem două tipuri de legături funcţionale.Exemplu: reprezentarea relaţiei dintre entităţile Profesor şi Student.

Figura STRUCTURA SETURILOR DINTRE TIPURILE DE ENTITĂŢI PROFESOR ŞI STUDENT

Natura funcţională a legăturilor impusă între entităţi se explică prin considerente de implementare. Dacă n-ar fi această restricţie o anumită înregistrare poate apărea ca membru la un număr de seturi care nu poate fi cunoscut la momentul respectiv (al descrierii modelului conceptual al bazei de date) şi acest număr s-ar modifica dinamic în timpul exploatării BD ceea ce duce la un număr variabil de pointeri asociaţi unei înregsitrări. O astfel de structură devine posibilă. DECI O ÎNREGISTRARE POATE SĂ APARĂ ÎN ORICÎTE SETURI DE TIPURI DIFERITE (Nr. cunoscut în momentul decrierii BD) dar numai o singură dată într-un anumit tip de set.Anomalia de adăugare Operaţia de adăugare a unui nou student este simplă. Ea nu are legături cu celelalte entităţi. Există un singur pointer de la înregistrare student la ea însăşi.Anomalia de ştergere Se poate şterge înregistrarea unui cadru didactic fără a afecta înregsitrările corespunzătoare studenţilor care au o existenţă de sine stătătoare.

55

Page 56: Curs Baze de Date (Prof. Ioan Rusu)

Anomalia de actualizarePutem modifica atributele unui student fără pericolul afectării bazei de date, deoarece fiecare student apare într-o singură înregistrare a bazei de date.Dezavantajul acestui model reţea este că are o structură apropiată de structura de memorare. Legătuirle dintre entităţi devinexplicite realizate prin pointeri a căror gestiune de manipulare este în sarcina utilizatorului. Întreaga structură de lanţuri devine vizibilă utilizatorului.1.8.3 Modelul de date relaţionala apărut tîrziu. Acest model este foarte util şi mai ales din punctul de vedere al realizării SGBD - urilor performabile. Primul model a fost propus de cercetătorul american E.F. Godd . SGBD pentru aceste modele au condus la limbaje pentru manipularea datelor de nivel înalt.Structuri de reprezentareIntensiunea unei BD relaţionale este specificată printr-o schemă relaţională care constă din una sau mai multe scheme de relaţie.Exemplu de schemă relaţionalăFacultate (Codf, Nume, Adresă),Personal (Codf, Nume, funcţie, salar),Profesor (Codf, Nume, funcşie, disciplină),Sala (Codf, Număr, Adresă, Capacitate),Student (Nume, încadrare, sit_scolară, An, Sex),Note (Nume_profesor, Nume_student, Nota)O schemă de relaţie poate fi folosită în mod direct pentru reprezentarea unui tip de entitate. Pentru reprezentarea legăturilor dintre tipurile de entităţi se utilzează două tehnici:1. Propagarea cheilor dintr-o schemă de relaţie într-alta. Această tehnică se utilizează pentru reprezentarea legăturilor de tip funcţional (relaţii de tip 1:1 şi 1:N). Legătura funcţională dintre tipuirile de entităţi Personal şi Facultate. Atributul Codf din facultatea se propagă entităţii Personal.2. Crearea unei scheme de relaţie separate prin care se reprezintă legătura dintre două tipuri de entităţi. Această tehnică se poate utiliza pentru a reprezenta orice tip de legătură inclusiv M:N.Considerînd legătura dintre entităţile Profesor şi student aceasta poate fi reprezentată printr-o schemă de relaţie separată. În cazul nostru NOTE care are ca atribute cheile celor două entităţi atributele, Nume şi rebotezate Nume_profesor şi Nume_student în schema de relaţie Note. Mai pot apărea şi alte atribute care arată legătura dintre cele două entităţi cum este în cazul nostru nota.Extensiunea unei baze de date relaţionale este reprezentată sub formă de tabele. Fiecare tabel corespunde unei scheme de relaţie din cadrul schemei relaţionale. În aceste tabele nu sunt permise duplicatele, iar ordinea liniilor este arbitrară. Un tabel corespunde unei relaţii din punct de vedere matematic şi este denumită relaţie în sensul BD. O coloană a tabelului corespunde unui atribut al unui tip de entitate şi se numeşte atribut. O linie a tabelului reprezintă o instanţiere a unui tip de entitate sau a unui tip de legătură şi se numeşte triplă. Tabelul reprezintă o mulţime de entităţi de un tip dat, fie mulţimea legăturilor existente între două sau mai multe mulţimi de entităţi.

56

Page 57: Curs Baze de Date (Prof. Ioan Rusu)

FACULTATECodf Nume Adresa01 Electronica LEU02 Automatica Spl. Independenţei

PERSONALCodf Nume Funcţie Salariu01 IONESCU Tehnician 420 00002 POPA Secretar 450 000

SALACodf Nume Adresa Capacitatea 02 306 Spl. Independenţei 4001 212 LEU 60

PROFESORCodf Nume Funcţia Disciplina01 VASILE Ass MN01 MITEA Conf BD

NOTENume_profesor Nume_student NotaVASILE LUPU 9VASILE PANA 7VASILE CODRU 10MITEA CODRU 7MITEA MARCU 9MITEA ILEA 10MITEA IONESCU 7

STUDENTNume Incadrare Sit_scolara An Sex Ionescu Zi B 1 MLupu Zi FB 2 MPana Zi B 3 FCodru Zi B 4 MMarcu Zi B 4 M

Definirea modelului conceptual pentru o bază de date relaţională constă în specificarea fiecărei scheme de relaţie din cadrul schemei relaţionale. Aceasta se face cu LDD. LDD pe lîngă definirea relaţiilor include şi facilităţi pentru definirea vederilor şi a indecşilor, pentru stabilirea de constrîngeri asupra datelor pentru specificarea cheilor primare, etc. În majoritatea sistemelor relaţioanle LDD este integrat în modulul software care implementează LMD. Acest lucru s-a realizat

57

Page 58: Curs Baze de Date (Prof. Ioan Rusu)

datorită faptului că multe funcţiuni ale LDD fac apel la facilităţile de formulare a interogărilor din LDD. În acest mod există un singur modul LDD - LMD şi o singură interfaţă utilizator pentru ambele funcţiuni.

Descrierea Bd prin LDD din SGBD relaţional System R Comanda SQL pentru definirea relaţiilor este CRATE TABLE şi permite specificarea completă a unei scheme de relaţie.

CREATE TABLE FacultateCodf 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),SITUAŢIE_ 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 corespunzător trebuie să aibă o valoare specifică pentru acest atribut. Această specificare este necesară pentru acele atribute care participă la identificarea unică a tuplelor unei relaţii (ex: fac parte dintr-o cheie primară.)

1.8.3.1 Modele total relaţionaleUn SGBD este total relaţional dacă îndeplineşte condiţiile de integritate:

1. Integritatea domeniului2. Integritatea entităţii sau al relaţiei3. Integritatea referinţei

şi furnizează utilizatorului un LMD cel puţin echivalent ca putere de expresie cu algebra relaţională.1. Principiul integrităţii domeniului constă în posibilitatea SGBD-ului de a verifica din punct de vedere sintactic şi semantic orice valoare din BD sau operaţie efectuată asupra acestuia folosind definiţia domeniului din care face parte. Realizarea acestui principiu face imposibilă înregsitrarea unor valori din afara domeniului corespunzător unui atribut şi efectuarea de operaţii aritmetice între valori din domenii diferite.2. Principiul integrotăţii entităţii se referă la condiţiile ipuse cheilor primare de a avea valori unice şi nenule.3. Principiul integrităţii referinţei este enunţat pentru prima dată de Codd în 1979 astfel:

58

Page 59: Curs Baze de Date (Prof. Ioan Rusu)

Definiţie: Dcaă A este o cheie primară monoatribut în relaţia R1 şi B o componentă a unei chei primare multiatribut în relaţia R2 , B fiind definită pe aceleaşi domeniu cu atributul A, atunci mulţimea valorilor lui B în R2 trebuie să fie inclusă în mulţimea 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 străină în R2 rezultă prin propagarea unei chei primare A din R1 atubnci orice valoare a lui B din R2 trebuie să se regăsească în valorile lui A din R1.

Exemplu:Pentru BD Facultate, principiul integrităţii referinţei cere ca orice valoare a atributului Codf din relaţiile Personal, profesor, săli să se regăsească printre valorile atributului Codf din facultate. Altfel ar fi personal, profesori, săli care ar aparţine altor facultăţi inexistente.Chei străine, integritate referenţialăÎn modelul relaţional legăturile dintre ce reprezintă tipuri de entităţi se realizează prin mecanismul de propagare a cheilor, ceea ce conduce la conceptul de cheie străină. Deci cheia străină este rezultatul propagării unei chei primare. O definiţie mai relaxantă pentru cheia străină este:Definiţie: Un subset, Fk, al atributelor unei relaţii R2, este o cheie străină dacă: Există o relaţie R1 (nu neapărat distinctă) avînd o cheie K; Pentru fiecare valoare a lui Fk din relaţia R2 există o valoare identică a cheii k din

relaţia R1.Deci o cheie străină poate fi rezultatul programării oricărei chei fie ea primară sau candidată.

Valoarea unei chei străine este o referinţă la tulpa a cărei cheie are o valoare identică cu cea a cheii străine. Relaţia care conţine cheia străină este numită relaţie de referinţă iar relaţia care conţine cheia din care s-a propagat se numeşte relaţie referită. Condiţia de integritate referenţială cere ca toate valoarile unei chei străine să se regăsească printre valorile cheii corespunzătoare din relaţia referită. Această condiţie introduce nişte constrîngeri între relaţii numite constrîngeri referenţiale, care se pot reprezenta prin diagrame referenţiale. Diagramele referenţiale sunt grafuri ale căror noduri reprezintă relaţii, iar arcele reprezintă contrîngeri referenţiale. Sensul arcului la diagrama de referinţă de la relaţia de referinţă la relaţia referentă. Pot exista cicluri referenţiale şi dacă ciclul are lungimea unitară relaţia de referinţă este identică cu cea referită şi avem relaţie autoreferită.

Exemple:1) Diagrama referenţială pentru relaţii FACULTATE; PROFESOR; NOTE; STUDENT este:

FACULTATE PROFESOR NOTE STUDENTArcele coincid cu sensul funcţionalităţii legăturii existente între relaţiile de la capetele arcului.2) Fie BD referitoare la o activitate comercială a unei firme reprezentat prin schema relaţională:Furnizor (condF, Nume, Oraş),

59

Page 60: Curs Baze de Date (Prof. Ioan Rusu)

Beneficiar (codB, Nume, Oraş),Produs (codP, Nume, Oraş),Oferte (codF, codP, Preţ, Cantitate),Cereri (codb, codP, Preţ, Cantitate),Tranziţii (codT, codF, codB, codP, Preţ, Cantitate)Atributele CodF, CodB, CodP, sunt chei primare în relaţiile Furnozor, beneficiar şi produs. Atributele codF, codP din relaţiile Oferte sunt chei străine şi reprezintă referinţe către atributele omonime din relaţiile furnizor şi Produs. Integritatea referenţială se exprimă prin faptul că nu există posibilitatea unei oferte fără furnizor care să facă oferta şi un produs care să fie oferit de acesta. Analog codB şi codP sunt chei străine în relaţia Cereri.

În relaţia Tranzacţii avem trei chei străine, codF, codB, codB, codP, care sunt referinţe la relaţiile Furnizor, Beneficiar şi Produs. Într-o tranzacţie este necesar să existe cele trei relaţii.

Pot exista şi alte constrîngeri referenţiale altele decît cele menţionate, acestea depind de proiectant care dă semnificaţia structurii BD. Dacă admitem că orice furnizor are o ofertă unică pentru un produs dat, atunci perechea CodfcodP este cheie în relaţia Oferte. Tranzacţia este o ofertă dacă rezultă că codFcodP este cheie străină în relaţia tranzacţie. La fel codBcodP din relaţia cereri este o cheie în această relaţie şi perechea codBcodP din tranzacţii este o cheie străină. Deci relaţia tranzacţii are cinci chei străine codF, codB, codP, codFcodP şi codBcodP.

Figura diagrama referentă pentru BD a activităţii unei firme.

3) Descendentă (Tată - fiu)Este o relaţie de descendenţă Tată - Fiu. Orice fiu are un tată unic, rezultă că orice tuplă a relaţiei Descendenţă este univoc determinată de atributul Fiu care este cheie a relaţiei. 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 străină în relaţia Descendentă şi reprezintă o referinţă la aceeaşi relaţie deci relaţia de Descendenţă este autoreferentă.Operaţii

60

Page 61: Curs Baze de Date (Prof. Ioan Rusu)

Menţinerea integrităţii referenţiale conduce la o serie de tehnici de realizare a operaţiilor de adăugare, ştergere şi actualizare în relaţiile de referinţă şi în cele referite.Relaţii de referinţăLa operaţia de adăugare a unei tulpe trebuie să ne asigurăm că valorile tuturor atributelor care fac parte dintr-o cheie străină se regăsesc printre valorile atributelor pe care le referă în relaţia referită. Altfel nu se realizează operaţia. Exemplu: La relaţia OFERTE nu poate fi adăugată o nouă ofertă dacă în relaţiile Furnizor - Produs nu există furnizorul care face ofertă şi produsul pe care - l oferă.Operaţia de ştergere. În relaţiile de referinţă se pot face ştergeri fără nici un fel de restricţii din punct de vedere al restricţiilor condiţiilor de integritate.Operaţia de actualizare în relaţiile de referinţă se poate vedea ca una de şţtergere şi una de adăugare. Rezultă o combinaţie a celor două reguli precedente.Relaţii referiteOperaţia de adăugare - se poate face fără nici un fel de restricţie din punct de vedere al condiţiilor de integritate referenţială.Operaţia de ştergere - la stingerea unei tuple dintre o relaţie referentă este posibil ca la relaţiile de referinţă să fie tuple care se referă la tupla ştearsă. Menţinerea integrităţii referenţiale a bazei de date se face prin: a) ştergerea restricţionată sau ştergerea cascadă.a) Ştergerea restricţionată - nu se acceptă ştergerea unei tuple din relaţia referită dacă ea există în cel puţin o tuplă dintr-o relaţie de referinţă.b) Ştergerea cascadată - ştergerea unei tuple dintr-o relaţie referită va fi urmată de ştergerea tuturor tuplelor din relaţiile de referinţă care fac referire la tupla ştearsă. Dacă tuplele din relaţia de referinţă sunt la rîndul lor referite la alte tuple, atunci ştergerea se propagă în cascadă.Operaţia de actualizare. Actualizarea unei chei într-o relaţie referinţă se poate face: - actualizarea restricţionată. MU se admite actualizarea valorii unui atribut din relaţia referită atîta timp cît există cel puţin o tuplă în relaţiile de referinţă care se referă la această valoare.- actualizare cascadată modificarea valorii unui atribut într-o relaţie duce la mopdificarea corespunzzătoare a tuturor tuplelor din relaţiile de referinţă care se referă la valoarea modificată. Problema integrităţii referenţiale poate fi abordată la nivelul SGBD - ului în două variante: declarativ şi procedural.

În cele mai multe SGBD relaţionale permit definirea în cadrul descrierii BD a cheilor străine care apar în relaţii şi a regulilor de menţinere a integrităţii referenţiale. Elementele specifice la definirea unei chei străine din acdrul unei relaţii sunt lista atributelor componente şi relaţia referită. La acestea se pot adăuga sub formă de opţiuni regulile de aplicat restricţionale sau cascadarea în operaţiile de ştergere şi actualizare. Aceasta este varianta declarativă.

În varianta procedurală apare posibilitatea unei tratări mai specializate de la caz la caz a constrîngerilor referenţiale avînd în vedere că opţiunile de restricţionare şi cascadare nu epuizează toate modalităţile de menţinere a integrităţii referenţiale. Acest lucru se realizează ataţînd cheilor străine nişte proceduri permanente care se activează în mod automat ori de cîte ori se execută o operaţie de ştergere sau

61

Page 62: Curs Baze de Date (Prof. Ioan Rusu)

modificare asupra unei chei străine căreia îi este ataşată procedura. Operaţiile de actualizare trebuie să conţină acelaşi principiu ori restricţioanar ori cascadat.

Fie R3 R2 R1 un lanţ de refernţe unde cheii străine din R3 îi este ataşată opţiunea de ştergere restricţionată iar cheii străine din relaţia R2 îi este ataşată opţiunea de ştergere cascadată. La comanda de ştergere a unei tuple din R1 aceasta poate duce la ştergeerea unor tuple din R2, unde avem o opţiune restricţionară în relaţia R2. Ca urmare ştergerea este revocată.

MODELUL DE DATE ENTITATE - RELAŢIE (E / R)Aceste modele sunt cunoscutze sub numele de modele extinse sau modele semantice. Cele trei modele: ierarhic, reţea, relaţional au o expresivitate limitată pentru că nu spun prea mult utilizatorului despre semnificaţia datelor din BD. Aceste modele lasă în seama utilizatorului interpretarea şi semnificaţia datelor.

Interesul pentru îmbunătăţirea semanticii modelelor de date este justificat pentru a avea Bd care să manifeste un corespondent mai inteligent în interacţiunea cu utilizatorul şi care să permită dezvolatarea unor interfeţe utilizator de nivel înalt.

Aspectul semantic este prezentat în orice model de date. Astfel, conceptele de domeniu, cheie candidată, cheie străină reprezintă aspecte semantice ale modelului relaţional. Principalul motiv pentru care modelelor date li se impun restricţii din punct de vedere semnatic este acela de a permite o implementare eficientă la nivelul structurilor bazei de date fizice. Aşa de exemplu se explică restricţia legăturilor M:N în cîte trei modele. Prin studiul modelelor de date semantice se urmăreşte depăşirea restricţiilor şi de a îngloba în model cît mai mult din semantica datelor.

Modelul E / R permite descrierea modelelor conceptuale fără restricţii din punct de vedre al eficienţei şi fără a fi preocupat de modul cum modelul său 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 entitateEntitatea este ceva care există şi se poate distinge de restul universului. Tipul de entitate este mulţimea tuturor entităţilor care sunt similare prin raportarea la anumite criterii.

Atribute şi cheiTipurile de entităţi au proprietăţi numite atribute, care asociază fiecărei entităţi o valoare dintr-un anumit domeniu de valori asociat atributului respectiv. Această submulţime de atribute poartă numele de cheie a tipului de entitate.

Dacă atributul face parte din cheia tipului de entitate atunci numele atributului este subliniat.

62

Page 63: Curs Baze de Date (Prof. Ioan Rusu)

Relaţii, tipuri de legăturăO relaţie reprezintă un tip de legătură între două sau mai multe tipuri de entităţi. Formal o relaţie R peste tipul de entităţi E1, E2, ..., En se defineşte ca o listă ordonată a acestor tipuri de entităţi. Acelaşi tip de entitate poate să apară de mai multe ori în listă. Relaţia este reprezentată printr-un avînd în interior numele asociat legăturii. Orice relaţie este conectată prin arce orientate sau nu la fiecare entitate care compun relaţia. Dacă legătura este funcţională în raport cu entitatea E1 atunci legătura este conectată cu arce orientate spre entitatea E1. În caz contrar dacă legătura este de tip nefuncţional arcul este neorientat.O relaţie R=(E1, E2, ..., En) se consideră funcţională în raport cu tipul de entitate E i

1 i n, dacă şi numai dacă pentru orice ansamblu de entităţi E1, E2, ..., En, există cel mult o entitate ei Ei care să fie în legătură cu entităţile e1, e2, ..., en. Altfel spus entităţile e1, e2, ..., en determină în mod univoc entitatea ei prin relaţia R10.1. O relaţie poate fi funcţională cu anumite tipuri de entităţi şi nefuncţională cu alte tipuri.2. Modelul E /R permite reprezentarea directă şi fără restricţii a relaţiilor de tip M la M şi în general a relaţiilor nefuncţionale de orice aritate.

Subtipuri. Orice entitate aparţine cel puţinunui tip de entitate, dar ea poate să aparţină în acelaşi timp mai multor tipuri de entităţi.Exemplu Entitatea de tipul PERSOANĂ aparţine tipului ANGAJAT şi NOTE entităţile de tipul ANGAJAT este un subtip al tipului PERSOANĂ, iar PERSOANĂ este un suoertip al tipului SNGAJAT. Entităţile tipului ANGAJAT moştenesc toate proprietăţile entităţilor tipului PERSOANĂ şi pot avea unele proprietăţi suplimentare ale acestora. Reciproca nu este adevărată. Entităţile tipului ANGAJAT participă în mod automat la toate relaţiile în care sunt implicate entităţile tipului PERSOANĂ. Fiecărei entităţi de tipul PERSOANĂ îi corespunde cel mult o entitate de tip ANGAJAT, reprezentînd aceeaşi persoană în calitatea de nagajat. O entitate a subtipului ANGAJAT nu poate exista fără entitatea corespunzătoare a tipului PERSOANĂ. La rîndul său un subtip poate avea subtipuri, rezultînd ierarhii de subtipuri.

63

Page 64: Curs Baze de Date (Prof. Ioan Rusu)

Relaţia ternară ORAR este nefuncţională în raport cu cele trei entităţi. Un anumit profesor şi un anumit student se pot întîlni în săli diferite la ore şi zile diferite, deci ORAR nefuncţional cu SALA.Un profesor şi o anumită sală poate fi locul de curs pentru mai mulţi studenţi şi un student poate avea curs în aceeaşi sală cu mai mulţi profesori la ore diferite rezultă că relaţia ORAR este nefuncţională cu entităţile PROFESOR şi STUDENT.

Relaţia ORAR este funcţională 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 mulţi studenţi. Legătura nefuncţională ORAR cu entitatea studenţi şi ORAR cu entitatea ORA nu sunt funcţionale.

64

Page 65: Curs Baze de Date (Prof. Ioan Rusu)

Un profesor la un curs este într-o anuită sală ORAR - SALĂ - funcţional. O sală şi o anumită oră au un singur profesor. Un profesor şi o sală pot fi la mai multe ore.

un profesor - un student la o anumită oră conform sunt într-o anumită sală (funcţional ORAR - SALĂ). Un profesor - un student şi o sală conform orarului pot fi la mai multe ORE. Legătură nefuncţională ORAR - ORA. Un profesor o sală şi o oră pot avea mai mulţi studenţi. Un student o sală şi o oră pot avea un singur profesor legătură funcţională ORAR - PROFESOR.

65

Page 66: Curs Baze de Date (Prof. Ioan Rusu)

Entităţi, BENEFICIAR, FURNOZOR, PRODUS cu cheile: codF, codB, codP. Pot fi trei relaţii binare. Relaţia binară FURNIZOR - BENEFICIAR nu prezintă interes. Dacă furnizorul are mai multe oferte pentru acelaşi produs atunci se poate pune o cheie pentru OFERTE, codO şi analog se poate face şi pentru cereri.Comparaţia modelelor de dateModelul ierarhic - cronologic şi primul utilizat în conducerea SGBD.- forme de structurare a datelor: înregistrări şi legături explicite- legăturile sunt restricţionate pentru a se încadra într-un arbore ordonat- are structuri fizice de reprezentare, eficiente- nu se poate aplica aceslaşi model cînd modelarea realităţii nu este ierarhică- nu are soluţie satisfăcătoare pentru reprezentarea legăturilor de tip m:n- înregistrările care nu se potrivesc structurii ierarhice sunt imposibile.2. Modelul reţea este mai general decît cel ierarhic:- structura legăturilor explicite este arbitrară şi reprezentată prin graf- restricţia la legături este să fie tip funcţional, deci nu pot fi reprezentate direct legăturile de tip M:N.

Soluţia pentru reprezentarea acestor legături este folosirea tipurilor de legătură- permite reprezentarea unor structuri complexe- orice interogare poate fi rezolvată eficient dacă s-au prevăzut pentru acestea legăturile explicite necesare.- dezavantaj că pentru aplicaţii mai complexe structurile de reprezentare devin foarte complicate- scrierea şi întreţinerea programului este dificilă şi costisitoare.Caracteristica comună a celor două modele este folosirea limbajelor navigaţionale pentru formularea interogărilor. Aceste limbaje se bazează pe utilizarea conceptului cursor care indică poziţia curentă în baza de date. Utilizatorul poate modifica poziţia

66

Page 67: Curs Baze de Date (Prof. Ioan Rusu)

cursorului, poate efectua operaţii asupra datelor de la poziţia curentă. Aceste limbaje exploatează direct legăturile explicite existente în baza dedate iar interogările presupun navigaţia cursorului pe lanţurile de legături. În mabele modele sunt permise duplicatele iar două obiecte similare pot fi distinse, obiectele avînd identitate proprie.3. Modelul relaţional este o colecţie de relaţii care reprezintă fie cîte un tip de entitate, fie o legătură în general de tip m:n între două sau mai multe tipuri de entităţi.- în relaţii nu sunt permise duplicatele, nu are principiul identităţii obiectelor- este orientat pe valoare, distincţia între două tuple fiind făcută exclusiv pe baza valorilor atributelor componente- între diferite relaţii nu există legături explicite- la interogări apare necesitatea de conexiuni între diferite relaţii. Acest lucru se realizează prin cuplarea dinamică a lor. Aceste operaţii 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 relaţional este copensată de AVANTAJELE:- simplificarea structurii BD relaţionale- lipsa legăturilor explicite; facilitează formularea interogatorului prin limbaje de nivel înalt cum este algebra relaţională sau orice limbaj echivalent, numit limbaj relaţional- caracteristic acestor limbaje obţinute sunt tot relaţii. Nu există noţiunea de cursor, se operează cu relaţiile în întregul lor- limbajele relaţionale sunt deosebit de simple şi flexibile- aceste limbaje au dus ls folosirea BD de multe categorii de utilizatori- pot fi formulate cele mai diverse înterogări- prin folosirea unui singur concept pentru reprezentarea asociaţiilor în BD relaţioanle, limbajele relaţionale au un caracter unitar şi un set mai restrîns de operatori pentru accesul la date, faţă de celelalte modele- flexibilitatea în BD relaţionale se manifestă prin cuplarea dinamică relaţiilor (deşi nu există legături explicite)- utilizatorul poate formula interogări pe care proiectantul BD nu le-a prevăzut în mod explicit-descrierea BD relaţioanle constă în dewcrierea relaţiilor (domenii, atribute, etc.) structura BD fiind foarte simplă-natura interogărilor nu influenţează structura BD

Limbaje de manipulare a datelor (LMD) relaţionalePartea esenţială o oricărei LMD este cea care formulează interogările adresate

BD. Uneori LMD este numit şi limbaj de interogare. Partea din LMD care nu sereferă la interogări este restrînsă şi se ocupă cu operaţiile deinserţie, ştergere şi modificare a tuplelor.

Limbajele de interogare pentru modelul relaţional se împart în două grupe ce au la bază formalisme abstracte numite şi limbaje abstracte utilizate pentru exprimarea interogărilor adresate BD. Aceste formalisme sunt:

1. Algebra relaţională, unde interogările sunt exprimate prin aplicarea unor operatori specializaţi asupra relaţiilor. Limbajele derivate se numesc limbaje algebrice.

67

Page 68: Curs Baze de Date (Prof. Ioan Rusu)

2. Calculul relaţional, unde interogările descriu mulţimea tuplelor rezultată prin specificarea unui predicat (condiţie) pe care aceste tuple trebuie să-l satisfacă. Funcţie de natura obiectelor primitive cu care se operează care pot fi tuple sau valori din domeniile calcului relaţional al domeniilor.

Algebra relaţională, calculul relaţional al tuplelor şi calculul relaţional 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 facilităţile minime pe care trebuie să le posede orice limbaj real de interogare relaţional. Un limbaj care îndeplineşte condiţiile mimime este un limbaj relaţioanl complet. Limbajele complete mai cuprind şi facilităţi suplimnetare cum ar fi:

- posibilitate de efectuări de calcule aritmetice- funcţii de tipărire a relaţiilor şi de atribuire a acestora unor nume de variabile- funcţii de agregare care efectuează operaţii cum ar fi: media, suma, minimul

şi maximul valorilor unei coloane dintr-o relaţie.Limbaje reale derivate din aceste formalisme sunt:a) Libajul ISBL (Information System Base Language) dezvoltat în acdrul firmei IBM la Centrul ştiinţific al acestuia din Peterlee, Marea Britanie, este un limbaj bazat pe algebra relaţionalăb) Limbajul QUEL care derivă din libajul relaţional 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 relaţional al domeniului. Acest limbaj cîştigă tot mai mult teren pentru neprofesionişti datorită interfeţei prietenoase calculator - utilizator.Se menţionează şi limbajele SQUARE şi SEQUEL (SQL) care sunt limbaje intermediarre întree algebra relaţională şi calculul relaţional. Sunt dezvoltate în secţia San Jose a firmei IBM ca limbaje de integrare pentru SGBD relaţional System RSQL şi este limbajul perfecţional a lui SQUARE şi este recunoscut ca un cvasistandart al limbajelor de interogare relaţionale.Algebra relaţionalăEa are la bază un set de operatori care se folosesc ca priitive pentru construirea interogărilor. Algebra relaţională este un limbaj abstract de tip procedural întrucît interogările exprimate cu ajutorul ei sunt secvenţe de operatori prin care se specifică în mod explicit modul de obţinere al relaţiei rezultat corespunzătoare fiecărei interogări.

OPERATORII ALGEBREI RELAŢIONALEAlgebra relaţioanlă este o colecţie de operatori unari sau binari care acţionează asupra relaţiilor. Rezultatele care se obţin în urma aplicării operatorilor sunt tot relaţii. Operatorii se împart în două grupe:- operatori pe mulţimi care acţionează asupra relaţiilor văzute ca mulţimi de elemente fără a lua în considerare caracterul de tuplă a elementelor. Sunt operatorii pe mulţimi din matematică.- operatori relaţioanli speciali care iau în considerare caracterul de tuplă al elementelor operanzilor.

68

Page 69: Curs Baze de Date (Prof. Ioan Rusu)

Operaţii pe mulţimiPentru operaţiile REUNIUNE, INTERSECŢIE şi DIFERENŢĂ cele două relaţii operand trebuie să fie compatibile la reuniune ceea cde înseamnă că trebuie sp fie derivate din aceleşi domeniu.Reuniunea a două relaţii A şi B notată AUB este o relaţie R care conţine toate tuplele cu proprietatea că, aparţin relaţiei A sau relaţiei B.Intersecţia a două relaţii A şi B notată AB este o relaţie R care conţine toate tuplele cu proprietatea că aparţin atît relaţiei A cît şi relaţiei B.Diferenţa a două relaţii A şi B notată A-B este o relaţie R care conţine toate tuplele cu proprietatea că aparţin lui A şi nu aparţin lui B.Produs cartezain a două relaţii A şi B notat AxB, A fiind de gradul m şi B de gradul n, este o relaţie R de gradul m+n care conţine toate tuplele obţinute prin concatenarea fiecărei tuple din relaţia A cu fiecare tuplă din relaţia 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 relaţionali specialiAceşti operatori sunt unari (proiecţia şi selecţia) sau binari (cuplarea- join - şi diviziunea)Selecţia printr-un predicat P a unei relaţii A notată cu p(A) este o relaţie R care conţine toate tuplele din relaţia A cu proprietatea că satisfac predicatul P.Predicatul este o formulă ce poate conţine- operanzi care sunt nume de atribute sau constante- operatori de comparaţie =, <, >, , , , - operatori logici: &, |, !Exemple:1. Bursieri=situaţia scolară="B"(STUDENT) este o selecţie a relaţiei student care conţine studenţii bursieri.2. Studenţii bursieri din anul I de studiuBursierii 1=situaţia scolară="B"&AN="1"(STUDENT)Dacă există deja relaţia bursier atunciBursier 1= =AN="1"(BURSIERI)Proiecţia pe atributele A1, A2, .., An notată cu A1, ..., An (B) este o relaţie R de gradul n obţinută din relaţia B

astfel:

- se elimină din relaţia B atributele care nu sunt specificate înn lista de proiecţie astfel încît rămîn doar coloanele corespunzătoare atributelor A1, A2, ..., An;se reordonează atributele rămase în ordinea simplificată în lista de proiecţie A1, A2, ..., An;- se elimină tuplele duplicatDeci proiecţia unei relaţii este o soluţie verticală a acestuia (se selectează coloanele coresounzătoare atributelor specificate) cu eliminarea tuplelor duplicat care ar putea să apară datorită selecţiei verticale.Exemplu: Avem să obţinem notelşe date de un profesor

Note_prof= NUME_PROF, NOTA(Note)

Nume_prof NoteVasile 7

69

Page 70: Curs Baze de Date (Prof. Ioan Rusu)

Vasile 8Vasile 9Costea 10Costea 9Costea 7Costea 8

Proiecţia relaţiei NOTECuplarea (join)Fie un operator decomparaţie: =, <, >, , , şi x un atribut al relaţiei A şi Y un atribut al relaţiie B, x şi Y fiind atribute definite pe domenii compatibile.Numim - cuplare a relaţiilor A şi B după atributele X şi Y notateA B XY o relaţie R care conţine acele tuple ale produsului cartezian AxB care au proprietatea că valorile x şi y corespunzătoare atributelor Xşi Y sunt în relaţia xy.

Cuplarea naturală a două relaţii A şi B notată A B avînd atributele X respectiv Y definite pe domenii compatibile se obţine astfel:- se calculează AxB;- se selectează acele tuple din axB pentru care valoarea corespunzătoare atributelor lui X este egală cu valoarea atributelor Y-se efectuează o proiecţie a rezultatului obţinut pentru a elimina coloana coresounzătoare atributului Y.Operatorul de cuplare este echivalentul aplicării a doi operatori produsul cartezian urmat de o selecţie.A B= xy(AxB) xyExemple:1. Prin echiparea relaţiilor Profesor şi Note după atributele Nume şi Nume_profesor definite pe domeniul coun al numelor de persoane obţinem relaţia Note disciplină.

Nume Funcţia Disciplina Nume_profesor Nume_student NotaVasile As MN Vasile Ionescu 7Vasile As MN Vasile Lupu 8Vasile As MN Vasile Codruţ 10Costea Conf BD Costea Ionescu 9Costea Conf BD Costea Lupu 10Costea Conf BD Costea Popescu 8Costea Conf BD Costea Tatu 7Cuplarea relaţiilor Profesori şi noteNote_disciplină = Profesor Note

Nume=Nume profesor2. Prin cuplarea naturală a relaţiilor 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

70

Page 71: Curs Baze de Date (Prof. Ioan Rusu)

Nume Funcţia Disciplina Nume_student NotaVasile As MN Ionescu 7Vasile As MN Lupu 8Vasile As MN Codruţ 10Costea Conf BD Ionescu 9Costea Conf BD Lupu 10Costea Conf BD Popescu 8Costea Conf BD Tatu 7

3. Din relaţia Student se poate obţine prin cuplarea Student_studentă = Student 1 Student 2 sex1>sex2

Nume 1 I1 S I An I Sex I Nume 2 I2 An 2 Sex IIIonescu Zi B 1 M Lupu Zi 1 FIonescu zi B 1 M Popescu Zi 2 FCodru Zi B 2 M Lupu Zi 1 FCodru Zi B 2 M Popa Zi 2 FTatu Zi B 3 M Lupu Zi 1 FTatu Zi B 3 M popa Zi 1 F

Diviziunea relaţia A de grad m, prin relaţia B de grad n notată AB este o relaţie R de grad m-n formată de mulţimea tuplelor r cu proprietatea că pentru orice tuplă b din B există o tuplă a în A egală cu rezultatul concatenării tuplelor r şi b.Mulţimea atributelor relaţiei B sunt o submulţime a atributelor relaţiei A. Relaţia R are acele atribute a relaţiei A care nu apar în relaţia B.O tuplă din relaţia A este reţinută în urma operaţiei de diviziune numai dacă este legată de fiecare tuplă a relaţiei B printr-o condiţie predefinită.RxBA.Notînd cu Rest mulţimea tuplelor din relaţia A care nu apar în produsul cartezian al relaţiilor B şi R putem scrie.

A= BxRURestExemple: 1. Diviziunea relaţiei Studenţi_studente prin relaţia studente

studenţi=studenţi_studente studenteStudenţi

Nume_student Incadr Sit_scolara An SexLupu Zi N 1 FPopescu zi N 2 F

StudenţiNume Incadr Sit_scolara An Sex

Ionescu Zi A 1 MCodruţ Zi A 2 MTatu Zi A 3 M

71

Page 72: Curs Baze de Date (Prof. Ioan Rusu)

Analog diviziunea studenţi_studente la studenţi relaţia studente

2. Numele studenţilor care au primit note de la toţi profesorii de electronică.Se face diviziunea proiecţiei relaţiei Note pe atributele Nume_profesor şi

Nume_student, reprezentată prin relaţia Profesori_studenţi cu relaţia Profesori_electronică.

Absolvenţi_electronică = Profesor_studenţi Profesori_electronicăNume profesor Nume studentVasile IonescuVasile LupuVasile CodruţCostea IonescuCostea LupuCostea PopescuCostea Tatu

Formularea interogărilor în algebra relaţionalăOrice interogarea poate fi exprimată prin mai multe secvenţe echivalente posibile şi este de dorit de a se lua secvenţa optimă din punct de vedere al volumului de calcul şi al consumului de memorie.Exemple:1. Numele profesorilor cu care studiază studentul? Se poate obţine răspunsul din relaţia Note printr-o selecţie şi o proiecţie. Variabila T este răspunsul la prima operaţie.

T=NUME_STUDENT="LUPU"(NOTE)R=NUME_PROFESOR, FUNCŢIE(T)

SauR=NUME_PROFESOR, FUNCŢIE(NUME STUDENT="LUPU"(NOTE))

NUMEVASILECOSTEA

2. Numele profesorilor care au cel puţin un student bursierT1=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 AN SEXIONESCU ZI B 1 MLUPU ZI B 2 F

T2NUME

72

Page 73: Curs Baze de Date (Prof. Ioan Rusu)

IONESCULUPU

T3NUME_PROF NUME_STUDVASILE IONESCUVASILE LUPUVASILE CODRUŢCOSTEA IONUCOSTEA LUPUCOSTEA POPESCUCOSTEA TATU

T4 NUME_PROF NUME_STUDVASILE IONESCUVASILE LUPUCOSTEA IONUCOSTEA LUPU

T5NUMEVASILECOSTEA

3. Numele studenţilor 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 studenţilor 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 studenţilor ş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

73

Page 74: Curs Baze de Date (Prof. Ioan Rusu)

NOTA3>NOTA4

R=NUME_student, NOTA(T5)6. Numele studenţilor 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)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 toţi studenţii bursieri.T1=SIT_SCOLARA="B"(STUDENT)T2=NUME(T1)T3= NUME_PROFESOR, NUME_student(NOTE)R= T3T2

Limitări ale algebrei relaţionaleAlgebra relaţională şi formalismele echivalente cu aceasta sunt relaţional

complete. Puterea de expresie a limbajelor relaţional complete este mult mai limitată decît cea a limbajelor computaţional complet cum sunt PSCAL sau C care sunt echivalente cu maşina Turing.

Limbajele relaţionale nu permit manipularea structurilor recursive şi nici formulări de interogări cu caracter recursiv. Limita la care eşuează limbajele relaţionale este dată de clasa problemelor care presupun calcularea închiderii tranzitive a unei relaţii binare.

Exemplul clasic este problema legăturilor aeriene între un grup de oraşe:Fiind dată o relaţie binară care conţine toate legăturile aeriene directe dintre o

mulţime de oraşe se cere să se determine toate legăturile aeriene directe sau indirecte posibile între aceste oraşe.

SURSA DESTINAŢIABUCUREŞTI BERLIN BUCUREŞTI AMSTERDAMBUCUREŞTI ROMAPARIS NEW-YORKROMA MADRIDBERLIN PARIS MOSCOVA BUCUREŞTI

Pentru relaţia DIRECT dată prin tabel ne punem întrebarea dacă putem ajunge cu avionul făcînd escale de la Bucureşti la Madrid. Din tabel se vede că nu avem relaţie directă. Se vede din tabel că se poate face escală la Roma.

74

Page 75: Curs Baze de Date (Prof. Ioan Rusu)

Trasee 2=Direct Direct,Trasee2 conţine toate traseele aeriene cu 2 legături. Pentru alte întrebări Trasee2 nu este suficientă Bucureşti - New York.Trasee3=Trasee2 DirectPentru alte legături aeriene se poate ajunge la Trasee4, Trasee5, etc.Dacă pentru o relaţie Direct nu se poate preciza numărul de operaţii de cuplări necesare pentru a stabili legătura, acest număr este dat de nuărul cel mai mare de escale, deci nu există o expresie algebrică care să garanteze rezolvarea problemei formulate. Mulţimea traseelor posibile este dată de închiderea tranzitivă a relaţiei DIRECT, calculul căreia presupune repetarea recursivă a operaţiei de cuplare, de un număr de ori care este necunoscut.Calculul relaţionalFormalismul calcului relaţional permite formularea interogărilor într-o manieră diferită de algebra relaţională. În acest formalism interogarea este o descriere a relaţiei rezultat, descriere care stabileşte mulţimea tuplelor rezultatului prin precizarea unei proproietăţi comune tuturor acestor tuple şi aceasta este exprimată printr-o formulă din calculul relaţional. Deci o interogare în calculul relaţional arată care este rezultatul fără a arăta modul de obţinere. Limbajele derivate din calculul relaţional sunt neprocedurale sau declarative faţă de limbajele derivate din algebra relaţională care se numesc procedurale.Formulele calculului relaţional

Orice formulă din calculul relaţional este o expresie care reprezintă o relaţie, posibil infinită. În aceste formule apar o serie de variabile dintre care unele sunt libere iar altele legate. Variabilele din calculul relaţional pot fi variabile de tuplă sau variabile de domeniu. Într-o formulă pot apărea numai variabile de tuplă şi avem calcul relaţional al tuplelor (CRT) al domeniilor (CRD). O variabilă de tuplă ia valori peste tuplele unei relaţii în timp ce variabilele de domeniu corespund unui atribut dintr-o relaţie.

O formulă a calculului relaţional este construită din atomi conectaţi prin operatori logici. Atomii din formule pot fi :1. Literele de forma R(X1, X2, ... , Xn) unde R este un numr de relaţie, iar X1, X2, ... , Xn sunt variabile constante.În calculul relaţional al tuplelor avem n=1, iar X1=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 relaţia R, respectiv o tuplă în relaţia R.Exemplu:Relaţia 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 valoareaX =("POP", "ASISTENT", "MN")Atunci atît PROFESOR (X1, X2, X3) cît şi PROFESOR (X) sunt adevărate.

Dacă X1 = POP; X2=ASISTENT; X3=BDSau X=("POP", "ASISTENT", "BD")

Atunci atît PROFESOR (X1, X2, X3) cît şi PROFESOR (X) sunt false deoarece POP nu predă BD.

75

Page 76: Curs Baze de Date (Prof. Ioan Rusu)

2. Comparaţii aritmrtice de formaXY unde este un operator aritmetic de comparaţii (=, , <, >, , ) ş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 relaţia STUDENŢI şi y variabila de tuplă peste relaţia STUDENTE) atunci avem;XSEX>YSEXCeea ce înseamnă că M>Fb) Dacă NOTE (X1, X2, X3), atunci avemX35 deoarece toţi studenţii au luat note mai mari de 5.

Pentru a putea aprecia valoarea de adevăr a unei formule în formalismul calculului relaţional în raport cu mulţimile în care iau valori variabilele de domaniu sau de tuplă se introduc următorii operatori unari numiţi cuantificatori care acţiomează asupra ariabilelor.- cuantificatorul universal

Se notează cu şi are semnificaţia că formula preficxată cu acest cuantificator aplicat unei variabile (X) este validă pentru toate valorile posibile ale variabilei X.Exemplu: (X) (STUDENŢI (x) X. An 11X.An 6) este valabilă pentru orice student în anii de studiu 1,2,3,4,5 sau 6.- cuantificatorul existenţial

Se notează şi are semnificaţia că formula prefinată cu acest cuantificator aplicat unei variabile, X este validă pentru cel puţin o valoare a variabilei X.

Exemplu: Formula (X) (STUDENT(X) X.SEX="F") este validă pentru că există cel puţin o studentă în relaţia 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 definiţi o formulă F din calculul relaţional se defineşte recursiv prin următoarele reguli:

1. Orice atom este o formulă. Toate variabilele menţionate î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 atunciF1F2, F1F2, -F1, (F1) sunt formule. Toate apariţiile variabilelor de tuple sunt

legate sau libere după cum sunt în formulele F1 şi F2. În formulele calculului relaţioanl se pot defini paranteze pentru gruparea operanzilor şi forţarea 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 stînga.b) operatorii se situează pe următorul loc de prioritate şi se evaluează de la

stînga la dreapta.

76

Page 77: Curs Baze de Date (Prof. Ioan Rusu)

c) operatorul se situează pe nivelul de prioritate cel mai scăzut şi se evaluează de la stînga la dreapta.

4. Un şir de simboluri este o formulă dacă şi numai dacă se obţine prin aplicarea regulilor 1 - 3 de un număr finit de ori.

Calculul relaţional al domeniilor (CRD)Formulele calculului relaţional pot fi folosite la exprimarea de interogări.

Orice formulă din CRD avînd una sau mai multe variabile de domaniu libere, definaşte o relaţie ale cărei atribute corespund acestor variabile libere. Prin convenţie notaţia F(X1, X2, ..., Xn) semnifică faptul că singurele variabile libere din formula F sunt X1, X2, ..., Xn. O interogare în CRD este {( X1, X2, ..., Xn)| F(X1, X2, ..., Xn)},

Defineşte o relaţie rezultat ca fiind mulţimea tuplelor de forma (a1, a2, ..., an) astfel încît substituirea variabilelor Xi cu ai, formula F (a1, a2, ..., an) devine adevărată.

Interogările definite ca mai sus permit definirea unor relaţii care ar putea fi infinite.

Astfel expresia{(X, Y)| . R (X, Y)},

este o interogare legată în CRD şi defineşte o relaţie infinită care conţine toate tuplele de forma (X, Y) care nu apar în relaţia R. Pentru evitarea acestei situaţii se restrînge CRD la un sub al acestuia care garantează obţinerea unor rezultate finite.Formule independente de domeniuFie formula F din CRD, se defineşte DOM (F) ca fiind reuniunea dintre mulţimea constantelor care apar în F şi mulţimea tuturor valorilor de atribute care apar în relaţiile specificate ca parametri în cadrul formulei F. DOM este o funcţie de formula F şi de relaţiile ale căror nume apar invocate ca parametri în formula F.Fie F (X1, X2,..., Xn) o formulă cu CRD şi D o mulţime de valori cu proprietatea DOM(F)D.Definim relaţia corespunzătoare formulei F în raport cu mulţimea de valori D ca fiind mulţimea tuplelor:(a1, a2,..., an) DxDx...xD (de n ori)astfel încît prin substituirea fiecărei variabile de domaniu X prin valoarea corespunzătoare a, expresiaF(a1, a2,..., an) devine adevărată.Formula F este independentă de domeniu dacă relaţia corespunzătoare acesteia în raport cu orice DDOM (F) nu depinde de mulţimea de valori D.Pentru o formulă F independentă dedomaniu, relaţia corespunzătoare în raport cu orice mulţime de valori D nu depinde de această mulţime şi este aceeaşi cu relaţia corespunzătoare a lui F în raport cu DOM (F).Independenţa de domaniu a unei formule F corespunde principiului că orice relaţie rezultat corespunzătoare acestei formule nu poate să apară alte vaklori decît cele existente în relaţiile 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}Relaţia formulei F în raport cu mulţimea de valori D este

77

Page 78: Curs Baze de Date (Prof. Ioan Rusu)

R1(X, Y)= {(a,b), (b,a)}iar relaţia 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 ambiguităţilor este necesar ca în formularea interogărilor 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 CRDDatorită 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 restrictiv de formule sigure. Aceste formule sunt subset al mulţimii formulelor independente de domeniu şi este definit un criteriu prin care se poate stabili dacă o formulă aparţine sau nu acestui subset. Această submulţime trebuie să permită formularea oricărei interogări din CRD.Mulţimea formulelor sigure are următoarele proprietăţi:1. orice formulă sigură din CRD este independentă de domeniu2. pentru o formulă oarecare din CRD se poate stabili cu uşurinţă dacă este sau nu sigură3. Formulele sigure din CRD permit exprimarea oricărei interogări care poate fi exprimată în algebra relaţională.Prin definiţie ulţimea formulelor sigure din CRD includ acele formule din CRD care îndeplinesc condiţiile:1. Formula nu conţine cuantificatorul universal . Dacă nu el poate fi eliminat prin transformarea(X)F= (X)F2. Oricare două subformule F1 şi F2 conectate prin operatorul disjuncţie () trebuie să aibă acelaşi set de variabile libere. Deci sunt permise construcţiile de forma:F1(X1, X2,..., Xn) F2(X1, X2,..., Xn)3. Orice variabilă liberă dintr-o subformulă maximală costînd din conjuncţia 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 puţin una din subformulele Fi, unde Fi nu este o comparaţie arotmetică sau negaţia 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 conjuncţie de tipul celor de la punctul 3 trebuie să existe cel puţin o formulă pozitivă (care nu este negaţia unei alte formule).Calculul relaţional al tuplelor (CRT)Aici variabilele sunt tuplele relaţiilor. Orice formulă din CRTR avînd o singură variabilă de tuplă liberă, defineşte o relaţie ale cărei atribute corespund coponentelor acestei variabile.O interogare în CRT este:

{X| F(X)}

78

Page 79: Curs Baze de Date (Prof. Ioan Rusu)

şi defineşte o relaţie rezultat ca fiind mulţimea tuplelor t pentru care formula F(t) este adevărată.Şi aici ca şi în CRD se foloseşte clasa formular CRT sigure care au aceleaşi proprietăţi. Limbajele de interogare reale bazate pe CRT folosesc doar formuleel CRT sigure.Între CRD şi CRT nu sunt deosebiri de fond ci chiar de notaţia variabilelor de domeniu din CRD le corespund componentele variabilelor de tuplă din CRT şi invers. Formulele sigure din CRT şi CRD permit realizarea aceloraşi interogări.Formularea interogărilor în CRD şi CRT1. Numele profesorilor cu care studiază studentul Lupu?CRDR={x|(np)(ns)(nt)(Note (np, ns,nt)ns="Lupu"x=np)}CRTR={t| (u)(Note (u)u.Nume_student="Lupu"t.Nume_profesor=u.Nume_profesor)}Relaţia răspuns R este formulată din mulţimea tuplelor t cu proprietatea că există cel puţin o tuplă u în relaţia 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 relaţiei rezultat R şi cu denumirea Nume_profesor.2. numele profesorilor care au cel puţin un student bursier?CRDR={x|(np)(ns)(nt)( n)( Ss)( Sex)(Note (np, ns,nt)student(n,in, Ss, An, Sex)Ss="B"n=nsnp=x)}CRTR={t| (u)( v)(Note (u)student ().Situaţia_scolara="B".Nume= u.Nume_ student u.Nume_profesor=t.Nume}3. Numele studenţilor, disciplinele la care au luiat note şi notele obţinute?CRDR={(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)}CRTR={t| (u)( v)(Note (u)Profesori ()u.Nume_profesor=v.Nume t.Nume= u. Nume_ student t.Disciplina= V.Disciplinat.Nota=u.Nota)}Limbajul QBEQBE (Query By exemple) - limbaj de interogare prin exemple - dezvoltat de firma IBM. Limbajul posedă o interfaţă utilizator deosebit de prietenoasă care permite asamblarea interogărilor folosind un editor mod ecran. Prin apăsarea 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 relaţiilor care urmează a fi implicate în interogare.

Drept răspuns sistemul completează capetele de coloană cu numele atributelor din fiecare relaţie.

Interrogările se formulează folosind variabilele de domeniu sau conastante la fel ca şi în calcululul relaţioanl al domeniului pentru a forma tuple model pentru tuplele care urmează să fie incluse în relaţia rezultat. Atunci cînd o tuplă sau u grup de tuple corespund modelului indicat acesta este inclus în relaţia rezultat. La formarea

79

Page 80: Curs Baze de Date (Prof. Ioan Rusu)

tuplelor model variabilele vor fi precedate de operatori de tipărire P. (toţi operatorii QBE se termină cu ".") indicînd că valorile atributelor corespunzător acestor coloane vor fi tipărite. Se consideră că limbajul QBE estre bidimensional, are o sintaxă bidimensională (tabele bidimensionale), celelalte limbaje au o sintaxă liniară.Formularea interogărilor în limbajul QBEStudiul se face pe exemple:1. Numele profesorilor cu care studiază studentul Lupu?În capul de tabel vid prezentat de sistem pe ecran se introduc relaţiile Note în prima coloană şi se obşine răspunsul la interogarea dorită.Note Nume_profesor Nume_student Nota

Sistemul completează capul de tabelFormularea interogării continuă să introducă pe rînd în coloanele tabelului elementele care definesc relaţia rezultatNote Nume_profesor Nume_student Nota

P._Nume Lupu

În această interogare Lupu este o constantă şi reprezintă condiţia de selecţie a tuplelor din relaţia Note, iar -Nume este o variabilă de domeniu (în QBE variabilel de domeniu încep cu - ) şi este precedată de operatorul de tipărire P.P poate fi pus şi în prima coloană şi determină tipărirea valorilor pentru variabilele de domeniu care apar în aceeaşi linie cu acesta. Astfel:Student Nume Incadrare Sit_scolară An sexP. _Nx -Ix -Sşx _An -Sx

Returnează toate informaţiile despre toţi studenţii din relaţii STUDENT.Se mai poate scrie:Student Nume Incadrare Sit_scolară An sexP.

2. Numele studenţilor care au obţinut note peste 8 şi numele profesorilor de la care au obşinut aceste note?Note Nume_prof Nume_student NotaP. _Numeprof -Numestudent >8

3. numele profesorilor care au cel puţin un student bursier? Se indică două relaţii STUDENT şi NOTE. Legătura dintre relaţii seface cu variabila de domeniu - Numestudent.Note Nume_prof Nume_student Nota

P._Numeprof -Numestudent

80

Page 81: Curs Baze de Date (Prof. Ioan Rusu)

Student Nume Incadrare Sit_scolară An sex-Numestudent B

4. Numele studenţilor de la zi care sunt bursieriStudent Nume Incadrare Sit_scolară An sex

P.-Numestudent zi B F

Cînd condiţia de selecţie este formată din conjuncţia a mai multor atomi aceştia se trec în aceeaşi linie. Interogarea s-ar putea face pe mai multe linii.Student Nume Incadrare Sit_scolară An sex

P. - Numestud -Numest - Numest

zi BF

5. numele profesorilor care au date note de 9 şi 10Note Nume_prof Nume_student Nota

P._Numeprof -Numeprof

910

6. Numele studenţilor din anul I sau bursieri. Cînd avem interogări ce implică disjuncţia a doi atomi se face specificarea acestora pe linii succesive ale tabelului şi se folosesc variabile de domeniu diferite pentru fiecare condiţie.Student Nume Incadrare Sit_scolară An sex

P. - Numestx -Numesty B 1

7. Numele studenţilor care au luat note mai mici de 5 şi disciplinele la care au luat aceleaşi note?Note Nume_prof Nume_student Nota

_Numeprof -Numest <5Profesor Nume Funcţia Disciplina

_Numeprof -Disc

Restan Nume Disciplina P. -Numest -Disc

8. Numele profesorilor de MN alţii decît Vasile?Se foloseşte caseta de condiţie. Pentru unele interogări este imposibilă exprimarea condiţiilor de selecţie în coloanele din tabele. Asemenea condiţii pot fi formulate într-o casetă separată activată la cererea utilizatorului.Profesor Nume Funcţia Disciplina

P._Numeprof MN

Condition

81

Page 82: Curs Baze de Date (Prof. Ioan Rusu)

_NumeprofVasile

Problema 6. Numele studenţilor din anul I sau bursieriStudent Nume Incadrare Sit_scolară An sex

P. - Numest _Ssx _Ax

Condition_Ssx=B or _Ax=1

Folosirea negaţiei () Introducerea negaţiei în prima coloană a unei linii are ca efect negarea conjuncţiei condiţiilor din acea linie.

9. Numele profesorilor care nu predau MNProfesor Nume Funcţia Disciplina P._Numeprof MN

Schimbarea negaţieiProfesor Nume Funcţia Disciplina

P._Numeprof MN

Ne dă numărul profesorilor care predau toate disciplinele exceptînd MN.Întrebarea 8. Se poate scrie.Profesor Nume Funcţia Disciplina

P.Vasile MN

Folosirea operatorului ALLConform convenţiei din QBE - variabilele de domeniu sunt cuantificate existenţial. Pentru a cuantifica universal o variabilă de domeniu aceasta trebuie precedată de operatorul ALL.

10. Numele profesorilor care predau la toţi studenţii?Note Nume_prof Nume_student Nota

P._Numeprof ALL._numest

Student Nume Incadrare Sit_scolară An sexALL._Numest

11. Numele profesorilor a căror studenţi sunt toţi bursieri.Note Nume_prof Nume_student Nota

P._Numeprof ALL._numest

Student Nume Incadrare Sit_scolară An sex[ALL._Numest*]

B

82

Page 83: Curs Baze de Date (Prof. Ioan Rusu)

ALL._Numest - este mulţimea studenţilor buirsieri a oricărui profesor din relaţia rezultată şi * ne arată că mai pot fi şi alţii. [] pune toate condiţiile în una singură.

12. Numele profesorilor care predau la toţi studenţii bursieri.Note Nume_prof Nume_student Nota

P._Numeprof [ALL._numest*]

Student Nume Incadrare Sit_scolară An sexALL._Numest B

13. Numele studenţilor care au obţinut o notă mai mare la MN decît studentul Lupu.Profesor Nume Funcţia Disciplina

_Nprof MN

Note Nume_prof Nume_student Nota_Nprof_Nprof

P.Lupu

_Nota<_Nota

Operatorul de grupare GApariţia într-o coloană a unui tabel înseamnă partiţionarea mulţimii de tuple a relaţiei respective în grupuri de tuple avînd aceeaşi valoare a atributului corespunzător coloanei în care apare operatorul de grupare. Relaţia rezultat poate conţine doar valori care constituie caracteristici unice de grup adică valoarea atributului de grupare sau rezultatul unei funcţii de agregare aplicat asupra tuplelor unui grup.14. Numele studenţilor şi media obţinută dacă aceasta este mai mare de 8?Note Nume_prof Nume_student Nota

P.G._Numest P.AVGALL._Note

ConditionAVG.ALL._Note>8

Operatori de ştergere, inserare şi actualizareOperatorul de ştergere în QBE este D (Delete)Dacă în prima coloană dintr-o linie a unei interogări apare operatorul D atunci tabelele care satisfac condiţia exprimată în acea linie vor fi şterse din relaţia la care se referă interogarea.1. Ştergerea tuplei corespunzătoare studentului Ionescu din relaţia Student:Student Nume Incadrare Sit_scolară An sexD. Ionescu

2. Ştergerea tuturor studenţilor nebursieriStudent Nume Incadrare Sit_scolară An sexD. _Numest N

83

Page 84: Curs Baze de Date (Prof. Ioan Rusu)

Este nevoie la ştergere ca utilizatorul să furnizeze cel puţin o valoare de cheie primară pentru tupla ce se şterge.Inserarea (I) a uneia sau mai multe tuple într-o relaţie seface cu operatorul (I). C aşi la ştergere este necesară precizarea unei chei primare care să fie diferită faţă de valorile existente în relaţia în care se face inserarea.Exemple:1. Dacă studentul Ionescu primeşte nota 9 la MN (la as. Vasile) atunci tupla corespunzătoare (Vasile - Ioenscu - 9) se inserează în Note astfel:Note Nume_prof Nume_student NotaI. Vasile Ionescu 9

2. Inserăm studentul Codruţ a primit la MN de la Vasile aceeaşi notă ca şi Popescu la BD de la Costea.Note Nume_prof Nume_student NotaI. Vasile

CosteaCodruţpopescu

_Nota_Nota

Actualizarea se face cu operatorul U (update) pe prima coloană, tupla cu care se face modificareaa) se acordă nota 5 tuturor studenţilor care au luat sub 5 la unul din examene.Note Nume_prof Nume_student NotaU. _Numeprof

_Numeprof_Numest_Numest

5<5

b) pentru a mări cu un punct notele de la MN mai mici ca 5Note Nume_prof Nume_student Nota

U. _Numeprof_Numeprof

_Numest_Numest

Nota+1Nota

Profesor Nume Funcţia Disciplina_Numepr MN

Condition_Nota <5

Operatori de agregareLimbajul QBE are următorii operatori de agregareSUM - suma valorilor unui atribut;AVG - media valorilor unui atributMAX - maximul valorilor unui atributMIN - minimul valorilor unui atributCNT - numărul de tuple din relaţieMai sunt

ALL., UN (unic)

84

Page 85: Curs Baze de Date (Prof. Ioan Rusu)

ALL. aplicat unei variabile de domeniu produce un multiset al valorilor pe care le parcurge variabila şi conţine şi repetiţiile de valori identice. Operatorulş UN transformă un multiset general de operatorul ALL într-un set (el elimină repetiţiile de valori).Exemplu:Note Nume_prof Nume_student Nota

P.CNT.ALL._Numepr

are ca efect tipărirea numărului 7Note Nume_prof Nume_student Nota

P.CNT.UN.ALL._Numepr

are ca efect scrierea valorii 2Definirea datelor în QBELimbajul 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 acelaşi modul. În QBE pentru operaţiile din LDD se foloseşte aceeaşi interfaţă grafică ca şi pentru formularea interogărilor iar comenzile LDD au o structură similară cu aceea a operaţiilor în LMD.Definirea relaţiilorLimbajul QBE menţine o listă numită directorul tabelelor a tuturor numelor de relaţie din BD împreună cu atributele lor şi anumite informaţii referitoare la aceste atribute. Utilizatorul are acces la această listă pentru interrogări. Ştergeri sau inserări, folosind aceleaşi notaţii ca pentru operaţiile obişnuite asupra relaţiilor.Exemple:1. Introducînd operatorul de tipărire P. sau P._Numerel (unde Numerel este o variabilă oarecare) în poziţia corespunzătoare numelui de relaţie într-un cap de tabel vid, sistemul va afişa ca răspuns numele tuturor relaţiilor din baza de date.2. Dacă se introduce P._Numerel P. atunci pe lîngă numele relaţiilor se vor tipări şi numele atributelor acestora (al doilea operator indică aceasta).3. Pentru crearea unei relaţii 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 relaţiei care se crează. Al doilea operator I. indică faptulş că urmează a se defini atributele relaţiei şi proprietăţile acestora. Atributele oricărei relaţii au o serie de proprietăţi ale căror valori pot fi stabilite de către utilizator. Limbajul QBE poate permite controlul asupra următoarelor proprietăţi ale atributelor.a) KEY - este proprietatea prin care se stabileşte dacă atributul face parte dintr-o cheie primară şi are valorile Y sau Nb) TYPE - indică tipul, de dată al atributului, cum ar fi:

CHAR - pentru şir de caractereFLOAT - pentru numere realeFIXED - pentru numere întregi

c) DOMAIN - numele domeniului din care este derivat atributul

85

Page 86: Curs Baze de Date (Prof. Ioan Rusu)

d) INVERSION - indică faptul dacă se doreşte (Y) sau nu (N) crearea unui index pe atributul respectiv.Exemplu pentru crearea relaţiei NOTEI.NoteI. Nume_prof Nume_student NotaKey Y Y NType Char Char FixedDomain Nume Nume NoteInversion 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 vederilorConceptul de vedere din QBE este realizat prin folosirea unui mecanism de evaluare întîrziată . crearea unei vederi se face similar cu a unei relaţii folosind comanda I. în prima coloană a unui tabel vid şi urmată de cuvîntul cheie VIEW (vedere) şi apoi de numele vederii care se crează. Dacă după numele vederii se pune I. atunci sistemul aşteaptă specificarea de către utilizator a numelor atributelor vederii după care urmează definirea vederii.Exemplu: Pentru crearea vederii Bursieri cu atributele NUME, AN şi MEDIA care să conţină informaţiile corespunzătoare acestor atribute pentru studenţii bursieri, procedăm astfel:I.VIEW Bursieri I. Nume An Media

_Numestudent _Anul AVG.ALL_Nota

Student Nume Incadrare Sit_scolară An sex_Numestud B _Anul

Note Nume_prof Nume_student Nota

G._Numestud _Nota

Interogarea care defineşte o vedere nu este evaluată în momentul introducerii acesteia ci este asociată numelui vederii şi memorată în directorul tabelelor. Evaluarea acestei definiţii se face ori de cîte ori numele vederii corespunzătoare este invocat într-o interogare QBE.Vederile din QBE sunt de tip read - only sunt folosite în operaţii de interogare şi nu permit modificări asupra vederilor.Vederile în QBE sunt folosite pentru simplificarea formulării unor interogări care exprimate în termenii relaţiilor de bază ar fi complicate sau pentru limitarea accesului la BD faţă de anumite categorii de utilizatori.Dorim acesul studenţilor la informaţiile din relaţia PROFESOR fără a putea face modificări în această relaţie. Se interzice studenţilor accesul la relaţia profesor şi se defineşte vederea Public - profesori.I.VIEW Public_profesori I. Nume Funcţia Disciplina

86

Page 87: Curs Baze de Date (Prof. Ioan Rusu)

Această vedere conţine aceeaşi informaţie ca şi relaţia PROFESORI.

LIMBAJUL SQLLimbajul SQL (cunoscut inişial sub numele SEQUEL) este limbajul de interogare al SGBD System R dezvoltat în localitatea San Jose al firmei IBM. SQL a evoluat din precedentul său SQUARE. Cele două limbaje au aceleaşi concepţii de bază dar deosebirea constă în sintaxă, SQUARE are o sintaxă bazată pe notaţii matematice iar SQL are o sintaxă mai apropiată de limba engleză (SQL sau SEQUEL - Structural English Query Language). Sintaxa SQL este mai adecvată programării pe calculator.

În prezent SQL este cea mai răspîndită interfaţă pentru SGBD - urile relaţionale. Înafară de Sistemul R limbajul SQL este disponobil şi pentru SGBD-urile relaţionale 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 relaţionale. Î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 ambiţioase propuse nu au putut fi realizate şi a condus la amînarea apariţiei. Noul standard se bazează pe SQL2 urmărind extensii ale lui.Facilităţi ale limbajului SQL1. Facilităţi orientate pe obiect se referă la posibilităţile de definire la nivelul utilizator a tipurilor de date abstracte incluzînd metode, identitatea obiectelor, subtipuri şi , polimorfism, etc.2. Structuri de control specifice limbajelor computaţioanle: if, for, while, etc. ceea ce transformă limbajul SQL într-un limbaj de sine stătător, a cărui putere de expresie nu va mai fi limitată la nivelul limbajelor relaţionale.3. Facilităţi pentru exprimarea prelucrărilor cu caracter recursiv.4. Facilităţi de comuniacre în reţea.5. Facilităţi de prelucrare distribuită inclusiv pentru tehnoilogic client - server. Presupune mecanisme pentru crearea, memorarea şi execuţia procedurilor la nivelul serverelor de date.6. Facilităţi multi - media, care sunt înglobate în modulul specializat Multi-Media SQL (MMSQL)7. Facilităţi pentru tratarea timpului în bazele de date, facilităţi ce fac parte din componenta Temporal SQL (TSQL)Sintaxa construcţiilor SELECTSQL este un limbaj intermediar avînd unele caracteristici provenite din algebra relaţională şi altele provenite din calculul relaţional al tuplelor.Operaţia fundamnetală în SQL este MAPAREA reprezentată din punct de vedere sintactic printr-o construcţie SELECT - FROM - WHERE (construcţie select). Această construcţie corespunde unei succesiuni de operatori algebrici de forma selecţie - proiecţie - cuplare foarte frecventă în algebra relaţională.Clauza SELECT realizează operaţia de proiecţie şi este urmată de lista atributelor care se reţin în relaţia rezultat. Ea nu trebuie confundată cu operaţia selecţie din algebra relaţională şi proiecţia în SQL diferă de operaţia proiecţie din algebra relaţională, 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.Operaţia de cuplare se realizează cu clauza FROM atunci cînd ea este urmată de o listă formată din cel puţin două nume de relaţie, împreună cu condiţia de cuplare formulată în cadrul predicatului din clauza WHERE.

87

Page 88: Curs Baze de Date (Prof. Ioan Rusu)

Selecţia este realşizată prin cea de a treia clauză WHERE care este de multe ori urmată de un predicat (calificator) referitor la atributele relaţiei (relaţiilor) din clauza FROM.Clauza WHERE este însă mai complexă decît operaţia de selecţie din algebra relaţională, deoarece expresia care o urmează poate conţine atît comparaţii de atribute şi / sau expresii aritmetice, cît şi operatori logici (AND, OR, NOT) operatorim pe mulţimi (UNION, INTERSECT, MINUS) şi operatori de apartenenţă la mulţimi cu negările acestora (XINS, XNOTINS, S CONTAINTS X, S DOES NOT CONTAIN X, unde S este o relaţie iar X este o tuplă sau o relaţie în care este vorba de operaţii de incliziune între mulţimi). Expresia ce urmează clauzei WHERE poate de asemenea să conţină operanzi care sunt relaţii rezultate din alte construcţii SELECT ceea ce asigură posibilitatea îmbrăcării acestora în interogări oricît de complexe.Facilităţile limbajului SQL provenite din calculul relaţional al tuplelor se referă la posibilitatea de a declara variabile de tuple asociate unor relaţii. Asocierea se face în clauza FROM sub forma:SELECT ... FROM R T WHERE...Unde R este o relaţie 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 notaţia T.A.Construcţia completă a sintaxei SELECT este:SELECT [DISTINCT] nume_atribut 1...FROM nume_relaţie [variabilă_de_tuplă]...[WHERE calificator1][GROUP BY nume_atribut2...[HAVING codificator2]][ORDER BY nume_atribut 3[ASC| DESC]...].unde [] desemnează o componentă opţională a construcţiei iar "..." indică repetarea de unul sau mai multe ori a parametrului clauzei curente (listă de parametri).Valoarea (valorile) corespunzătoare parametrului (parametrilor) nume_atribut 1 precizează în mod explicit atributele după care se face proiecţia. Dacă există incertitudini referitor la relaţiile din care fac parte atributele specificate atunci acestea vor fi precedate de numele relaţiei, corespunzătoare fiecărui atribut.Dacă în locul acestei liste se foloseşte simbolul * atunci proiecţia se face după toate atributele relaţiei (relaţiilor) specificate în clauza FROM. În lipsa operatorului opţional DISTINCT proiecţia se face fără eliminarea duplicatelor, dacă apare se elimină toate duplicatele rezultate în urma operaţiei de proiecţie. În cazul cel mai general parametrul nume_atribut 1 poate fi o expresie aritmetică conţinînd atribute şi / sau funcţii de agregare avînd ca operanzi unul sau mai multe atribute.Prin operatorul nume_relaţie se specifică relaţia (relaţiile) care constituie operandul (operanzii) operatorului de mapare. Prin parametrul variabilă_de_tuplă putem asocia fiecărei relaţii cîte o variabilă de tuplă.Parametrul calificator 1 precizează criteriul de selecţie al tuplelor unei relaţii.Clauza GROUP BY are ca efect gruparea tuplelor unei relaţii pe baza valorilor unui atribut sau grup de atribute.Parametrul nume_atribut 2 furnizează criteriul de grupare (partiţionare) al tuplelor unei relaţii în submulţimi de tuple toate aavînd aceeaşi valoare pentru atributul (atributele) nume_atribut 2. Criteriul de grupare este format din unul sau mai multe atribute. Aceste submulţimi sau grupuri de tuple urmează a fi tratate ca un tot unitar în anumite operaţii cum ar fi aplicarea funcţiilor de agregare care se calculează nu pe întreaga relaţie, ci pentru fiecare grup de tuple în parte. Relaţia rezultat al oricărei interogări care are o clauză GROUP BY caracterizează aceste grupuri de tuple şi nu tuple individuale. Parametrii clauzei SELECT dintr-o construcţie

88

Page 89: Curs Baze de Date (Prof. Ioan Rusu)

SELECT în care apare clauza GROUP BY trebuie să reprezinte o proprietate mică de grup. Prin aceasta înţelegem fie un atribut de grupare, fie o funcţie de agregare, aplicată tuplelor unui grup, fie o expresie formată pe baza primelor două. Clauza HAVING, opţiune a clauzei GROUP BY este o formă specială a clauzei WHERE caracterizată prin faptul că se aplică nu unor tuple individuale ci unor submulţimi (grupuri) de tuple, rezultate ca urmare a partiţionării prin clauza GROUP BY.Parametrul calificator 2 furnizează criteriul de selecţie al grupurilor de tuple. Acest parametru se referă întotdeauna la proprietăţile 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 funcţiilor de agregare aplicate grupurilor. Clauza ORDER BY specifică ordonarea tuplelor unei relaţii rezultat după valorile parametrului nume_atribut 3, iar cuvintele cheie ASC şi DESC indică modul în care se face ordonarea după valorile crescătoare respectiv descrescătoare ale atributului specificat.Formularea interogărilor în limbajul SQLPentru o înţelegere a limbajului SQL prezentăm un set de exemple de interogări rezolvate prin construcţii SELECT. Relaţiile la care se fac referiri sunt cele din curs.1. Numele profesorilor cu care studiază studentul Lupu? Interogarea se exprimă prin secvenţa SQLSELECT NUME_PROFESORFROM NOTEWHERE 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 este necesar operatorul DISTINCT pentru a elimina eventualele repetări ale numelui aceluiaşi profesor. În acest caz interogarea este:SELECT DISTINCTFROM NOTEWHERE NUME_STUDENT="LUPU"2. Numele profesorilor care au dat cel puţin o notă. În acest caz ne interesează profesorii de la relaţia NOTE. Aceasta se realizează printr-o proiecţie (cu eliminarea duplicatelor) a acestei relaţii pe atributul NOTE_PROFESOR. Secvenţa SQL este:SELECT DISTINCT Nume_profesorFROM Note3. Dacă ne interesează toate informaţiile din relaţia note utiliuzăm secvenţa:SELECT*FROM Note*indică că selecţia se face după toate atributele relaţie dată în clauza FROM.4. Dacă dorim ca onformaţiile de mai sus să fie ordonate în mod descrescător a notelor, atunci vom adăuga la interogarea precedentă o clauză ORDER BYSELECT*FROM NopteORDER BY Nota DESC, Nume_Student ASC, Note_profesor ASC. Dacă există mai multe tuple cu aceeaşi valoare a notei acestea vor fi sortate în ordinea alfabetică a numelui studenţilor iar dacă acelaşi student a primit note similare de la profesori diferiţi atunci tuplele corespunzătoare vor fi sortate după ordinea alfabetică a numelui profesorilor.5. Numele studenţilor care au obţinut note peste 8 şi numele profesorilor de la care au obţinut aceste note?SELECT NUME_PROFESOR, Nume_studentFROM NOTE

89

Page 90: Curs Baze de Date (Prof. Ioan Rusu)

WHERE Nota >8În clauza WHERE se poate specifica o condiţie compusă folosind operatorii logici AND, OR şi NOT astfel:6. Numele studenţilor de la zi care sunt bursieri?SELECT NumeFROM StudentWHERE Inadrare = "zi" AND sit_scolară = "B" AND Sex = "F".7. Numele studenţilor din anul I sau bursieri?SELECT NumeFROM StudentWHERE AN=1 OR sit_scolară="B"8. Numele studenţilor bursieri şi a studenţilor din anul I?SELECT NumeFROM StudentWHERE sit_scolară="B" OR An=1, AND Sex = "F"Într-o combinaţie cu operatori OR şi AND se evaluează operatorii AND şi apoi operatorii OR.9. Numele studenţilor bursieri şi aceleaşi note din anul I?SELECT NumeFROM StudentWHERE (AN=1 OR sit_scolară="B") AND sex = "F"Prin folosirea parametrilor se poate forţa modificarea ordinii normale de evaluare a operatorilor logici cu schimbarea corespunătoare a sensului interogării. A se compara interogările 8 şi 9.10. Numărul studenţilor din fiecare an de studiu?SELECT An, COUNT (Nume)FROM StudentGROUP BY AnLipseşte clauza WHERE întrucît nu este nici o condiţie care să restricţioneze selectarea tuplelor şi de asemenea folosirea clauzei GROUP BY pentru gruparea tuplelor după atributul AN. Ca parametri ai clauzei SELECT dintr-o construcţie care conţine clauza GROUP BY pot să apară doar acele atribute care constituie proprietăţi unice de grup (avînd aceeaşi valoare pentru fiecare tuplă din grup, în speţă atributele de grupare) sau valori care caracterizează grupukl în ansamblul său valoi care de regulă se obţin prin aplicarea unui operator de agregare asupra tuplelor grupului (în cazul nostru COUNT (nume)) care returnează numărul de studenţi 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 studenţilor este mai mare ca 8?SELECT Nume_profesor, AVG (Nota)FROM NoteGROUP BY Nume_profesorHAVING AVG (Nota)>8Operatorul de agregare AVG din interogarea dată se aplică grupurilor de tuple care au aceeaşi 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 selecţiei este format din unul sau mai multe grupuri de tuple avînd aceeaşi valoare a atributului Nume_profesor. Din fiecare grup se reţine doar cîte o singură dată valoarea atributului Nume_profesor şi valoarea calculată pe grup a mediei notelor. Nu este necesară folosirea operatorului DISTINCT.

90

Page 91: Curs Baze de Date (Prof. Ioan Rusu)

12. Media notelor obţinută de fiecare student de la fiecare profesor al său?SELECT Nume_profesor, Nume_student, AVG (Nota)FROM NoteGROUP 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 obţinute de studenţi la diferite discipline.13. Numele profesorilor care au cel puţin un student bursier?SELECT DISTINCT Nume_profesorFROM NoteWHERE Nume_student IS IN

(SELECT NumeFROM StudentWHERE sit_scolară = "B")

Interogările care implică mai multe relaţii, dar returnează date dintr-o singură relaţie pot fi rezolvate prin imbricarea a mai multe construcţii SELECT. Datorită posibilităţii de imbricare datele rezultate dintr-un tabel pot fi folosite la selecţia datelor dintr-un alt tabel. Deşi această facilitate este aproappe similară cu operatorul de cuplare, diferă de acesta prin faptul că din rezultatul final nu pot face parte decît datele rezultate din ultimul tabel. Majoritatea implementărilor în SQL permit imbinarea pe mai multe nivele, la cele mai performante fiind posibile pînă la 16 nivele de imbricare a construcţiilor SELECT. În exemplul dat construcţia interioară returnează studenţii bursieri. Construcţia exdterioară returnează numele profesorilor pentru care numele student asociat aparţine mulţimii returnate de construcţia interioară. Adică a studenţilor bursieri. Este necesară folosirea operatorului DISTINCT deoarece pot exista mai mulţi studenţi bursieri care studiază cu acelaţi profesor. Limbajul SQL nu dispune de cuantificatori, aşa cum apar ei în calculul relaţional de aceea efectul acestora trebuie simulat prin folosirea relaţiilor de aparteneţă de tipul element - mulţime de incluzine mulţime - mulţime sau de egalitate între mulţimi. În SQL relaţia de aparteneţă a unei valori la o mulţime este reprezentată prin operatorul IS IN sau simplu IN. Şa fel se reprezintă şi relaţia de incluziune între mulţimi. Deci A IN B semnifică A aparţine lui B, dacă A este o valoare, sau A este inclusă în B dacă A este o mulţime, iar B este o valoare sau omulţime.

Simetricul operatorului IN este operatorul CONTAINS A CONTAINS B semnifică, A conţine pe B, unde A este mulţimea iar B este o valoare sau o mulţime.

Se pot folosi şi negaţiile acestor operatori NOT IN, DOES NOT CONTAIN.Testarea egalităţii sau a inegalităţii a două mulţimi se face prin operatori = şi (sau != sau <>).14. numele profesorilor ai căror studenţi sunt toţi bursieri?Interogarea se poate reformula "Numele profesorilor pentru care mulţimea studenţilor cărora le predau este inclusă în mulţimea studenţilor bursieri"?SELECT NumeFROM ProfesorWHERE ( SELECT Nume_student

FROM NoteWHERE Nume_profesor=Profesori.Nume)

IN ( SELECT NumeFROM StudentWHERE sit_scolară="B")

15. Numele studenţilor care predau la toţi studenţii bursieri?Singura deosebire faţă de precedenta interogare este că se inversează relaţia de incluziune între cele două mulţimi destudenţi deci operatorul IN va fi înlocuit cu CONTAINS

91

Page 92: Curs Baze de Date (Prof. Ioan Rusu)

SELECT NumeFROM ProfesoriWHERE ( SELECT Nume_student

FROM NoteWHERE Nume_profesor=Profesori.Nume)

CONTAIN (SELECT NumeFROM StudentWHERE sit_scolară="B")

În unele implementări ale limbajului SQL mai apar şi operatorii ANY care poate fi folosit ca un cuantificator existenţial şi ALL care corespunde cuantifiactorului universal. Aceşti operatori nu se aplică unor variabile ci unor mulţimi care de cele mai multe ori sunt definite prin construcţii SELECT imbricate.Numele studenţilor care au o notă mai mare decît cea mai mică notă acordatăSELECT Nume_StudentFROM NoteWHERE Nota >ANY (SELECT Nota

FROM Note)În general efectul operatorilor ANY şi ALL poate fi simulat folosind ceilalţi operatori prezentaţi împreună cu funcţiile de agregare MIN şi MAX.16. Numele studenţilor care au luat note mai mici de 8 şi disciplina la care au luat aceste note?

SELECT Note.Nume_student, Profesori.DisciplinaFROM Note, ProfesoriWHERE Note.Nume_profesori=Profesori.NumeAND Note.Nota<8

Pentru a returna valori din mai multe relaţii simultan, este necesară efectuarea unei operaţii de cuplare. Limbajul SQL are o sintaxă specifică pentru exprimarea unei operaţii de cuplare aşa cum se observă şi în exemplul dat. Acest lucru este mai uşor de înţeles dacă punem în evidenţă faptul că produsul cartezian al relaţiilor A şi B este:SELECT *FROM A, BReamintim că operaţia de cuplare este echivalentă cu produsul cartezian urnat de o selecţie.17. Numele studenţilor de la zi care au luat note mai mici de 8 şi disciplina la care au luat aceste note.Exprimarea acestei interogări prin formalismul algebrei relaţioanle presupune aşa cum s-a văzut efectuarea a două operaţii de cuplarer.Limbajul SQL oferă cel puţn două căi de exprimare a acestei interogări.a) Prin efectuarea simultană a două operaţii de cuplare (de fapt un produs cartezian al celor trei relaţii Note, Profersori, Student urnmat de selecţia adecvată)SELECT Student.Nume, Profesori. DiscilinaFROM Student, Note, ProfesoriWHERE Note.Nume_profesori=Profesori.Nume

AND Student.Nume=Note.Nume_StudentAND Note.Nota <8AND student. Incadrare="zi"

b) prin folosirea unei operaţii de cuplare şi a unei imbricăriSELECT Student.Nume, Profesori. DiscilinaFROM Student, Note, ProfesoriWHERE Note.Nume_profesori=Profesori.Nume

92

Page 93: Curs Baze de Date (Prof. Ioan Rusu)

AND Note.Nota <8AND Note.Nume_student IN

(SELECT NUMEFROM StudentWHERE Incadrare = zi")

Observaţie: După cum se observă din exemplele de pînă acum calificarea numelor de atribute nu este obligatorie. Ea este necesară doar atunci cînd pot să apară ambiguităţi. Dacă în clauza FROM a unei construcţii SELECT apare un singur nume de relaţie, atunci implicit toate numele de atribute fără califiacre din blocul curent se consideră aparţinînd acestei relaţii. Dacă un nume de atribut dintr-un bloc exterior este folosit într-un bloc imbricat sau în acelaşi bloc apar mai multe nume de relaţii, atunci este necesară calificarea atributelor prin numele relaţiilor cărora le aparţin.18. numele studenţilor şi notele celor care au obţinut o notă mai mare la Metode numerice decît studentul Lupu.

Şi pentru această interogare se prezintă două soluţii diferite.a) Prima soluţie face apel la posibilitatea de a imbrica pe mai multe nivele construcţiile SELECT.SELECT Nume_student, NotaFROM NoteWHERE Nume_Profesor IN

(SELECT NumeFROM ProfesoriWHERE Disciplina="Metode numerice"AND Nota> (SELECT Nota

FROM NoteWHERE Nume_student = "Lupu"AND Nume_profesor IN(SELECT NumeFROM ProfesoriWHERE Disciplina="Metode numerice"))

b) A doua soluţie poate mai puţin eficientă ca prima, arată modul în care se utilizează variabilele de tuplă.SELECT N1. Nume_student, N1.NotaFROM Note N1, Note N2WHERE N1. Nota>N2.NotaAND N2.NUme_student="Lupu"AND N1.NUme_profesor IN

(SELECT NumeFROM ProfesoriWHERE Disciplina ="Metode numerice")

AND N2.Nume_profesor IN(SELECT NumeFROM ProfesoriWHERE Disciplina="Metode numerice")

Variabilele de tuplă se pot folosi pentru calificarea atributelor la fel ca orice nume de relaţie şi de mai multe ori sunt considerate ca redenumiri ale relaţiilor cărora le sunt asociate.19. numele studenţilor care studiază cu cel puţin doi profesori?SELECT DISTINCT Nume_studentFROM NotexNoteWHERE Nume_student IN

93

Page 94: Curs Baze de Date (Prof. Ioan Rusu)

(SELECT Nume_studentFROM NoteWHERE Nume_profesor#xNote.Nume_profesor)

Se foloseşte variabila de tuplă XNote asociată relaţiei Note.20.Numele şi nota pentru primii 5 dintre studenţii care au obţinut cele mai mari note de la profesorul Costea?SELECT Nume_student, NotaFROM Note NWHERE Nume:profesor ="Costea"AND 5> (SELECT COUNT (*)

FROM NoteWHERE Nume_profesor="Costea"AND Nota>N. Nota)

Construcţia SELECT interioară returnează numărul structurilor care au obţinut de la profesorul Costea o notă mai mare decît studentul curent din construcţia SELECT exterioară. De remarcat faptul că dacă există 6 studenţi cu nota 10 atunci toţi vor fi incluşi în relaţia rezultat.21. Numele studenţilor care nu studiază metode numerice?(SELECT Nume_studentFROM Note)MINUS(SELECT nume_studentFROM NoteWHERE Nume_profesor IN(SELECT NumeFROM ProfesoriWHERE Disciplina = "Metode numerice"))Interogarea este dată ca diferenţă a două mulţimi:- mulţimea studenţilor care studiază cel puţin o disciplină- mulţimea studenţilor care tudiază metode numericeÎn limbajul SQL mai sunt disponibili pentru operatorii pe mulţimi a operatorilor:- UNION pentru reuniunea mulţimilor de tuple a două mulţimi- INTERSECT pentru intersecţie.Fiecare din cei trei operatori acceptă ca operanzi doar mulţimi, dupicatele sunt eliminate automat înainte de aplicarea operatorului cerut fără a necesita folosirea operatorilor DISTINCT. De menţionat că operanzii care operanzii care în general sunt relaţii (mulţimi de tuple) trebuie să satisfacă condiţia de compatibilitate la reuniune.22. Numele profesorilor care predau studenţilor din anul I sau bursieri?Presupunem că relaţiile anul I şi Bursieri sunt realizate (exemplul 7).SELECT DISTINCT Note.Nume_profesorFROM Note, Anul I, BursieriWHERE Note.Nume_profesor=Anul I.NumeOR Note.Nume_studenţi=Bursieri.NumeRezultatul interogării trebuie să.fie numele profesorilor care predau cel puţin unui student din mulţimea studenţilor din anul I reunită cu mulţimea studenţilor bursieri. Rezultatul este corect numai dacă relaţiile AN I şi Bursieri nu sunt vide, deoarece în cazul nostru se realizează mai întîi produsul cartezian al relaţiilor Note, Anul I şiu Bursieri după care se analizează condiţia din clauza WHERE.Pentru interogarea dată se poate obţine un rezultat corect dacă se utilizează operatorul UNION.

94

Page 95: Curs Baze de Date (Prof. Ioan Rusu)

(SELECT DISTINCT Note, Nume_profesoriFROM Note, Anul IWHERE Note.Nume_student=Anul I.Nume)UNION(SELECT DISTINCT Note.Nume_profesorFROM Note, BursieriWHERE Note.Note_student=Bursieri.Nume)Operaţii de ştergere, inserare şi actualizareFiecare dintre aceşti operatori acţionează la un moment dat asupra unei singure relaţii.Operatorul SQL pentru operaţia de ştergere este DELETE FROM a cărui sintaxă completă este:DELETE FROM nume_relaţie [variabilă_de_tuplă][WHERE calificator]Exemple:1. Ştergerea tururor tuplelor din relaţia Note:

DELETE FROM NoteRelaţia note va exista dar este vidă.2. Ştergerea din relaţia Note a tuplelor în care nota este sub 5.

DELETE FROM NoteWHERE Nota <5Operatorul 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 sintaxaINSERT INTO nume_relaţie (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 operaţia de inserare este opţională. Acestea vor fi omise din lista de atribute şi vor lua implicit valoarea NULL, eventual, urmînd a fi modificate ulterior cînd valorile lor sunt cunoscute.Valorile din lista de valori pot fi ori literale, ori expresii atribuite.Exemple:1. Inserarea în relaţia Profesori a unei tuple. Popovici – conf – metode numerice se

realizează astfel:INSERT INTO Profesori (“Popovici”, “conf”, “metode numerice”)2. ComandaINSERT INTO Profesori (Nume) VALUES (“Popa”) are ca efect inserarea în relaţia Profesori a tuplei Popa_NULL_NULL (în ipoteza că atributul Nume este singurul declarat ca opţiune NOT NULL).Comanda pentru inserarea multiplă are sintaxa:INSERT INTO nume relaţie (nume_atribut…)Construcţie SELECTŞi permite inserarea la relaţia dată a unei mulţimi de tuple (relaţie) care se obţine ca rezultat al unei construcţii SELECT.Exemple:Presupunem că avem o relaţie Bursieri cu atributele Nume şi Media în care am inclus toţi studenţii cu media peste 8. Dacă se coboară acest barem la 7 relţia bursoeri va fi completată astfel:INSERT INTO Bursieri (Nume, Nota)

95

Page 96: Curs Baze de Date (Prof. Ioan Rusu)

SELECT Nume_student, AVG (nota)FROM NoteGROUP BY Nume_studentHAVING AVG (Nota)>7 AND AVG (Nota<=8)Operatorul SQL pentru actualizarea tuplelor este UPDATE şi are sintaxaUPDATE nume_relaţie [variabilă_de_tuplă]SET nume_atribut = expresie_de_actualizare…[WHERE calificator]Operatorul de actualizare îndeplineşte două funcţii tuplele care urmează a fi actualizate (în lipsa clauzei WHERE se actualizează imploicit toate tuplele relaţiei specificate)*În tuplele selectate modifică valorile atrbutelor specificate. Expresiile de actualizare pot conţine 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 lucrări.UPDATE ProfesoriSET FUNCŢIE=”SL”WHERE Nume=”Pop”2.În relaţia Note se măresc cu un punct toate notele mai mici de 5.

UPDATE NoteSET Nota=Nota+1WHERE Nota<5Operatori de agregareOperatorii cei mai uzuali în orice implementare a limbajului SQL sunt: COUNT (numărare), SUM(suma valorilor unei coloane) AVG (media valorilor unei coloane), MAX (valoarea maximă dintr-o coloană), MIN (valoarea minimă dintr-o coloană). Toţi aceşti operatori pot fi folosiţi atît în calificatori cît şi în clauze SELECT.Exemple:1. Care este numărul studenţilor bursieri?SELECT COUNT (NUME)FROM StudentWHERE sit_scolară=”B”2. Care este cea mai mică notă obţinută de un student bursier?SELECT MIN (Nota)FROM NoteWHERE Nume_student 1N(SELECT NumeFROM StudentWHERE sit_scolară=”B”)3. Care este media notelor obţinută de studenţi la metode numerice?SELECT AVG (Nota)FROM NoteWHERE Numele_profesor 1N(SELECT NumeFROM ProfesoriWHERE Disciplina=”Metode numerice”)4. Numele şi media notelor acordate de fiecare profesor?SELECT Nume_profesor, AVG (Nota)FROM Note

96

Page 97: Curs Baze de Date (Prof. Ioan Rusu)

GROUP BY Nume_profesor.Operatorul de asignareOperatorul de asignare ASSIGN TO permite asignarea rezultatului returnat de o clauză SELECT unei variabile care va îndeplini funcţia de nume a relaţiei rezultat, nume cu ajutorul căreia această relaţie poate fi referită în continuare. Sintaxa operatorului este:ASSIGN TO nume_relaţie.Acest operator se foloseşte atunci cînd dorim reţinerea unor rezultate intermediare în cazul unor interogări mai complexe.Exemplu:Numele studenţilor şi notele celor care au obţinut o notă mai mare la metode numerice decît Lupu?SELECT NoteWHERE Nume_profesor INASSIGN TO NPP: (SELECT NumeFROM ProfesoriWHERE Disciplina=”Metode numerice”)AND NOTA>(SELECT NotaFROM NoteWHERE Nume_student=”Lupu”AND Nume_profesor IN NPP)Definirea datelor în SQLComenzile pentru definirea datelor fac parte din modulul corespunzător componentei LDD al SGBD-urilor. Totuşi în majoritatea implementărilor SQL comenzile de definire a datelor sunt prelucrate de aceleaşi interpretor care rezolvă interogările şi celelalte operaţii de manipulare a datelor prezentate anterior. Aşadar componentele LMD şi LDD ale SGBD-urilor sunt implementate prin aceleaşi modul software.Crearea tabelelor (relaţiilor)Definirea unei relaţii se face prin comanda CREATE TABLE. Relaţiile definite prin această comandă sunt numite relaţii de bază. Definiţia acestor relaţii este automat memorată într-un dicţionar dedate numit şi catalogul sistem.Sintaxa comenzii de definire a tabelelor este:CREATE TABLE nume relaţie (nume_atribut 1 tip_dată [NOT NULL], [Nume_atribut 2 tip_dată[NOT NULL]]…)Comanda spoecifică numele relaţiei care se crează precum şi una sau mai multe descrieri de atribute. Descrierea fiecărui atribut specifgică numele atributului şi tipul de dată corespunzător(CHAR, INTEGER, etc) împreună cu dimensiunea asociată.Opţiunea NOT ALL asociată unui atribut, indică faăptul că în coloana corespunzătoare acestuia nu pot să apară valori nedefinitive (NULL). Această opţiune estze utilă în special la definirea atributelor care compun cheia primară a relaţiei.Exemplu:În ipoteza că fiecare profesor acordă oricărui student o singură notă, relaţia note poate fi definită astfel:CREATE TABLE Note(Nume_profesor CHAR (20) NOT NULLNume_student CHAR (20) NOT NULLNota INTEGER (2))Cheia relaţiei 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 relaţii este DROP TABLE care are ca efect eliminarea din catalogul sistem a relaţiei specificate. După executarea acestei comenzi nu se

97

Page 98: Curs Baze de Date (Prof. Ioan Rusu)

mai pot face nici un fel de referiri la relaţia în cauză, descrierea acesteia împreună cu informaţiile conţinute fiind şterse. Sintaxa comenzii este:DROP TABLE nume_relaţieCrearea vederilorO vedere este o relaţie virtuală care nu există fizic în baza dedate. În SQL o vedere este definită ca o relaţie derivată al cărei conţinut este determinat de una sau mai multe relaţii de bază conform definiţiei vederii în cauză. Comanda pentru definirea uneim vederi este CREATE VIEW şi are sintaxa:CREATE VIEW nume_vedere (nume_atribut…)AS construcţie_SELECT.Comanda CREATE VIEW crează în catalogul sistem o intrare corespunzătoare denumirii nume_vedere, căreia îi asociază definiţia specificată prin comandă, lista de atribute şi comstrucţia SELECT. Atunci cînd numele vederii este invocat într-o interogare definiţia vederii este combinată cu interogarea dată pentru a obţine o interogare în termenii relaţiilor de bază . În general construcţia SELECT din definiţia unei vederi poate avea orice formă excepţie fiind clauza ORDER BY care nu poate să apară într-o comandă CREATE VIEW. Această restricţie este impusă de necesitatea de a conferi vederilor un statut cît mai apropiat de cel al relaţiilor de bază în care, prin definiţie, ordinea tuplelor este arbitrară. Deci definiţia unei vederi nu poate conţine clauza ORDER BY, în schimb această caluză poate să apară într-o construcţie SELECT care face referire la o vedere, la fel ca în orice interogare obişnuită. Dacă este omisă lista nume_atribut din definiţia vederii atunci atributele acesteia vor avea aceeaşi denumire ca cele specificate în construcţia SELECT asociată. Acest lucru este posibil numai dacă atributele unor funcţii de agregare sau a unor expresii aritmetice, caz în care este necesară specificareaîntregii 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 puţin confidenţiale. Dacă se doreşte ca informaţia referitoare la funcţiile profesorilor să nu fie accesibilă studenţilor atunci se interzice dreptul de acces la relaţia Profesori a oricărui utilizator din categoria student. Totuşi studenţii au nevoie să ştie care profesor ce disciplină predă, de aceea pentru uzul acestora se defineşte vederea Profesori_disciplină, astfel:CREATE VIEW Profesori_disciplină (Nume, Disciplină)AS SELECT Nume, DisciplinăFROM Profesori2. 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ă conţină toţi studenţii cu media notelor peste 8 folosind comanda:CREATE VIEW Bursieri (Nume, An , Media)AS SELECT Nume, An, AVG (Nota)FROM Studenţi, NoteWHERE Nume=Nume_studentGROUP BY NumeHAVING AVG (Nota)>8Numele acestei vederi poate fi apoi invocat într-o serie de interogări implicînd studenţii bursieri. Forma acestotr interogări va fi simplificată prin folosirea vederii. Mai mult, putem modifica definiţia conceptului de bursier fără a fi necesar să modificăm interogările în care apare.Exemplu:Lista primilor 5 bursieri în ordinea descrescătoare a mediilor obţinute.SELECT Nume, An, Media

98

Page 99: Curs Baze de Date (Prof. Ioan Rusu)

FROM Bursieri BWHERE 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 interogări ci şi în comenzile DELETE, INSERT, şi UPDATE, caz în care relaţiile de bază din definiţia vederii pot suferi modificări. Pentru ca aceste operaţii să aibă sens este necesar să se respecte următoarele restricţii:- vederea invocată să nu fie rezultatul unei operaţii de cuplare (sau echivalente)- construcţia SELECT care defineşte vederea să nu conţină clauza GROUP BY, opţiunea DISTINCT sau funcţii de agregare.- vedrea să nu aibă atribute calculate (definite printr-o selecţie aritmetică).Chiar cu restricţiile de mai sus, executarea comenzilor DELETE, INSERT şi UPDATE asupra vederilor poate produce fenomene mai puţin obişnuite de care utilizatorul avizat trebuie să ţină cont.Exemplu:Fie vederea Note_Metode numerice care este derivată din relaţia de bază Note selectînd doar tuplele pentru care Nume_profesor="VASILE"CREATE VIEW Note_Metode numerice (Nume_profesor, Nume_student, Nota)AS SELECT Nume_profesor, Nume_student, NotaFROM NoteWHERE Nume_profesor="Pop"Vederea Note_metode numerice poate fi invocat într-o operaţie 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 execuţiei sale este inserarea în relaţia de bază Note a tuplei ("Costea", "Lupu", 10). Totuşi această tuplă deşi aparent a fost inserată în vederea Note_metode numerice, nu poate face parte din aceasta deoarece nu corespunde defdiniţiei vederii. În consecinţă rezultatul produs de o interogare de forma:SELECT *FROM Note_metode numericeNu va conţine tupla ("Costea", Lupu", 10) chiar dacă este formulată după execuţia operaţiei de inserare de mai sus.Efecte similare se pot evidenţia şi în cazul comenzilor de tip DELETE şi UPDATE , aplicate asupra vederilor ( operaţii de ştergere a unor tuple ce nu există în vedere sau actualizări) care au ca efect "dispariţia" a unor tuple din vedere.Ştergerea unei vederi dintr-o bază de date se face cu comanda DROP VIEW a cărei sintaxă esteDROP VIEW nume_vedereCrearea indecşilorFolosirea indecşilor permite creşterea substanţială a vitezei de acces la date, fiind una din principalele căi pentru optinizarea interogărilor. Indecşii permit accesul la date fără a fi necesară parcurgerea secvenţială a relaţiilor din care fac parte. Pentru o relaţie se pot defini unul sau mai mulţi indecşi, fiecare avînd la bază unul sau ai multe dintre atributele relaţiei.Comanda SQL pentru crearea unui index este CREATE INDEX şi are sintaxa:CREATAE (UNIQUE) INDEX nume_indexON Nume_relaţie(Nume_atribut 1, [DESC], nume_atribut 2[DESC]...)

99

Page 100: Curs Baze de Date (Prof. Ioan Rusu)

Odată creat un index nu mai poate fi invocat în interogări sau programe utilizator. Indecşii sunt folosiţi exclusiv pentru a găsi calea de acces cea mai rapidă la date şi sunt actualizaţi automat în cazul operaţiilor de inserare, ştergere sau actualizare a relaţiilor.Intrările unui index sunt ordonate implicit în ordinea crescătoare a valorilor atributelor specificate. Dacă se doreşte o ordonare descrescătoare după valorile unui anumit atribut, atuncipentru acesta se va specifica opţiunea DESC.Opţiunea UNIQUE specifică faptul că în indexul corespunzător nu pot exista două intrări avînd valori identice ale atributelor pe care acesta este definit.Această condiţie este verificată automat în cazul comenzilor INSERT şi UPDATE refuzăndu-se execuţia la apariţia unui duplicat. Prin folosirea opţiunii UNIQUE atributele care stau la baza indexului corespunzător vor forma o cheie în relaţia asociată. Dacă aceste atribute au fost, la rîndul lor definite cu opţiunea NOT NULL, atunci vom avea o cheie primară. Aşadar în SQL o cheie primară se defineşte ca un index unic fără valuri nule.Exemple:1.Crearea unui index cu numele Iprof, definit pe atributul Nume_profesor din relaţia Note se realizează prin comanda:CREATE INDEX Iprof ON Note (Nume_profesor)În relaţia Note vor putea exista în continuare mai multe tuple cu aceeaşi valoare a atributului Nume_profesor.2. Putem crea o cheie primară cu numele Note, definită pe atributele Nume_profesor şi Nume_student ale relaţiei Note prin comandaCREATE UNIQUE INDEX InoteON Note

(Nume_profesor, Nume_student)În comanda CREATE TABLE prin care s-a creat relaţia Note atributele Nume_profesor şi Nume_student au fost definite cu opţiunea NOT NULL. Folosind opţiunea UNIQUE la definirea indexului Inote perechea de atribute Nume_profesor şi Nume_student capătă statut de cheie primară. Prin indexul Inote se forţează în relaţia Note condiţia ca oricare profesor să acorde cel mult o notă fiecărui student.Eliminarea unui index dintr-o bază de date se face prin comanda DROP INDEX avînd sintaxa:DROP INDEX nume_index.Indecşii constituie instrumentul ideal pentru îmbunătăţirea performanţei unei baze de date atît timp cît este vorba numai de operaţii de interogare. Cu cît avem mai mulţi indecşi definiţi atributele relaţiilor de bază cu atît vom obţine răspunsuri mai prompte la o gamă mai variată de interogări. Cu toate acestea dacă luăm în considerare operaţiile de ştergere, inserare şi actualizare, atunci lucrurile apar astfel. Întra-adevăr orice modificare a unei tuple dintr-o relaţie de bază necesită actualizarea tuturor indecşilor definiţi peste acea relaţie (reindexarea). Actualizarea fiecărui index implică de regulă una sau mai multe accese suplimentare la date. Acest fapt măreşte costul oricărei operaţii de modificare a bazei de date şi acest cost este cu atît mai mare cu cît avem un număr mai mare de indecşi. Rezultă că existenţa unui număr prea mare de indecşi va diinua performanţele bazei de date atunci cînd se fac operaţii de inserare, ştergere şi actualizare. Concluzia care se impune este că trebuie liitat numărul de indecşi în cazul bazelor de date la care operaţiile de ştergere, inserare şi actualizare sunt frecvente. În schimb indecşi pot fi folosiţi pentru optimizarea accesului la date în cazul bazelor de date la care domină operaţiile de tip regăsire.Normalizarea relaţiilorSe tratează problema normalizării care face parte din proiectarea conceptuală a bazelor de date şi în special a bazelor de date relaţionale.Pornind de la conceptele de dependenţă funcţională şi dependenţă multivalorică sunt prezentate formele normale ale relaţiilor de la

100

Page 101: Curs Baze de Date (Prof. Ioan Rusu)

forma normală întîi (FN1) pînă la forma noirmală cinci (FN 5) precum şi principiile care stau la baza proiectării unor scheme relaţionale avînd anumite proprietăţi convenabile.Ideea centrală care stă la baza criteriilor de proiectare a unei baze de date relaţionale este aceea de dependenţă a datelor. Aceasta se referă la faptul că între atributele unei relaţii sau între atributele unei relaţii diferite pot exista anumite legături logice (dependenţei) şi acestea influenţează proprietăţile schemelor de relaţie în raport cu operaţiile curente care intervin în timpul exploatării bazei de date, adăugare, ştergere, actualizare. S-au studiat dependenţele funcţionale şi dependenţele multivalorice.Exemple:Fie schema de relaţieFurnizează (Nume, adresă, Produs, Preţ)Unde se observă dependenţa 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 cărui valoare este repetată pentru fiecare produs livrat de acelaşi furnizor. Această redundanţă duce la următoarele anomalii:- anomalia de adăugare. Nu se poate inregistra adresa unui furnozor dacă el nu livrează cel puţin un produs- anomalia de ştergere, este inversă anomaliei de adăugare şi se referă la faptul că dacă se şterg toate produsele unui furnizor se şterge şi adresa furnizorului- anomalia de actualizare , atunci cînd se schimbă adresa unui furnizor este necesară parcurgerea întregii relaţii pentru a actualiza adresa acestui furnior. În caz contrar un furnozor apare cu două adrese diferite.Aceste probleme pot fi eliminate dacă se înlocuieşte relaţia Furnizor cu două relaţii FA şi FPP cu schemele de relaţie:FA (nume, Adresă)FPP (Nume, Produs, Preţ)FA conţine Numele şi Adresa furnizorului, fără redundanţă FPP arată produsele fiecărui furnizor şi preţurile 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 relaţiilor FA, FPP care este costisitoare. Deci în proiectare este necesară descompunerea relaţiilor pentru a elimina anomaliile care decurg din ele.Dependenţele funcţionaleFie R (A1, A2, ..., An) o schemă de relaţie, iar X şi Y două atribute simple sau compuse, submulţimi ale mulţimii de atribute (A1, A2, ..., An)Definiţie:Atributul X (simplu sau compus) determină funcţional atributul Y (sau Y depinde funcţional de X) şi notăm XY dacă şi numai dacă oricărei valori (set de valori ale atributelor componente) a atributului X îi corespunde o singură valoare a atributului Y.Dependenţa funcţională XY este totală dacă nu există nici un subset Z al atributului X(ZX) astfel încît ZY respectiv este particulă în caz contrar.Proprietăţi:- dacă XY atunci orice subset Z a lui Y XZ- dacă XY şi X este un atribut simplu atunci Y este dependent funcţional total faţă de X.- dacă Y este dependent funcţional total de Z atunci avem XY pentru orice compus X care conţine pe Z.Exemplu:Fie schema de relaţie:Furnizor (Nume, Adresă, Produs, Preţ)Pot fi identificate urmmătoarele dependenţe funcţionale

101

Page 102: Curs Baze de Date (Prof. Ioan Rusu)

a) Nume Adresa este totală pe baza ipotezei că fiecare furnozor are o adresă unicăb) Nume produs Preţ. Dependenţa 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ă dependenţele funcţionale parţiale: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 dependenţele funcţioanle mai există dependenţele funcţionale trivialeNume Nume , Adresa Adresa , Produs Produs, Preţ Preţ Care nu conţin nici o informaţie la fel ca Nume Produs Preţ AdresaAdresaDependenţele funcţioanle totale netriviale din exemplul dat sunt:

Toate celelalte dependenţe se deduc din aceste două dependenţe funcţionale. Aceste dependenţe se pot deduce cu ajutorul axiomelor lui Armstrong.Fie X, Y, Z submulţimi de atribute {A1, A2, ..., An}. Cele trei axiome ale lui Armstrong sunt:A1 (reflexivitatea) Dacă YX atunci X Y. Această axiomă generează dependenţe triviale şi nu aduce nimic în plus din punct de vedere informaţional.A2 (augumentarea)Dacă X Y atunci X U Z YUZA3 (tranzitivitate) Dacă X Y şi Y Z atunci X ZAceasta este singura axiomă care conduce la obţinerea de dependenţe noi şi netriviale.Mulţimea dependenţelor funcţionale care se pot obţine prin aplicarea repetată în toate modurile posibiloe a regulilor A1 - A3 asupra unui set iniţial F de dependenţe funcţionale poartă numele de închidere a setului de dependenţe funcţionale F şi se notează cu F*Axiomele lui Armstrong constituie un set compact şi sigur de reguli care permit deducerea tuturor dependenţelor funcţionale şi numai ale acelora care sunt logic deductibile din setul iniţial de dependenţe funcţionale F. Aceasta înseamnă că orice relaţie care satisface setul iniţial de dependenţe funcţionale F va satisface de asemenea orice dependenţă din închiderea F*.În orice relaţie atributele sunt dependente funcţional 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.Dependenţele funcţionale existente în cadrul unei scheme de relaţie se datorează semanticii segmentului din lumea reală care se modelează prin această schemă şi reprezintă constrîngeri referitoare la realitatea modelată. Într-un anumit sens aceste constrîngeri constituie informaţii suplimenatre asociate relaţiei şi care nu pot fi înglobate în reprezentarea relaţiei deşi se reflectă indirect în această reprezentare prin valorile concrete pe care le iau atributele relaţiei. Aceste dependenţe nu pot fi demonstrate ele sunt aserţiuni (ipoteze de lucru) relativ la lumea reală şi are implicaţii în modelarea acesteia. Din acest motiv atunci cînd dorim să determinăm dependenţele funcţionale dintr-o relaţie, trebuie să analizăm ce anume reprezintă relaţia de

102

Page 103: Curs Baze de Date (Prof. Ioan Rusu)

fapt şi care este semnificaţia fiecărui atribut al ei. Într-un fel stabilirea dependenţelor constituie o decizie de proiectare la fel ca stabilirea relaţiilor şi atributelor, şi poate conduce la un model conceptual mai mult sau mai puţin bun, după cum ipotezele de lucru reflectă mai mult sau mai puţin fidel realitatea modelată.Descompunerea schemelor de relaţiePrincipala cale de eliminare a dependenţelor funcţionale din schemele de realţie şi a consecinţelor acestora, redundanţa datelor respectiv anomaliile de adăugare, ştergere şi actualizări este descompunerea schemei date într-o colecţie de scheme mai simple care evită aceste neajunsuri.În cele ce urmează este convenabil să asimilăm o schemă de relaţie cu mulţimea atributelor sale. O schemă de relaţie R (A1, A2, ..., An) poate fi privită ca o mulţime de atribute R={ A1, A2, ..., An }. În continuare vom folosi alternativ aceste două relaţii în funcţie de cerinţele contextului dat.Prin descompunerea unei scheme de relaţie R={ A1, A2, ..., An }se înţelege înlocuirea acestuia printr-o colecţie ={ R1, R2, ..., Rk } de submulţimi ale lui r astfel încîtR=R1UR2U ... U Rk

unde R1, R2, ..., Rk nu sunt neapărat disjuncte. Relaţiile corespunzătoare schemelor R1, R2, ..., Rk vor fi defapt proiecţii nedisjuncte ale relaţiei corespunzătoare schemei iniţiale R.Din punct de vedere semantic o astfel de descompunere urmăreşte să realizeze o separare a conţinutului de informaţie din relaţie iniţială astfel încît fiecare din schemele de relaţie rezultate să reprezinte un singur tip de entitate sau o legătură între două tipuri de entităţi.Dintre aceste descompuneri numai o parte au proprietatea că din relaţiile corespunzătoare schemelor descompunerii se poate reconstitui relaţia iniţială. Metoda uzuală de realizare a unie asemenea reconstituiri este prin folosirea operatorului de cuplare. Posibilitatea de a reconstitui relaţia iniţială se referă atît la conţinutul de informaţie cît şi la regărsirea dependenţelor funcţionale existente în relaţia iniţială.O descompunere a unei scheme de relaţie R este considerată ca fiind echivalentă cu R dacă are proprietăţile:- cuplare fără pierdere de informaţie (lossless join property)- conservare a dependenţelor (dependency preservation)Cuplarea fără pierdere de informaţiese referă la proprietatea unei descompuneri de a conserva conţinutul de informaţie al oricărei relaţii asupra căreia se aplică această descompunere. Fie R o schemă de relaţie descompusă în schemele R1, R2, ..., Rk. Descompunerea are o proprietate de cuplare fără pierdere de informaţie dacă pentru orice relaţie r, valoarea actuală a schemei de relaţie R, avem:r = R1(r) R2(r) Rk(r)adică r este rezultatul cuplării proiecţiilor sale după schemele de relaţie R1, R2, ..., Rk.Lipsa proprietăţii mai sus enunţată se manifestă în mod cocret şi aparent paradoxal prin apariţia în urma cuplării proiecţiilor rezultate prin descompunerea unor tuple suplimentare, inexistente în relaţia iniţială. Apariţia acestor tuple suplimentare sau parazite are drept consecinţe pierderea unor informaţii din relaţia iniţială prin efectul de "diluare" al informaşiei conţinută în tuplele legitime.Pentru cazul partivular al descompunerii unei scheme de relaţie R în două proiecţii R1 şi R2 se poate formula o regulă simplă pentru verificarea proprietăţii de conservare a conţinutuluzi de informaţie. Această regulă este dată de teorema lui Ullman:Teoremă:Fie p={R1, R2} o descompunere a schemei de relaţie R, atunci p constituie o descompunere fără pierdere de informaţie, în raport cu un set dat de dependenţe funcţionale iniţiale, dacă în urma descompunerii avem una din următoarele dependenţe funcţionale:(R1 R2)(R1 - R2 ),

103

Page 104: Curs Baze de Date (Prof. Ioan Rusu)

(R1 R2)(R2 - R1 )Un corolar al teoremei de mai sus este acela că dacă intersecţia celor două proiecţia unei descompuneri R1 R2 este sau conţine o cheie a uneia dintre componentele R1 sau R2 atunci descompunerea este fără pieredere de informaţie, lucru verificat prin existenţa cel puţin uneia dintre dependenţele :(R1 R2)R1 (R1 - R2 ),(R1 R2)R2 (R2 - R1 )Din forularea teoremei de mai sus se constată că proprietatea de conservare a informaţiei depinde nu numai de descompunerea p ci şi de setul iniţial de dependenţe funcţionale existente în schema de relaţie R. Exemplu:Fie schema de relaţieR(Contract, Manager, Angajat)Cu următoarele ipoteze:- pentru fiecare contract există un singur manager, rezultă dependenţa funcţionalăContract Manager- fiecare angajat are un singur manager, rezultă dependenţaAngajat Manager- un manager poate conduce mai multe contracte- un angajat poate lucra la mai multe contracte dintre cele conduse de managerul său Să considerăm următoarea descompunere a schemei RR1 (Contract, Manager)R2 (Manager, Angajat)Dacă seafce cuplarea dintre R1 şi R2 după atributul Manager se obţine o relaţie în care angajaţii 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 apariţia unor tuple suplimentare în rezultatul cuplării dintre R1 şi R2 s-a pierdut informaţia referitoare la contractul la care lucrează fiecare angajat. Descompunerea lui R în R1 şi R2 se face deci cu pierdere de informaţie. Acest lucru se poate verifica şi cu ajutorul teoremei enunţate. R1 R2 = ManagerR1 - R2 = ContractR2 - R1 = AngajatDar nici una dintre dependenţele funcţionale ManagerContract sau Manager Angajat nu este verificată.Dacă se introduce restricţia ca un manager să conducă un singur contract ceea ce implică dependenţa Manager Contract atunci este uşor de verificat faptul că descompunerea lui R în R1 şi R2 se afce fără pierdere de informaţie. Se poate constata din acest exemplu că aceeaşi descompunere poate să fie sau nu cu pierdere de informaţie şi acest lucru depinde de setul de dependenţe funcţioanle din schema de relaţie iniţială.

104