Sunteți pe pagina 1din 24

UNIVERSITATEA DIN CRAIOVA FACULTATEA DE ELECTROMECANIC CATEDRA DE ACIONRI ELECTRICE

ef lucrri dr. ing. Ctlin CONSTANTINESCU

BAZE DE DATE
Electromecanic - Frecven redus - Suport teoretic -

2006 - 2007

BIBLIOGRAFIE
1. SISTEME DE GESTIUNE A BAZELOR DE DATE Velicanu Manole i colectiv Ed. Petrion, Bucureti, 1998 BAZE DE DATE INTELIGENTE N MANAGEMENTUL FIRMEI Andone Ioan, ugui Alexandru Ed. Dosoftei, Iai, 1997 SQL FR PROFESOR N 14 ZILE Perkins Jeff, Morgan Bryan Ed. TEORA, Bucureti, 1998 BAZE DE DATE Burdescu Dumitru Dan, Ionescu Augustin Iulian, Stnescu Liana Editura Universitaria, Craiova, 2004 BASES DE DONNES Jean Fruitet Cours, Universit de Marne - La - Valle, 1997 PROGRAMARE N ACCESS 97. VBA PENTRU NCEPTORI Smith Robert, Sussman David Ed. TEORA, Bucureti, 1997 TOTUL DESPRE MICROSOFT ACCESS 97 Viescas L. John Ed. TEORA, Bucureti, 1999 BAZE DE DATE. FUNDAMENTE TEORETICE I PRACTICE Grupul BDASEIG Ed. Infomega, Bucureti, 2002 SQL n lecii de 10 minute Ben Forta Ed. Teora, Bucureti, 2004

2.

3.

4.

5.

6.

7.

8.

9.

Baze de date - Constantinescu Ctlin; 2006 - 2007, sem. 1

Baze de date i sisteme de gestiune a bazelor de date. Elemente generale O baz de date este un ansamblu organizat i structurat de date legate funcional ntre ele. Bazele de date sunt gestionate unitar prin programe dedicate, numite sisteme de gestiune a bazelor de date (SGBD; DBMS - DataBase Management Systems). Un SGBD (fig. 1) este responsabil de:

Fig. 1 Structura general a unui sistem de gestiune a bazelor de date - memorarea datelor prin intermediul sistemului de gestiune a fiierelor; - gestiunea datelor i a legturilor dintre ele (SGBD intern); - introducerea i extragerea datelor (SGBD extern). SGBD-urile actuale au 3 niveluri de reprezentare a datelor din bazele de date (fig. 2): - nivelul extern care face referire la datele necesare utilizatorilor; - nivelul conceptual care rezult din nivelul extern prin analiza schemelor externe i prin eliminarea redundanelor; - nivelul intern care se realizeaz cu ajutorul efectiv al SGBD-ului pornind de la schema conceptual. Funciile de baz ale unui SGBD sunt (fig. 3): - funcia de utilizare; - funcia de descriere a datelor; - funcia de manipulare; - funcia de administrare. Funcia de utilizare asigur interfaa ntre utilizatori i baza de date. Mulimea utilizatorilor poate fi mprit n trei categorii: - programatorii de aplicaii, care scriu programele ce utilizeaz baza de date; - utilizatorii finali (beneficiarii propriu-zii ai bazei de date), care, la rndul lor, pot fi mprii n utilizatori experi i utilizatori neinformaticieni (aa-numiii utilizatori naivi); - administratorul bazei de date care asigur administrarea unitar a bazei de date. Funcia de descriere a datelor se refer la definirea bazei de date cu ajutorul unui limbaj de descriere a datelor (LDD). Definirea datelor poate fi realizat la toate nivelurile SGBD-urilor (extern, conceptual, intern). n urma descrierii datelor, rezult schema bazei de date.
1

Baze de date - Constantinescu Ctlin; 2006 - 2007, sem. 1

Funcia de manipulare a datelor este cea mai complex i se materializeaz prin intermediul limbajelor de manipulare a datelor (LMD). La nivelul acestei funcii, datele sunt ncrcate, actualizate, prelucrate i regsite. Funcia de administrare cade n sarcina adminstratorului de reea. Cteva dintre sarcinile acestuia sunt: - organizarea bazei de date; - realizarea schemei conceptuale; - coordonarea proiectrii bazei de date; - autorizarea accesului la date; - refacerea bazei de date n cazul alterrii acestora etc.

Fig. 2 Nivelurile de reprezentare i percepie a SGBD-urilor

Fig. 3 Funciile de baz ale unui SGBD


2

Baze de date - Constantinescu Ctlin; 2006 - 2007, sem. 1

Diagrama entitate-relaie (diagrama ER) O entitate este un obiect concret sau abstract care exist i poate fi distins de un alt obiect (de exemplu o persoan, un concept, un sentiment etc.). O mulime sau o clas de entiti este un grup de obiecte concrete sau abstracte de aceeai natur (de exemplu toate persoanele, toate conceptele, toate sentimentele etc.). Un atribut reprezint o proprietate caracteristic a entitilor din aceeai clas. De exemplu, o persoan poate fi caracterizat ptin urmtoarele caracteristici: - nume; - prenume; - cod numeric personal (CNP); - adres; - telefon. Domeniul reprezint mulimea valorilor pe care le poate avea un anumit atribut. O cheie primar (sau, mai simplu, o cheie) este un atribut sau un set de atribute care identific ntr-o manier unic o entitate - de exemplu CNP (nu exist dou persoane care au acelai CNP). Relaia leag ntre ele dou sau mai multe entiti prin intermediul unor atribute cu acelai domeniu. n cazul n care o relaie leag dou entiti, ea se numete binar. Dac relaia este ntre cel puin trei entiti, se spune c este o relaie n-ar. La rndul lor, relaiile binare se mpart n trei categorii: - relaii unul la unul (1:1), caz n care unei entiti E nu-i poate corespunde prin relaia A dect o entitate F i, invers, entitii F nu i poate corespunde dect entitatea E prin relaia A; - relaii unul la mai muli (1:n), caz n care unei entiti E i pot fi asociate mai multe entiti Fi dar, unei entiti Fi i este asociat prin aceeai relaie o singur entitate (E); - relaii mai muli la mai muli (n:n), caz n care unei entiti Ei i pot corespunde mai multe entiti Fi i reciproc. Cardinalitatea unei perechi (E, A), unde E este o clas de entiti i A este un set de relaii, este dat de perechea (m, M), unde m i M sunt numrul minim respectiv maxim de legturi A ce leag E de una sau mai multe clase de entiti. O diagram ER este reprezentarea grafic a unei colecii de entiti, relaii, constrngeri, condiionri etc. care descriu complet o baz de date. Exemplu: Relaia ntre un imobil i un proprietar este de tipul "n la m", deoarece un imobil poate aparine mai multor proprietari i, n acelai timp, un proprietar poate avea mai multe imobile ce aparin aceleiai clase.

Fig. 4 Diagram ER ce descrie dependena ntre un proprietar i un imobil Cardinalitile sunt (0, n), respectiv (1,n), pentru c un imobil poate fi abandonat (deci poate s nu aib nici un proprietar), dar, un proprietar trebuie s aib cel puin un imobil - dac nu ar avea nici unul, nu s-ar mai numi proprietar. n exemplul anterior sunt deja prezentate dou simboluri grafice folosite n desenarea diagramelor ER - dreptunghiul corespunde unei entiti, rombul corespunde unei relaii i
3

Baze de date - Constantinescu Ctlin; 2006 - 2007, sem. 1

segmentele de dreapt care fac legtura ntre entiti i relaii. Alte dou elemente grafice folosite sunt elipsa - prin care se reprezint un atribut i, din nou, segmentul de dreapt, care poate face legtura i ntre atribute i entiti. Exemplul 1 - S se deseneze diagrama ER a unei baze de date ce conine prinii unei persoane. Att prinii ct i copii pot fi grupai ntr-o clas de entiti "PERSOAN". O entitate de acest tip poate fi descris prin atributele "NUME", "PRENUME", "SEX" i "CNP". O relaie ca cele din exemplul acesta se spune c este recursiv.

Fig. 5 Diagrama ER pentru exemplul 1 Obs. Atributul "CNP" este cheie primar. Pentru a se deosebi de celelalte atribute, n diagrama ER atributul se subliniaz (fig. 4). Exemplul 2 - S se deseneze diagrama ER corespunztoare unei baze de date care conine reete culinare.

Fig. 6 Diagrama ER pentru exemplul 2 Pentru baza de date s-au imaginat dou entiti - "REET" i "INGREDIENTE", legtura dintre cele dou entiti fcundu-se, efectiv, prin atributele "COD INGREDIENTE", atribut care pentru entitatea "INGREDIENTE" este cheie primar. Obs. Structurile bazelor de date pentru care s-au trasat diagramele entitate-relaie nu sunt optimizate. mbunatatirea acestra va fi discutata ulterior. Exemplul 3 - S se deseneze diagrama ER a unei baze de date ce conine studenii unei faculti. Pentru aceast diagram s-au imaginat trei entiti legate funcional ntre ele: entitatea "STUDENT", entitatea "DISCIPLIN" i entitatea "NOT".

Baze de date - Constantinescu Ctlin; 2006 - 2007, sem. 1

Fig. 7 Diagrama ER pentru exemplul 3

Baze de date - Constantinescu Ctlin; 2006 - 2007, sem. 1

3. Normalizarea relaiilor n procesul de modelare a bazelor de date, o etapa important o constituie normalizarea relaiilor. Normalizarea presupune perfecionarea progresiv a schemei conceptuale innd cont c trebuie asigurate urmtoarele cerine: - trebuie garantat conservarea datelor; - trebuie garantat conservarea dependenelor; - n urma normalizrii, descompunerea relaiilor iniiale trebuie s fie una minimal. Necesitatea normalizrii poate fi cel mai uor evideniat prin exemple de baze de date nenormalizate. n acest sens, n cele ce urmeaz se va comenta un mic exemplu de baz de date care gestioneaz notele unui student. TNoteStudenti Nr_crt Nr_matricol 1 112 2 130 3 203 4 112 5 203 6 221 7 112 Nume Ionescu Vasilescu Popa Ionescu Popa Florea Ionescu Prenume Bogdan Cristian Virgil Bogdan Virgil Ion Bogdan Disciplin Baze de date Aparate electrice Aparate electrice Electronic digital Electronic digital Baze de date Baze de date Not 9 8 6 10 5 7 9

Datorit structurii acestei baze de date apar ca evidente cel puin urmtoarele anomalii: 1. Redundan perechea de date (Ionescu, Bogdan) apare de 3 ori, (Popa, Virgil) de dou ori etc. 2. Anomalii la tergere dac se terge nregistrarea cu Nr_crt = 6 se pierd toate informaiile legate de studentul Florea Ion. 3. Anomalii la inserare perechea (Ionescu, Bogdan, Baze de date, 9) este inserat de dou ori. 4. Anomalii la modificare dac prenumele studentului Popa Virgil este greit, modificarea lui presupune modificarea unui numr de nregistrri egal cu notele studentului, ceea ce, ntre altele, poate conduce la noi erori de introducere a datelor. Pentru eliminarea acestor anomalii prin normalizare, E.F. Codd a fundamentat o teorie matematic, care const n esen n construirea unor tabele standard numite forme normale. Pn n prezent s-au dezvoltat mai multe astfel de forme, n practic fiind folosite numai o parte din acestea. O structur a bazei de date discutate care elimin o parte din aceste anomalii sparge tabelul anterior n dou tabele, conform urmtoarei reprezentri i a diagramei entitate-relaie asociate.

Baze de date - Constantinescu Ctlin; 2006 - 2007, sem. 1

n aceast structur se observ, totui, o redundan a unor date, dat de apariia repetat a numelor disciplinelor. Aceast redundan dispare prin introducerea n structur a unei noi entiti, adic a unui nou tabel care s conin denumirile disciplinelor.

n scopul nelegerii necesitii nomalizrii, se vor discuta n continuare alte exemple de baze de date. Ex. 1. Structura unei baze de date care gestioneaz reete culinare. Pentru aceast baze de date, datele care este necesar a fi memorate sunt: denumirea reetei, tipul acesteia (mncare, desert, bautur etc.), ingredientele, cantitile pentru un anumit numr de porii, unitile de msur pentru acestea, numrul de porii, modul de preparare.

Baze de date - Constantinescu Ctlin; 2006 - 2007, sem. 1

Ex. 2. Structura unei baze de date care gestioneaz crile dintr-o bibliotec public

Baze de date - Constantinescu Ctlin; 2006 - 2007, sem. 1

Ex. 3. Structura unei baze de date care gestioneaz articolele publicate de un grup de cercettori

Baze de date - Constantinescu Ctlin; 2006 - 2007, sem. 1

4. Limbajul SQL (Structured Query Language) Limbajul SQL se bazeaz pe interogri i are ca obiect bazele de date relaionale. Bazele de date relaionale au fost introduse n 1970 de acelai cercettor de la IBM (E.F. Codd) care a pus bazele normalizrii. Modelul bazelor de date relaionale reprezint baza de date ca o colecie de tabele, fiecare dintre acestea relaionnd cu cel puin un altul. SQL este un limbaj prin intermediul cruia, utiliznd comenzi derivate din limbajul natural, i se comunic unui SGBD ce se dorete. Comenzile SQL permit, astfel, interogarea, inserarea, actualizarea i tergerea datelor. SQL este referit uneori ca i limbaj neprocedural. Asta nseamn c nu este nevoie s se expliciteze locul unde SQL trebuie s caute un set de date, de exemplu. Este suficient s I se spun ce anume se dorete. Localizarea informaiei dorite n baza de date este sarcina SGBD-ului. n cazul limbajelor procedurale, fiecare interogare trebuie creat, compilat i executat. Sistemele de gestiune a bazelor de date comerciale utilizeaz SQL-ul n 2 nivele, astfel: - Comenzile SQL se scriu direct ca i linie de comand, ceea ce face ca SGBD-ul s interpreteze imediat comenzile i s furnizeze rezultatul. Aceast metod de procesare se numete SQL interactiv. - Cel de-al doilea nivel se numete SQL programat i const n integrarea comenzilor SQL ntr-un limbaj ca C, Basic, Cobol etc. Aa cum s-a mai spus, SQL opereaz cu baze de date relaionale. Astfel, n mod firesc, un prim aspect care trebuie luat n discuie este crearea bazelor de date. Instruciunea CREATE TABLE Sintaxa instruciunii CREATE TABLE este: CREATE TABLE nume_tabel (cmp_1 tip_date_1, , cmp_n tip_date_n); De exemplu, pentru crearea tabelului TnoteStudeni (fig. de mai jos), codul SQL este: TNoteStudeni Nr_crt Nr_matricol 1 112 2 130 Nume Ionescu Vasilescu Prenume Bogdan Cristian Disciplin Baze de date Aparate electrice Not 9 8

CREATE TABLE TNoteStudenti ( Nr_crt INTEGER, Nr_matricol INTEGER, Nume CHAR(30), Prenume CHAR(50), Disciplina CHAR(100), Nota INTEGER); Dup tastarea acestei instruciuni, SGBD-ul va informa operatorul c tabelul a fost creat. Este evident c instruciunea CREATE TABLE trebuie utilizat ori de cte ori se dorete crearea unui nou tabel. Astfel, dup normalizarea acestei baze de date, pentru c rezult trei entiti, adic trei tabele, codul SQL asociat definirii acestora este:

10

Baze de date - Constantinescu Ctlin; 2006 - 2007, sem. 1

CREATE TABLE TStudent ( Nr_matricol INTEGER, Nume CHAR(30), Prenume CHAR(50)); CREATE TABLE Tnote ( Nr_matricol INTEGER, Cod_disciplina INTEGER, Nota INTEGER); CREATE TABLE Tdiscipline ( Cod_disciplina INTEGER, Denumire CHAR(100)); Obs. Comenzile SQL anterioare NU au declarat i cheile primare ale entitilor. Introducerea datelor n tabele se face cu ajutorul instruciunii INSERT VALUES. Instrucionea INSERT VALUES Sintaza instruciunii este: INSERT INTO nume_tabel <(cmp_1, , cmp_n)> VALUES (valoare_cmp_1, , valoare_cmp_n); De exemplu inserarea celor dou linii din tabelul TNoteStudenti se poate face cu urmtoarele comenzi SQL:
INSERT INTO TNoteStudenti (Nr_crt, Nr_matricol, Nume, Prenume, Disciplina, Nota) VALUES (1, 112, Ionescu, Bogdan, Baze de date, 9); INSERT INTO TNoteStudenti VALUES (2, 130, Vasilescu, Cristian, Aparate electrice, 8);

Se observ pentru cea de-a doua nregistrare nu s-au mai specificat cmpurile tabelului. Acest lucru este posibil atunci cnd pentru o nregistrare se introdul toate cmpurile (adic nu exist cmpuri vide nedeclarate) i cnd ordinea datelor inserate n tabel este aceeai cu cea din definirea tabelului prin intermediul instruciunii CREATE TABLE. Instruciunea SELECT SELECT este utilizat pentru extragerea datelor din tabele. n cazul n care se dorete vizualizarea tuturor notelor studenilor din tabelul TNoteStudeni, se poate utiliza comanda: 11

Baze de date - Constantinescu Ctlin; 2006 - 2007, sem. 1

SELECT Nume, Prenume, Disciplina, Nota FROM TNoteStudenti; Din acest exemplu se poate observa uor sintaxa instruciunii: SELECT cmp_1, , cmp_n FROM nume_tabel; Obs. Pentru simplitate, toate instruciunile au fost prezentate pn n acest moment n forma cea mai simpl. Dezvoltarea lor se va face progresiv, n discuiile ulterioare. Dac se dorete selecia tuturor nregistrrilor dintr-un tabel, instruciunea SELECT se poate utiliza sub forma: SELECT * FROM TNoteStudenti; care este echivalent cu SELECT Nr_crt, Nr_matricol, Nume, Prenume, Disciplina, Nota FROM TNoteStudenti; Instruciunea UPDATE UPDATE permite modificarea nregistrrilor din baza de date. Sintaxa instruciunii este: UPDATE nume_tabel SET valoare_cmp_de_modificat = valoare WHERE criteriu_selectie_inregistrare; De exemplu, dac se dorete modificarea notei studentului Ionescu din 9 n 10, codul SQL corespunztor este: UPDATE TNoteStudenti SET Nota = 10 WHERE Nume = Ionescu; Dei modificarea este corect n tabelul dat exemplu (care conine DOAR cele dou nregistrri), n realitate execuia acestei comenzi poate fi dezastruas, datorit criteriului de selecie. Astfel, dup execuie toi studenii cu numele Ionescu vor avea nota 10 la toate disciplinele. Comanda corect este: UPDATE TNoteStudenti SET Nota = 10 WHERE Nume=Ionescu AND Prenume=Bogdan AND Disciplina=Baze de date; sau, mai simplu: UPDATE TNoteStudenti SET Nota = 10 WHERE Nr_matricol = 112 AND Disciplina=Baze de date;

12

Baze de date - Constantinescu Ctlin; 2006 - 2007, sem. 1

Crearea tabelelor virtuale Tabelele create cu CREATE TABLE se numesc tabele de baz. SQL permite i crearea unui alt tip de tabele, numite tabele virtuale sau vederi. n cazul tabelelor de baz att structura tabelelor ct i datele din acesta sunt memorate pe disc. Tabelele virtuale sunt derivate din tabelele de baz, astfel nct pe disc este memorat doar structura lor. Pentru crearea vederilor se folosete instruciunea CREATE VIEW care conine n corpul su i o instruciune SELECT. De exemplu un tabel virtual ce conine toate notele obinute de studeni se obine cu urmtoare linie de cod SQL: CREATE VIEW TNote AS SELECT NUME, PRENUME, DISCIPLINA, NOTA FROM TNoteStudenti De fapt, o vedere este o interogare memorat pe disc. Ea este executat ori de cte ori este subiectul unei instruciuni i poate fi referit ca orice tabel de baz. De exemplu aflarea notelor studentului Ionescu pot fi aflate astfel: SELECT * FROM TNote WHERE NUME =Ionescu AND Prenume=Bogdan Crearea cheilor primare i a cheilor externe n exemplele discutate pn acum, nu au fost specificate i cheile dintr-un tabel, aa cum s-a mai precizat. Acest lucru se face la nivelul instruciunii CREATE TABLE. De fapt, aceast instruciune permite specificarea unui numr mai mare de caracteristici ale coloanelor tabelelor. Pot fi specificate, de exemplu, coloanele nevide, sau a coloanelor ce conini indeci (valori unice). De exemplu, crearea tabelului TNoteStudeni poate fi fcut astfel: CREATE TABLE TNoteStudenti ( Nr_crt INTEGER NOT NULL UNIQUE, Nr_matricol INTEGER NOT NULL, Nume CHAR(30), Prenume CHAR(50), Disciplina CHAR(100) NOT NULL, Nota INTEGER NOT NULL); Definirea tabelului n aceast manierconduce la urmtoarele restricii: - coloanele Nr_crt, Nr_matricol, Disciplina i Nota nu trebuie s fie vide ntr-o nregistrare; - coloana Nr_crt nu poate avea aceeai valoare n dou nregistrri diferite (n dou linii ale tabelului). Specificarea cheii primare se face cu modificatorul PRIMARY KEY. Acesta este relativ nou introdus n SQL, aa c nu este cunoscu, deci acceptat, de toate sistemele. Cheia strin sau extern se declar prin modificatorul FOREIGN KEY. Astfel, lund n considerare toate aspectele prezentate anterior, tabelele bazei de date normalizate ce conine notele studenilor pot fi definite astfel: CREATE TABLE TStudent ( Nr_matricol INTEGER NOT NULL UNIQUE, Nume CHAR(30) NOT NULL, Prenume CHAR(50) NOT NULL, PRIMARY KEY (Nr_matricol)); CREATE TABLE Tdiscipline ( Cod_disciplina INTEGER NOT NULL UNIQUE, 13

Baze de date - Constantinescu Ctlin; 2006 - 2007, sem. 1

Denumire CHAR(100) NOT NULL, PRIMARY KEY (Cod_disciplina)); CREATE TABLE Tnote ( Nr_matricol INTEGER NOT NULL, Cod_disciplina INTEGER NOT NULL, Nota INTEGER NOT NULL, FOREIGN KEY (Nr_matricol) REFERENCES TStudent, FOREIGN KEY (Cod_disciplina) REFERENCES Tdiscipline); Schimbarea structurii tabelelor Comanda ALTER TABLE permite modificarea structurii tabelelor. Astfel, cu ajutorul clauzei ADD pot fi adugate noi coloane. Modificarea unor coloane deja existente se poate face cu ajutorul clauzei MODIFY. Mai mult, tergerea coloanelor poate fi fcut prin intermediul clauzei DROP. De exemplu, dac se dorete inserarea unui cmp care s conin numrul de credite obinute pentru un examen promovat, trebuie modificat structura tabelului TDiscipline. Inserarea se face cu comanda ALTER TABLE astfel: ALTER TABLE TDiscipline ADD (Nr_credite INTEGER); Dac se dorete tergerea acestei coloane, se folosete aceeai comand combinat cu DROP: ALTER TABLE TDiscipline DROP (Nr_credite); Modificarea cu ALTER TABLE se poate face doar la nivelul strilor UNIQUE i NOT NULL. Pentru schimbri semnificative trebuie utilizat mai nti clauza DROP (pentru tergerea coloanei de modificat), apoi clauza ADD (pentru inserarea coloanei la care sunt luate n considerare toate modificrile). Modificarea strilor UNIQUE i / sau NOT NULL este indicat s se fac atunci cnd tabelul este gol, altfel pot aprea erori (o valoare NULL dintr-o nregistrare, de exemplu, poate intra n conflict cu declararea coloanei ca fiind nevid prin NOT NULL). tergerea tabelelor Pentru tergerea unui tabel dintr-o baz de date se folosete comanda DROP TABLE a crui sintax este: DROP TABLE nume_tabel; n cazul unor SGBD-uri, tabelul trebuie s fie gol n momentul apelrii comenzii DROP TABLE. Acest caracteristic rezult din motive de securitate, pentru prevenirea tergerii accidentale a tabelelor. Directiva DEFAULT Pentru una sau pentru mai multe coloane pot fi definite valori implicite. De obicei, o nregistrare pentru care nu s-a specificat un cmp, conine n momentul salvrii n baza de date valoarea NULL. Directiva DEFAULT suprascrie aceast valoare cu valoarea declarat prin intermediul ei. 14

Baze de date - Constantinescu Ctlin; 2006 - 2007, sem. 1

Lund n considerare atributul inserat anterior, adic numrul de credite, dac se dorete alocarea unui numr implicit de 5 credite corespunztor promovrii unui examen, linia de cod SQL care permite acest lucru este: CREATE TABLE Tdiscipline ( Cod_disciplina INTEGER NOT NULL UNIQUE, Denumire CHAR(100) NOT NULL, Nr_credite INTEGER DEFAULT 5; PRIMARY KEY (Cod_disciplina)); Directiva CHECK O parte din coloanele tabelelor trebuie s se ncadreze ntr-un anumit domeniu sau s aib un format particular. Directiva CHECK i permite programatorului s specifice acest lucru. Revenind la baza de date ce gestioneaz notele studenilor, pentru verificarea corectitudinii introducerii notei (n sensul c ea este cuprins n intervalul nchis [1, 10]), declararea coloanelor tabelului n SQL devine: CREATE TABLE Tnote ( Nr_matricol INTEGER NOT NULL, Cod_disciplina INTEGER NOT NULL, Nota INTEGER NOT NULL CHECK (Nota > 0 AND Nota <= 10), FOREIGN KEY (Nr_matricol) REFERENCES TStudent, FOREIGN KEY (Cod_disciplina) REFERENCES TDiscipline); Interogri complexe n exemplele anterioare comanda SELECT s-a utilizat doar pentru obinerea unor interogri directe, simple. SELECT permite, ns, i ordonarea datelor, specificarea unor operaii aritmetice i / sau logice ce se efectueaz asupra datelor obinute, permite specificarea unor criterii de selecie a datelor ce se vor obine dup interogare etc. Astfel sintaxa complet a comenzii SELECT este: SELECT [DISTINCT] cmp_expresie [,cmp_expresie] FROM nume_tabel [, nume_tabel] [WHERE condiie_selecie] [ORDER BY nume_cmp [, nume_cmp]] [GROUP BY nume_cmp [, nume_cmp]] [HAVING condiie]; unde: cmp_expresie poate fi un cmp (un atribut) al unui tabel, una dintre funciile standard de agregare (SUM sum, AVG medie, MIN minim, MAX maxim, COUNT numrare), sau, aa cum s-a mai spus, caracterul * pentru selecia tuturor atributelor; nume_tabel este numele tabelului care intervine n interogare; condiie_selecie specific care nregistrri se dorete a fi obinute n urma interogrii; nume_cmp reprezint un cmp, o coloana a unui tabel implicat n interogare; cmpul condiie din cadrul clauzei HAVING permite filtrarea unui grup de nregistrri.

Pentru exemplificare se va considera tot baza de date care gestioneaz notele studenilor. Dac se dorete determinarea mediei studentului cu numrul matricol 123, interogarea va fi de forma: 15

Baze de date - Constantinescu Ctlin; 2006 - 2007, sem. 1

SELECT AVG(Nota) FROM Tnote WHERE Nr_matricol = 123; Dac se dorete determinarea numrului de studeni care au promovat examenul la disciplina al crui cod este 15, de exemplu, interogarea devine: SELECT COUNT(*) FROM Tnote WHERE Cod_disciplina = 15 AND Nota >= 5; Pentru obinerea tuturor studenilor n ordine alfabetic comanda SELECT se utilizeaz mpreun cu clauza ORDER BY, astfel: SELECT * FROM TStudent ORDER BY Nume, Prenume; GROUP BY se folosete pentru obinerea unor grupuri n cadrul interogrilor obinute cu ajutorul instruciunii SELECT. De exemplu, cu linia de cod: SELECT Nr_matricol, COUNT(*) AS Examene_promovate FROM Tnote WHERE Nota >= 5 GROUP BY Nr_matricol; are ca efect afiarea numrului de examene promovate de studenii din baza de date, identificai n acest caz prin numrul matricol, dup care se face i gruparea. Directiva AS aloc numele formal Examene_promovate sumei examenelor la care un student a obinut cel puin nota 5. HAVING permite specificarea unei condiii de filtrare a datelor. Dac se dorete selecia doar a studenilor care au cel puin 5 examene promovate, codul SQL aferent este: SELECT Nr_matricol, COUNT(*) AS Examene_promovate FROM Tnote WHERE Nota >= 5 GROUP BY Nr_matricol HAVING COUNT(*) >= 5; Clauza DISTINCT este foarte util atunci cnd este necesar aflarea tuturor valorilor unui atribut, nefiind important numrul de apariii. De exemplu, dac se dorete afiarea tuturor numerelor matricole alocate, se poate utiliza comanda SELECT astfel: SELECT DISTINCT Nr_matricol FROM Tstudent; n condiiile de selecie din exemplele anterioare au intervenit civa operatori de comparare. Mulimea acestor operatori conine urmtoarele simboluri: - = - egal; - > - mai mare; - < - mai mic; - >= - mai mare sau egal dect; - <= - mai mic sau egal cu; - <> - diferit. 16

Baze de date - Constantinescu Ctlin; 2006 - 2007, sem. 1

Pentru verificarea ncadrrii valorii unui atribut ntr-un anumit interval poate fi folosit operatorul BETWEEN. Dac se dorete selecia tuturor studenilor cu mediile cuprinse ntre 7,50 i 9,50 dintr-o vedere ce conine mediile acestora comenzile SQL necesare sunt: Creare vedere: CREATE VIEW VMedii_studenti AS SELECT Nr_matricol, AVG(Nota) AS Medie FROM Tnote GROUP BY Nr_matricol; Interogare (cu utilizarea operatorului BETWEEN): SELECT * FROM VMedii_studenti WHERE Medie BETWEEN 7.50 AND 9.50; n cazul n care se dorete obinerea numelui studenilor cu mediile cuprinse ntre cele dou limite (nu numai numrul matricol), n corpul comenzii select se vor specifica att numele vederii ct i numele tabelului care conine numele i prenumele studenilor: SELECT VMedii_studenti.Nr_matricol, TStudent.Nume, TSudent.Prenume, VMedii_studenti.Medie FROM VMedii_studenti, TStudent WHERE VMedii_studenti.Medie BETWEEN 7.50 AND 9.50, TStudent.Nr_matricol = VMedii_studenti.Nr_matricol; sau SELECT VMS.Nr_matricol, TS.Nume, TS.Prenume, VMS.Medie FROM VMedii_studenti VMS, Tstudent TS WHERE VMS.Medie BETWEEN 7.50 AND 9.50, TS.Nr_matricol = VMS.Nr_matricol; n cel de-al doilea caz, pentru fiecare dintre tabelele implicate n interogare s-a asociat cte un nume formal: VMS pentru tabelul virtual Vmedii_studeni i TS pentru tabelul TStudent. Acest lucru determin simplificarea modului de scriere a unei interogrii. Pentru recapitularea i fixarea elementelor de limbaj SQL prezentate pn acum, se va construi n cele ce urmeaz o baz de date care gestioneaz articolele dintr-un raion de echipamente electrocasnice. Crearea tabelelor care conin chei primare i nu conin chei strine: CREATE TABLE TProducatori ( Cod_producator INTEGER NOT NULL UNIQUE, Denumire CHAR(200) NOT NULL, PRIMARY KEY (Cod_producator)); CREATE TABLE TFirme ( Cod_firma INTEGER NOT NULL UNIQUE, Nume CHAR(100) NOT NULL, Adresa CHAR(200) NOT NULL, PRIMARY KEY (Cod_firma));

17

Baze de date - Constantinescu Ctlin; 2006 - 2007, sem. 1

Diagrama entitate-relaie pentru o baz de date care gestioneaz echipamentele electrocasnice dintr-un raion specializat Crearea tabelelor care conin att chei primare ct i chei strine: CREATE TABLE TProdus ( Cod_prod INTEGER NOT NULL UNIQUE, Denumire CHAR(100) NOT NULL, Pret INTEGER NOT NULL, Cod_producator INTEGER, Per_garantie INTEGER DEFAULT 1, CodF_garantie INTEGER NOT NULL, PRIMARY KEY (Cod_prod), FOREIGN KEY (Cod_producator) REFERENCES TProducatori, FOREIGN KEY (CodF_garantie) REFERENCES TFirme); Crearea tabelelor care conin numai chei strine: CREATE TABLE TFurnizori ( Cod_prod INTEGER NOT NULL, Cod_furniz INTEGER NOT NULL, Pret_furniz INTEGER NOT NULL, FOREIGN KEY (Cod_prod) REFERENCES TProdus, FOREIGN KEY (Cod_furniz) REFERENCES TFirme); Inserarea a dou nregistrri ce conin date referitoare la firme furnizoare noi: INSERT INTO TFirme (Nume, Cod_firma, Adresa) VALUES (SC X SRL, 16, Adresa_X); INSERT INTO TFirme VALUES (17, SC Y SRL, Adresa_Y); Crearea unei interogri care s extrag toate echipamentele produse de firma Z. SELECT A.Cod_prod, A.Denumire, A.Pret FROM Tprodus A, TProducatori B WHERE A.Cod_producator = B.Cod_producator, B.Denumire = Z; 18

Baze de date - Constantinescu Ctlin; 2006 - 2007, sem. 1

5. Aplicaii specifice bazelor de date Limbajul SQL este practic integrat n toate SGBD-urile actuale i nu numai. Instruciunile SQL pot fi utilizate fr probleme i n limbaje de nivel nalt precum Pascal (Delphi), Basic (Visual Basic), C (Visual C) etc. n ideea simplificrii modulului de utilizare a scripturilor SQL s-a dezvoltat o gama larg de aplicaii, multe dintre ele fiind distribuite gratuit. n capitolul de fa se vor preznta doar cteva exemple de aplicaii de acest gen, tocmai pentru a se pune n eviden utilitatea acestora. O etapa important n dezvoltarea unei baze de date o constituie stabilirea structurii acesteia, structur care poate fi descrisa complet prin intermediul diagramei entitate-relaie. Odat trasat aceast diagram, dac se utilizeaz aplicii specifice, poate fi generat codul SQL responsabil de crearea tabelelor i a legturilor dintre acestea. Ex. 1 - Pentru acest prim exemplu se va considera DER trasat pentru baza de date care gestioneaz articolele publicate de un grup de cercettori.

Codul SQL generat cu o aplicaie specific:


CREATE TABLE TArticol ( Cod_articol INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, Titlu TEXT NULL, Pagina_iceput_publicare INTEGER UNSIGNED NULL, Pagina_sfarsit_publicare INTEGER UNSIGNED NULL, Volum_publicare INTEGER UNSIGNED NULL, Cod_conferinta INTEGER UNSIGNED NULL, PRIMARY KEY(Cod_articol) ); CREATE TABLE TAutori ( Cod_autor INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, Nume TEXT NULL, Prenume TEXT NULL, PRIMARY KEY(Cod_autor) ); CREATE TABLE TAutori_articol ( Cod_articol INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, Autor_unic BOOL NULL, Pozitie_autor INTEGER UNSIGNED NULL, Cod_autor INTEGER UNSIGNED NULL );

19

Baze de date - Constantinescu Ctlin; 2006 - 2007, sem. 1

CREATE TABLE TCategorii_conferinte ( Cod_categorie INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, Categorie TEXT NULL, PRIMARY KEY(Cod_categorie) ); CREATE TABLE TConferinte ( Cod_conferinta INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, Denumire LONGTEXT NULL, Data_inceput_conferinta DATE NULL, Data_sfarsit_conferinta DATE NULL, Loc_desfasurare TEXT NULL, Cod_categorie INTEGER UNSIGNED NULL, PRIMARY KEY(Cod_conferinta) );

Ex. 2 - Definirea tabelelor pentru o baz de date care gestioneaz notele studenilor unei faculti.

CREATE TABLE TDiscipline ( Cod_disciplina INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, Denumire TEXT NULL, NR_Credite INTEGER UNSIGNED NULL, PRIMARY KEY(Cod_disciplina) ); CREATE TABLE TNote ( NR_Matricol INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, Nota INTEGER UNSIGNED NULL, Cod_disciplina INTEGER UNSIGNED NULL ); CREATE TABLE TStudenti ( NR_Matricol INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, Nume TEXT NULL, Prenume TEXT NULL, PRIMARY KEY(NR_Matricol) );

Sunt, de asemenea, dezvoltate aplicaii care permit utilizarea instructiunilor SQL pentru extragerea direct a datelor din baze de date n format dBase, Microsoft Access, Paradox etc. Ex. 3 - Utilizarea instruciunii SELECT pentru extragerea datelor dintr-o baz de date ce gestioneaz notele studenilor unei faculti.

20

Baze de date - Constantinescu Ctlin; 2006 - 2007, sem. 1

Selecia tuturor nregistrrilor tabelului TStudenti.

Selecia tuturor nregistrrilor tabelului TDiscipline.

Selecia tuturor nregistrrilor tabelului TNote.

21

Baze de date - Constantinescu Ctlin; 2006 - 2007, sem. 1

Selecia tuturor notelor studentei Ionescu Daniela.

22