Documente Academic
Documente Profesional
Documente Cultură
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
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
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
Diagrama E-A:
SECTII 1 N ANGAJATI 1
d
COMPONENTE COMPOZITII M N
M
N PRODUSE VANZARI P M N
CLIENTI 6
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
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
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)
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
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)
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)
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
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)
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
16
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
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.
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;
19
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
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
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;
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
Se obtine rezultatul:
@media 6.5
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.
27
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
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)
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
Sursa de date
Sursa de date
Sursa 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
32
33