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

2. BAZE DE DATE INTELIGENTE N MANAGEMENTUL FIRMEI
Andone Ioan, ugui Alexandru
Ed. Dosoftei, Iai, 1997

3. SQL FR PROFESOR N 14 ZILE
Perkins Jeff, Morgan Bryan
Ed. TEORA, Bucureti, 1998

4. BAZE DE DATE
Burdescu Dumitru Dan, Ionescu Augustin Iulian, Stnescu Liana
Editura Universitaria, Craiova, 2004

5. BASES DE DONNES
Jean Fruitet
Cours, Universit de Marne - La - Valle, 1997

6. PROGRAMARE N ACCESS 97. VBA PENTRU NCEPTORI
Smith Robert, Sussman David
Ed. TEORA, Bucureti, 1997

7. TOTUL DESPRE MICROSOFT ACCESS 97
Viescas L. John
Ed. TEORA, Bucureti, 1999

8. BAZE DE DATE. FUNDAMENTE TEORETICE I PRACTICE
Grupul BDASEIG
Ed. Infomega, Bucureti, 2002

9. SQL n lecii de 10 minute
Ben Forta
Ed. Teora, Bucureti, 2004

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 F
i
dar, unei entiti F
i
i este asociat prin aceeai relaie o singur entitate (E);
- relaii mai muli la mai muli (n:n), caz n care unei entiti E
i
i pot corespunde mai
multe entiti F
i
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

F
i
g
.

7

D
i
a
g
r
a
m
a

E
R

p
e
n
t
r
u

e
x
e
m
p
l
u
l

3


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

6
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 Nume Prenume Disciplin Not
1 112 Ionescu Bogdan Baze de date 9
2 130 Vasilescu Cristian Aparate electrice 8
3 203 Popa Virgil Aparate electrice 6
4 112 Ionescu Bogdan Electronic digital 10
5 203 Popa Virgil Electronic digital 5
6 221 Florea Ion Baze de date 7
7 112 Ionescu Bogdan Baze de date 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

7


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

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


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

9
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

10
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 Nume Prenume Disciplin Not
1 112 Ionescu Bogdan Baze de date 9
2 130 Vasilescu Cristian Aparate electrice 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:

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

11



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:
Baze de date - Constantinescu Ctlin; 2006 - 2007, sem. 1

12

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;



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

13
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,
Baze de date - Constantinescu Ctlin; 2006 - 2007, sem. 1

14
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.
Baze de date - Constantinescu Ctlin; 2006 - 2007, sem. 1

15
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:
Baze de date - Constantinescu Ctlin; 2006 - 2007, sem. 1

16

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.
Baze de date - Constantinescu Ctlin; 2006 - 2007, sem. 1

17
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));


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

18


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;

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

19
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 TAr t i col (
Cod_ar t i col I NTEGER UNSI GNED NOT NULL AUTO_I NCREMENT,
Ti t l u TEXT NULL,
Pagi na_i ceput _publ i car e I NTEGER UNSI GNED NULL,
Pagi na_sf ar si t _publ i car e I NTEGER UNSI GNED NULL,
Vol um_publ i car e I NTEGER UNSI GNED NULL,
Cod_conf er i nt a I NTEGER UNSI GNED NULL,
PRI MARY KEY( Cod_ar t i col )
) ;

CREATE TABLE TAut or i (
Cod_aut or I NTEGER UNSI GNED NOT NULL AUTO_I NCREMENT,
Nume TEXT NULL,
Pr enume TEXT NULL,
PRI MARY KEY( Cod_aut or )
) ;

CREATE TABLE TAut or i _ar t i col (
Cod_ar t i col I NTEGER UNSI GNED NOT NULL AUTO_I NCREMENT,
Aut or _uni c BOOL NULL,
Pozi t i e_aut or I NTEGER UNSI GNED NULL,
Cod_aut or I NTEGER UNSI GNED NULL
) ;
Baze de date - Constantinescu Ctlin; 2006 - 2007, sem. 1

20

CREATE TABLE TCat egor i i _conf er i nt e (
Cod_cat egor i e I NTEGER UNSI GNED NOT NULL AUTO_I NCREMENT,
Cat egor i e TEXT NULL,
PRI MARY KEY( Cod_cat egor i e)
) ;

CREATE TABLE TConf er i nt e (
Cod_conf er i nt a I NTEGER UNSI GNED NOT NULL AUTO_I NCREMENT,
Denumi r e LONGTEXT NULL,
Dat a_i nceput _conf er i nt a DATE NULL,
Dat a_sf ar si t _conf er i nt a DATE NULL,
Loc_desf asur ar e TEXT NULL,
Cod_cat egor i e I NTEGER UNSI GNED NULL,
PRI MARY KEY( Cod_conf er i nt a)
) ;

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



CREATE TABLE TDi sci pl i ne (
Cod_di sci pl i na I NTEGER UNSI GNED NOT NULL AUTO_I NCREMENT,
Denumi r e TEXT NULL,
NR_Cr edi t e I NTEGER UNSI GNED NULL,
PRI MARY KEY( Cod_di sci pl i na)
) ;

CREATE TABLE TNot e (
NR_Mat r i col I NTEGER UNSI GNED NOT NULL AUTO_I NCREMENT,
Not a I NTEGER UNSI GNED NULL,
Cod_di sci pl i na I NTEGER UNSI GNED NULL
) ;

CREATE TABLE TSt udent i (
NR_Mat r i col I NTEGER UNSI GNED NOT NULL AUTO_I NCREMENT,
Nume TEXT NULL,
Pr enume TEXT NULL,
PRI MARY KEY( NR_Mat r i col )
) ;

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.





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

21
Selecia tuturor nregistrrilor tabelului TStudenti.



Selecia tuturor nregistrrilor tabelului TDiscipline.



Selecia tuturor nregistrrilor tabelului TNote.




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

22
Selecia tuturor notelor studentei Ionescu Daniela.

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