Sunteți pe pagina 1din 25

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".

4
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.

6
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.

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

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

8
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

9
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

S-ar putea să vă placă și