Sunteți pe pagina 1din 33

Capitolul 4: Dezvoltarea sistemelor de baze de date

Fazele de dezvoltare a bazelor de date


Colectarea si analiza cerintelor Proiectarea bazelor de date
Proiectarea conceptuala a bazelor de date Alegerea unui SGBD Proiectarea logica a bazelor de date Proiectarea fizica a bazelor de date

Implementarea bazelor de date

Dezvoltarea aplicatiilor de baze de date


Limbaje procedurale de extensie a limbajului SQL
Limbajul Transact-SQL Cursoare, proceduri stocate, functii, triggere

Limbajul SQL integrat (Embeded SQL) Interfete de programare a aplicatiilor de baze de date
Interfata ODBC Interfata JDBC
Prof. Felicia Ionescu Cap. 4 - Dezvoltarea sistemelor de baze de date 1

Dezvoltarea sistemelor de baze de date (1)


Sistemul informatic (information system) al unei organizatii include toate resursele acelei organizaii care sunt implicate n colectarea, administrarea, utilizarea i diseminarea informaiilor Sistemele informatice:
Pana in anii 1970 erau sisteme de fiiere (pe disc sau band magnetic) Actual se folosesc sisteme de baze de date, care permit gestionarea unor volume de date mari ntr-un timp redus, cu protecia si securitatea datelor

Fazele de dezvoltare a sistemelor de baze de date:


Analiza i definirea sistemului: definirea scopului sistemului de baze de date, a utilizatorilor i a aplicaiilor acestuia Proiectarea sistemului: n aceast etap se realizeaz proiectul logic i proiectul fizic al sistemului, pentru un anumit SGBD ales Implementarea: este etapa n care se scriu definiiile obiectelor bazei de date (tabele, vederi, etc.) i se implementeaz aplicaiile software Testarea i validarea: noul sistem de baze de date este testat i validat ct mai riguros posibil

n mod tipic, dezvoltarea unui sistem de baze de date const din:


dezvoltarea structurii si a continutului bazei de date dezvoltarea modulelor de prelucrare a datelor
Prof. Felicia Ionescu Cap. 4 - Dezvoltarea sistemelor de baze de date 2

Dezvoltarea sistemelor de baze de date (2)


Fazele importante de dezvoltare a sistemelor de baze de date sunt:
Faza 1: Colectarea i analiza cerinelor Faza 2: Proiectare conceptual Faza 3: Alegerea unui SGBD Faza 4: Proiectare logic Faza 5: Proiectare fizic Faza 6: Implementare Proiectarea schemei conceptuale i a schemelor externe (dependente de SGBD) Proiectarea schemei interne (dependent de SGBD) Instruciuni de descriere a datelor (LDD) (dependente de SGBD) Testarea datelor Cap. 4 - Dezvoltarea sistemelor de baze de date Implementarea tranzaciilor (dependente de SGBD) Testarea tranzactiilor 3 Proiectarea tranzaciilor (dependente de SGBD) Cerine de date Cerine de prelucrare Proiectarea tranzaciilor (independente de SGBD)

Proiectarea schemei conceptuale i a schemelor externe (independente de SGBD)

Faza 7: Testare si validare Prof. Felicia Ionescu

Colectarea si analiza cerintelor


nainte de a se proiecta efectiv o baz de date (in cadrul unui sistem informatic sistem de baze de date), este necesar s se cunoasc:
ce rezultate se ateapt utilizatorii poteniali s obin de la baza de date respectiv ce informaii primare sunt disponibile pentru acestea ce aplicaii se vor executa (aplicaii de gestiune a stocurilor, aplicaii contabile, aplicaii de urmrire a consumurilor, aplicaii de salarizare, etc.).

Toate acestea sunt informaii slab structurate, n general n limbaj natural, pe baza crora se pot construi diagrame, tabele, grafice etc., manual sau folosind diferite instrumente software de proiectare Dar din aceste informatii trebuie sa fie extrase date precise de proiectare a bazelor de date si a aplicatiilor Aceast faz este puternic consumatoare de timp, dar este crucial pentru succesul sistemului informatic

Prof. Felicia Ionescu

Cap. 4 - Dezvoltarea sistemelor de baze de date

Proiectarea conceptuala a bazelor de date


Proiectarea bazelor de date:
Proiectarea schemei conceptuale a bazei de date Proiectarea schemelor externe (vederi ale urilizatorilor) Proiectarea tranzactiilor

Dependenta proiectarii de SGBD-ul folosit:


Proiectarea schemei conceptuale si a schemelor externe independente de SGBD (scheme conceptuale de nivel inalt) si a tranzactiilor independente de SGBD Proiectarea schemei conceptuale si a schemelor externe dependente de SGBD (scheme logice) si a tranzactiilor dependente de SGBD

Este recomandabil s se proiecteze mai nti schema conceptual de nivel nalt independent de SGBD, care este o descriere stabil a bazei de date Definirea schemei conceptuale:
proiectare prin integrarea cerinelor proiectare prin integrarea schemelor externe

Moduri de proiectare conceptuala:


Proiectare ascendenta (bottom-up): se porneste de la schema conceptuala universala, care se rafineaza Proiectare descendenta (up-bottom) : se porneste de la diagrama E-A, definita pe baza tipurilor de entitati si a asocierilor dintre acestea
Prof. Felicia Ionescu Cap. 4 - Dezvoltarea sistemelor de baze de date 5

Exemplu de proiectare a unei baze de date


Baza de date INTREPRINDERE cu multimile de entitati puternice:
SECTII(Nume,Buget) ANGAJATI(Nume, Prenume, DataNasterii, Adresa, Functie, Salariu) PROIECTE(Denumire,Termen, Buget) PRODUSE(Denumire, Descriere) COMPONENTE(Denumire, Descriere) FURNIZORI(Nume,Prenume,Adresa) ; CLIENTI(Nume, Prenume, Adresa)

Diagrama E-A:
SECTII 1 N ANGAJATI 1
d

PROIECTE ACTIVITATI M N ACHIZITII P

COMPONENTE COMPOZITII M N
M

N PRODUSE VANZARI P M N

N DEPENDENTI Prof. Felicia Ionescu INGINERI SECRETARE FURNIZORI

CLIENTI 6

Cap. 4 - Dezvoltarea sistemelor de baze de date

Alegerea unui SGBD


Factori pentru alegerea unui SGBD: tehnici, economici i administrativi Factorii tehnici:
Modelul de date (ierarhic, reea, relaional, obiect-orientat, obiect-relaional) Capacitatea de stocare a datelor Posibilitile de control al concurenei i de refacere a datelor Configuraia hardware-software necesar Cerine de dezvoltare a programelor de aplicaii (limbaje, compilatoare etc.)

Factorii economici i administrativi:


Costul de achiziie a software-ului, care include costul de baz, la care se adaug diferite opiuni (opiuni de salvare-refacere, documentaie, limbaje i interfee de programare, drivere, etc.) Costul de ntreinere, pentru a obine serviciul furnizorului de meninere la zi a versiunii SGBD. Costul de pregtire a personalului se refer la cursurile care se organizeaz pentru persoanele care se ocup cu ntreinerea i operarea sistemului Cunotinele de programare a personalului ntr-un anumit SGBD

Beneficiile achiziionrii unui anumit SGBD nu sunt uor de apreciat sau de msurat, dar analiza raportului cost-performane poate da o imagine a rezultatelor obinute
Prof. Felicia Ionescu Cap. 4 - Dezvoltarea sistemelor de baze de date 7

Proiectarea logica a bazelor de date


Se porneste de la schema conceptual i schemele externe de nivel nalt independente de SGBD (diagrama E-A), si se realizeaz schema logica (diagrama logica) si schemele (vederile) externe pentru sistemul SGBD ales Proiectarea logic poate fi realizat n dou subfaze:
Transpunerea schemei logice n modelul de date al sistemului SGBD ales, dar independent de sistemul de gestiune propriu-zis Rafinarea schemei logice i a schemelor externe obinute anterior, astfel nct s se utilizeze ct mai multe din facilitile oferite de sistemul SGBD ales (modul de generare a cheilor primare, definirea constrngerilor, etc.)

Transpunerea modelului Entitate-Asociere (diagrama E-A) n model relaional:


Proiectarea relaiilor corespunztoare mulimilor de entiti din diagrama E-A Proiectarea asocierilor; asocierile se pot reprezenta prin chei strine sau prin relaii de asociere; acestea sunt relaii suplimentare care se adaug n schema conceptual a bazei de date relaionale pentru a reprezenta asocierile M:N

In mod frecvent, etapele de proiectare conceptuala si proiectare logica se efectueaza impreuna, proiecatand schema (diagrama) logica a bazei de date cu ajutorul toolset-urilor de dezvoltare oferite de SGBD-ul utilizat
Prof. Felicia Ionescu Cap. 4 - Dezvoltarea sistemelor de baze de date 8

Diagrama logica a bazei de date INTREPRINDERE (1)


Dezvoltata in Microsoft Access

Prof. Felicia Ionescu

Cap. 4 - Dezvoltarea sistemelor de baze de date

Diagrama logica a bazei de date INTREPRINDERE (2)


Dezvoltata in MySQL Workbench

Prof. Felicia Ionescu

Cap. 4 - Dezvoltarea sistemelor de baze de date

10

Proiectarea relatiilor
Mulimile de entiti puternice (normale) din diagrama E-A devin relaii:
Numele fiecrei relaii trebuie s fie unic n baza de date Atributele relatiei corespund atributelor entitilor din multimea de entitati data Cheia primar se definete:
fie ca o cheie primara natural (combinaie de atribute care definesc n mod unic un tuplu) fie ca o cheie primar artificial De exemplu, n relaiile ANGAJATI, SECTII, PROIECTE, COMPONENTE, PRODUSE, FURNIZORI, CLIENTI s-a adugat cte o cheie primar artificial (IdAngajat, IdSectie etc.)

Mulimile de entiti slabe din diagrama E-A devin relaii aflate n asociere N:1 cu relaia corespunztoare mulimii de entiti de care acestea depind
Pentru realizarea acestei asocieri, n relaia dependent se adaug o cheie strin care refer cheia primar a relaiei puternice referite; de exemplu: cheia straina dAngajat in introdusa in relatia DEPENDENTI . De ex:
DEPENDENTI( IdAngajat, Nume, Prenume, DataNasterii, GradRudenie)

Cheia primar a relaiei dependente poate fi:


o combinaie format din atributul cheie strin i alte atribute care asigur posibilitatea de identificare unic a unui tuplu sau poate fi o cheie artificial. De ex: (IdAngajat, Nume, Prenume ) sau o cheie primara artificiala (de ex. idDependenti) Prof. Felicia Ionescu Cap. 4 - Dezvoltarea sistemelor de baze de date 11

Proiectarea asocierilor (1)


Asocierea binar 1: N dintre dou mulimi de entiti puternice se realizeaza prin intermediul unei chei strine n a doua relaie (cea cu multiplicitatea N a asocierii) care refer cheia primar din prima relaie
De exemplu, asocierea 1:N ntre relaiile SECTII ANGAJATI se realizeaz prin cheia strin IdSecie din relatia ANGAJATI

Asocierea binar 1: N intre relaia corespunztoare unei mulimi de entiti puternice si relatia corespunztoare unei mulimi de entiti slabe se realizeaza la fel, printr-o cheie straina in relatia multimii de entitati slabe Asocierea binar M:N dintre dou mulimi de entiti se realizeaza cu o noua relaie, numit relaie de asociere Aceasta are rapoartele de multiplicitate M :1, respectiv N :1 cu fiecare din cele dou relaii date, prin intermediul a dou chei strine Cheia primar a unei relaii de asociere poate fi:
o cheie primara artificial sau poate fi compus din cheile strine, mpreun cu alte atribute ale relaiei

Exemplu: asocierea M:N dintre relaiile COMPONENTE-PRODUSE se realizeaza cu o relaie de asociere, numit COMPOZITII
Relatia COMPOZITII contine cheile strine IdComponenta i IdProdus Cheia primar a relaiei COMPOZITII poate fi compus din cheile strine IdComponenta i IdProdus sau poate fi o cheie artificiala (IdCompozitii)
Prof. Felicia Ionescu Cap. 4 - Dezvoltarea sistemelor de baze de date 12

Proiectarea asocierilor (2)


Asocierea binar 1:1 ntre dou mulimi de entiti puternice se poate transpune n modelul relaional n dou moduri:
fie prin intermediul unei chei strine (caz particular al asocierii 1:N), fie printr-o relaie de asociere (caz particular al unei asocierii M:N).

Exemplu: intre relaiile SOTI, SOTII, se realizeaza o asociere 1:1 cu o cheie straina introdusa intr-una dintre relatii:
SOTI (IdSoti, Nume, Prenume, DataNasterii, Adresa) SOTII (IdSotii,Nume, Prenume, DataNasterii, Adresa, IdSoti)

Realizarea asocierii 1:1 ntre dou relaii folosind o relatie de asociere


De exemplu: CASATORII(IdSot, IdSotie, DataCasatoriei)

Asocierea binar 1:1 dintre o mulime de entiti de subtip i mulimea de entiti supertip este tot o asociere1:1 ntre relaiile corespunztoare Se realizeaza prin definirea n relaia corespunztoare subtipului de entitati a unei chei strine, care este n acelai timp i cheie primar
De exemplu: INGINERI(IdAngajat, Specialiatea)

Exemple de date in tabele asociate


Prof. Felicia Ionescu Cap. 4 - Dezvoltarea sistemelor de baze de date 13

Proiectarea asocierilor (3)


Asocierea multipl M:N:P:. se realizeaz la fel ca asocierea binar, prin intermediul unei noi relaii care se afl n asociere M:1, N:1, P:1, etc, cu fiecare din relaiile date. Pentru aceasta, in relatia de asociere se introduc chei straine care refera relatiile care se asociaza, fiecare cheie strin referind cheia primar dintr-una din relaiile asociate. Cheia primar a unei relaii de asociere multipl poate fi:
o cheie primara artificial sau poate fi compus din toate cheile strine, eventual mpreun cu alte atribute De exemplu: asocierea ntre relaiile COMPONENTE, FURNIZORI, ANGAJATI se realizeaza prin relatia ACHIZITII (IdComponenta, IdFurnizor, IdAngajat, Data, NrComponente, PretUnitar)

In concluzie, n modelul relaional toate asocierile se realizeaz prin chei strine Proiectare directa (forward engineering): se proiecteaza schema logica, se exporta un script, care se poate executa si se obtine baza de date Proiectare inversa (reverse engineering): se creeaza baza de date (de exemplu, in Msql Query Browser), se genereaza scriptul (cu comanda mysqldump u root p database_name > script_name.sql), se importa scriptul (de ex. in Msql Workbench), care va desena diagrama logica a bazei de date
Prof. Felicia Ionescu Cap. 4 - Dezvoltarea sistemelor de baze de date 14

Proiectarea relatiilor normalizate in prima forma normala


O relaie este normalizat n prima form normal (FN1) dac fiecare atribut ia numai valori atomice i scalare din domeniul su de definiie. O situaie frecvent ntlnit este aceea n care un atribut poate lua mai multe valori pentru fiecare entitate
De exemplu, n mulimea de entiti PERSOANE (Nume, Prenume, Adresa, NrTelefon) atributul NrTelefon poate lua mai multe valori (numrul telefonului de acas, al telefonului de la birou, al telefonului mobil, etc)

Relaia n care un atribut poate avea valori multiple (un vector de valori) este o relaie nenormalizat, care nu este admis de SGBD relaionale Transformarea unei relaii nenormalizate n relaie normalizat n prima forma normal (FN1):
se nlocuiete atributul care ar putea avea valori multiple cu cte un atribut pentru fiecare din posibilitile existente: Exemplu: PERSOANE (IdPersoana, Nume, Prenume, Adresa,TelefonAcasa, TelefonBirou, TelefonMobil) se nlocuiete atributul care ar putea avea valori multiple cu o nou relaie care refer relaia iniial printr-o cheie strin. Exemplu: PERSOANE(IdPersoana, Nume, Prenume, Adresa), TELEFOANE(NrTelefon, IdPersoana, Descriere)

Exemple de date in tabele cu diferite tipuri de asocieri


Prof. Felicia Ionescu Cap. 4 - Dezvoltarea sistemelor de baze de date 15

Proiectarea fizica a bazelor de date


Fiecare SGBD ofer o varietate de opiuni de organizare a fiierelor i a modului de acces la datele stocate:
indexuri tipuri de fisiere gruparea nregistrrilor corelate n aceleai blocuri pe disc (clustering)

Proiectarea fizic a bazei de date este procesul de alegere a acestor structuri de memorare i de acces la fiierele bazei de date, pentru a obine performane ct mai bune pentru SGBD-ul ales, pentru ct mai multe din aplicaiile proiectate Parametrii generali de alegere a opiunilor proiectului fizic al bazei de date:
Timpul de rspuns: intervalul de timp dintre lansarea n execuie a unei tranzacii i primirea rspunsului la acea tranzacii Utilizarea spaiului de memorare: dimensiunea spaiului pe disc utilizat de fiierele bazei de date i de structurile de acces la date Capacitatea tranzacional (transaction throughput): numrul mediu de tranzacii care pot fi prelucrate pe minut de ctre sistemul de baze de date

Prof. Felicia Ionescu

Cap. 4 - Dezvoltarea sistemelor de baze de date

16

Implementarea bazelor de date


n faza de implementare a bazelor de date relaionale:
Se creeaz obiectele principale ale bazei de date (tabele, vederi, indexuri), pe baza proiectului logic i a proiectului fizic, folosind limbajul de descriere a datelor (LDD) oferit de sistemul SGBD ales, sau toolset-uri grafice (de ex. table editor) sau prin executia scriptului generat de un toolset de proiectare Se implementeaz procedurile care asigur verificarea i forarea tuturor constrngerilor explicite (aseriuni, dependene de date care nu sunt determinate de chei ale relaiilor), a cror previziune i documentare a fost realizat n faza de proiectare logic a bazei de date Se populeaza baza de date cu informatii obinute prin conversia unor date existente sub form de fiiere sau introduse direct n tabele

Tot n aceast faz programatorii de aplicaii implementeaz, pe baza specificaiilor conceptuale ale tranzaciilor, programele de aplicaii, n diferite tehnologii de programare disponibile (limbaje procedurale de extensie a limbajului SQL, limbajul SQL integrat, interfee i biblioteci de programare) Dup crearea i popularea bazei de date i implementarea programelor de aplicaii se poate trece la etapa de testare si operare a sistemului de baze de date, n paralel cu monitorizarea i ntreinerea acestuia
Prof. Felicia Ionescu Cap. 4 - Dezvoltarea sistemelor de baze de date 17

Dezvoltarea aplicatiilor de baze de date


Aplicaiile de baze asigura:
interfaa (grafic) cu utilizatorii implementarea algoritmilor de calcul necesari interfaa cu sistemele de gestiune a bazelor de date
Aplicatie de baza de date Utilizatori
Limbajul SQL integrat (Embeded SQL) Interfete de programare a aplicatiilor (API) Instr. SQL

SGBD
Limbajul SQL Extensii procedurale ale limbajului SQL

Rezultate

Limbajul SQL, folosit in SGBD-uri este un limbaj neprocedural, adica nu prevede instruciuni de control al ordinii de execuie a operaiilor De aceea SGBD-urile mai folosesc si extensii procedurale a limbajului SQL:
PL/SQL in sistemele Oracle, PL/PLGSQL in sistemele PostGreSQL Transact-SQL in sistemele Microsoft SQL Server Extensie SQL in MySQL (asemanatoare cu Transact SQL) etc.

Aplicatiile de baze de date folosesc:


Limbajul SQL integrat intr-un limbaj de nivel inalt (Embeded SQL) Interfete de programare a aplicatiilor (API) (call level interface)
Prof. Felicia Ionescu Cap. 4 - Dezvoltarea sistemelor de baze de date 18

Limbaje procedurale de extensie a SQL


Extensiile procedurale ale limbajului SQL definesc:
Variabile, instructiuni pentru controlul ordinii de execuie (bucle while, instruciuni condiionale if etc.), instruciuni SQL extinse ofera suport de crearea cursoarelor, a procedurilor stocate, a funciilor definite de utilizator i a declanatorilor (triggere)

Variabilele sunt folosite pentru stocarea in memorie a unor valori care pot fi testate sau modificate i pot fi folosite pt transferul datelor ctre i de la tabele Variabilele locale au ca domeniu de definiie blocul, procedura, functia sau trigger-ul n care au fost declarate Un bloc este un grup de instructiuni delimitat prin instructiunile: BEGIN ... END; un bloc este considerat o instructiune compusa O variabil local se declar si se initializeaza diferit de la un SGBD la altul. ex:
in Transact SQL: DECLARE @contor INT in PL/SQL (Oracle): DECLARE CONTOR := 1; in MySQL: DECLARE contor INT; REPEAT...UNTIL WHILE BREAK CONTINUE FOR SELECT @contor = 0 SET contor = 0;

Ordinea de execuie a instruciunilor este controlat prin instruciuni ca:


BEGIN...END GOTO IF...ELSE RETURN
Prof. Felicia Ionescu

Cap. 4 - Dezvoltarea sistemelor de baze de date

19

Instructiuni SQL extinse


Extensiile procedurale definesc clauze suplimentare in instructiunile SQL, astfel nct acestea s poat fi folosite n combinaie cu variabilele locale De exemplu - instruciunea SELECT prin care se incarca valori ale unor atribute selectate din baza de date in variabile locale:
In Transact-SQL: In PL/SQL (Oracle): In MySQL: SELECT @var1 = col1, @var2 = col2, ... @varn = coln FROM lista_tabele WHERE conditie SELECT lista_coloane INTO lista_variabile FROM lista_tabele [WHERE conditie] [optiuni] SELECT lista_coloane INTO lista_variabile FROM lista_tabele [WHERE conditie] [optiuni]

Astfel de instruciuni sunt utile pentru interogrile care returneaz o singur linie, deoarece variabilele locale sunt setate cu valorile atributelor din prima linie a rezultatului, iar valorile din celelalte linii se pierd. De ex. (in MySQL):
DECLARE id_angajat int; DECLARE s_nume, s_prenume varchar(20); SET id_angajat = 5; SELECT Nume, Prenume INTO s_nume, s_prenume FROM ANGAJATI WHERE IdAngajat = id_angajat

Atunci cnd o interogare returneaz o mulime de linii, se foloseste un cursor Variabilele locale mai pot fi folosite n clauza WHERE a instructiunii SELECT precum si in instructiunile INSERT sau UPDATE (ca valori introduse)
Prof. Felicia Ionescu Cap. 4 - Dezvoltarea sistemelor de baze de date 20

Proceduri stocate
O procedur stocat (stored procedure) este o procedur care implementeaz o parte din algoritmii de calcul ai aplicaiilor i care este memorat in baza de date, la fel ca i alte obiecte ale bazei de date Procedurile stocate se definesc folosind extensiile procedurale ale SQL:
In Transact-SQL: CREATE PROCEDURE nume_proc [parametri] AS instructiune In PL/SQL (Oracle): CREATE PROCEDURE nume_proc [parametri] AS instructiune In MySQL: CREATE PROCEDURE nume_proc [parametri] instructiune_compusa

Parametrii pot fi de intrare (IN), de iesire (OUT) sau de intrare-iesire (INOUT); apelul unei proceduri stocate de ctre un client (aplicaie) produce execuia de catre SGBD a tuturor instruciunilor procedurii i returnarea rezultatrlor in parametrii OUT si INOUT Avantaje - imbunatatirea performantelor sistemului prin:
Scaderea comunicaiei ntre aplicaie i serverul bazei de date Scaderea timpului de execuie a sarcinii respective, dat fiind c procedura stocat este deja compilat, optimizat si memorata, putand fi apelata oricand, de oricati clienti

Dezavantaje: congestionarea serverului si scaderea performantelor acestuia, dac prea multe aplicaii executa operaiile de prelucrare pe server prin intermediul procedurilor stocate
Prof. Felicia Ionescu Cap. 4 - Dezvoltarea sistemelor de baze de date 21

Exemplu: Procedura stocata in MySQL


Folosim tabelele: Studenti, Examene, Discipline:

Procedura stocata: Calculul mediei notelor la o disciplina data:


DELIMITER $$ /* se redefineste delimitatorul deoarece ; este obligatoriu intre instr. din blocuri */ DROP PROCEDURE IF EXISTS SP_Media $$ CREATE PROCEDURE SP_Media (OUT media float, IN disciplina varchar(4)) BEGIN SELECT AVG(nota) INTO media FROM DISCIPLINE, EXAMENE WHERE DISCIPLINE.idDiscipline = EXAMENE.idDiscipline AND Acronim = disciplina; END$$ DELIMITER ;

Apelul procedurii:
call SP_Media(@media, 'PBD'); /* o variabila precedata de @ este implicit locala */ select @media;
Prof. Felicia Ionescu Cap. 4 - Dezvoltarea sistemelor de baze de date 22

Functii definite de utilizator


O funcie definit de utilizator (user-defined function) este o funcie memorat in baza de date, la fel ca o procedur stocat O funcie are numai parametri de intrare, returneaz ntotdeauna o valoare i poate fi folosit direct n expresii (o procedur stocat poate s returneze zero, una sau mai multe valori prin parametrii de tip OUT sau INOUT) Functiile se definesc folosind extensiile procedurale ale limbajului SQL:
In Transact-SQL: CREATE FUNCTION nume_func [parametri] AS instructiune In PL/SQL (Oracle): CREATE FUNCTION nume_func [parametri] AS instructiune In MySQL: CREATE FUNCTION nume_func [parametri] instructiune_compusa

Exemplu de creare a unei functii in MySQL:


DELIMITER $$ DROP FUNCTION IF EXISTS Func_Media$$ CREATE FUNCTION Func_Media(disc varchar(4)) RETURNS float BEGIN DECLARE nota_medie float; SELECT AVG(nota) INTO nota_medie FROM DISCIPLINE, EXAMENE WHERE DISCIPLINE.idDiscipline = EXAMENE.idDiscipline AND Acronim = disc; RETURN nota_medie; END$$ DELIMITER ;

Utilizarea valorii returnate de o functie: select Func_Media('PBD');


Prof. Felicia Ionescu Cap. 4 - Dezvoltarea sistemelor de baze de date 23

Cursoare
Un cursor (cursor) este o structur (un buffer) care permite memorarea unei mulimi de linii returnate de o instruciune de interogare, urmata de extragerea si prelucrarea (eventual repetata) in programele de aplicatii a fiecarei linii Cursoarele se pot crea folosind limbajul SQL sau extensiile procedurale ale acestuia Instruciunile SQL de definire i de operare a cursoarelor:
Definire cursor: DECLARE nume_cursor [OPTIUNI] CURSOR FOR instructiune_select; Deschidere cursor (popularea cu datele din tabele): OPEN nume_cursor; Extragerea unei (sau mai multor) linii dintr-un cursor de la pozitia curenta: FETCH [FROM] nume_cursor INTO lista_variabile; Inchiderea cursor: CLOSE nume_cursor;

Cursoarele pot fi memorate:


la server, iar clientul primete cte o linie (sau un grup de linii) de la server la fiecare instruciune de extragere la client i liniile sunt folosite direct n programul respectiv

In general, cursoarele la server sunt mai avantajoase dect cursoarele la client, deoarece cursoarele la client necesit ca toate liniile rezultat s fie transferate dintr-o dat de la server la client
Prof. Felicia Ionescu Cap. 4 - Dezvoltarea sistemelor de baze de date 24

Exemplu: Cursor intr-o procedura stocata MySQL (1)


Procedura: Calculul mediei unui student dat (nume, prenume)
DELIMITER $$ DROP PROCEDURE IF EXISTS Medii_Studenti $$ CREATE PROCEDURE Medii_Studenti(OUT media float, IN s_nume varchar(20), IN s_prenume varchar(20)) BEGIN DECLARE done INT DEFAULT 0; DECLARE student, id_student INT; /*Crearea cursorului*/ DECLARE cursor_examene CURSOR FOR SELECT idStudenti, avg(nota) FROM EXAMENE GROUP BY idStudenti; DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1; SELECT idStudenti INTO student FROM STUDENTI WHERE Nume = s_nume AND Prenume = s_prenume; OPEN cursor_examene; REPEAT FETCH cursor_examene INTO id_student, media; UNTIL done = 1 OR id_student = student END REPEAT; CLOSE cursor_examene; END$$ DELIMITER ;
Prof. Felicia Ionescu Cap. 4 - Dezvoltarea sistemelor de baze de date 25

Exemplu: Cursor intr-o procedura stocata MySQL (2)


Pentru parcurgerea liniilor cursorului se defineste un handler pentru conditia de terminare a parcurgerii liniilor cursorului (not found); un handler este un fel de rutina de tratare a exceptiilor Apelul procedurii:
call Medii_Studenti(@media, 'Popescu', 'Marius'); select @media;

Se obtine rezultatul:

@media 6.5

Parcurgerea liniilor cursorului se poate face si cu instructiunea while:


FETCH cursor_examene INTO id_student, media; WHILE done = 0 AND id_student <> student DO FETCH cursor_examene INTO id_student, media; END WHILE;

Declararea unei variabile locale (cu instructiunea DECLARE) se poate face numai intr-un bloc BEGIN ... END si numai la inceputul acestuia Declaratiile trebuie sa fie facute intr-o anumita ordine: cursoarele se declara inaintea declararii handler-elor, iar variabilele locale inaintea declararii cursoarelor si a handler-elor
Prof. Felicia Ionescu Cap. 4 - Dezvoltarea sistemelor de baze de date 26

Triggere
Un trigger este o procedur stocat special, care este executat automat atunci cnd se efectueaz operaii de actualizare a relaiilor (INSERT, DELETE, UPDATE) Triggerele pot fi create folosind extensiile procedurale ale limbajului SQL; sintaxa difera de la un SGBD la altul (sunt neportabile):
In Transact-SQL: CREATE TRIGGER nume_trigger ON nume_tabel {FOR|AFTER|INSTEAD OF} {[DELETE][,INSERT][,UPDATE]} AS instructiuni In Pl/SQL (Oracle): CREATE TRIGGER nume_trigger {BEFORE|AFTER} [INSERT, DELETE, UPDATE] [FOR EACH ROW [WHEN conditie]] CALL procedura In MySQL: CREATE TRIGGER nume_trigger ON tabel FOR EACH ROW instructiune

Utilizarea triggerelor:
Extinderea capacitii SGBD-ului de meninere a integritii datelor relaionale impunerea constrngerile explicite cum sunt dependenele de date (dependene funcionale sau multivalorice care nu sunt determinate de chei) Generarea automat a unor valori care rezult din valori ale altor atribute Jurnalizarea transparent a evenimentelor sau culegerea de date statistice n legtur cu accesarea relaiilor.

Prof. Felicia Ionescu

Cap. 4 - Dezvoltarea sistemelor de baze de date

27

Exemplu: trigger in MySQL


Se defineste un trigger care genereaza coloana nota in tabelul examene_2(idExamene, idDiscipline, notaLab, notaExam, nota):
DELIMITER $$ DROP TRIGGER IF EXISTS calcul_nota $$ CREATE TRIGGER calcul_nota BEFORE UPDATE ON `examene_2` FOR EACH ROW BEGIN SET NEW.nota = NEW.notaLab + NEW.notaExam; END; $$ DELIMITER ;

Instructiunile dupa FOR EACH ROW se executa de fiecare data cand triggerul este activat, ceea ce se intampla la fiecare linie afectata de instructiunea de declansare a triggerului (UPDATE in exemplul dat):
update examene_2 set notaLab = 2 , notaExam = 5 where idStudenti=1 AND idDiscipline = 2;

Cuvintele cheie OLD si NEW permit accesarea coloanelor din linia afectata:
pentru triggere INSERT se poate folosi numai NEW, pentru triggere DELETE numai OLD, pentru triggere UPDATE se poate folosi OLD (pentru valorile dinainte de UPDATE) sau NEW (pentru valorile actualizate).
Prof. Felicia Ionescu Cap. 4 - Dezvoltarea sistemelor de baze de date 28

Limbajul SQL integrat (Embeded SQL)


n limbajul SQL integrat (Embeded SQL) instruciunile limbajului SQL sunt incluse direct n codul programului surs scris ntr-un limbaj gazd de nivel nalt (Ada, PL/1, Pascal, Fortran, Cobol, C) Controlul fluxului de operaii este realizat prin instruciunile limbajului gazd, iar operaiile cu baza de date sunt realizate prin instruciuni SQL Instruciunile SQL integrate n programul scris n limbajul gazd sunt prelucrate de un instrument software adecvat (numit preprocesor), fiind transformate n apeluri de funcii ale unei biblioteci speciale a SGBD-ului Rezultatul preprocesrii este un program surs n limbajul gazd, care poate fi compilat cu compilatorul limbajului gazd respectiv i apoi legat (link) cu bibliotecile de sistem i bibliotecile SGBD-ului Standardul SQL2 specific suport integrat pentru limbajele PL/1, C, Pascal, Cobol, Fortran, Mumps. Pentru produsele Oracle, limbajul SQL a fost integrat n limbajul Java, sub numele de SQLJ Pentru sistemele Microsoft SQL Server se poate folosi limbajul ESQL/C (Embedded SQL for C), pentru MySQL exista biblioteca mysqld
Prof. Felicia Ionescu Cap. 4 - Dezvoltarea sistemelor de baze de date 29

Interfete si biblioteci de programare a aplicatiilor de baze de date


In general se folosesc 2 categorii de interfete de programare a aplicatiilor de baze de date: interfete specifice unui anumit SGBD si interfete independente de SGBD Interfete specifice unui anumit SGBD sunt biblioteci care contin funcii i macrodefiniii ce permit aplicaiilor s interacioneze cu serverul bazei de date. De exemplu:
Biblioteci dezvoltate pentru limbajul C ( biblioteca C pentru sistemul Microsoft SQL Server - DB-Library for C, biblioteca MySQL C API) Biblioteci pentru alte limbaje (C++, Perl, PHP, etc)

Interfee independente de SGBD, cu un grad ridicat de generalitate, care pot fi folosite pentru mai multe tipuri de SGBD-uri; cele mai cunoscute sunt:
Interfata ODBC (Open DataBase Connectivity) Interfata JDBC (Java DataBase Connectivity)

Prof. Felicia Ionescu

Cap. 4 - Dezvoltarea sistemelor de baze de date

30

Interfata ODBC
Tehnologia ODBC (Open Database Connectivity) - interfa de programare a aplicaiilor prin apel de funcii independente de sistemul SGBD folosit Independen se obine prin drivere specifice fiecrui SGBD Driverul transform apelurile de funcii ODBC n comenzi SQL (sau ntr-un limbaj procedural de extensie a limbajului SQL) si le transmite SGBD-ului

Interfaa ODBC

Aplicaie Administrator de drivere Driver Driver Driver

Sursa de date

Sursa de date

Sursa de date

SGBD i Baza de date

SGBD i Baza de date

SGBD i Baza de date

Prof. Felicia Ionescu

Cap. 4 - Dezvoltarea sistemelor de baze de date

31

Interfaa JDBC
JDBC este o interfa de programare a aplicaiilor de baze de date independent de platform i de sistemul SGBD Interfaa JDBC const din clase si obiecte Java i permite interaciunea cu baze de date relaionale, precum i cu alte surse de date n format tabelar Arhitectura JDBC const din mai multe niveluri care asigur independena funciilor de acces apelate din programele de aplicaie de SGBD
Interfaa JDBC

Program de aplicatie Java

Administratorul de drivere (DriverManager)


Driver JDBC de retea Punte JDBCODBC Driver ODBC Driver combinat Driver Java pur

Protocol JDBCmiddleware Prof. Felicia Ionescu

Protocoale de acces specifice SGBD-urilor Cap. 4 - Dezvoltarea sistemelor de baze de date

32

Prof. Felicia Ionescu

Cap. 4 - Dezvoltarea sistemelor de baze de date

33