Lucrare de Licenta Baze de Date

download Lucrare de Licenta Baze de Date

If you can't read please download the document

Transcript of Lucrare de Licenta Baze de Date

CUPRINS CAPITOLUL I: INTRODUCERE IN BAZE DE DATE 1. Ce este o baza de date? 2. Arhitectura unei baze de date 3. Scheme externe 4. Scheme conceptuale 5. Scheme interne 6. Introducere in proiectarea bazelor de date CAPITOLUL AL II-LEA: MODELUL LOGIC AL DATELOR 1. Modelarea logica a datelor 2. Vederile utilizatorilor 3. Construirea unei vederi utilizator * 4. Integrarea vederilor utilizatorilor CAPITOLUL AL III-LEA: MODELE DE BASE DE DATE 1. Modelul relational de baze de date 1.1. Limbaje de prelucrare a datelor pentru modelul relational 1.1.1. Algebra relationala 1.1.2. Calculul relational pe tupluri 1.1.3. Reducerea algebrei relationale la calculul relational pe tupluri 1.1.4. Calculul relational pe domenii 1.1.5. Reducerea calculului relational pe tupluri la calculul relational pe domenii 1.1.6. Reducerea calculului relational pe domenii la algebra relationala 1.2. Limbaje relationale de cereri 1.2.1. ISBL - limbaj de tip algebra relationala 1.2.2. SQUARE - limbaj intermediar intre algebra relationala si calculul relational pe tupluri 1.2.3. QUEL - un limbaj de tip calcul relational pe tupluri 1.2.4. Query-by-Example - limbaj de tip calcul relational pe domenii 1.3. Descrierea bazelor de date de tip relational 2. SQL 2.1. SQL interpretabil 2.2. SQL programabil 3. Modelul retea 4. Modelul ierarhic (arborescent) 5. Compararea modelelor

CAPITOLUL AL IV-LEA: SISTEME DE GESTIUNE A BAZELOR DE DATE (SGBD) 1. SGBD INGRES 2. SGBD SYSTEM R 3. SGBD ORACLE * 4. SGBD dBASE 5. SGBD DBTG 6. SGBD IMS 7. Alte SGDB-uri 7.1. DATACOM/DB - tip liste inversate * 7.2. TOTAL - tip retea 7.3. IDMS - tip retea 7.4. ADABAS - tip hibrid * 7.5. System 2000 - tip ierarhic 7.6. DB2 - tip relational * 7.7. DaTaSyS - tip relational 7.8. NOMAD - tip relational * 7.9. RELGRAF - tip relational CAPITOLUL AL V-LEA: CONSTRUIREA UNEI BAZE DE DATE 1. Dependente in baze de date 1.1. Dependente functionale 1.2. Descompunerea schemelor relationale 1.3. Dependente multivaloare 1.4. Dependente generalizate 2. Forme normale ale bazelor de date relationale 2.1. Prima forma normala (1NF) 2.2. A doua forma normala (2NF) 2.3. A treia forma normala (3NF) 2.4. Forma normala Boyce-Codd (BCNF) 2.5. A patra forma normala (4NF) 2.6. A cincia forma normala (5NF) 3. Integritate 4. Securitate 4.1. Securitatea in QBE 4.2. Securitatea in SQL 4.3. Securitatea in QUEL 4.4. Baze de date statistice 5. Optimizarea cererilor 5.1. Prelucrarea algebrica a cererilor 5.2. Optimizari in System R 5.3. Algoritmul de descompunere QUEL 5.4. Micsorarea numarului de uniuni * 6. Construirea unei baze de date de tip retea * 7. Construirea unei baze de date de tip arborescent 8. Concurenta in bazele de date 8.1. Accesul concurent la date 8.2. Detectarea erorilor si restabilirea informatiei 9. Baze de date distribuite

9.1. Reprezentarea bazelor de date distribuite 9.2. Optimizarea cererilor in baze de date distribuite 9.3. Optimizarea cererilor in sistemul R* 9.4. Problema concurentei CAPITOLUL AL VI-LEA: MEMORAREA DATELOR UNEI BAZE DE DATE 1. Fisiere 2. Tipuri de organizare a fisierelor 2.1. Fisiere secventiale 2.2. Fisiere cu dispersie 2.3. Fisiere cu index rar 2.4. Fisiere cu index dens 2.5. Fisiere cu structura de B-arbore * 2.6. Inplementarea modelului logic 3. Metode de cautare in fisiere 3.1. Fisiere cu indexi secundari 3.2. Indicarea partiala a chei de cautare 3.3. Cazuri speciale de cautare * 3.4. Interpretarea vederilor 4. Inregistrari de lungime variabila 4.1. Metoda spatiului rezervat 4.2. Metoda inlantuirii 4.3. Metoda mixta * 4.4. Transformarea modelului virtual in model real * 4.5. Implementarea modelelor de baze de date in cazul unor entitati si relatii de lungime variabila CAPITOLUL AL VII-LEA: APLICATII 1. Directii de cercetare 2. Calculatoare de baze de date 3. Interfete 3.1. Interfete pentru acces la date 3.2. Interfete pentru prezentari de date 3.3. Generatoarele de aplicatii 3.4. Facilitati de administrare 3.5. Dictionare 4. Baze de date orientate obiect 4.1. Sistemul VISION 4.2. Limbajul OPAL 5. Baze de cunostinte * 6. Exemple

CAPITOLUL I

INTRODUCERE IN BAZE DE DATE CURSUL 1 1. Ce este o baza de date? La inceput calculatoarele au fost utilizate numai pentru calcule aritmetice. Prin cresterea vitezei de calcul, prin cresterea capacitatii de memorare a datelor, prin adaugarea unor noi componente de intrare iesire, prin dezvoltarea unor limbaje de programare s-a ajuns acum la prelucrarea intr-un timp scurt a unei mari cantitati de informatii. Organizarea si gestionarea acestor informatii se face la nivelul bazelor de date. O baza de date contine toate informatiile necesare despre obiectele ce intervin intr-o multime de aplicatii, relatiile logice intre aceste informatii si tehnicile de prelucrare pentru aceste informatii. In bazele de date se face o integrare a datelor in sensul ca mai multe fisiere sunt privite in ansamblu, eliminandu-se pe cat posibil informatiile redondante. In acelasi timp se permite accesul simultan la aceleasi date a mai multor persoane. Exemplul 1.1. Pentru o facultate pot fi pastrate de exemplu pe perioade mari de timp informatii privind studentii, personalul, salile, planul de invatamant, aparatura si alte elemente despre care diferite persoane pot cere informatii la un moment dat. Intre aceste elemente exista diferite relatii cum ar fi: unii studenti fac anumite cursuri, unele cursuri se tin in anumite sali, unele aparate se afla in anumite sali, unele persoane pot tine cursuri si alte relatii asemanatoare. Sistemul de programe cu care se pot construi bazele de date, se pot introduce date in bazele de date si se pot dezvolta aplicatii privind bazele de date se numeste sistem de gestiune al bazelor de date (SGBD). Un SGBD da posibilitatea utilizatorului sa aiba acces la date folosind un limbaj de tip inalt apropiat de modul obisnuit de exprimare pentru a obtine informatii, utilizatorul facand abstractie de algoritmii aplicati pentru selectionarea datelor implicate si a modului de memorare a lor. SGBD-ul este o interfata intre utilizatori si sitemul de operare. Orice SGBD contine printre alte componente un limbaj de descriere a datelor (LDD) care permite descrierea structurii unei baze de date, a fiecarei componente a ei, a relatiilor dintre ele, a drepturilor de acces ale utilizatorilor la baza de date, a restrictiilor in reprezentarea informatiilor si alte elemente asemanatoare. O alta componenta foarte inportanta a unui SGBD este limbajul de cereri (LC) sau limbajul de prelucrare a datelor (LPD) ce permite operatii asupra datelor aflate in baza de date cum sunt: incarcarea bazei de date, inserarea unui nou element, stergerea unui element, modificarea unuui element, cautarea unor elemente, diferite statistici asupra datelor si alte operatii asemanatoare. Spre deosebire de limbajele de programare obisnuite in care declararea datelor este facuta in acelas loc cu prelucrarea lor, bazele de date prevad limbaje separate pentru declarare si pentru prelucrare. Aceasta deoarece intr-un program obisnuit datele exista efectiv numai pe timpul rularii programului pe cand intr-o baza de date

in general datele sunt definite o data pentru totdeauna si nu mai sunt necesare redefiniri. Limbajele LDD si LC sunt de cele mai multe ori extinderi ale unor limbaje de programare numite limbaje gazda. Compilarea succesiunilor de comenzi pentru descrierea datelor sau pentru operarea cu date se reduce in acest caz la o precompilare adica transformarea acestor comenzi intr-o succesiune de instructiuni ale limbajului gazda care prin executare sa dea efectul dorit. O alta modalitate de operare este aceea a transformarii comenzilor in lansari de programe executabile. O structura posibila pentru SGBD este data in figura 1.1. In aceasta figura procesorul de cereri prelucreaza cererile utilizatorilor presentate la terminal sau sub forma de programe de aplicatii scrise in LC transformandu-le in comenzi executabile de catre gestionarul bazei de date; compilatorul LDD interpreteaza transforma descrierile utilizatorului in comenzi pentru initierea sau modificarea unei baze de date; gestionarul bazei de date transforma comenzile de cereri si descrieri de baze de date in operatii executabile de catre sistemul de gestiune a fisierelor care opereaza asupra datelor aflate in diferite fisiere. frecvent (cerere C1 procesor utilizator) cereri (cerere C2 gestionar gestionar baza compilata) baza date fisiere date fizica compilator (descriere LDD baza date) Figura 1.1. Dintre sarcinile pe care le indeplineste gestionarul bazelor de date fac parte si urmatoarele: - Reducerea redondantelor prin identificarea informatiilor comune si alcatuirea corespunzatoare a aplicatiilor. - Eliminarea inconsistentelor ce rezulta din eliminarea redondantelor. - Utilizarea simultana a datelor de mai multi utilizatori. - Standardizarea informatiilor. - Asigurarea securitatii bazelor de date in sensul acordarii si urmaririi modului de acces al utilizatorilor la diferite parti componente ale bazelor de date. - Asigurarea integritatii bazelor de date in sensul pastrarii corectitudinii datelor continute in baza de date prin testele aplicate datelor introduse in baza de date.

mai putin (cerere C2 frecvent program aplicativ) rar (schema baza date)

- Asigurarea sincronizarii in cazul utilizarii bazei de date simultan de mai multi utilizatori sau a distribuirii informatiei pe mai multe sisteme. Utilizatorii bazelor de date pot fi impartiti in urmatoarele clase: - Utilizatorii obisnuiti care pot sa obtina informatiile fara sa aiba cunostinte de programare. Ei obtin informatiile pe care le doresc prin comenzi stiute si eventual raspunzand la diferitele optiuni pe care i le indica sistemul de calcul la un moment dat. - Programatorii de aplicatii care pot scrie programe in LC, acestea fiind apoi compilate si memorate in fisiere putand fi lansate in executie de utilizatori prin invocarea numelui asociat lor. - Administratorul bazei de date care stabileste structura initiala a bazei de date si modul de memorare a datelor la nivel fizic, acorda drepturi de acces al utilizatorilor la baza de date sau parti ale ei, stabileste conditiile pentru asigurarea securitatii si integritatii datelor, modifica structura bazei de date daca este nevoie, asigura intretinerea bazei de date facand periodic copii si reconstituid eventual baza de date in cazul cand au aparut erori datorate componentelor soft, hard sau de utilizare si raspunde in general de modul de utilizare al bazei de date. - Administratorul sistemului de baze de date care stabileste bazele de date de pe un sistem de calcul, aloca spatii de memorare si asigura drepturi de acces. Cele mai multe SGBD-uri contin si diferite utilitare folosite in diferitele aplicatii cum sunt: procesoare pentru limbaje de cereri, editoare de rapoarte, subsiteme de reprezentari grafice, posibilitati de lucru tabelat, procesoare de limbaje naturale, programe statistice, posibilitati de copiere, generatoare de aplicatii (procesore inteligente de tip "4GL") si alte posibilitati de dezvoltari aplicatii de tip CASE (computer-aided software engineering). Pentru a usura munca administratorului de sistem un SGBD contine o serie de componente ce permit incarcarea (crearea unei versiuni initiale a bazei de date plecand de la unul sau mai multe fisiere), salvarea si reincarcarea (efectuarea de copii periodice si posibilitatea refacerii bazei de date plecand de la aceste copii), reorganizarea (rearanjarea datelor pentru a obtine performante superioare), statistici, analize si altele. CURSUL 2 2. Arhitectura unei baze de date O baza de date poate fi privita din mai multe puncte de vedere cum sunt: - Punctul de vedere al utilizatorilor care privesc anumite parti componente ale bazei de date numite vederi. Vederile sunt descrise prin subscheme in sublimbaje ale limbajului de descriere a datelor. De asemenea utilizatorii pot sa primesca raspunsuri la diferitele cereri formulate prin intermediul limbajului de prelucrare a datelor.

- Punctul de vedere al administratorului de baza de date care integreaza toate vederile ce privesc baza de date intr-un singur model numit schema conceptuala. Schema conceptuala constituie nivelul logic al bazei de date. - Punctul de vedere al implementatorului bazei de date (care de cele mai multe ori coincide cu administratorul bazei de date) care priveste baza de date ca o colectie de fisiere memorate pe diferite medii externe cum sunt benzile si discurile magnetice. Acesta constituie nivelul fizic al bazei de date fiind de fapt singurul nivel existent efectiv. Fiecare dintre cele trei nivele contine subnivele. De exemplu utilizatorii pot fi utilizatori obisnuiti, fara cunostinte de programare sau programatori de aplicatii, organizarea vederilor corespunzatoare lor fiind diferita. La fel nivelul fizic poate sa contina un subnivel logic in care conteaza semnificatia diferitelor campuri din inregistrarile fisierelor si structurile de date asociate si un subnivel fizic in care esential este numai modul de organizare si gestionare a blocurilor pe memoria externa. Primele doua nivele sunt descrise prin planuri ce constau in enumerarea tipurilor de entitati ce apar in baza de date, relatiile intre aceste tipuri de entitati si modul de trecere de la notiunile acestui nivel la nivelul imediat urmator. In mod curent aceste planuri se numesc scheme externe sau subscheme conceptuale sau vederi pentru primul nivel si scheme conceptuale pentru al doilea nivel. Descrierile la nivel fizic sunt facute prin scheme interne sau scheme fizice.

3. Scheme externe Informatiile ce apar in scheme externe pot fi luate ca atare din nivelele logic si fizic sau pot fi deduse din aceste informatii pe baza unor calcule. De exemplu pentru o persoana poate sa apara intr-o vedere atributul varsta dar la nivel logic si fizic atributul varsta nu este indicat din cauza permanentei modificari a continutului lui. In acest caz se foloseste la nivel logic un atribut data_nasterii care prin scadere din data curenta permite aflarea varstei persoanei respective. Alte informatii ce pot sa apara in vederi si care de obicei nu sunt prevazute in schemele conceptuale privesc numarul de elemente dintr-o multime, media valorilor unei multimi de elemente numerice si alte informatii asemanatoare. Vederile sunt definite prin intermediul unui sublimbaj de definire a datelor (SLDD) care de cele mai multe ori este inclus in LDD sau este foarte apropiat ca structura de LDD. Exista sisteme de baze de date care permit mai multe SLDD in acelasi timp fiecare utilizator alegandu-si modul propriu de descriere al datelor. Informatiile ce se obtin din baza de date pot fi apoi prelucrate prin proceduri scrise in anumite limbaje de programare. Pentru utilizatorul obisnuit modul de definire a vederilor este transparent el putand sa obtina sau sa modifice informatiile dorite prin intermediul unor comenzi cu structura data, folosind forme predefinite pe care le completeaza sau utilizand un sistem de meniuri.

In reprezentarea intuitiva a vederilor intervin notiunile de entitate, relatie, atribut, cheie, functionalitate, diagrama si altele pe care le vom definii ulterior. Notiunea de entitate nu se poate defini formal fiind o notiune primara. Mai multe elemente de acelasi tip formeaza o entitate. Cateva exemple de entitati sunt: persoana, student, sala, culoare, simt, padure, etc. O problema foarte importanta in definirea vederilor este fixarea entitatilor asociate ei adica a claselor de obiecte cu care se opereaza in vederea respectiva. Fiecare entitate este descrisa de o multime de proprietati esentiale numite atribute care pentru diferitele elemente ale entitatii pot sa primeasca valori din anumite multimi numite domeniul atributului. De obicei domeniile sunt submultimi ale multimii numerelor reale sau ale multimii numerelor intregi sau ale multimii sirurilor de caractere. Alegerea atributelor asociate entitatilor este o alta problema foarte importanta in definirea vederilor. Un atribut sau o multime de atribute pentru care valorile asociate determina in mod unic orice element al entitatii respective se numeste cheie. De obicei orice entitate admite cel putin o cheie deci inplicit se considera ca toate elementele unei entitati sunt distincte. In cazurile in care exista elemente care sa aiba aceleasi valori pentru toate atributele se ia drept cheie un atribut suplimentar ce defineste numarul asociat elementului in entitatea respectiva care defineste in mod unic elementul. Numim relatie intre entitatile E1,E2,...,Ek orice submultime a produsului cartezian al multimilor elementelor celor k entitati, adica multimi de elemente de forma (e1,e2,...,ek) unde e1 este un element din E1, e2 este un element din E2 si asa mai departe. O astfel de relatie o notam REL(E1,E2,...,Ek) si spunem ca are aritatea k. De cele mai multe ori k=2 deci se lucreaza cu relatii binare. In cazul relatiilor binare se poate face o clasificare a lor in functie de cate elemente corespund fiecarui element dintr-o entitate in cealalta entitate dupa cum urmeaza: - relatie unu-la-unu (notata 1:1) in cazul in care fiecarui element din prima entitate ii corespunde cel mult un element din a doua entitate si reciproc. - relatie unu-la-mai-multi (notata 1:N) in cazul in care fiecarui element al primei entitati ii pot corespunde mai multe elemente din cea de-a doua entitate dar fiecarui element din a doua entitate ii corespunde cel mult un element din prima entitate. - relatie mai-multi-la-mai-multi (notata M:N) in cazul in care fiecarui element al primei entitati ii pot corespunde mai multe elemente din cea de-a doua entitate si reciproc. In practica cele mai des intalnite sunt ultimile doua tipuri de relatii dar la implementarea bazelor de date de cele mai multe ori ultimul tip se reduce la relatii de tipul 1:N dupa cum vom vedea in continuare.

Exemplul 1.2. ?????? - de construit ?????? Informatiile privind structura unei vederi sunt sintetizate grafic intr-o diagrama entitate-relatie care pune in evidenta entitatile ce intervin reprezentate prin dreptunghiuri, atributele asociate lor reprezentate prin elipse si diferitele relatii ce se stabilesc intre entitati reprezentate prin sageti (cu varf dublu catre entitatea pentru care pot apare mai multe elemente in relatie cu un element din cealalta entitate. Pentru vederea definita in exemplul 1.2 se poate asocia diagrama din figura 2.

4. Scheme conceptuale Schema conceptuala a bazei de date combina subschemele vederilor ce privesc o anumita aplicatie intr-un model unitar. Modul de descriere si de reprezentare este acelasi cu modul de descriere si de reprezentare al vederilor. Deci si in schema conceptuala intervin notiunile de entitate, relatie, cheie, diagrama entitate-relatie si altele. In combinarea vederilor se tine seama de posibilitatea identificarii unor entitati, de transformarea unor relatii, de completarea unor informatii, de modul de reconstituire a informatiilor la nivelul vederilor. In plus trebuie sa se tina seama si de modelul de baze de date ales pentru cazul particular dat. O schema conceptuala trebuie sa se bazeze pe un model teoretic si sa fie simpla in sensul de a fi usor de inteles si de prelucrat. Numarul elementelor ce o constituie sa nu fie prea mare, diferitele concepte folosite sa fie separate clar, sa se pastreze simetriile, sa se tina sub control redondantele sunt cateva din principiile ce se aplica in acest caz. Pana acum sistemele de gestiune a bazelor de date au fost clasificate in trei grupe mari in functie de tipul elementelor cu care lucreaza: - modelul retea permite lucrul cu entitati si relatii binare de tipul unu-la-unu si unu-la-mai-multi cu diagrama rezultata un graf oarecare. - modelul arborescent (ierarhic) permite lucrul cu entitati si relatii binare de tipul unu-la-unu si unu-la-mai-multi si diagrama alcatuita dintr-o multime de arbori. - modelul relational in care intervin numai relatii si operatii cu ele. In capitolele urmatoare vom descrie aceste modele punand accent pe modelul relational care este cel mai raspandit fiind foarte eficient in special pentru baze de date de dimensiuni mici, fiind mai mult studiat si din punct de vedere teoretic si nu in ultimul rand fiind mai usor de manuit de utilizatori.

5. Scheme interne

Schemele interne descriu diferitele fisiere utilizate pentru memorarea informatiilor bazei de date si modul de operare cu ele. Dintre multiplele moduri de organizare a fisierelor vom descrie in capitolul al saselea al acestei lucrari organizarea secventiala, organizarea cu index rar si index dens, organizarea cu dispersie si organizarea folosind B-arbori. Vor fi discutate si alte probleme speciale legate de organizarea fisierelor cum ar fi cautarea informatiilor dupa chei secundare sau chei incomplete si memorarea inregistrarilor de dimensiuni variabile. Traducerea schemelor conceptuale in scheme interne se face de obicei automat de catre SGBD. Pe langa stabilirea diferitelor tipuri de inregistrari utilizate in reprezentarea fizica a datelor se specifica si existenta indexilor asociati unor fisiere, semnificatia campurilor inregistrarilor, ordinea de aparitie a inregistrarilor si modul de acces. 6. Introducere in proiectarea bazelor de date Proiectarea bazelor de date presupune fixarea structurii bazei de date si a metodelor de prelucrare a datelor spre deosebire de utilizarea bazei de date care priveste mai mult ceeace contine baza de date la un moment dat. Daca baza de date isi schimba frecvent continutul, structura ei ramane nemodificata pe lungi perioade de timp. Prin proiectare se determina un model semantic in care sa se reflecte cat mai fidel lumea reala construit astfel: 1. Se identifica o multime de concepte semantice (entitati, tipuri de entitati, proprietati ale entitatilor, identificatorii entitatilor, relatii intre entitati si altele) ce dau informatii despre lumea reala. 2. Se asociaza obiecte simbolice formale prin care sunt reprezentate conceptele semantice. 3. Se definesc reguli de integritate formale ce se aplica obiectelor simbolice. 4. Se defineste o multime de operatori formali ce pot sa transforme obiectele formale. Un model de etapizare a construirii unei baze de date ar putea fi urmatorul: 1. Studiul de fezabilitate consta in cercetarea sistemelor operative deja existente, stabilirea unor alternative cu evaluarea costurilor, a avantajelor si dezavantajelor fiecarei alternative in parte. 2. Cercetarea sistemului prin determinarea diferitelor detalii ale sistemului prezent (tipuri de date, dimensiuni, conditii exceptie) folosind metode de interogare, chestionare, exemplificari si observatii directe. 3. Analiza sistemului prin determinarea cauzelor diferitelor evenimente si a adoptarii diferitelor metode, eventualele alternative posibile.

4. Proiectarea sistemului prin determinarea celui mai bun model de reprezentare si prelucrare a datelor, de asigurare a securitatii si integritatii. 5. Dezvoltarea sistemului prin stabilirea detaliilor asociate datelor asociate, a relatiilor dintre ele si a modului de reprezentare fizica. 6. Implementare prin proiectarea, scrierea si testarea programelor, antrenarea utilizatorilor, alcatuirea documentatiei, crearea si incarcarea fisierelor. 7. Revizuire si intretinere prin probe de lucru ale noului sistem, efectuarea unor eventuale modificari, adaugarea de noi componente si urmarirea procesului de prelucrare a datelor. In proiectarea bazelor de date se tine seama de independenta datelor pe diferite nivele. De exemplu reprezentarea fizica a datelor se poate schimba in timp pentru a obtine performante superioare din punct de vedere al timpului de raspuns si al spatiului ocupar fara ca aceasta sa afecteze modul de reprezentare a datelor in schema conceptuala. Acesta independenta se numeste independenta fizica a datelor. De asemenea intre vederi si schema conceptuala apare o independenta numita independenta logica a datelor. In timpul existentei unei baze de date pot apare modificari in schema conceptuala prin adaugarea unor noi entitati sau prin adaugarea de noi atribute unor entitati existente. Vederile care nu fac referiri la campurile modificate raman neschimbate fiind rescrise numai aplicatiile pentru care s-au modificat unele atribute sau pot fi construite vederi noi. Proiectarea unei baze de date priveste in primul rand nivelul logic si mai putin cel fizic. Proiectarea se poate face plecand de la modelul relational care permite o tehnologie de proiectare si apoi se poate transforma rezultatul proiectarii in oricare dintre modele prin adaptarile corespunzatoare. Capitolele urmatoare descriu pe larg structura bazelor de date si in cea mai mare parte vom urmarii acrivitatile specifice privind proiectarea bazelor de date legate de toate notiunile prezentate.

CAPITOLUL AL II-LEA MODELUL LOGIC AL DATELOR CURSUL 3

1. Modelarea logica a datelor Poate cea mai importanta parte din procesul construirii unei baze de date il constituie studiul sistemului ce urmeaza sa fie reflectat in baza de date. Stabilirea informatiilor relevante pentru sistem si a relatiilor dintre ele este de cea mai mare importanta pentru etapele urmatoare. Baza de date reprezinta un model al lumii reale si nu poate reprezenta decat un numar limitat de caracteristici ale ei necesare in unele aplicatii. Oricat de perfectionat ar fi modelul utilizat exista aplicatii care se pot concepe astfel incat sa nu poata fi satisfacute de baza de date. Deci apar interpretari subiective ale lumii reale reflectate in baza de date. Pentru a construi o baza de date corespunzatoare unui sistem real dat se face mai intai o apreciere generala a sistemului. In aceasta apreciere se includ informatii privind structura sistemului, elementele esentiale ale sistemului care sunt cuprinse intr-o schita preliminara. Schita cuprinde printre alte informatii si modul in care sistemul este vazut de diferitele persoane implicate in sistemul respectiv. Se creaza un model informational in care sunt cuprinse principalele functiuni si fluxul de informatii din sistem. Sistemul trebuie privit unitar si nu ca o alaturare a componentelor sale. In baza de date multe parti sunt folosite in comun de diferitele componente ale sistemului. Modelul utilizat frecvent in acest caz se numeste modelul entitate/relatie (E/R) descris de Chen in 1976 si perfectionat ulterior. Acest model are drept obiecte semantice urmatoarele: - Entitatea ce este definita ca un lucru ce poate fi unic identificabil. Se pot deosebii entitati obisnuite (regular entities) si entitati speciale (weak entities) a caror existenta este dependenta de existenta altor entitati. - Proprietatea sau atributul ce defineste o latura a entitatii sau relatiei putand lua valori intr-un domeniu asociat. Proprietatile pot sa fie simple sau compuse, chei (sa identifice unic entitatea respectiva), univaloare sau multivaloare (grup repetitiv), sa poata fi omisa (necunoscuta sau neaplicabila), de baza sau derivata si asa mai departe. - Relatia ce defineste o asociere intre entitati. Numarul de edntitati ce apar intr-o relatie se numeste gradul relatiei. O entitate E poate sa participe la relatia R total (prin toate elementele lui E) sau partial. Relatiile pot sa fie de tipul unu-la-unu, unu-la-mai-multi (mai-multi-la-unu) sau mai-multi-la-mai-multi. - Subtipul unei entitati este un tip de entitate ce formeaza o submultime a entitatii respective, de obicei cu proprietati suplimentare. Tipul de entitate de care apartine un subtip se numeste supertip. Pentru fiecare entitate in parte se poate stabili un tip ierarhic prin subordonarile de forma subtip si supratip. Modelul logic al bazei de date este reprezentat grafic prin diagrame entitate/relatie. In aceste diagrame entitatile sunt reprezentate sub forma de dreptunghiuri ce contin numele entitatii respective. Pentru entitatile speciale linia ce

inconjoara dreptunghiul este dubla. Proprietatile sunt reprezentate prin elipse ce contin numele proprietatii respective si unite cu linii de entitatile la care sunt asociate. Elipsa se deseneaza punctat daca proprietatea este derivata si dublat daca este multivaloare. Proprietatile compuse au legate de ele componentele lor reprezentate tot sub forma de elipse. Cheile sunt subliniate. Relatiile sunt reprezentate sub forma de romburi etichetate cu numele tipului relatiei respective. Rombul se dubleaza daca relatia indica legatura intre o entitate speciala si entitatea de care depinde ea. Relatia este unita prin linii cu entitatile ce apar in ea etichetate cu "one" sau "many" dupa caz. Linia se dubleaza daca participarea in relatie a entitatii este totala. Orice subtip Y al lui X se marcheaza cu o linie de la Y la X pe care se pune semnul de incluziune de multimi (a lui Y in X). Un alt model utilizat in proiectarea logica a datelor este modelul relational extins (extended relational model sau pe scurt RM/T) introdus de Codd. In acest model nu se face distinctie intre entitati si relatii. Entitatile sunt clasificate in trei tipuri: entitati nucleu (existenta independenta), entitati caracteristice (ce descriu unele proprietati ale altor entitati) si entitati asociative (ce descriu asocieri intre diferite entitati). In sistemul RM/T atat cheile primare cat si cheile straine se considera surogate, combinatii ce determina unic in sistem informatia respectiva pe toata durata existentei ei. Baza de date contine cate o E-relatie pentru fiecare tip de entitate, acestea fiind relatii unare ce contin surogatele entitatilor din tipul de entitate asociat. Tipurile de proprietati ale unui tip de entitate dat sunt reprezentate printr-o multime de P-relatii. Sistemul RM/T contine o serie de reguli de integritate si anume: regula integritatii entitatii (cheile nu pot sa contina valoarea null), regula integritatii referentiale (necesitatea existentei elementului referit printr-o cheie straina nenula), regula integritatii E-relatiilor (pentru E-relatii sunt permise inserari si stergeri dar nu modificari), integritatea proprietatilor (o proprietate nu poate exista in baza de date daca nu exista si entitatea pe care o descrie), integritatea caracteristicilor (o entitate caracteristica nu poate exista in baza de date fara existenta entitatii pe care o descrie), integritatea asocierii (o entitate asociativa nu poate exista in baza de date decat daca exista si entitatile asociate de ea), integritatea desemnarii si integritatea subtipului. Metodologia proiectarii folosind sistemul RM/T cuprinde urmatorii pasi: determinarea entitatilor nucleu, determinarea entitatilor asociative, determinarea desemnarilor, determinarea entitatilor caracteristice, determinarea proprietatilor si determinarea supertipurilor si subtipurilor.

2. Vederile utilizatorilor

Fiecare aplicatie presupune utilizarea unei parti din baza de date, folosind informatiile intr-un mod determinat. Aceasta parte de informatie se numeste vedere. O baza de date poate sa aiba una sau mai multe vederi. La fiecare vedere corespunde un grup de utilizatori. Pentru un grup particular se definesc tipurile de cereri de informatii si modul de determinare a datelor din baza de date care formeaza raspunsuri la aceste cereri.

Un pas important in proiectarea unei baze de date corespunzatoare unui sistem este determinarea vederilor si claselor de utilizatori asociate lor. Acestea se stabilesc de obicei prin colaborarea persoanelor cu responsabilitati in sistem. Utilizarea vederilor permite independenta logica a datelor in sensul ca informatiile si programele utilizatorilor nu sunt dependente de structura logica a bazei de date ce se poate modifica in timp prin extindere sau restructurare. Extinderea se poate face fie prin adaugarea de noi atribute la relatiile existente in baza de date fie prin adaugarea unor relatii noi. Restructurarea presupune rearanjarea diferitelor atribute in noi relatii. Vederile permit ca aceleasi date sa fie privite in mod diferit de diferitii utilizatori. Prin ele se simplifica modul de percepere al utilizatorilor prin ignorarea informatiilor care nu sunt importante pentru aplicatia respectiva. Importanta este si asigurarea automata a securitatii datelor la care utilizatorii nu au acces.

3. Construirea unei vederi utilizator

Se stabilesc persoanele de la care urmeaza sa fie obtinute informatiile privind vederea respectiva, ordinea in care urmeaza sa fie intervievati, subiectele ce urmeaza sa fie discutate si ce intrebari esentiale trebuiesc puse. Se urmareste obtinerea unor informatii relevante pentru sistemul respectiv, concise, corecte si actuale. Vederile trebuiesc sa fie concepute adaptabile in sensul de a putea fi schimbate in functie de necesitatile utilizatorului. Avand o structura generala a aplicatiei, cunoscand persoanele ce utilizeaza acea parte de sistem si informatiile de care au ele nevoie se poate construi un model de informatii pentru vederea respectiva. Plecand de la o schita grafica avand principalele elemente, pe baza discutiilor avute si a observarii sistemului existent sunt precizate detaliile si sunt facute corecturile necesare. Se stabilesc de asemenea fluxurile de resurse, diferitele legaturi cu exteriorul (interfete) si limitari existente. Pentru construirea vederilor se pot aplica diferite strategii cum sunt: - metoda elementelor componente (Organisation Chart approach) prin care se definesc pe rand fiecare din elementele componente ale vederii; - integrarea ulterioara (Integration Later) prin punerea de acord a informatiilor comune diferitelor componente; - metoda de sus in jos (Top Down approach) in care detaliile sunt precizate pe nivele succesive; - metoda colectiei de date (The Data Collection approach) in care se face o achizitie de date ce urmeaza sa fie analizate in momentul punerii in baza de date retinandu-se numai datele utile; - metoda bazei de date (The Data Base approach) in care datele sunt achizitionate sub forma de reprezentare din baza de date.

Se construieste o diagrama de tip entitate-relatie in care entitatile sunt reprezentate prin dreptunghiuri si relatiile prin linii intre entitati. Exemplul 2.1. Un prim model pentru o vedere a unei facultati avand drept utilizatori membrii Colectivului de Conducere este cel din fig. 2.1. ___________________ | | | STUDENTI | |_________________| / \ / \ / \ __________________ _________________ ________________ | | | CADRE | | PERSONAL | | CURSURI |-------------| DIDACTICE |-------| AJUTATOR | |________________| |_______________| |______________| Figura 2.1.

4. Integrarea vederilor utilizatorilor

CAPITOLUL AL III-LEA MODELE DE BASE DE DATE CURSUL 4 Dupa cum am aratat in primul capitol, sistemele de baze de date au in vedere trei tipuri de structuri de reprezentare a informatiilor la nivel logic si de operare cu ele si anume modelul relational, modelul retea si modelul arborescent sau ierarhic. In continuare vom da cartacteristicile acestor modele si unele limbaje caracteristice cu o mentiune speciala pentru limbajul SQL pe care se bazeaza majoritatea sistemelor de baze de date relationale folosite in zilele noastre. In descrierea modelelor vom urmari pe de o parte modul de reprezentare a datelor si relatiilor dintre ele iar pe de alta parte operatiile asupra datelor folosite pentru a raspunde la cererile utilizatorilor si alte transformari posibil de efectuat asupra datelor.

1. Modelul relational de baze de date Un model relational de baze de date cuprinde trei componente principale: - Structura datelor prin definirea unor domenii (valori atomice) si a relatiilor n-are (atribute tupluri, chei primare). - Integritatea datelor prin impunerea unor restrictii. - Prelucrarea datelor prin operatii din algebra relationala sau calculul relational. Modelul relational se bazeaza pe notiunea matematica de relatie asa cum este definita in teoria multimilor si anume ca o submultime a produsului cartezian a unei liste finite de multimi numite domenii. Elementele unei relatii se numesc tupluri si numarul de domenii (nu toate distincte) din produsul cartezian se numeste aritatea relatiei. De exemplu (a1,a2,...,ak) sau mai pe scurt a1a2...ak cu ai din Di pentru orice i=1...k reprezinta un tuplu al unei relatii de aritate k in care ai reprezinta cel de-al ilea element al tuplului. De obicei relatiile sunt reprezentate sub forma unor tabele in care fiecare rind reprezinta un tuplu si fiecare coloana reprezinta valorile tuplurilor dintr-un domeniu dat al produsului cartezian. Coloanelor unei relatii in reprezentarea sub forma de tabel si respectiv domeniilor corespunzatoare lor li se asociaza nume numite atribute. Multimea numelor atributelor unei relatii se numesta schema relationala. Daca relatia numita R are atributele A1,A2,...,Ak, atunci schema relationala se noteaza R(A1,A2,...,Ak). Un alt mod de a defini relatiile este urmatorul: prin relatie intelegem o multime de functii definite pe o multime de atribute cu valori in reuniunea unor domenii cu restrictia ca valoarea corespunzatoare fiecarui atribut sa se afle in domeniul asociat acelui atribut. Trecerea de la un mod de definire al relatiei la celalalt se face relativ simplu. O relatie in sensul de multime se transforma intr-o relatie in sensul de functii asociid fiecarui domeniu D1,D2,...,Dk al produsului cartezian cate un nume de atribut A1,A2,...,Ak si definind pentru fiecare tuplu tj=(aj1,aj2,...,ajk) functia fj cu fj(Ai)=aji, i=1,...,k. Multimea acestor functii formeaza o relatie in sensul celei de-a doua definitii. Trecerea inversa se face impunand o relatie de ordine totala pe multimea atributelor si asociind fiecarei functii tuplul obtinut din valorile functiei respective in ordinea corespunzatoare atributelor. Din punct de vedere al bazelor de date cea de-a doua definitie este de preferat deoarece permite prelucrarea informatiilor corespunzatoare unui atribut fara a cunoaste pozitia acelui atribut in relatie, aceasta permitand o mai mare independenta de reprezentare a datelor.

Pentru relatiile ce constituie o baza de date se fac diferite presupuneri initiale cum ar fi: neexistenta unor tupluri duplicate, neaparitia intr-o ordine data a tuplurilor, neaparitia intr-o ordine data a atributelor, toate atributele pot sa aiba numai valori atomice (nedecompozabile) si altele. Se numeste candidat de cheie a unei relatii coloana sau multimea de coloane din R pentru care valorile corespunzatoare lor din oricare doua tupluri nu coincid, deci identifica tuplurile din relatia respectiva, si nu contin strict o submultime de coloane cu aceasta proprietate. Pentru fiecare relatie se alege un candidat de cheie care se numeste cheie prinmara a relatiei. Tuplurile unei relatii nu pot sa contina valoarea nula in coloane ce apartin cheii primare. Evantualii candidati de cheie diferiti de cheia primara se numesc chei alternante. Se numeste cheie straina o coloana sau o multime de coloane a unei relatii R1 ale caror valori, daca nu sunt nule, coincid cu valori ale unei chei primare dintr-o relatie R nu neaparat distincta de R1. Multimea tuturor schemelor relationale corespunzatoare unei aplicatii se numeste schema bazei de date relationale iar continutul curent al relatiilor la un moment dat se numeste baza de date relationala. In modelul relational entitatile sunt reprezentate sub forma de relatii in care schema relationala contine toate atributele entitatii si fiecare tuplu al relatiei corespunde unui element al entitatii. La atributele entitatii se pot adauga in relatie si eventuale atribute suplimentare utilizate pentru exprimarea relatiilor intre entitati. O relatie intre entitatile E1,E2,...,Ek se reprezinta ca o relatie in care fiecare tuplu (e1,e2,...,ek) reprezinta un element al relatiei initiale cu ei reprezentand o cheie pentru relatia Ei asociata. Cele mai multe cereriri privesc determinarea unor informatii cu anumite proprietati iar raspunsul posibil este o relatie care descrie toate elementele cu aceste proprietati. Modul de prezentare al raspunsului depinde de interfata dintre SGBD si utilizator. 1.1. Limbaje de prelucrare a datelor pentru modelul relational Limbajele de prelucrare a datelor sau mai pe scurt limbajele de cereri pentru modelul relational se pot imparti in doua mari categorii: - limbaje algebrice in care cererile sunt exprimate prin operatorii pe care trebuie sa-i aplicam relastiilor existente in baza de date pentru a obtine raspunsul - limbaje cu calculul predicatelor in care cererile sunt exprimate sub forma unor multimi de tupluri sau valori pentru care se specifica proprietatile pe care trebuie sa le indeplineasca sub forma unor predicate. A doua clasa se divede in doua subclase in functie de obiectele cu care opereaza predicatele si anume:

- limbaje cu calcul pe tupluri daca obiectele primare sunt tupluri - limbaje cu calcul pe domenii daca obiectele primare sunt domeniile diferitelor atribute ale relatiilor. Sistemele de gestiune a bazelor de date existente contin majoritatea operatiilor derscrise in continuare pentru unul sau o combinatie de limbaje de acest tip. Pot exista implementate si alte operatii care permit o mai usoara utilizare a sistemelor respective dupa cum vom vedea in cele ce urmeaza.

1.1.1. Algebra relationala Algebra relationala consta dintr-o colectie de operatori ce au ca operanzi relatii. Rezultatul aplicarii unui operator la una sau doua relatii (in functie de aritatea acelui operator) este tot o relatie. In cele ce urmeaza vom presupune ca toate relatiile sunt cu un numar finit de tupluri distincte si sunt descrise print-o multime ordonata de atribute. Atributele se deosebesc prin pozitia pe care o ocupa in relatie sau prin numele asociat, numarul atributelor dand aritatea relatiei. Operanzii algebrei relationale sunt fie relatii constante fie variabile ce reprezinta relatii de o aritate data. Cererile din algebra relationala pot fi exprimate prin cinci operatii asupra relatiilor pe care le vom numi operatii de baza si anume: 1. Reuniunea. Reuniunea relatiilor R si S, notata R U S, este multimea tuplurilor care se gasesc in cel putin una din relatiile R sau S. Aceasta operatie se poate aplica numai in cazul cand R si S au aceeasi aritate si atributele corespunzatoare iau valori in acelesi domenii, rezultatul avand si el aceeasi aritate ca cele doua relatii si acelesi domenii asociate. Daca atributele au nume se cere in plus ca cele doua liste de nume sa coincida si rezultatul are aceiasi lista de nume pentru atribute. 2. Diferenta. Diferenta relatiilor R si S, notata R - S, este multimea tuplurilor din R care nu sunt in S. Trebuiesc indeplinite aceleasi conditii ca pentru reuniune. 3. Produsul cartezian. Fie relatiile R de aritate r si S de aritate s. Produsul cartezian al relatiilor R si S, notat R X S, este multimea tuplurilor cu r+s componente in care primele r componente formeaza un tuplu in R si ultimile s componente formeaza un tuplu in S. Daca atributele au nume, lista numelor atributelor din rezultat este reuniunea disjuncta a celor doua liste (folosind calificari sau redenumiri pentru atribulele cu acelasi nume in cele doua relatii). 4. Proiectia. Fie relatia R de aritate r. Proiectia relatiei R dupa

campurile i1,i2,...,ik, notata /Pi1,i2,...,ik(R) este multimea tuplurilor de aritate k a1a2...ak pentru care exista un tuplu b1b2...br in R astfel incat a1=bi1, a2=bi2, ... , ak=bik. Daca relatia R are asociate nume pentru atribute, se pot inlocui indicii cu numele atributelor respective, aceste nume pastrandu-se si in relatia rezultata. 5. Selectia sau restrictia. Fie F o formula logica formata din operanzi care sunt constante sau numere de componente in tupluri, operatori de comparare aritmetica ,= si operatori logici A (si), V (sau) si ! (non). Selectia relatiei R in raport cu formula F, notata /SF(R) este multimea tuplurilor t din R pentru care formula F devine adevarata prin inlocuirea fiecarui numar de componenta i din ea cu valoarea celei de-a i-a componente a tuplului t. Daca relatia R are asociate nume pentru atribute, se pot inlocui indicii cu numele atributelor respective, relatia rezutat avand pentru atribute aceleasi nume ca si relatia R. Pentru a se deosebi de indicii sau numele atributelor, toate constantele care apar in F sunt incluse intre apostroafe. Exemplul 3.1. Daca pentru relatia R(A,B,C) consideram continutul actual R = {(a,b,c), (d,a,f), (c,b,d)} si pentru relatia S(D,E,F) consideram continutul actual S = {(b,g,a), (d,a,f)}, atunci R U S = {(a,b,c), (d,a,f), (c,b,d), (b,g,a)}, R - S = {(a,b,c), (c,b,d)}, R X S = {(a,b,c,b,g,a), (a,b,c,d,a,f), (d,a,f,b,g,a), (d,a,f,d,a,f), (c,b,d,b,g,a), (c,b,d,d,a,f)}, /PA,C(R) = {(a,c), (d,f), (c,d)} si /SB='b'(R) = {(a,b,c), (c,b,d)}. Pe langa cele cinci operatii de baza mai pot fi utilizate si alte operatii numite operatii derivate ce se pot exprima in functie de operatiile de baza. Utilizarea acestor operatii permit o mai simpla exprimare a cererilor si uneori, daca sunt bine implementate se poate obtine si un raspuns mai rapid. Cele mai des utilizate operatii derivate sunt urmatoarele: 6. Intersectia. Intersectia relatiilor R si S, notata R /O S, este multimea tuplurilor care se gasesc in ambele relatii. Aceasta operatie se poate aplica numai in cazul cand R si S indeplinesc conditiile specificate la reuniune. Intersectia se poate exprima prin operatiile de baza cu formula: R /O S = R - (R - S) 7. Catul. Fie relatiile R de aritate r si S de aritate s cu r>s si S != /O. Catul lui R prin S, notat R /- S este multimea tuplurilor t de aritate r-s astfel incat pentru orice tuplu u al lui s tuplul tu este in R. Daca atributele celor doua relatii au nume atunci lista atributelor lui S trebuie sa fie o submultime a listei atributelor lui R si rezultatul are ca lista de atribute diferenta celor doua liste. Catul se poate exprima prin operatiile de baza cu formula: R /- S = /P1,2,...,r-s(R) - /P1,2,...,r-s((/P1,2,...,r-s(R) X S) - R) 8. Uniunea. O /0-uniune a relatiilor R si S dupa coloanele i si j, notata R |X| S, unde /0 este un operator de comparatie, este multimea i/0 j

tuplurilor produsului cartezian dintre R si S pentru care a i-a componenta a lui R se afla in relatia /0 cu a j-a componenta a relatiei S. Daca /0 este = operatia se numeste echiuniune. Uniunea se poate exprima prin operatiile de baza cu formula: R |X| S = /S i/0(r+j) (R X S) i/0 j Daca R si S au nume pentru atribute, atunci in loc de i si j se pot folosi numele atributelor corespunzatoare. 9. Uniunea naturala. Uniunea naturala a relatiilor R si S, notata R|X|S, se aplica daca cele doua relatii au nume asociate atributelor si in acest caz se selecteaza din produsul cartezian al relatiilor R si S acele tupluri ce contin valori comune pentru campurile numite la fel in cele doua relatii si apoi se elimina valorile din campurile lui S comune cu cele ale lui R. Daca relatiile R si S au in comun atributele A1,A2,...,Ak atunci se obtine formula: R |X| S = /Pi1,i2,...,im(/SR.A1=S.A1A...AR.Ak=S.Ak(R X S)) unde i1,i2,...,im este lista atributelor lui R X S luate in ordine cu exceptia atributelor S.A1,S.A2,...,S.Ak. Exemplul 3.2. Pentru relatiile R si S din exemplul 3.1 intersectia este R /O S = {(c,b,d)}. Daca R = {(a,b,c,d), (a,b,e,f), (b,c,e,f), (e,d,c,d), (e,d,e,f), (a,b,d,e)} si S = {(c,d), (e,f)} atunci R /- S = {(a,b), (e,d)}. Daca relatia R(A,B,C) are continutul actual R = {(1,2,3), (4,5,6), (7,8,9)} si relatia S(D,E) are continutul actual S = {(3,1), (6,2)}, notand cu T relatia R |X| S se obtine T(A,B,C,D,E) care are continutul actual T = {(1,2,3,3,1), BB) iar diferenta celor doua relatii cu rezultatul avand atributele A si C cu (R % A,B->C) - S si, in sfarsit, produsul cartezian al celor doua relatii cu rezultatul avand atributele A,B,D,C se poate face cu expresia R * (S % A->D,C) Din cele prezentate anterior se vede ca oricare din cele cinci operatii de baza din algebra relationala se pot reprezenta in ISBL de unde rezulta ca acesta este un limbaj complet.

Exemplul 3.7(->8). Sa consideram o baza de date constutuita din relatiile: CUMPARATORI(NUME,ADRESA,CONT) COMENZI(NR_COM,NUME,MARFA,CANTITATE) MAGAZINE(NUMEMAG,ADRESAMAG,MARFA,PRET) Unei cereri de tipul "Listeaza cumparatorii care au contul negativ" se poate exprima in ISBL sub forma: LIST CUMPARATORI : CONT < 0 % NUME Raspunsul la cererea "Listeaza numele magazinelor, marfurile si preturile tuturor magazinelor care vand cel putin o marfa comandata de Popescu Dan" se poate obtine prin succesiunea de expresii urmatoare: CM = N!COMENZI * N!MAGAZINE LIST CM : NUME = "Popescu Dan" % NUMEMAG,MARFA,PRET Pentru o cerere de tipul "Listeaza toate magazinele care vand toate marfurile comandate de Popescu Dan" se poate obtine raspunsul prin urmatoarea succesiune de expresii: M = N!MAGAZINE % NUMEMAG B = N!MAGAZINE % MARFA C = N!COMENZI : NUME = "Popescu Dan" % MARFA NB = (N!M * N!B) - (N!MAGAZINE % NUMEMAG,MARFA) NBC = N!NB.(N!M *N!C) LIST M - (NBC % NUMEMAG) Limbajul ISBL nu are inplementate operatii agregate sau de reactualizari ale relatiilor dar in sistemul PRTV exista posibilitatea stabilirii fluxului de informatii in ambele sensuri intre ISBL si limbajul gazda (in general PL/I). Comunicarea se face prin diferitele valori ale unor atribute sau prin fisiere relationale de citire sau scriere definite in limbajul gazda. 1.2.2. SQUARE - limbaj intermediar intre algebra relationala si calculul relational pe tupluri Limbajul SQUARE a fost o prima versiune a unui limbaj de cereri pentru SGBD System R proiectat de IBM in San Jose. In acest limbaj sunt prevazute si alte operatii decat cele din algebra relationala cum ar fi numirea unor tupluri in relatii sau operatori din teoria multimilor de tipul incluziune sau aparteneta. In limbajul SQUARE operatorii reuniune si diferenta se exprima ca in algebra relationala iar intersectia se trateaza asemanator. Produsul cartezian al relatiilor R si S se exprima prin r @c R, s @c S

Proiectia relatiei R dupa atributele A1,A2,...,An se exprima prin /A1,A2,...,An R iar pentru selectia @S/F(R) se foloseste r @c R : F' unde F' se obtine din F prin inlocuirea lui A sau a numarului de componenta corespunzator lui A prin r/A. Se pot face atribuiri de forma R/A1,A2,...,An MAGAZINE/NUMEMAG;XPRET ("Unirea",1.1) In limbajul SQUARE se pot aplica unor relatii unare functiile agregat COUNT pentru numarare, AVG pentru media aritmetica, SUM pentru suma elementelor, MIN pentru aflarea celei mai mici valori si MAX pentru aflarea celei mai mari valori din relatia respectiva. La aplicarea functiilor COUNT, AVG si SUM trebuie tinut seama ca in acest limbaj sunt eliminate dublurile si deci in relatia unara fiecare valoare este luata in consideratie o singura data. Cum de cele mai multe ori relatia la care se aplica o functie agregat se obtine ca o proiectie dupa un atribut a unei relatii R, pentru a nu se elimina din proiectie dublurile se scrie R' in loc de R. De exemplu este incorect de aflat suma conturilor cumparatorilor cu expresia SUM(/CONT CUMPARATORI) deoarece s-ar putea ca mai multi cumparatori sa aiba aceeasi suma in cont si ea va conta numai o data; corect este SUM(/CONT CUMPARATORI'). Exemplul 3.11. Pentru baza de date din exemplul 3.7 aflarea magazinelor care vand cel mai ieftin portocalele se face prin s/NUMEMAG @c MAGAZINE : s/MARFA = "portocale" @A s/PRET = MIN(/PRET MAGAZINE/MARFA("portocale")) CURSUL 8 1.2.3. QUEL - un limbaj de tip calcul relational pe tupluri QUEL este un limbaj de cereri pentru INGRES care este un sistem de gestiune a bazelor de date dezvoltat la Universitatea din California, Berkeley si merge sub sistem de operare UNIX. Acest limbaj poate fi utilizat independent sau inclus in limbajul de programare C si in acest caz instructiunile lui sunt precedate de ## si sunt prelucrate prin preprocesare. O expresie din calculul relational pe tupluri de forma {u\(r) | (@Et1)...(@Etk)(R1(t1)@A...@ARk(tk)

@Au[1]=ti1[j1]@A...@Au[r]=tir[jr]@A @v)} unde @v este o formula a calculului relational pe tupluri ce nu contine cuantificatori poate fi scrisa in QUEL sub forma: range of t1 is R1 . . . range of tk is Rk retrieve (ti1.A1,...,tir.Ar) where @v' in care Am este al jm-lea atribut al relatiei Rim pentru m=1,2,...,k si @v' se obtine din @v printr-o translatare dupa urmatoarele reguli: - se inlocuiesc in @v referintele lui u[m] cu tim[jm] - se inlocuiesc apoi referintele lui tm[n] prin tm.B unde B este al n-lea atribut al relatiei Rm pentru toti n si m - se inlocuiesc @= si @=/ cu != - se inlocuiesc @A,V si @! cu and, or si respectiv not. Expresia "range of t is R" spune ca toate operatiile care urmeaza pana la o redefinire a lui t se fac o data pentru fiecare tuplu al lui R cu t considerat acel tuplu particular. Rezultatul este tiparirea unui tabel ce are in capat denumirile atributelor A1,A2,...,Ar si apoi tuplurile selectate. Se poate schimba numele atributului daca in loc de tim.Am se pune in retrive B=tim.Am si in acest caz apare B in locul lui Am. Forma generala a lui retrive este RETRIEVE [ UNIQUE ] [INTO tablou ] (lista-rezultat) [ WHERE conditie ] [ SORT BY campuri ] cu lista rezultat continand (despartite prin virgule) atribuiri [ nume-variabila = ] expresie Exemplul 3.13. Prima cerere din exemplul 3.8 se poate exprima prin range of t is CUMPARATORI retrive (t.NUME) where t.CONT < 0 iar a doua cerere se poate scrie range of t is COMENZI range of s is MAGAZINE retrieve (s.NUMEMAG,s.MARFA,s.PRET) where t.NUME = "Popescu Dan" and t.MARFA = s.MARFA In limbajul QUEL se pot sterge tupluri cu succesiunea urmatoare

range of t is R delete t where @v(t) care sterge din R toate tulurile t care fac adevarata formula @v. Se pot adauga tupluri la o relatie cu o succesiune de forma range of t1 is R1 . . . range of tk is Rk append to S(A1=w1,...,An=wn) where @v(t1,...,tk) care adauga relatiei S cate un tuplu pentru fiecare combinatie t1,...,tk ce face @v adevarata, tuplul respectiv avand drept valori rezultatul evaluarilor expresiilor w1,...,wn in care intervin componente ale tuplurilor si constante eventual legate prin operatii aritmetice, pentru atributele A1,...,An, restul atributelor fiind nedefinite (valoarea null). Se pot modifica tupluri dintr-o relatie prin succesiuni de forma range of t is R replace t ( lista-rezultate ) [ where conditie ] Exemplul 3.14. Pentru a adauga cate o comanda de 3 paini pentru toti cumparatorii care au cont pozitiv se poate scrie succesiunea range of t in CUMPARATORI append to COMENZI(NR_COM=urmcom+ +,NUME=t.NUME,MARFA="paine",CANTITATE=3) where t.CONT > 0 unde am presupus o variabila C urmcom ce contine valoarea urmatorului numar de comanda ce se atribuie unei noi comenzi. In QUEL nu sunt eliminate automat duplicatele la proiectie. Se poate face eliminarea duplicatelor cu instructiunea sort care aseaza si in ordine lexicografica tuplurile relatiei. Exemplul 3.15. Listarea numelor magazinelor si a adreselor lor se face cu succesiunea range of t is MAGAZINE retrieve into MAG(NUME=t.NUMEMAG,ADRESA=t.ADRESAMAG) sort MAG

print MAG la tiparire cele doua coloane fiind numite NUME si ADRESA. Pentru a demonstra completitudinea lui QUEL vom presupune ca relatiile R(A1,A2,...,An) si S(B1,B2,...,Bm) sunt date si se obtine prin aplicarea unei operatii o noua relatie T. Calculul lui T = R U S (presupunand n=m) se face cu range of r is R append to T(C1=r.A1,...,Cn=r.An) range of s is S append to T(C1=s.B1,...,Cn=s.Bn) Calculul diferentei T = R - S se scrie range of r is R append to T(C1=r.A1,...,Cn=r.An) range of s is S range of t is T delete t where s.B1=t.C1 and ... and s.Bn=t.Cn Calculul produsului cartezian T = R X S se scrie range of r is R range of s is S append to T(C1=r.A1,...,Cn=r.An,Cn+1=s.B1,...,Cn+m=s.Bm) Calculul proiectiei T = @P/A1,A2,...,Ak(R) se scrie range of r is R append to T(C1=r.A1,...,Ck=r.Ak) sort T Calculul selectiei T = @S/F(R) se scrie range of r is R append to T(C1=r.A1,...,Cn=r.An) where F' unde F' se obtine din F prin tranformarile discutate anterior. Exemplul 3.16. A treia cerere din exemplul 3.8 se poate scrie in QUEL range of m is MAGAZINE range of n is MAGAZINE retrieve into MAG(MG=m.NUMEMAG,MR=n.MARFA) range of t is MAG delete t where t.MG=m.NUMEMAG and t.MR=m.MARFA range of r is comenzi

retrive into COM(MG=t.MG,MR=t.MR) where r.NUME="Popescu Dan" and r.MARFA=t.MR retrieve into MAGA(MG=m.NUMEMAG) range of u is MAGA range of j is COM delete u where u.MG=j.MG sort MAGA print MAGA In limbajul QUEL se pot folosi functiile agregate count, avg, sum, min sau max ele aplicandu-se expresiilor ce contin relatii unare, constante si operatori aritmetici. Functiile agregat countu, avgu si sumu elimina duplicatele. Referirea functiilor agregat se face prin functie-agregat ( expresie [ WHERE conditie ] ) Se pot partitiona tuplurile unei relatii in raport de valorile uneia sau mai multor expresii calculate si aplicand functiile agregat pentru fiecare grup de tupluri pentru care s-au obtinut aceleasi valori prin calculele facute cu o expresie de forma agregat(E by F1,F2,...,Fk) unde E si F1,F2,...,Fk sunt expresii cu operanzi constante sau termeni t.A unde t este o variabila tuplu si A un atribut. Aceasta expresie produce gruparea inregistrarilor relatiei R parcursa de t in clase care dau aceleasi valori pentru expresiile F1,F2,...,Fk si pentru fiecare clasa in parte se calculeaza functia agregat pentru valorile expresiei E pentru fiecare din tuplurile clasei respective. Exemplul 3.17. Tiparirea marfurilor cu pretul mediu al lor se poate face cu urmatoarea succesiune: range of m is MAGAZINE retrieve into MAG(MARFA=m.MARFA,PM=avg(m.PRET by m.MARFA)) sort MAG print MAG 1.2.4. Query-by-Example - limbaj de tip calcul relational pe domenii Limbajul Query-by-Example (QBE) a fost proiectat de IBM, Yoktown Hts si utilizat in produsul QMF. El este conceput pentru lucrul la terminal cu utilizarea unui editor de texte pentru a exprima cererile. Utilizatorul poate sa afeseze pe ecran prin comenzi unul sau mai multe schelete de tabele prin care isi defineste relatiile si atributele relatiilor cu caracteristicile lor. Apoi se pot folosi tabelele construite pentru exprimarea cererilor de interogare sau modificare a bazei de date prin intermediul editorului de ecran. Fiecare linie completata intr-un tabel reprezinta un tuplu ce parcurge relatia respectiva.

In cereri se folosesc variabile de domeniu si constante pentru a identifica tupluri din relatiile ale caror schelete apar pe ecran. Cand se gaseste un tuplu sau o combinatie de tupluri care indeplinesc conditiile specificate se tiparesc toate variabilele precedate de operatorul P. si toate valorile atributelor care contin in dreptul lor un P., iar dasca in prima coloana, care corespunde numelui relatiei, apare operatorul P. atunci sunt tiparite toate valorile atributelor tuplului corespunzator. Un schelet de relatie este ca cel din fig.3.1 format numai din linii sub forma unui tabel, fara sa aiba inscris nimic in el si se obtine de obicei prin apasarea unei taste. _____________________________________________________________________ ________ nume relatie | atribut | atribut | atribut | _______________|__________________|___________________| ______________________| [comenzi | [mentiune | [mentiune | [mentiune | penturu | caracterizare | caracterizare | caracterizare | tupluri] | atribut] | atribut] | atribut] | | | | | Figura 3.1. Afisarea unei relatii existente in baza de date se face scriind intr-un schelet de relatie pe prima linie si in prima coloana numele relatiei respective urmata de operatorul P. primindu-se ca raspuns pe prima linie atributele corespunzatoare relatiei respective. Apoi in dreptul atributelor se pot pune constante care sunt siruri de caractere sau variabile care sunt siruri de caractere precedate de semnul '_'. Pentru variabile se folosesc de obicei drept nume un tip de valoare pe care ar putea sa il ia variabila respectiva (de aici vine si numele limbajului - cerere prin exemplu). Domeniul unei variabile este constituit din toate domeniile atributelor in care acea variabila apare in toate relatiile de pe ecran. Exemplul 3.18. A doua cerere din exemplul 3.8 se poate exprima in QBE dupa cum se arata in fig.3.2. Mai intai s-au adus pe ecran cele doua relatii folosite punand in doua schelete pe primul loc COMENZI P. si respectiv MAGAZINE P. dupa care se complecteaza cate o linie in fiecare relatie dupa cum se vede in figura. Variabila _portocale este folosita aici pentru a pune in corespondenta o marfa ceruta de Popescu Dan cu marfa vanduta de un magazin. Daca cele doua valori coincid, se selecteaza din relatia MAGAZINE tuplul asociat si se tiparesc din el valorile corespunzatoare pentru numele magazinului, marfa si pretul de vanzare al marfii respective in acel magazin. Tiparirea si a adresei magazinului se poate face fie introducand un P. in dreptul lui ADRESAMAG, fie punand un P. in dreptul lui MAGAZINE si nu se mai mentioneaza P. in alta coloana. _____________________________________________________________________ ________ COMENZI | NR_COM | NUME | MARFA | CANTITATE | ______________|_____________|_________________|______________| _______________| | | Popescu Dan | _portocale | |

|

|

|

|

|

_____________________________________________________________________ ________ MAGAZINE | NUMEMAG | ADRESAMAG | MARFA | PRET | ______________|_____________|_________________|______________| _______________| | P. | | P._portocale | P. | | | | | | Figura 3.2. O cerere din calculul relational pe domenii exprimata printr-o expresie de forma {a1a2...an | (@Eb1)(@Eb2)...(@Ebm)(R1(c11,...,c1k1)@A...@ARp(cp1,...,cpkp))} unde fiecare cij este un al sau un bl sau o constanta si fiecare variabila de domeniu al si bl apare cel putin o data ca un cij se poate exprima in QBE dupa cum urmeaza. Se afiseaza scheletele relatiilor R1,...,Rp (nu neaparat distincte) si se creaza nume de variabile pentru fiecare din ai si bj (de obicei numele exprima valori posibile pentru variabila respectiva precedarte de '_'). Apoi, pentru fiecare termen Ri(ci1,...,ciki) se creaza un tuplu ce contine pe pozitia j pe cij daca aceasta este o constanta si respectiv variabila asociata daca cij este un al sau un bl. Campurile ce contin variabile ce nu mai apar in alta parte pot fi lasate libere. Daca toate atributele al apar intr-un tuplu al unei relatii se prefixeaza acele variabile cu P., altfel se construieste o relatie suplimentara (fara nume) cu un tuplu ce contine comanda P. in prima coloana si numele asociate variabilelor a1,...,an in celelalte coloane. Exemplul 3.19. Pentru a tiparii numele persoanei, marfa comandata, cantitatea comandata si contul la toate comenzile facute se poate obtine expresia din calculul relational pe domenii {a1a2a3a4 | (@Eb1)(@Eb2) (CUMPARATORI(a1b1a4)@ACOMENZI(b2a1a2a3))} iar in QBE se exprima dupa cum se vede in fig.3.3. _____________________________________________________________________ _________ CUMPARATORI | NUME | ADRESA | CONT | ________________|___________________|_________________________| _______________| | _Popescu | | _999 | | | | | _____________________________________________________________________ _________ COMENZI | NR_COM | NUME | MARFA | CANTITATE | ________________|____________|________________|_______________| _______________|

| |

| _Popescu | |

| _portocale |

| _88 |

|

_____________________________________________________________________ _________ | | | | | ________________|____________|________________|_______________| _______________| P. | _Popescu | _portocale | _88 | _999 | | | | | | Figura 3.3. Daca o comanda P. se gaseste in mai multe relatii, tiparirea valorilor corespunzatoare se face in tablele separate in momentul cand se determina o combinatie de tupluri care verifica toate conditiile date. Pentru selectarea unor tupluri se pot folosi in diferite coloane expresii de forma @0c unde @0 este un operator de comparatie aritmetica iar c este o constanta sau o variabila de domeniu a carei valoare este definita in alta parte. De exemplu punand >=5 intr-o coloana sunt selectate acele tupluri din relatie care au valorile corespunzatoare acelui atribut cel putin 5. Exemplul 3.20. Tiparirea tuturor comenzilor de portocale avand cerute cantitati mai mari decat cea comandata de Popescu Dan se exprima prin epresia din figura 3.4. _____________________________________________________________________ _________ COMENZI | NR_COM | NUME | MARFA | CANTITATE | ________________|____________|________________|_______________| _______________| | | Popescu Dan | portocale | _x | P. | | | portocale | > _x | | | | | | Figura 3.4. Pentru diferite campuri se pot defini si combinatii formate din parti constante si parti variabile ce corespund subsirurilor ce nu sunt continute in partea constanta. De exemplu Calea Unirii _99 poate constitui o adresa, selectandu-se tuplurile cu adresa in Calea Unirii indiferent de nunar, acest numar devine valoarea curenta a variabilei _99 si poate fi utilizat in alta parte unde apare din nou aceasta variabila. Se poate nega un tuplu punand in prima coloana a lui semnul @!. Negarea unui tuplu inseamna selectarea acelor tupluri din relatie pentru care nu sunt verificate conditiile tuplului negat. Exemplul 3.21. Pentru a tiparii pentru fiecare marfa care sunt comenzile cu cele mai mari cantitati cerute se poate scrie cererea din figura 3.5.

_____________________________________________________________________ ________ COMENZI | NR_COM | NUME | MARFA | CANTITATE | ________________|____________|________________|_______________| ______________| | | | _portocale | _x | P. | | | _portocale | > _x | | | | | | Figura 3.5. In QBE se pot folosi operatorii agregati CNT., SUM., AVG., MIN. si MAX. Se mai pot folosii operatorii ALL. pentru pastrarea duplicatelor unei relatii si UN. pentru eliminarea duplicatelor. Multe operatii din QBE elimina automat duplicatele. Exemplul 3.22. Numarul magazinelor se poate afla cu cererea din fig.3.6. _____________________________________________________________________ ________ MAGAZINE | NUMEMAG | ADRESAMAG | MARFA | PRET | ___________|_________________|__________________|________________| ___________| | P.CNT.UN.ALL._x | | | | | | | | | Figura 3.6. Modificarea continutului unor relatii se poate face prin comenzile I. pentru inserare tuplu D. pentru eliminare tuplu si U. pentru modificare tuplu care se pun in prima coloana a tuplui din relatia unde se fac modificari. Pentru valorile corespunzatoare unui tuplu cu comanda I. se creaza un nou tuplu in relatie cu valorile date, cu comanda D. se elimina tuplurile care au valorile specificate iar cu comanda de modificare U. se determina inregistrarea care trebuie modificata din atributele cheie si se introduc in campurile specificate noile valori. Exemplul 3.23. Daca la magazinul Unirea se pun in vanzare portocale cu 2000 lei kilogramul (presupunand ca deja apare adresa magazinului in baza de date cel putin o data) aceasta se poate exprima ca in fig.3.7. Marirea preturilor cu 10% pentru toate marfurile vandute de magazinul Unirea se poate face prin cerea din fig.3.8. _____________________________________________________________________ _________ MAGAZINE | NUMEMAG | ADRESAMAG | MARFA | PRET | ___________|_________________|__________________|________________| ____________| I. | Unirea | _adresa | portocale | 2000 | | Unirea | _adresa | | | | | | | | Figura 3.7.

_____________________________________________________________________ _________ MAGAZINE | NUMEMAG | ADRESAMAG | MARFA | PRET | ___________|_________________|__________________|________________| ____________| U. | Unirea | | _portocale | _x * 1.1 | | Unirea | | _portocale | _x | | | | | | Figura 3.8. Pentru fixarea unor conditii suplimentare de selectie a tuplurilor se poate folosi casuta conditionala (condition box) in care se pot scrie expresii booleene ce trebuiesc sa fie adevarate pentru a se selecta valorile variabilelor ce apar in ele. Aceste expresii nu trebuie sa contina operatorul "not", in schimb se pot folosi AND sau & pentru "si", respectiv OR sau | pentru "sau". Exemplul 3.24. Listarea magazinelor care vand portocalele cu pret mai mare decat se vand merele in Piata Chibrit dar mai ieftin decat dublul pretului perelor din Piata Norilor se poate face prin cererea din fig.3.9. _____________________________________________________________________ ________ MAGAZINE | NUMEMAG | ADRESAMAG | MARFA | PRET | ____________|________________|__________________|________________| ___________| | P. | | portocale | _pretpo | | Piata Chibrit | | mere | _pretme | | Piata Norilor | | pere | _pretpe | | | | | | _______________________________ | CONDITIONS | |_______________________________| | _pretpo > _pretme | | _pretpo < _pretpe * 2 | | | Figura 3.9. Sistemul QBE contine o lista numita tabelul director a tuturor numelor relatiilor din baza de date impreuna cu atributele asociate lor si anumite informatii despre atribute. Tabelul director poate fi folosit ca oricare alta relatie putandu-se face cu el interogari, inserari sau stergeri. Daca intr-un schelet de relatie se scrie in prima linie si prima coloana P._relname sau numai P. sunt listate toate numele relatiilor existente in baza de date iar cu comanda P._relname P. se listeaza numele relatiilor si numele atributelor asociate lor. Inserarea unei noi relatii in baza de date se face cu comanda I.REL I. urmata de scrierea pe primul rand a atributelor relatiei numita REL. Pentru atribute se declara anumite proprietati si anume:

- KEY spune daca atributul este (Y) sau nu (N) component al unei chei; - TYPE stabileste tipul atributului care poate fi CHAR pentru cuvant de lungime variabila, CHAR(n) pentru cuvant de lungime n, FLOAT pentru numere reale sau FIXED pentru numere intregi; - DOMAIN da nume domeniilor atributelor folosite in gasirea eventualelor erori prin aparitia unei variabile in atribute cu domenii diferite; - INVERSION indica existenta (Y) sau inexistenta (N) unui index dupa atributul respectiv. Exemplul 3.25. Pentru a crea relatia MAGAZINE se poate completa un schelet de tabel dupa cum se arata in fig.3.10. _____________________________________________________________________ ________ I.MAGAZINE I. | NUMEMAG | ADRESAMAG | MARFA | PRET | _______________|_______________|_________________|______________| ____________| KEY I. | Y | N | Y | N | TYPE I. | CHAR | CHAR | CHAR | FLOAT | DOMAIN I. | NUME | ADRESE | MARFURI | BANI | INVERSION I. | N | N | Y | N | | | | | | Figura 3.10. Completitudinea limbajului QBE se poate demonstra relativ usor. Pentru a calcula T = R U S unde T este o relatie noua se procedeaza ca in fig.3.11. _____________________________________________________________________ ________ R | | | | | ______________|_____________|______________|___________________| _____________| | _a1 | _a2 | ... | _an | | | | | | _____________________________________________________________________ ________ S | | | | | ______________|_____________|______________|___________________| _____________| | _b1 | _b2 | ... | _bn | | | | | | _____________________________________________________________________ ________ T | | | | | ______________|_____________|______________|___________________| _____________| I. | _a1 | _a2 | ... | _an | I. | _b1 | _b2 | ... | _bn | | | | | |

Figura 3.11. Pentru diferenta relatiilor R si S se procedeaza la fel ca in fig.3.11 cu singura deosebire ca al doilea tuplu din relatia T va avea comanda D. in loc de I. Pentru produsul cartezian al relatiilor R si S se definesc variabile _a1,...,_an in R si _b1,...,_bm in S iar in T se pune un tuplu cu comanda I. ce cuprinde toate variabilele definite. Proiectia relatiei R dupa atributele Ai1, ..., Aik se face definind variabilele _a1,...,_ak in R corespunzatoare campurilor selectate si incluzand in T un tuplu cu comanda I. ce contine variabilele definite. Pentru reprezentarea selectiei @S/F(R) se transforma mai intai formula F pentru a nu mai contine negatia folosind legile lui DeMorgan pana cand negatiile ajung la atomi si apoi operatorul de comparatie ce apare in atom se inlocuieste prin operatorul opus (= cu @=/, > cu @= B AND (C @=/ D OR E = F) Daca prin transfeormarile indicate din formula F se obtine formula F', atunci selectia se poate exprima ca in fig.3.12. _____________________________________________________________________ ________ R | A1 | A2 | ... | An | _______________|______________|_____________|______________| _________________| | _a1 | _a2 | ... | _an | | | | | | _______________________ | CONDITIONS | |_______________________| | F' | | | _____________________________________________________________________ ________ T | | | | | _______________|______________|_____________|______________| _________________| I. | _a1 | _a2 | ... | _an | | | | | | Figura 3.12. In QBE se pot crea vederi care se definesc dupa regulile obisnuite de definire a relatiilor doar ca numele relatiei ce defineste vederea este precedat la definire de cuvantul VIEW. O vedere V se evalueaza de fiecare data cand este folosita intr-o alta cerere cu continutul actual al relatiilor ce apar in vedere.

Exemplul 3.26. Se poate alcatui o vedere pentru a calcula nota de plata a unei persoane cu preturile minime percepute de vanzatori pentru marfurile comandate cum se arata in fig.3.13. Evaluarea se face in momentul unei cereri de tipul celei din fig.3.14 cand se indica persoana pentru care se aplica nota de plata. _____________________________________________________________________ ______ I.VIEW NOTA-DE-PLATA I. | NUME | MARFA | SUMA | ________________________|____________________|______________| ______________| I. | _Ionescu | _portocale |_q*MIN.ALL._P | | | | | _____________________________________________________________________ ______ COMENZI | NR_COM | NUME | MARFA | CANTITATE | _______________|______________|______________|______________| ______________| | | _Ionescu | _portocale | _q | | | | | | _____________________________________________________________________ ______ MAGAZINE | NUMEMAG | ADRESAMAG | MARFA | PRET | _______________|______________|______________|______________| ______________| | | | _portocale | _p | | | | | | Figura 3.13. _____________________________________________________________________ ______ NOTA-DE-PLATA | NUME | MARFA | SUMA | _________________________|___________________|______________| ______________| P. | Popescu Dan | _portocale | _999 | | | | | Figura 3.14.

GATA

1.3. Descrierea bazelor de date de tip relational

Pentru transformarea unei diagrame de tip entitate/relatie prin care se descrie modelul logic al bazei de date in model relational de baze de date se aplica urmatoarele reguli: - Fiecarei entitati i se asociaza o relatie de baza avand drept cheie principala cheia entitatii. Pentru entitatile speciale se asociaza si chei straine pentru a arata dependenta de alte entitati. - Fiecare relatie de tip mai-multi-la-mai-multi ii corespunde o relatie de baza avand cate o cheie straina pentru fiecare din entitatile legate prin aceasta relatie. Cheia primara este constituita din reuniunea tuturor cheilor straine. - Fiecarei relatii de tipul mai-multi-la-unu i se asociaza o cheie straina in prima entitate cu referinta la cea de-a doua entitate. Relatiile unu-la-unu se trateaza asemanator. - Proprietatilor li se asociaza atribute in relatiile de baza corespunzatoare. Pentru proprietatile multivaloare se creaza noi relatii ce sunt legate prin chei straine de relatia in care apare proprietatea multivaloare. - Pentru subtipuri se reprezinta in relatiile asociate numai proprietatile ce nu se pot aplica supertipului de car apartine. Modelele de tip RM/T se transforma in modelul relational astfel: - Fiecarei entitati nucleu i se asociaza o relatie de baza avand cate o cheie primara. - Fiecarei entitati asociative i se asociaza o relatie de baza avand cate o cheie straina pentru fiecare din entitatile ce intervin in asociere. - Desemnarile sunt reprezentate prin chei straine. - Fiecarei entitati caracteristice i se asociaza o relatie de baza cu cheie straina pentru entitatea caracterizata. - Proprietatile sunt reprezentate ca atribute ale relatiilor respective. - Subtipurile si supratipurile sunt indicate prin chei straine. 2. SQL Limbajul SQL (Structured Query Language) este unul din limbajele relationale de cereri care formeaza nucleul multor sisteme de gestiune a bazelor de date si de aceea il prezentam mai pe larg decat celelalte limbaje. Se poate spune ca SQL este o perfectionare a limbajului SQUARE (vezi 3.1.2.2), eliminand utilizarea indicilor ce preced sau succed numele unei relatii prin utilizarea unor cuvinte cheie. In mai 1986 a fost recunoscuta de ANSI standardizarea limbajului SQL.

Intr-o prima varianta SQL s-a numit SEQUEL. El a fost definit prima oara de Chamberlin si altii de la IBM Research Laboratory din San Jose, California in 1974 si folosit in prototipul System R si apoi in DB2 pentru mediu MVS, SQL/DS pentru medii VM si VSE, OS/2 Extended Edition Database Manager pentru mediu OS/2 extins, SQL/400 pentru mediu OS/400 si altele. Majoritatea instructiunilor din SQL sunt executabile ele putand fi interpretate si executate imediat in mod interactiv sau pot fi incluse in diferite aplicatii programate in limbaje de programare cum sunt APL, BASIC, C, COBOL, FORTRAN, PL/I, Assembler si altele (embedded SQL), executandu-se in momentul executiei programului respectiv. Intre cele doua moduri de utilizare sunt mici deosebiri cum ar fi prefixarea instructiunilor executabile SQL din programe cu EXEC SQL si definirea unor variabile de transfer de informatii prin INTO :variabila. 2.1. SQL interpretabil Aplicatia din SQUARE /A1,A2,...,An R/B1,B2,...,Bm(@01b1,@02b2,...,@0bm) se exprima in SQL prin SELECT A1,A2,...,An FROM R WHERE B1@01b1 AND B2@02b2 AND ... AND Bm@0mbm Exemplul 3.12. Prima cerere din exemplul 3.7 se scrie in SQL SELECT NUME FROM CUMPARATORI WHERE CONT < 0 Dupa WHERE poate sa apara o formula ca cuprinde atribute ale relatiilor ce urmeaza dupa FROM si constante legate intre ele prin operatii si comparatii aritmetice, operatori Booleeni (NOT, AND sau OR) operatii cu multimi (UNION, INTERSECT si MINUS) de apartenanta in multimi (X IN S sau echivalent S CONTAINS X, X NOT IN S sau S DOES NOT CONTAIN X cu X element sau multime si S multime). Unele relatii ce apar in conditia de dupa WHERE pot fi obtinute la randul lor printr-o constructie SELECT-FROM-WHERE. Forma generala a instructiunii de cautare SELECT este: SELECT [ DISTINCT ] elemente FROM tabele [ WHERE conditie ] [ GROUP BY campuri [ HAVING conditie ] ] [ ORDER BY campuri ] ;

In acest limbaj, la proiectie nu sunt eliminate duplicatele. pentru a elimina duplicatele se pune dupa SELECT optiunea DISTINCT. Drept elemente pot sa apara valori selectate sau expresii construite cu aceste valori iar daca sunt considerate toate campurile tabloului atunci se pune "*". Conditia de dupa WHERE poate sa contina operatori de comparatie =, , >, >=, < si 0 si SQLCODE 100) sau SQLERROR (adevarat pentru SQLCODE < 0) si actiunea poate sa fie CONTINUE sau o instructiune GO TO. Modificarile devin efective numai dupa executarea unei comenzi COMMIT ce este facuta automat (la executie corecta) sau prin program si pot fi anulate prin comanda ROLLBACK automat (la aparitia unor erori) sau prin program. Se pot executa dinamic (interactiv) programe SQL folosind comenzile PREPARE pentru precompilare si EXECUTE pentru executie.

3. Modelul retea

Modelul retea este cel mai apropiat de forma de reprezentare a bazelor de date sub forma diagramelor entitate-relatie. Deosebirea consta doar in faptul ca toate relatiile ce apar pot fi numai binare si de tipul unu-la-unu sau unu-la-mai-multi. Aceasta restrictie permite reprezentarea grafica a unei baze de date de tip retea sub forma unui graf directionat numit retea. In retea nodurile corespund entitatilor si relatiile sunt reprezentate prin sageti intre noduri de la tata la fiu si anume sageti simple daca relatia este de tipul unu-la-unu si sageti duble daca relatia este de tipul unu-la-mai-multi. In modelul retea entitatilor le corespund fisiere logice care au drept campuri atributele entitatii si eventuale campuri de legatura pentru relatii. Fiecarui element al entitatii ii corespunde o inregistrare logica. Daca inregistrarile sunt identificate numai prin relatia cu alte entitati atunci se mai adauga la inregistrarea logica inca un camp ce cuprinde un numar de ordine care permite identificarea acelor inregistrari. Reprezentarea unei relatii R pe mai multe entitati E1,E2,...,Ek se realizeaza prin introducerea unei noi entitati S care sa aiba drept elemente tupluri de forma (e1,e2,...,ek) corespunzatoare elementelor relatiei R si eventual un numar de ordine pentru identificare si alte atribute asociate si adaugand cate o relatie de tipul unu-la-

mai-multi de la Ei (i=1,...,k) la S. Acest procedeu se poate aplica si pentru transformarea relatiilor binare de tipul mai-multi-la-mai-multi. Operatiile cele mai frecvente pentru modelul retea se impart in doua categorii: cautarea unor elemente ale unor entitati cu anumite proprietati (proces similar cu cautarea din modelul relational) sau cautarea unor informatii prin utilizarea legaturilor intre entitati. Cea de-a doua operatie se numeste navigare. 4. Modelul ierarhic (arborescent) Modelul ierarhic poate fi privit ca un caz particular al modelului retea in care diagrama asociata este o padure (multime de arbori) si in care toate legaturile sunt pe directia drumului de la radacina la nodul fiu din relatie, toate relatiile fiind de tipul unu-la-mai-multi. Ca si in cazul celorlalte doua modele exista posibilitatea interpretarii diagramelor entitate-relatie sub forma modelului ierarhic. Pentru evitarea redondantelor in modelul ierarhic se foloseste notiunea de element virtual care inlocuieste dublura unui element prin adresa elementului respectiv fiecare element aparand in baza de date reala o singura data. In felul acesta se evita unele redondante. Operatiile din bazele de date de tip ierarhic se traduc in procese de parcurgere a arborilor. Elemntele virtuale permit in acest caz legarea informatiilor din aceiasi entitate sau din entitati diferite. Pentru prelucrarea eficienta a unei relatii de tip mai-multi-la-mai-multi intre entitatile A si B se pot introduce doi arbori: unul cu tatal A si fiu virtual B si unul cu tatal B si fiu virtual A Transformarea diagramelor entitate-relatie in paduri se face in mai multe etape. Mai intai se transforma o astfel de diagrama intr-o retea prin metodele prezentate anterior. Apoi se construiesc pe rand arbori selectand ca radacina a lor un nod din retea neselectat inca si cu cat mai putine arce care sa intre in el din noduri neselectate. Se adauga apoi cat mai exista arcele ce pleaca din noduri selectate in acest arbore fie catre noduri deja selectate in alti arbori si in acest caz aceste noduri se declara virtuale, fie catre noduri inca neselectate care se adauga arborelui si se considera astfel selectate. Procedeul continua pana nu mai sunt noduri neselectate. Implementarea la nivel logic pentru modelul ierarhic poate fi cea utilizata pentru modelul retea sau prin inregistrari de lungime variabila. Formatele acestor inregistrari se construiesc prin procedeul urmator: formatul asociat unei frunze avand campurile a este a* iar pentru un nod interior cu campurile b si pentru care fii sai au formatele asociate a1,a2,...,ak asociem formatul (b a1 a2 ... ak)*. Deci pentru baza de date se obtin un numar de fisiere cu lungimi variabile egal cu numarul de arbori din schema asociata bazei de date respective. Datele sunt puse pe mediul extern in ordinea data de parcurgerea in preordine a arborilor ceea ce usureaza determinarea informatiilor pentru cererile care se refera la descendentii unor noduri printr-un numar mic de accese la mediul extern.

5. Compararea modelelor Dintre cele trei modele de baze de date, modelul relational se impune prin simplitate ceea ce are ca efecte folosirea cu succes a lui si de catre nespecialisti si o productivitate marita. Avantajele modelului relational fata de celelalte modele sunt urmatoarele [Date]: structuri de date simple, operatori simpli, fara mari diferente intre diferitele sisteme, un nucleu comun prin utilizarea in majoritatea cazurilor a limbajului SQL, mecanismul vederilor, o baza teoretica solida, numarul mic de concepte, aplicarea principiului dualitatii accesului (prin program si interactiv) , independenta fizica a datelor, independenta logica a datelor, usurinta dezvoltarii aplicatiilor, definirea dinamica a datelor, usurinta instalarii si usurinta operarii, simplificarea proiectarii bazelor de date, integrarea dictionarelor, posibilitatea dezvoltarii bazelor de date distribuite, performante si posibilitati de extindere. Singura structura de date utilizata la nivel logic in modelul relational este cea de tabel des utilizata in viata obisnuita spre deosebire de celelalte modele care utilizeaza mai multe tipuri de structuri de date cu diferite tipuri de definiri si prelucrari. Operatiile se refera in general la multimi si nu la elemente particulare, facand o descriere a obiectelor din rezultatul dorit si lasand sistemul sa gaseasca modul de calcul optim al solutiei (navigare automata) spre deosebire de celelalte metode in care trebuie indicat modul de prelucrare a datelor pentru a se ajunge la rezultat (navigare manuala). De aici rezulta si independenta fata de implementare si deci portabilitatea aplicatiilor si posibilitatea stabilirii unor legaturi dinamice intre date. Se definesc simplu prin intermediul operatiilor actiuni cum sunt: regasire date, reactualizare date, folosirea datelor virtuale, definirea drepturilor de acces, controlul accesului concurent, constrangerile de integritate si altele. Utilizarea vederilor permite o mai buna percepere a datelor de catre fiecare utilizator, definirea unor aplicatii diverse pentru aceiasi baza de date, poate sa faca invizibile anumite informatii (securitatea datelor) si permite o independenta logica a datelor. Toate sistemele de baze de date distribuite au fost construite de tipul model relational. Aceasta deoarece prin cererile relationale se obtine o buna semantica, raspunsurile relationale sunt multimi de tupluri ce sunt usor de transformat in mesaje standard, cererile sunt usor de optimizat, se poate face usor fragmentarea si independenta fragmentelor se obtine usor.

CAPITOLUL AL IV-LEA

SISTEME DE GESTIUNE A BAZELOR DE DATE (SGBD)

1. SGBD INGRES Sistemul INGRES (INteractive Graphics and REtrieval System) a fost proiectat la universitatea Berkeley din Californiua si floseste modelul relational de baze de date. Sistemul de operare utilizat este UNIX pe DEC PDP pentru varianta universitara si diverse alte sisteme pentru varianta comerciala. In acest sistem relatiile sunt memorate sub forma de fisiere UNIX cu blocuri de 512 octeti. Tuplurile sunt reprezentate sub forma de inregistrari. Initial INGRES a fost construit pentru limbajul de cereri QUEL (Query Language) dar ulterior el a inclus si limbajul SQL. QUEL poate fi utilizat atat interactiv (prin INGRES Terminal Monitor) cat si programabil prin intermediul unor limbaje de programare (prin Embedded QUEL sau EQUEL). Sistemul mai contine o multime de utilitare pentru construirea unor interfete prin intermediul formelor, pentru scrierea rapoartelor, pentru construirea unor grafice si alte utilitati. Sistemul poate fi folosit de mai multi utilizatori in acelasi timp, contine un modul de optimizarea cererilor, permite definirea dinamica a datelor si are un mecanism de lucru cu vederi. In limbajul QUEL se pot utiliza instructiunile CREATE pentru crearea unui tabel de baza, INDEX pentru crearea unui index, DEFINE VIEW pentru crearea unei vederi, DESTROY pentru eliminarea unui tabel de baza, index sau vedere si MODIFY pentru a schimba structura unui tabel de baza sau index. Crearea unui tabel de baza se face prin instructiunea CREATE tabel (definitie-coloana [, definitie-coloana ] ... ) unde definitie-coloana este de forma coloana = tip-date [ NOT NULL ] cu tipul de date I1, I2 sau I4 pentru intregi binari de 1, 2 si respectiv 4 bytes, F4 si F8 pentru valori in virgula mobila cu 4 si respectiv 8 bytes, MONEY pentru dolari si centi pe 16 cifre cu punct zecimal inainte de ultimele doua cifre, CHAR(n) pentru sir de n caractere, VARCHAR(n) pentru sir de cel mult n caractere si DATE pentru data si ora ce poate fi reprezentata sau absolut sau ca interval. La creare tablourile sunt considerate de tip secvential (heaps) structura lor de memorare putand fi modificata la cerere prin MODIFY. Vederile sunt definite prin instructiuni de forma DEFINE VIEW vedere [ ( lista-rezultat ) ] [ WHERE conditie ] Se poate crea un index secundar pentru un tabel de baza cu comanda

INDEX ON tabel IS index ( coloana [, coloana ] ... ) Eliminarea unor tablouri de baza, indexi sau vederi se face cu DESTROY lista unde lista contine numele elementelor ce se elimina despartite prin virgula. Daca se elimina un tabel de baza sau o vedere se elimina automat si vederile si indexi in care acestea sunt implicate. Instructiunea MODIFY se foloseste la schimbarea modului de memorare a unui tabel de baza sau a unui index avand forma generala MODIFY tabel TO structura [ UNIQUE ] [ ON coloana [, coloana ] ... ] unde structura poate fi (prefixul C indica o compresare a datelor pe disc) BTREE sau CBTREE pentru B-arbore, HASH sau CHASH pentru dispersie (se foloseste restul impartirii cu un numar drept functie de dispersie), ISAM sau CISAM pentru indexare secventiala, HEAP sau CHEAP pentru secvential si HEAPSORT sau CHEAPSORT pentru o sortare in momentul modificari (ordinea nu se pastreaza prin modificarile ulterioare). Cu exceptia cazurilor HEAP si CHEAP operatia MODIFY elimina inregistrarile duplicat. Inregistrari duplicate pot sa apara numai in organizari de t