Sunteți pe pagina 1din 103

BAZE DE DATE

CAPITOLUL I. PROIECTARE (DESIGN) DE DATE (9 sapt.)


CURS 1. Preliminarii
Bazele de date reprezint un instrument indispensabil pentru sistemele
informatice. Modelarea bazelor de date constitue un subiect vast care nu poate fi
tratat complet ntr-un singur curs. Baza de date reprezint o modalitate de stocare pe
un suport extern a unei mulimi de date care modeleaz un proces (sistem) din
lumea real, cu posibilitatea regsirii acesteia. De obicei o baz de date este
memorat ntr-unul sau mai multe fiiere. Baza de date nsi poate fi privit ca un
fel de cutie de umplere electronic - adic un container pentru o colecie de fiiere de
date digitale. Bazele de date sunt manipulate cu ajutorul sistemelor de gestiune a
bazelor de date.
Acestea, SGBD-urile, sunt responsabile cu crearea, manipularea i
ntreinerea unei baze de date. Principala funcie a acestuia este de a permite
utilizatorilor (prin intermediul programelor) s acceseze date dintr-o baz de date.
Cel mai rspndit model de baze de date este cel relaional, n care datele
sunt memorate n tabele. Pe lng tabele, o baz de date relaional mai poate
conine: indeci, proceduri stocate, trigger-e, utilizatori i grupuri de utilizatori, tipuri
de date, mecanisme de securitate i de gestiune a tranzaciilor etc.
Cursul propune trecerea n revist a principalelor probleme care apar n
proiectarea i implementarea bazelor de date relaionale. Pentru exemplificarea
conceptelor se utilizeaz sistemul de gestiune MySql.
1.1. Noiuni o!osit" #n t"o$ia %a&"!o$ '" 'at"
1. O %a&( '" 'at" :
- reprezint un ansamblu structurat de fiiere care grupeaz datele
prelucrate n aplicaii informatice ale unei persoane, grup de persoane,
instituii etc.
- este definit ca o colecie de date aflate n interdependen, mpreun cu
descrierea datelor i a relaiilor dintre ele.
2. O$)ani&a$"a %a&"i '" 'at" se refer la structura bazei de date i reprezint
un ansamblu de instrumente pentru descrierea datelor, relaiilor, restriciilor la
care sunt supuse.
3. Sist"*u! '" )"stiun" a %a&"i '" 'at" (SGBD):
- este un sistem complex de programe care asigur interferena ntre o
baz de date i utilizatorii acesteia (exemple de programe: ACCESS, Fox
Pro, PARADOX, ORACLE, MySQL)
- este software-ul bazei de date care asigur:
1) definirea structurii bazei de date;
1
2) ncrcarea datelor n baza de date;
3) accesul la baza de date (interogare, actualizare);
4) ntreinerea bazei de date (refolosirea spaiilor goale, refacerea
bazei de date n cazul unor incidente);
5) reorganizarea bazei de date (restructurarea i modificarea
strategiei de acces);
6) securitatea datelor.
4. Cele teri conceptele de baz utilizate n organizarea bazei de date sunt:
- entitatea
- atributul
- valoarea
Prin entitate se nelege un obiect concret sau abstract reprezentat prin
proprietile sale. O proprietate a unui obiect poate fi exprimat prin perechea
(ATRBUT, VALOARE).
Exemplu + n exemplul "Masa x are culoarea alba, atributul este
,culoare, iar valoarea este reprezentat de cuvntul ,alb. Alte exemple ar
putea fi: (Sex, Feminin), (Nume, POP), (Profesie, Medic), (Salariu, 200).
Observaie: Atributele pot caracteriza o clas de entiti, nu doar o entitate.
5. Data este un model de reprezentare a informaiei, accesibil unui anumit
procesor (om, program, calculator) i se definete prin:
- dentificator;
- Atribut;
- Valoare.
1.,. -un.iona$"a un"i %a&" '" 'at"
Exploatarea unei baze de date aflate pe un suport specific (magnetic), de
ctre un utilizator, prin intermediul unui sistem de calcul, avnd la dispoziie un
SGBD, parcurge uzual urmtoarele etape:
1. Utilizatorul, aflat la un terminal electronic, pune o "ntrebare" sau lanseaz
o cerere de date, referitoare la informaiile din baza de date. ntrebarea se poate pune
ntr-un limbaj de cereri specific SGBD-ului cu care se lucreaz (dac utilizatorul este
familiarizat cu acest limbaj - de exemplu, SQL, FoxPro, dBase, Oracle) sau utilizatorul
poate fi asistat n adresarea cererii de date de ctre SGBD (produsul soft pe care l
folosete) printr-un sistem de meniuri, butoane sau ferestre de dialog (obiecte de
control).
2. ntrebarea este analizat de ctre calculator, de fapt de SGBD, iar dac este
corect, se ncearc (SGBD) s i se dea rspuns prin accesarea informaiilor din
baza de date. Rspunsul va fi constituit din mulimea datelor cerute de utilizator,
care verific criteriile specificate de acesta.
Acest proces de lansare a unei cereri de date care va fi satisfcut prin
furnizarea datelor care ndeplinesc proprietile cerute se numete interogarea bazei de
date.
3. Rspunsul la cererea de date se va afia pe ecran, se va tipri la
imprimant sau se va memora ntr-un fiier.
n realizarea unei baze de date se urmrete:
2
- micorarea timpului de rspuns la o interogare
- asigurarea costurilor minime de prelucrare i ntreinere
- adaptabilitatea la cerine noi (flexibilitate)
- sincronizarea n exploatarea simultan a datelor de ctre mai muli
utilizatori
- asigurarea proteciei mpotriva accesului neautorizat (confidenialitate)
- posibilitatea recuperrii datelor n cazul deteriorrilor accidentale
(integritate) etc.
Exemplu: n figura 1.1 este prezentat o baz de date foarte mic, ce conine un
singur fiier, numit VNOTECA; la rndul su, aceasta cuprinde date despre
coninutul unei anumite vinoteci. n figura 1.2 este prezentat un exemplu de operaie
de consultare din baza de date, mpreun cu datele returnate prin aceast operaie.
Fig. 1.1. Baza de date pentru VNOTECA (fiierul VNOTECA)
Fig. 1.2 Exemplu de consultare
Observaii: n limbajul SQL, fiierul VNOTECA din figura 1.1 este numit
tabela, rndurile unei astfel de tabele pot fi considerate ca nregistrri
din fiier, iar coloanele pot fi considerate drept cmpuri.
1./ R"a!i&a$"a un"i %a&" '" 'at"
Realizarea unei baze de date presupune parcurgerea etapelor:
1. analiza domeniului (sistemului) pentru care se realizeaz baza de date;
2. proiectarea structurii bazei de date;
3. ncrcarea datelor n baza de date;
raft#vinproducatoransticlelansat2Cab.
SauvignonWindsor19951220043Pinot
NoirFetzer19973200422Pinot
NoirDe!inger19992200250"er!otC!os du #ois199$92004
Consu!tare%
SELECT vin& ra't& (rodu)ator
F*+" ,-N+./C0
W1/*/ !ansat 2 20043
*ezu!tat )e a(are (e 4onitoru! unui PC%
vinraftproducatorCab. Sauvignon2WindsorPinot
Noir3Fetzer"er!ot50C!os du #ois
3
4. exploatarea i ntreinerea bazei de date.
Fig. 1 Realizarea unei baze de date
a) Ana!i&a sist"*u!ui
Analiza sistemului presupune stabilirea temei, analiza componentelor
sistemului i analiza legturilor (asocierilor) dintre aceste componente. Rezultatul
analizei formeaz modelul conceptual al bazei de date.
Cele patru etape necesare realizrii unei baze de date vor fi tratate pe
parcusul ntregului curs urmrind un exemplu concret i anume o baz de date
pentru o agenie imobiliar din ar, denumit AGEN|E MOBLAR, care
faciliteaz tranzacii de vnzare cumprare ntre vnztor i cumprtor, care
gestioneaz documente legate de oferte imobiliare, de ntreinere a nomenclatoarelor
specifice domeniului i care ofer o gam larg de rapoarte privind situaia vnzare-
cumprare.
Odat stabilit tema proiectului, se trece la etapa urmtoare, i anume la
identificarea tuturor tipurilor de informaii, a legturilor dintre informaii i a operaiilor
necesare pentru gestionarea lor. Aceast etap va fi detaliat n cursul urmtor.
%) P$oi".ta$"a st$u.tu$ii %a&"i '" 'at"
Dac etapa de analiz a modelului conceptual se realizeaz independent de
un SGBD, prin etapa de proiectare a structurii bazei de date se trece la luarea n
considerare a SGBD-ului cu ajutorul cruia va fi implementat i exploatat baza de
date.
Proiectarea structurii bazei de date reprezint transpunerea rezultatelor
obinute n urma analizei modelului conceptual n termenii unui model al datelor
suportat de un anumit SGBD. Compilatorul limbajului de descriere a datelor permite
aducerea schemei bazei de date la nivelul la care s poat fi memorat n baza de
date.
Astfel, proiectarea presupune o detaliere, de exemplu, de tip pseudocod a
modulelor necesare realizrii bazei de date: module pentru crearea fiierelor, pentru
introducerea datelor, pentru prelucrarea i extragerea rezultatelor, pentru tratarea
erorilor etc.
LMD
LMD LDD
LMD, LDD
1. Analiza
3. ncrcarea
datelor
2. Proiectarea
Baza
de
date
4. ntreinerea 4. Exploatarea
4
.) 0n.($.a$"a 'at"!o$ #n %a&a '" 'at"
Este etapa n care se realizeaz popularea masiv cu date a bazei de date,
activitate care trebuie s se efectueze cu un minim de efort.
') E1p!oata$"a 2i #nt$"in"$"a %a&"i '" 'at"
Exploatarea bazei de date de ctre diferii utilizatori finali este realizat n
scopul satisfacerii cerinelor de informare ale acestora. SGBD sprijin utilizatorii finali
n exploatarea bazei de date, oferind o serie de mecanisme i instrumente cum ar fi
limbajele de manipulare a datelor (LMD).
ntreinerea bazei de date reprezint o activitate complex, realizat, n
principal, de ctre administratorul bazei de date i care se refer la actualizarea
datelor din cadrul bazei de date.
5
CURS 2. Construirea de diagrame entitate-relaie
Prima etap pentru realizarea unei baze de date const n analiza sistemului.
Se cunosc mai multe tehnici de analiz, dar cea mai des ntlnit este tehnica
entitate-relaie.
Prin tehnica entiate-relaie (denumit i entitate-asociere) se construiete o
diagram entiate-relaie (notat E-R) prin parcurgerea urmtorilor pai:
a) identificarea entitilor (componentelor) din sistemul proiectului;
b) identificarea asocierilor (relaiilor) dintre entiti i calificarea lor;
c) identificarea atributelor corespunztoare entitilor;
d) stabilirea atributelor de identificare a entitilor.
a) Identificarea entitilor
Prin entitate se nelege un obiect concret sau abstract reprezentat prin
proprietile sale. Prin convenie, entitile sunt substantive, se scriu cu litere mari i
se reprezint prin dreptunghiuri. ntr-o diagram nu pot exista dou entiti cu acelai
nume, sau o aceeai entitate cu nume diferite.
Pentru baza de date din domeniul imobiliar considerat anterior, se pot pune
n eviden urmtoarele entiti:
- DATE_PERSOAN entitate care stocheaz date personale ale ofertantului
(vnztorului) sau ale clientului (cumprtorului);
- CERER_ OFERTE conine ofertele sau cererile imobiliare propuse de
vnztori, respectiv cumprtori;
- DESCRERE_MOBL stocheaz informaiile referitoare la imobile;
- JUDE|E entitate ce conine judeele n care sunt amplasate imobilele;
- LOCALT| - entitate ce conine localitile n care sunt amplasate
imobilele;
- STRZ - entitate ce precizeaz strzile n care sunt amplasate imobilele;
- FACTUR formularul necesar unei tranzacii de cumprare-vnzare.
Figura urmtoare prezint o prim form a diagramei entitate-asociere (E-R).
Fig. 2.1. Diagrama E-R pentru domeniul imobiliar (prima form)
b) Identificarea asocierilor dintre entiti !i calificarea lor
ntre majoritatea componentelor (adic a entitilor) unui sistem economic se
stabilesc legturi "asocieri)#
D0./5
P/*S+0N0
C/*/*-5
+F/*./
D/SC*-/*/5-
"+#-6
S.*07-
89D/./
6+C06-.0.-
F0C.9*-
:
Exemplu: Exist o asociere ntre entitile CERER_OFERTE i FACTUR deoarece
facturile reprezint finalizarea unei cereri/oferte. Aceast asociere se reprezint ca n
figura de mai jos.
Fig. 2.2. Prezentarea asocierii dintre entitile CERER_OFERTE i FACTUR
Sunt necesare precizarea ctorva notaii i noiuni utilizate n exemplul de mai
sus:
- legturile (asocierile) se reprezint prin arce neorientate ntre entiti;
- fiecrei legturi i se acord un nume plasat la mijlocul arcului i simbolizat
printr-un romb (semnificaia legturii);
- numerele simbolizate deasupra arcelor se numesc cardinaliti i reprezint
tipul legturii;
- cardinalitatea asocierilor exprim numrul minim i maxim de realizri a unei
entiti cu cealalt entitate asociat.
Exemplu: Cardinalitatea (1,1) ataat entitii CERER_OFERTA nseamn c o
factur poate fi rezultatul tranzacionrii a minim unei cereri/oferte i a unui numr
maxim de tot o cerere/ofert. Cardinalitatea (0,1) ataat entitii FACTUR
nseamn c o cerere se poate finaliza prin maxim o factur sau prin nici una (0
facturi) . Aceast cardinalitate reiese din analiz:
Fig. 2.3. Determinarea cardinalitii asocierii dintre entitile
CERER_OFERTE i FACTUR
Maximele unei cardinaliti sunt cunoscute i sub denumirea de grad de
asociere, iar minimele unei cardinaliti, obligativitatea participrii entitilor la
asociere.
Tipu$i '" aso.i"$i (!")(tu$i) #nt$" "ntit(i
Asocierile pot fi de mai multe feluri, iar odat cu asocierea, se impune stabilirea
calificrii acesteia. Asocierea dintre entiti se face n funcie de
i) cardinalitatea asocierii;
ii) numrul de entiti distincte care particip la asociere.
i. Dup cardinalitatea asocierii
n funcie de maxima cardinalitii (gradul de asociere), se cunosc trei tipuri de
asocieri, care, la rndul lor, sunt de dou tipuri, n funcie de minima cardinalitii
(gradul de obligativitate al participrii la asociere):
asocieri de tip ,unu la unu;
o asocieri pariale de tip ,unu la unu
o asocieri totale de tip ,unu la unu
C/*/*-5+F/*./
sunt 'ina!izate

(rin
F0C.9*-
;1&1< ;0&1<
C/*/*-5+
F/*./
1
2
3
F0C.9*-
F1
F2
7
asocieri de tip ,unu la mai muli
o asocieri pariale de tip ,unu la muli
o asocieri totale de tip ,unu la muli
asocieri de tip ,muli la muli
o asocieri pariale de tip ,muli la muli
o asocieri totale de tip ,muli la muli.
ii. Dup numrul de entiti distincte care particip la asociere:
asocieri binare (ntre dou entiti distincte);
asocieri recursive (asocieri ale entitilor cu ele nsele);
asocieri complexe (ntre mai mult de dou entiti distincte).
n continuare se descriu asocierile grupate dup cardinalitatea ei.
Aso.i"$i #n un.i" '" .a$'ina!itat"a !")(tu$ii
$# Asocieri de tip %unu la unu& sunt asocieri n care maximele cardinalitii au
valoarea 1.
Fig. 2.4. Asociere de tip unu la unu
Exemplu: Asocierea din figura 2.3 este asociere de tip ,1 la 1.
'# Asocieri de tip %unu la mai muli& sunt asocieri n care maxima cardinalitii
unei entiti este unu, iar a celeilalte entiti are valoarea ,muli.
Fig. 2.5. Asociere de tipul unu la mai muli
Exemplu:
Fig. 2.6. Asociere de unu la mai muli ntre entitile LOCALT| i C/*/*-5+F/*./
(# Asocieri de tipul %muli la muli& sunt asocieri n care maximele cardinalitii au
valoarea ,muli.
0
;...&1<
/1 /2
;...&1<
/1 /2 0
;...&1< ;...&n<
/1 /2 0
;...&n< ;...&1<
6+C06-.0.-
61
62
63
CERER_OFERTE
1
2
3
0 #
;0&n< ;1&1<
6+C06-.0.- CERER_OFERTE

=i )ores(unde
$
Fig. 2.7. Asociere de tipul muli la muli
Exemplu:
Fig. 2.8. Asociere de tipul muli la muli ntre entitile DEPOZT
i PRODUS
Observaie: Uneori (n cazul utilizrii unor SGBD), asocierea de tip ,muli la
muli se transform n dou asocieri de tipul ,unul la muli fiind, de regul, mai uor
de implementat i de utilizat i anume:
Fig. 2.9. Transformarea unei asocieri de tipul muli la muli (a) n asocieri de tipul unu
la muli (b)
Exemplu: n cazul exemplului de mai sus (vezi figura 2.8), transformarea asocierii
,muli la muli n asocieri de tipul ,unu la muli se poate realiza prin construirea unei
noi entiti DEPOZT_PRODUS astfel:
Fig. 2.10. Transformarea asocierii de tipul muli la muli n asocieri de tipul unu la
muli
Asocieri pariale !i totale
0
;...&n<
/1 /2
;...&n<
DEPOZT
D1
D2
D3
P*+D9S
P1
P2
P3
D/P+7-. P*+D9S =n4agazi

neaz>
;0&n< ;0&n<
Din
/1 /2
;...&n< ;...&n<
=n
/1 /? /2
;...&1< ;...&n< ;...&n< ;...&1<
0 01 02
a< b<
D/P+7-.
D1
D2
D3
D4
P*+D9S
P1
P2
P3
P4
D/P+7-.5
P*+D9S
D1@P1
D1@P3
D2@P1
D3@P4
;1&n<
aso)iaz> aso)iaz>
;0&n< ;0&n< ;1&n<
9
Printr-o asociere parial se nelege o asociere n care nu exist
obligativitatea participrii la aceast asociere a tuturor entitilor vizate, ci numai a
unora dintre ele sau a nici uneia. Asocierea parial se caracterizeaz prin faptul c
minima cardinalitii ataat unei entiti este zero.
Observaii (asupra minimii cardinalitii)
- minima cardinalitii este zero, are drept rezultat lipsa obligativitii participri
partenerului la aceast asociere;
- minima cardinalitii este mai mare dect zero, are drept rezultat
obligativitatea participrii.
Fig. 2.11 Asocieri pariale ntre entitile E1 i E2
Exemplu: Asocierea dintre entitile CERER_OFERTE i FACTUR din fig. 2.3
reprezint o asociere parial, deoarece participarea entitii FACTUR nu este
obligatorie, minima caracteristicii corespunztoare entitii CERER_OFERTE fiind 0.
O asociere este total dac toate entitile au obligativitatea s participe la
asociere, adic minima cardinalitii este mai mare dect zero.
Fig. 2.12 Asocieri totale ntre entitile E1 i E2
n continuare se dau cteva exemple de asocieri totale, respectiv pariale.
Exemplu: Asocieri pariale de tip unu la unu
Exemplu: Asocieri totale de tip unu la unu
/1 /2 /1 /2
0 0
a< b<
;0&A< ;A&A< ;A&A< ;0&A<
/1 /2 0
a<
;1&A< ;1&A<
/1 /2
;1&A< ;n&A<
/1 /2
;n&A< ;n&A<
/1 /2
;n&A< ;1&A<
b< )<
d<
0
0
0
C/*/*-5+
F/*./
1
2
3
F0C.9*-
F1
F2
10
Exemplu: Asocieri pariale de tip unu la muli
Exemplu: Asocieri totale de tip unu la muli
Exemplu: Asocieri pariale de tip muli la muli
Exemplu: Asocieri totale de tip muli la muli
Fig. 2.13 Asocieri dup gradul i obiectivitatea lor
n exemplul bazei de date AGENTE_MOBLARA, tipurile de asocieri dintre
entiti stabilite n funcie de modul n care se desfoar activitatea modelat sunt:
- JUDETE-LOCALTAT 1:n deoarece unui jude i corespunde mai
multe localiti;
C/*/*-5+
F/*./
1
2
3
D/SC*-/*/5-"+#-6
-1
-2
-3
6+C06-.0.-
61
62
63
C/*/*-5+F/*./
1
2
3
C60S/
C1
C2
C3
/6/,-
/1
/2
/3
/4
D/P+7-.
D1
D2
D3
D4
P*+D9S
P1
P2
P3
C9*S9*-
C1
C2
C3
S.9D/N.-
S1
S2
S3
S4
11
- LOCALTAT-STRAZ 1:n - deoarece unei localiti i corespunde mai
multe strzi;
- STRAZ-CERER_OFERTE 1:n deoarece unei strzi i poate
corespunde mai multe oferte/cereri;
- FACTUR-CERER_OFERTE 1:1 deoarece fiecare factur conine
doar cte o ofert/cerere;
- CERER_OFERTE-DECRERE_MOBL 1:1 fiecrui i se face o
singur descriere;
- FACTUR- DATE_PERSOANA 1:1 o factur este ncheiat de o
singur persoan;
- DATE_PERSOANA -CERER 1:n o persoan poate lansa mai multe
cereri sau oferte de imobil.
c) Identificarea atributelor entitilor !i a asocierilor dintre entiti
Atributele unei entiti reprezint proprieti ale acestora. Atributele sunt
substantive, iar pentru fiecare atribut i se va preciza tipul fizic (integer, float, c)ar,
string etc.)
Exemplu: Entitatea LOCALT| are urmtoarele atribute: codul localitii, notat
,cod_loc, simbolul de identificare al judeului ,simbol_jude i denumirea localitii
,nume_loc.
d) Stabilirea atributelor de identificare a entitilor
Un atribut de identificare "numit c)eie primar), reprezint un atribut care se
caracterizeaz prin unicitatea valorii sale pentru fiecare instan a entitii.
n cadrul diagramei entitate-asociere, un atribut de identificare se marcheaz
prin subliniere sau prin marcarea cu simbolul # plasat la sfritul numelui acestuia.
Fig. 2.14. Notaii uzuale pentru atributele de identificare
Exemplu: Ca atribut de identificare putem considera codul numeric personal ,cnp
pentru entitatea DATE_PERSOAN.
Pentru ca un atribut s fie atribut de identificare, acesta trebuie s satisfac
unele cerine:
- ofer o identificare unic n cadrul entitii;
- este uor de utilizat:
- este scurt (de cele mai multe ori, atributul de identificare apare i n alte
entiti, drept cheie extern).
Pentru o entitate pot exista mai multe atribute de identificare, numite atribute
(chei) candidate. Dac exist mai muli candidai cheie se va selecta unul,
preferndu-se unul cu valori mai scurte i mai puin volatile.
Exemplu: n urma analizrii celor 4 etape necesare construirii diagramei entitate-
asociere:
- identificarea entitilor domeniului sau a sistemului economic;
/ a
;a<
/ aB
;b<
12
- identificarea asocierilor dintre entiti;
- identificarea atributelor aferente entitilor i asocierilor dintre acestea;
- stabilirea atributelor de identificare a entitilor,
se poate prezenta forma complet a diagramei asociate domeniului ales n exemplu.
Fig. 2.15. Diagrama E-R pentru domeniul imobiliar (a doua form)
n cazul n care se dorete o diagram care s conin i atributele fiecrei
entiti nsoite de precizarea atributelor de identificare (adic a cheilor primare),
pentru a nu ncrca imaginea, diagrama proiectului se poate fragmenta pe mici
domenii, dup cum este cazul entitii OFERTE, prezentat n figura 2.16. (S-au
considerat un numr relativ mic de atribute).
S.*07- 6+C06-.0.- 89D/./
D0./5P/*S+0N0
F0C.9*-
C/*/*-5
+F/*./
D/SC*-/*/
5-"+#-6
are aso)iat>
'inisate
)onCin
)onCin
;1&1< ;1&1< ;0&n< ;0&n<
are aso)iat>
se reg>seDte
;1&1<
;1&n<
;1&n< ;1&1<
;1&1<
;1&1<
;0&1<
;1&1<
in)eie
;1&1<
;0&1<
C/*/*-5+F/*./
ti(u!
data5inreg
)od5!o)
id5strada
nr5i4obi!
(ret54aE
ti(5so!utionare
)n(
(ret54in
id5)oB
13
Fig. 2.16. Reprezentarea atributelor aferente entitii CERER_OFERTE (detaliu
dintr-o diagram E-R)
n reprezentarea atributelor aferente entitii CERER_OFERTE semnificaia
atributelor este urmtoarea: cheia primar a entitii ,id_co reprezint numrul de
ordine al cererii sau ofertei de imobil lansat de o anumit pesoan, atributul ,tipul
specific dac este vorba de o cerere sau de o ofert, prin ,cnp se precizeaz codul
numeric personal al clientului, ,data_inreg reprezint data la care s-a nregistrat
oferta/cererea, apoi uremaz cteva date legate de imobil: codul strzii ,id_strada,
numrul imobilului ,nr_imobil, preul minim, respectiv preul maxim al imobilului
,pret_min, ,pret_max. Ultimul atribut, ,tip_solutionare precizeaz dac
cererea/oferta respectiv a fost soluionat; pentru o cerere/oferta nou introdus,
acest atribut se va completa cu explicaia de nesoluionat.
Astfel, diagrama bazei de date AGEN|E MOBLAR conine 7 entiti a
cror asociere a fost prezentat n figura 2.16.
Fig. 2.16. Baza de date AGEN|E MOBLAR- entiti i atribute
D0./5P/*S+0N0
)n(B
nu4e!e
adresa
nr5te!e'on
email
ban)a5)!ient
nr5)ont5)!ient
S.*F7-
id5stradaB
)od5!o)B
nu4e5str
5
6+C06-.0.-
)od5!o)B
si4bo!5Gudet
nu4e5!o)
89D/./
si4bo!5GudetB
nu4e5Gudet
C/*/*-@+F/*./
id5)o B
ti(
)n(
data5inreg
ti(5so!utionare
)od5!o)
id5strada
nr5i4obi!
(ret54in
(ret54aE
D/SC*-/*/5-"+# -6
id5)oB
ti(5i4obi!
etaG
nr5)a4ere
su(ra'ata
garaG
)entra!a5ter4i)a
ter4o(ane
F0C.9*-
nr5'a)turaB
id5o'erta
data5'a)tura
)n(
(ret
.,0
tota!
14
CURS 3. Proiectarea modelului relaional
Proiectarea corect a bazelor de date este crucial pentru obinerea unei
aplicaii de nalt performan.
Modelul relaional este cel mai utilizat dintre modelele de date existente
(modele ierarhice, modele reea, modele orientate pe obiect). Fa de modele
ierarhic i reea, modelul relaional prezint cteva avantaje:
- propune structuri de date uor de utilizat;
- amelioreaz independena logic i fizic;
- pune la dispoziia utilizatorilor limbaje neprocedurale;
- optimizeaz accesul la date;
- mbuntete confidenialitatea datelor.
Din punct de vedere istoric, trebuie menionat c modelul relaional s-a
conturat n dou articole publicate de ctre F.E. Codd n 1969 i 1970, matematician
la centrul de cercetri (California) .B.M. Codd a propus o structur de date tabelar,
independent de tipul de echipamente i de software-ul de sistem pe care este
implementat. Dei puternic matematizat, modelul relaional este relativ uor de
neles.
Dac, teoretic, modelul s-a consacrat n anii 1970, produsele software care s
gestioneze baze de date au devenit populare abia n anii 80. Cele mai utilizate
sisteme de gestiune a bazelor de date relaionale (SGBDR) dedicate uzului individual
sunt: ACCESS, PARADOX, Visual Fox Pro. Pentru aplicaiile complexe din bnci i
instituii de mari dimensiuni se folosesc SGBDR-urile de ,categorie grea, ORACLE,
DB2 BM, nformix BM, SyBase (SyBase), SQL Server (MicroSoft). Sunt mult mai
robuste, fiabile, dar i costisitoare. n ultimul timp i-au fcut apariia aa-zisele
SGBD-uri (aproape) gratuite: PostgreSQL, MySQL, mSQL, FireBird etc. (Acestea
ruleaz de obicei pe sisteme de operare Linux).
Modelul relaional are la baz teoria matematic a relaiilor i poate fi privit ca
o mulime de tabele obinute prin metoda normalizrii, eliminndu-se astfel anomaliile
de actualizri.
Conceptele modelului relaional sunt:
1. structura relaional a datelor;
2. operatorii modelului relaional;
3. restriciile de integritate ale modelului relaional.
/.1 St$u.tu$a $"!aiona!( a 'at"!o$
O baz de date relaional (BD*) reprezint un ansamblu de relaii, prin care
se reprezint datele i legturile dintre ele.
n cadrul bazei de date relaionale, datele sunt organizate sub forma unor
tablouri bidimensionale (tabele) de date, numite relaii. Asocierile dintre relaii se
reprezint prin atributele de legtur. n cazul legturilor de tip ,unu la muli, aceste
atribute figureaz ntr-una dintre relaiile implicate n asociere. n cazul legturilor de
tip ,muli la muli, atributele sunt situate ntr-o relaie distinct, construit special
pentru explicarea legturilor ntre relaii.
Prezentarea structurii relaionale a datelor impune definirea noiunilor de:
15
- domeniu;
- relaie;
- atribut;
- schem a unei relaii.
Conceptele utilizate pentru a descrie formal, uzual sau fizic elementele de
baz ale organizrii datelor sunt date n urmtorul tabel:
Fig. 3.1. Concepte uzuale folosite n exprimarea formal, uzual i fizic
Domeniul
Domeniul reprezint o mulime de valori, notat prin litere mari D
1
,D
2
etc.,
caracterizat printr-un nume.
Modalitile de definire a unui domeniu sunt:
- explicit: prin enumerarea tuturor valorilor aparinnd domeniului;
- implicit: prin precizarea proprietilor pe care le au valorile din cadrul
domeniului.
-
Exemplu: D
1
: {"Da, "Nu} reprezint un domeniu definit explicit. D
2
: {x/ x este de dat
calendaristic} sau D
3
: {s/ s este numr decimal} reprezint domenii definite implicit,
unde prin numr decimal se nelege un numr zecimal pentru care se precizeaz
numrul de cifre componente.
Printr-un tuplu se nelege o succesiune de valori de diferite tipuri. Un tuplu se
noteaz enumernd valorile sale <V
1
,V
2
,V
3
,...,V
n
>, unde V
1
este o valoare din
domeniul D
1
, V
2
D
2
etc.
Exemplu: Considerm c tuplul referitor la persoana x din entitatea
CERER_OFERTE conine trei valori diferite ce desemneaz:
- codul numeric personal (cnp): 1701205230023;
- data nregistrrii ofertei (data_nreg): 2006-07-03;
- tipul soluionrii (tip_soluionare): ,Nu.
Se formeaz tuplul <1701205230023, '2006-07-03', Nu>.
*elaia
*elaia R este un subansamblu al produsului cartezian dintre mai multe
domenii D
1
, D
2
, ..., D
n
, reprezentat sub forma unei tabele de date (tabelul
bidimensional) i deci, o mulime de tupluri.
Exemplu: Considerm c:
- D
1
cuprinde valori referitoare la tipul soluionrii tranzaciei: ,Da, dac
tranzacia a fost soluionat, ,Nu, n caz contrar;
- D
2
cuprinde valori ale datei calendaristice;
- D
3
conine valori care exprim cnp-ul persoanei.
FormalUzualFizic*ea!Cie.ab!ouFiDier
.u(!u6inieHnregistrare0tributCo!oan>C
a4(Do4eniu.i( de dat>.i( de dat>
1:
De asemenea considerm c se cunosc datele a doi ofertani i c fiecare pune n
vnzare doar cte un imobil. Atunci definim relaia R prin tuplurile care descriu aceste
informaii ale ofertelor celor dou persoane:
R: {<1701205230023,'2006-07-03', Nu>, <2661805270023,'2006-05-27', Da>}.
sau
R:
D2 D3 D1
2661805270023 2006-05-27 Da
1701205230023 2006-07-03 Nu
Fig. 3.2. Variante de prezentare a unei relaii R
Observaia 1. ntr-o relaie, tuplurile trebuie s fie distincte.
Observaia 2. +ardinalul relaiei este numrul tuplurilor dintr-o relaie.
Gradul relaiei este numrul valorilor dintr-un tuplu.
Atributul
Atributul reprezint coloana unei tabele de date, caracterizat printr-un nume.
Exemplu:
R:
Fig. 3.3. Relaia R reprezentat cu ajutorul atributelor
Atributele sunt utile atunci cnd ntr-o relaie un domeniu apare de mai multe
ori. Prin numele dat fiecrei coloane (atribut), se difereniaz coloanele care conin
valori ale aceluiai domeniu, eliminnd dependena fa de ordine.
Sc)ema unei relaii
Sc)ema unei relaii este numele relaiei urmat de lista de atribute, pentru
fiecare atribut precizndu-se domeniul asociat.
Astfel, pentru o relaie R cu atributele A
1
, A
2
, ... , A
n
i domeniile D
1
, D
2
, ... ,D
m
,
cu m > n, schema relaiei R poate fi prezentat astfel:
R(A
1
: D
1
, A
2
:D
2
, ... , A
n
: D
m
)
sau
R:
A
1
:D
1
... A
n
:D
m

Fig. 3.4. Reprezentarea schemei relaiei R
Ca o concluzie, dintre caracteristicile modelului relaional menionm:
- nu exist tupluri identice;
- ordinea liniilor i a coloanelor este arbitrar;
- articolele unui domeniu sunt omogene;
.np+ D, 'ata3#n$")+D/ tip3
so!uiona$"+D/
2661805270023 2006-05-27 Da
1701205230023 2006-07-03 Nu
17
- fiecare coloan definete un domeniu distinct i nu se poate repeta n cadrul
aceleiai relaii.
1$
CURS 4. Operatorii modelului relaional
/., Op"$ato$ii *o'"!u!ui $"!aiona!
Modelul relaional ofer dou colecii de operatori pe relaii:
- algebra relaional;
- calcul relaional:
calcul relaional orientat pe tuplu;
calcul relaional orientat pe domeniu.
n acest curs va fi tratat doar cazul algebrei relaionale.
Algebra relaional este o colecie de operaii pe relaii, fiecare operaie avnd
drept operanzi una sau mai multe relaii, rezultatul fiind o alt relaie.
Exist mai multe criterii de grupare a operaiilor:
- operaii de baz:
reuniunea;
diferena;
produsul cartezian etc.
- operaii derivate:
intersecia;
diviziunea etc.
sau
- operaii tradiionale pe mulimi (reuniune, intersecie, diviziune, produs
cartezian)
- operaii relaionale speciale (selecia, proiecia, jonciunea, etc.)
*euniunea
*euniunea reprezint o operaie a algebrei relaional definit pe dou relaii:
R
1
i R
2
, ambele cu aceeai schem, n urma creia se construiete o nou relaie
R
3
, cu aceeai schem ca i R
1
i R
2
i avnd drept extensie tuplurile din R
1
i R
2
,
luate mpreun o singur dat.
Notaii: R
1
U R
2
OR (R
1
, R
2
)
APPEND (R
1
, R
2
)
UNON (R
1
, R
2
)
Reprezentarea grafic
Fig. 4.1. Reprezentarea grafic a operaiei de reuniune a dou relaii
*1
*3
*2

19
Exemplu: Deoarece aplicaia AGENTE MOBLARA luat ca exemplu n acest curs
nu conine dou relaii cu aceeai structur, pentru a putea exemplifica operaia de
reuniune se vor construi dou relaii ARHVA_OFERTE i ARHVA_CERER populate
cu informaiile aferente ofertelor respectiv cererilor soluionate (s-au ales doar trei
atribute: id-ul ofertei sau a cererii, cnp-ul clientului, tipul soluionrii). Pentru a afla
care sunt toate ofertele i cererile soluionate, se realizeaz operaia de reuniune.
Fig. 4.2. Reuniunea relaiilor ARHVA_OFERTE i ARHVA_CERER
Diferena
Diferena reprezint o operaie a algebrei relaionale definit pe dou relaii R
1
i R
2
, ambele cu o aceeai schem, n urma creia se construiete o nou relaie R
3
,
cu schema identic cu R
1
i R
2
, avnd drept extensie acele tupluri ale relaiei R
1
care
nu se regsesc n relaia R
2
.
Notaii: R
1
R
2
REMOVE (R
1
, R
2
)
MNUS (R
1
, R
2
)
Reprezentarea grafic:
Fig. 4.3. Reprezentarea grafic a operaiei de diferen a dou relaii
Exemplu: Presupunnd c exist clieni care au nregistrri n ambele tabele (adic
au oferit imobil spre vnzare, dar i au achiziionat un alt imobil n acelai timp),
pentru a afla care au fost doar ofertanii de imobile, se aplic diferena dintre relaiile
ARHVA_OFERTE i ARHVA_CERER.

idtipulcnptip_solutionare10::o'erta2::0$052700
23Da1210o'erta1$$110:300$97Da
*/7%
0*1-,05+F/*./% 0*1-,05C/*/*-%
idtipulcnptip_solutionare10::o'erta2::0$05270023
Da1210o'erta1$$110:300$97Da220)erere2$2050:30
0$9$Da131:)erere1$$110:300$97Da
idtipulcnptip_solutionare210)erere2$2050:300$9
$Da131:)erere1$$110:300$97Da
*1
*3
*2

@
20
Fig. 4.4. Diferena relaiilor ARHVA_OFERTE i ARHVA_CERER
Produsul cartezian
Produsul cartezian reprezint o operaie a algebrei relaionale definit pe dou
relaii R
1
i R
2
, n urma creia se construiete o nou relaie R
3
, a crei schem se
obine prin concatenarea schemelor relaiilor R
1
i R
2
, avnd ca extensie toate
combinaiile tuplurilor din R
1
cu cele din R
2
(operaie laborioas).
Notaie: R
1
xR
2
PRODUCT (R
1
, R
2
)
TMES (R
1
, R
2
)
Reprezentarea grafic:
Fig. 4.5. Reprezentarea grafic a produsului cartezian
Exemplu: Operaia de produs cartezian va fi exemplificat pe un exemplu
independent de aplicaia AGEN|A MOBLAR considerat. Astfel:
-
idtipulcnptip_solutionare1210o'erta1$$110:300$
97Da20::o'erta2::0$05270023Da
*/7%
0*1-,05+F/*./% 0*1-,05C/*/*-%
idtipulcnptip_solutionare20::o'erta2::0$052700
23Da
idtipulcnptip_solutionare0221)erere2$2050:300$
9$Da1210)erere1$$110:300$97Da31:1)erere2:90
125270032Da
*1
*3
*2


Localit D1Jude D1#aia
"are"ara4ureD#raDov#ra
Dov
Transport DTarif D!autobuz11
000tro!eibuz10 000
Localit D1Jude D1Transport DTarif
D!#orDa"ara4ureDautobus11 000#raDov#raDovautobuz11
000#orDa"ara4ureDtro!eibuz10
000#raDov#raDovtro!eibuz10 000
.*0NSP+*.%
.0*-F/%
6+C06-.%
21
Fig. 4.6. Produsul cartezian dintre relaiile LOCALT i TARFE
Proiecia
Proiecia reprezint o operaie a algebrei relaionale definit asupra unei relaii
R, n urma creia se construiete o nou relaie P, n care se gsesc acele atribute
din R specificate explicit n cadrul operaiei.
Prin operaie de proiecie se trece de la o relaie de grad n (are n coloane) la o
relaie de grad mai mic, p (p<n).
Notaie:
< ;
&...& &
R
m j j
A A A


I &...& & J
m j j
A A A R

< &...& & & ;
m j j
A A A R PROJECT
Reprezentarea grafic:
Fig. 4.7. Reprezentarea grafic a operaiei de proiecie
Exemplu: Pentru a obine o list cu numele i numerele de telefon ale
ofertanilor/cumprtorilor, se poate aplica operaia de proiecie a relaiei
DATE_PERSOANE asupra atributelor ,numele, ,nr_telefon
Fig. 4.8. Proiecia relaiei DATE_PERSOANA pe atributele ,numele, ,nr_telefon
Selecia
0
G
&0
G
&...&0
4
P
*
D0./5P/*S+0N0%
)n(nu4e!eadresanr5te!e'one4ai!1701205230032Po( 0naStr. ,ii!or& nr.55K4&
+radea& #ior@
(aLMaoo.it
2::0$05270023Sas -oanStr. ,i)toriei& nr.22K12& #aia "are&
"ara4ures03:2K409209@
nu4e!e&
nr5te!e'on
nu4e!enr5te!e'onPo( 0na@Sas
-oan03:2K409209
*/7%
22
Selecia reprezint o operaie din algebra relaional definit asupra unei
relaii R, n urma creia se construiete o nou relaie S, cu aceeai schema ca R,
avnd extensia construit din acele tupluri din R care satisfac o condiie menionat
explicit n cadrul operaiei (se poate interpreta ca ,tiere orizontal: nu toate tuplurile
din R satisfac aceast condiie).
Condiia precizat n cadrul operaiei de selecie se reprezint sub forma:
unde "operator de comparaie poate fi unul din semnele <, <=, >=, > sau =.
Notaie:

condiie
(R)
R [condiie]
RESTRCT (R, condiie)
Reprezentarea grafic:
Fig. 4.9. Reprezentarea grafic a operaiei de selecie
Exemplu: n cazul n care se dorete afiarea ofertelor/cererilor anterioare datei de
2006-07-03, se poate aplica operaia de selecie asupra relaiei CERER_OFERTE,
dup cum se va vedea n figura 4.10.
Fig. 4.10. Selecia efectuat asupra relaiei CERER_OFERTE
,onciunea
,onciunea (joinul) reprezint o operaie a algebrei relaionale definit pe dou
relaii: R
1
i R
2
, n urma creia se construiete o alt relaie R
3
, prin concatenarea
unor tupluri din R
1
cu tupluri din R
2
care ndeplinesc o anumit condiie specificat
explicit n cadrul operaiei.
atribut, operator de comparaie, valoare
S
*
)ondiCie
+F/*./%
Data5=nregN200:@07@03
+F/*./ ,/C1-%
id_ co#tipulcnp data_ inre"Cod_loc#d_ strada$r_ imo%ileta&'ret_min'ret_
ma(-d5)on'ort12o'erta2::0$05270023200:@05@27C814712022P4547001313o'erta1701205230023200:@07@
03#,23012052230350012
id_ co#tipulcnp data_ inre"Cod_loc#d_ strada$r_ imo%ileta&'ret_min'ret_
ma(#d_confort12o'erta2::0$05270023200:@05@27C814712022P45470012
23
Notaie: R
1
R
2
;
JON(R1,R2,condiie)
Reprezentarea grafic:
Fig. 4.11. Reprezentarea grafic a operaiei de jonciune
Condiia de concatenare din cadrul operaiei de jonciune este de forma:
n funcie de operatorul de comparaie din condiia de concatenare, joinul
poate fi de mai multe feluri, ns cel mai important este e-ui.oinul/
Exemplu: Aplicnd operaia de equijoin relaiilor DATE_PERSOANE i FACTUR
pentru atributul ,cnp, se obin informaii referitoare la clienii care au ncheiat facturi.
Pentru a nu ncrca figura, pentru cele dou relaii s-au ales doar cteva atribute.
Fig. 4.12. Operaia de equijoin a relaiilor DATE_PERSOANA i FACTUR
Observaie: Operaia de jonciune se poate exprima cu ajutorul operaiilor de
produs cartezian i selecie, rezultatul unui join fiind asemenea cu cel al operaiei de
selecie asupra unui produs cartezian:
JON (R
1
, R
2
, condiie) = RESTRCT (PRODUCT (R
1
, R
2
), condiie).
Este indicat utilizarea joinului n locul produsului cartezian, de cte ori este posibil.
atribut
din *1
atribut
din *2
+(erator de
)o4(araCie
*1 *2
*3
atribut din R
1
operator de comparaie atribut din R
2
atribut din R
1
= atribut din R
2
)n( )n(
2
D0./5P/*S+0N0% F0C.9*-%
*/7
%
cnpnumeleadresanr_telefonnr_
facturaid_cocnp155121224503$Po( *aduStr. 0!. Cuza& nr.4K34&
P!oiesti07443045052243155121224503$
nr_
factura#id_cocnp2243155121224
503$
cnp#numeleadresanr_
telefon155121224503$Po( *aduStr. 0!. Cuza& nr.4K34&
P!oiesti074430450525:0405570053Cis 0!inaStr. 6u4inii& 7:&
#uzau0721435:22
24
Tipu$i '" 4on.iuni
n funcie de
- tipul condiiilor de conectare
- modul de definire a schemei
- extensia relaiei rezultate prin jonciune,
vom studia:
- jonciunea natural
- jonciunea extern
- semijonciunea.
,onciunea natural
,onciunea natural este o operaie definit pe dou relaii R
1
i R
2
, n urma
creia se construiete o nou relaie R
3
, a crei schem este obinut prin reuniunea
atributelor din relaiile R
1
i R
2
(atributele cu aceleai nume se iau o singur dat) i a
crei extensie conine tuplurile obinute prin concatenarea tuplurilor din R
1
cu cele din
R
2
care prezint aceleai valori pentru atributele cu aceleai nume.
Jonciunea natural elimin inconvenientul ce apare n cazul equijoinului i
anume: schema relaiei n cazul equijoinului conine toate atributele celor dou relaii.
Astfel, n relaia R
3
a jonciunii naturale, atributele cu acelai nume vor aprea o
singur dat.
Reprezentarea grafic:
Fig. 4.13. Reprezentarea grafic a operaiei de jonciune natural
Exemplul 1: Relund exemplul anterior, prin jonciunea natural se elimin atributul
repetitiv ,cnp.
*1 *2
*3
25
Fig. 4.14. Operaia de jonciune natural a relaiilor DATE_PERSOANA i
FACTUR
Exemplul 2: Dac se dorete aflarea denumirilor localitilor n care sunt oferte sau
cereri, cum n relaia CERER_OFERTE se afl doar codul localitii respective iar n
relaia LOCALTAT este asociat fiecrui cod de localitate denumirea localitii,
trebuie s se realizeze o jonciune natural ntre aceste dou relaii. Astfel rezultatul
jonciunii va fi cel prezentat n figura 4.15.
Fig. 4.15. Jonciunea natural a relaiilor CERER_OFERTE i LOCALTAT
,onciunea e0tern
)n( )n(
2
D0./5P/*S+0N0% F0C.9*-%
*/7
%
cnpnumeleadresanr_telefonnr_
facturaid_co155121224503$Po( *aduStr. 0!. -. Cuza& nr.4K34&
P!oiesti07443045052243
nr_
factura#id_cocnp2243155121224
503$
cnp#numeleadresanr_
telefon155121224503$Po( *aduStr. 0!. Cuza& nr.4K34&
P!oiesti074430450525:0405570053Cis 0!inaStr. 6u4inii& 7:&
#uzau0721435:22
)od5!o) )od5!o) 6+C06-.0.-%
C/*/*-5+F/*./%
*/7%
id_ co#tipulcnp data_ inre"cod_ locid_ stradanr_ imo%ilpret_
minpret_ ma(tip_
solutionarenume _locsim%ol_ &udet12o'erta1701205230023200:@07@03#,230120523035da#rasov#,234)erere27:0$05270024200:@05@
27C8400120224547daC!uG@Na(o)aC8
cod_loc#nume_locsim%ol
_&udetC8400C!uG@
Na(o)aC8#,230#rasov#,
id_ co#tipulcnp data_ inre"cod_locid_
stradanr_
imo%ilpret_
minpret_
ma(tip_
solutionare12o'erta1701205230023200:@07@03#,230120523035da234)erere27:0$05270024200:@09@
21C8400120224547da44o'erta2::111124::42200:@09@17""430133450nu
2:
,onciunea e0tern este operaia definit pe dou relaii: R
1
i R
2
, n urma
creia se obine o nou relaie R
3
prin joncionarea relaiilor R
1
i R
2
. n relaia R
3
apar i tuplurile din R
1
i R
2
care nu au participat la join (atributul de jonciune cel
care are acelai nume i n relaia R
1
i n relaia R
2
nu prezint aceleai valori).
Aceste tupluri sunt completate cu valora ,NULL.
Jonciunea extern elimin inconvenientul cauzat de jonciunea intern i
anume pierderea de tupluri (vezi figura 4.15, tuplul <44,oferta, 2::111124::42& 200:@
09@17& ""430& 133& 4& 50& OnuP> nu mai apare n relaia REZ deoarece simbolul
,MM430 corespunztoare atributului cod_loc din relaia CERER_OFERTA nu
figureaz printre valorile atributului cu acelai nume din relaia LOCALTAT.
Reprezentarea grafic:
Fig. 4.16. Reprezentarea grafic a operaiei de join extern
Exemplu: Jonciunea extern este o operaie care din punct de vedere al programrii
prezint inconvenientul manipulrii valorilor nule. n relaia REZ, judeului Braov nu i
s-a asignat o localitate, deci nici codul localitii.
Fig. 4.17. Operaia de jonciune extern a relaiilor LOCALT| i JUDE|E
Semijonciunea
*1 *2
*3
)od5!o)Bnu4e5!o)si4bo!5Gudet430#aia
"are""435#orsa""400C!uG@
Na(o)aC8710#otosani#.
si4bo!5GudetBnu4e5Gudet""
"ara4uresC8C!uG#,#rasov
si4bo!5Gudet si4bo!5Gudet
6+C06-.0.-%
89D/./%
)od5!o)Bdenu4iresi4bo!5Gudetdenu4ire430#aia
"are"""ara4ures435#orsa"""ara4ures400C!uG@
Na(o)aC8C!uG710#otosani#.@@@#,#rasov
*/7%
27
Semi.onciunea este o operaie definit pe dou relaii R
1
i R
2
, n urma creia
se construiete o nou relaie R
3
, a crei extensie conine tuplurile relaiei R
1
care
particip la jonciunea celor dou relaii, conservnd atributele relaiei R
1
.
Notaie: R
1
R
2
;
SEMJON(R
1
, R
2
).
Reprezentarea grafic:
Fig. 4.18. Reprezentarea grafic a operaiei de semijonciune
Exemplu: Semijonciunea urmtoare realizeaz lista localitilor care au referin n
relaia JUDETE.
Fig. 4.19. Operaia de semijonciune a relaiilor LOCALTAT i JUDETE
Observaia 1. Aceast operaie a fost introdus de P.A. Bernstein, fiind
necesar la optimizarea cererilor de date.
Observaia 2. Semijonciunea produce acelai rezultat ca operaia de proiecie
pe atributele din relaia R
1
efectuat asupra jonciunii dintre R
1
i R
2
PROJECT (JON (R
1
, R
2
, condiia), A
1
, A
2
, A
3
)=SEMJON (R
1
, R
2
).
Intersecia
Intersecia reprezint o operaie algebrei relaionale definit pe dou relaii, R
1
i R
2
, ambele cu aceeai schem, n urma creia se construiete o nou relaie R
3
,
*1 *2
*3
cod_loc#nume_locsim%ol_&udet430#aia
"are""435#orsa""400C!uG@
Na(o)aC8710#otosani#.
sim%ol_&udet#nume_&udet"
""ara4uresC8C!uG#,#raso
v
si4bo!5Gudet
6+C06-.0.-%
89D/./%
cod_loc#denumiresim%ol_&udetdenumire430#aia
"are"""ara4ures435#orsa"""ara4ures400C!uG@
Na(o)aC8C!uG
*/7%
2$
cu schema identic cu a operanzilor i cu schema format din tuplurile comune lui R
1
i R
2
.
Notaie: R
1
iR
2
NTERSECT (R
1
, R
2
)
AND (R
1
, R
2
)
Reprezentarea grafic:
Fig. 4.20. Reprezentarea grafic a operaiei de intersecie
Exemplu:
Fig. 4.21. ntersecia relaiilor ORASE i MUNCP
Observaie: ntersecia se poate exprima prin intermediul unor operaii de
baz. De aceea intersecia este o operaie derivat.
R
1
iR
2
=R
1
-(R
1
-R
2
)
R
1
iR
2
=R
2
-(R
2
-R
1
)
Di1iziunea
Di1iziunea reprezint o operaie a algebrei relaionale definit asupra unei
relaii R cu schema R(A
1
:D
1
, . , A
p
:D
k
, . , A
p+1
:D
i
, . , A
n
:D
m
), n urma creia se
construiete o nou relaie Q cu ajutorul unei relaii r cu schema r (A
p+1
:D
l
, . , A
n
:D
m
),
relaia Q avnd schema: Q(A
1
:D
1
, ., A
p
:D
k
).
Tuplurile relaiei Q concatenate cu tuplurile relaiei r permit obinerea tuplurilor
relaiei R.
Notaie: Rr
Division (R, r).
Reprezentarea grafic:
*1
*3
*2

localitate&udetepopulatie#orsa"ara4
ures27 000#rasov#rasov350 000

+*0S/% "9N-C-P--%
*/7%
localitate&udetepopulatie#aia
"are"ara4ures14$
270#rasov#rasov350 000
localitate&udetepopulatie#rasov#raso
v350 000
29
Fig. 4.22. Reprezentarea grafic a operaiei de diviziune
Exemplul se lasa ca exerciiu suplimentar.
Observaie: Operaia de diviziune este o operaie derivat deoarece se poate
exprima prin intermediul operaiilor de baz: a diferenei, a produsului cartezian i a
proieciei:
< < < ; ;; < ;
&...& &...& &...&
1 1 1
R r R R r R
p p p
A A A A A A
=
.
+omplementarea
+omplementarea reprezint o operaie (adiional) a algebrei relaionale
definit asupra unei relaii R, n urma creia se construiete o nou relaie C, numit
complementarea relaiei R. Extensia relaiei C va conine ansamblul tuplurilor din
produsul cartezian al domeniilor asociate atributelor relaiei, care nu figureaz n
extensia relaiei considerate.
Notaii: R
NOT (R)
COMP(R)
Exemplu: Fie relaia: R(A
1
:D
1
, A
2
:D
2
), unde
A
1
= culoare;
A
2
= numr;
D
1
= {"Rou, ,Galben, ,Albastru}
D
2
= {1, 2, 3}
reprezentat prin tabelul:
R:
A
1
:D
1
A
2
.D
2
Rou 1
Rou 2
Galben 3
a) relaia R
Complementarea relaiei R va fi relaia NOT (R) repezintat prin tabelul:
NOT (R):
A
1
:D
1
A
2
:D
2
Rou 3
Galben 1
Galben 2
Albastru 1
*
Q
r

30
Albastru 2
Albastru 3
b) relaia not R
Fig. 4.24. Complementarea relaiei R
Observaie: Complementaritatea este puin utilizat, datorit rezultatului foarte
mare de tupluri.
Splitarea
Splitarea (spargerea) reprezint o operaie (adiional) a algebrei relaionale
definit asupra unei relaii R, n urma creia se construiesc dou relaii R
1
i R
2
cu
aceeai schem cu R, relaii obinute pe baza unei condiii definite asupra atributelor
din R.
Extensia lui R
1
conine tuplurile din R care verific condiia specificat, iar R
2
conine tuplurile din R care nu verific aceast condiie.
Exemplu: Considernd relaia R din figura 4.24 (a) i condiia A
2
>2, operaia de
splitare a relaiei R produce relaiile R
1
i R
2
reprezentate prin tabelele:
R
1

A
1
:D
1
A
2
:D
2
Galben 3
R
2
A
1
:D
1
A
2
:D
2
Rou 1
Rou 2
Figura 4.25. Rezultatul operaiei de splitare a relaiei R din figura 4.24
(a) pe baza condiiei A
2
>2
2nc)iderea tranziti1
2nc)iderea tranziti1 este o operaie (adiional) a algebrei relaionale, definit
asupra unei relaii R, a crei schem conine dou atribute A
1
i A
2
cu acelai
domeniu asociat, operaie care const n adugarea la relaia R a tuplurilor care se
obin succesiv prin tranzitivitate: dac n R exist tuplurile: <a,b> i <b,c> se va
aduga la R tuplul <a,c>.
Notaie:
< ;R
R
+

CLOSE(R)
Exemplu:
31
Fig. 4.26. nchiderea tranzitiv a relaiei R
Persoana% D9r4aD%
D0na"aria0na-on-o
n,asi!e-onNi)o!eta
"aria+ana
Persoana% D9r4aD%
D0na"aria0na-on-o
n,asi!e-onNi)o!eta
"aria+ana0na+ana
0na,asi!e0naNi)o!e
ta
a<
b<
*%
% < ;R
32
CURS 5. Restricii de integritate ale modelului relaional
/./ R"st$i.ii '" int")$itat" a!" *o'"!u!ui $"!aiona!
*estriciile de integritate ale modelului relaional reprezint cerine pe care
trebuie s le ndeplineasc datele din cadrul bazei de date pentru a putea fi
considerate corecte i coerente n raport cu lumea real pe care o reflect. Dac o
baz de date nu respect aceste cerine, ea nu poate fi utilizat cu un maxim de
eficien.
Restriciile sunt de dou tipuri:
- restricii de integritate st$u.tu$a!", care se definesc prin egalitatea sau
inegalitatea unor valori din cadrul relaiilor:
restricia de unicitate a cheilor;
restricia entitii;
dependenele ntre ele;
- restricii de integritate de .o*po$ta*"nt care in cont de semnificaia valorilor
din cadrul bazei de date.
Utilizarea modelului relaional nu impune definirea i verificarea tuturor acestor
tipuri de restricii de integritate. Din acest punct de vedere exist restricii de
integritate *ini*a!". Acestea sunt obligatoriu de definit i de respectat cnd se
lucreaz cu modelul relaional. Dintre restriciile minimale fac parte:
restricia de unicitate a cheii;
restricia referenial;
restricia entitii.
Alte restriciii de integritate ar fi
dependenele;
restricii de comportament.
R"st$i.ii '" int")$itat" *ini*a!"
*estriciile de integritate minimale sunt definite n raport cu noiunea de .5"i"
a unei relaii. Cheia identific un tuplu n cadrul unei relaii fr a face apel la toate
valorile din tuplu.
+)eia unei relaii reprezint ansamblul minimal de atribute prin care se poate
identifica n mod unic orice tuplu al relaiei.
Oricare relaie posed cel puin o cheie:
- cheie simpl, cnd cheia este construit dintr-un singur atribut;
- cheie compus, cnd cheia este construit din mai multe atribute.
33
Exemplul 1:
Fig. 5.1. Chei simple i chei compuse
Determinarea cheii unei relaii necesit cunoaterea tuturor extensiilor
posibile, nu numai a aceleia din momentul n care se stabilete cheia. Astfel,
presupunnd c R
1
i R
2
sunt versiuni ale aceleiai relaii R la momente de timp
diferite: t
1
, respectiv t
2
, alegerea la momentul t
1
drept cheie atributul A a relaiei R se
dovedete a fi greit, ntruct atributul A nu face posibil identificarea unic a
tuplurilor i la momentul t
2
. Cheia relaiei R este reprezentat, prin urmare, de
perechea de atribute (A,B).
Exemplul 2:
Fig. 5.2. Chei simple i chei compuse n cadrul relaiilor JUDE|E, respectiv STRZ
Observaie: Cheia relaiei JUDE|E este ,simbol_jude deoarece fiecare jude are o
codificare unic a denumirii sale, deci fiecrui jude i corspunde un singur simbol.
Cheia relaiei STRZ este compus din atributele ,cod_loc i ,id_strada. Dac s-ar
alege drept cheie primar doar atributul ,id_strada, acesta nu ar identifica n mod
unic numele unei strzi dintr-o localitate, numele strzii respective putndu-se regsi
i n alte localiti ale aceluiai jude sau a altui jude. La fel, dac s-ar alege drept
cheie primar atributul ,cod_loc, acesta nu ar mai identifica n mod unic un tuplu,
deoarece ntr-o localitate exist mai multe strzi.
O relaie poate avea mai multe combinaii de atribute, cu proprietatea de
identificare unic a tuplurilor. Se spune n acest caz c relaia posed mai muli
candidai c)eie (chei candidate).
Definiia 1. Se numete c)eie primar, cheia aleas dintre cheile candidate
care s serveasc n mod efectiv la identificarea tuplurilor.
Cheia primar nu poate fi reactualizat. Cheia primar a unei relaii nu este
altceva dect atributul de identificare a unei entiti, prin urmare se reprezint fie prin
subliniere, fie urmate de semnul #.
Definiia 2. Se numete c)eie e0tern atributul/grupul de atribute dintr-o relaie
R
1
a crui/cror valori sunt definite pe acelai domeniu/aceleai domenii ca i cheia
primar a unei alte relaii R
2
i care are rolul de a modela asocierea ntre entitile
A:D
A
B:D
B
a
1
b
1
a
2
b
3
a
3
b
2

R1:
R2:

a) cheie simpl

b) cheie compus
AD
A
B:D
B
a
1
b
1
a
1
b
2
a
2
b
3
a
3
b
2
sim%ol_&udet#nume_&ud""
"ara4ures0#0!ba
89D/./% S.*07-%
sim%ol_&udecod_loc#id_strad)#nume_str#,#,230120
-nde(endenCei#,#,23007$R>riiC8C8147120CireDi!or
34
reprezentate prin relaiile R
1
i R
2
. n acest caz, R
1
se numete relaie care refer, iar
R
2
se numete relaie referit.
Exemplul 1:
Fig. 5.3. Reprezentarea legturii dintre relaiile DATE_PERSOANA i
JUDETE cu ajutorul cheii externe ,simbol_judet din cadrul relaiei
DATE_PERSOANA
Observaia1: n exemplul de mai sus, relaia DATE_PERSOANA are drept cheie
primar atributul ,cnp, iar ca i cheie extern atributul ,simbol_judet, iar relaia
JUDETE are drept cheie primar cheia ,simbol_judet. Relaia DATE_PERSOANA
este relaia care refer, iar JUDETE este relaia referit.
Observaia2: ntre cele dou relaii (entiti) avem urmtoarea asociere:
Fig. 5.4. Asocierea dintre entitile DATE_PERSOANA i JUDETE
Exemplul 2:
Fig. 5.5. Reprezentarea legturii ntre relaiile JUDETE i LOCALTAT cu ajutorul
cheilor externe ,simbol_judet i ,cod_localitate
*estricia de unicitate a c)eii
*estricia de unicitate a c)eii impune ca ntr-o relaie s nu existe dou linii
identice (linii care s nu conin aceleai valori pentru toate atributele). Altfel spus,
restricia de unicitate a cheii impune ca ntr-o relaie s nu existe dou tupluri cu o
aceeai valoare pentru atributul cheie.
Exemplele 1 i 2 respect restricia de unicitate a cheii.
)n(nu4e!e si4bo!5
Gudet1701205230023Sas
-oan#,2::0$05270023Po( 0na C8
si4bo!5Gudetdes)riere#,#raso
vC8C!uG"""ara4ures
D0./5P/*S+0N0% 89D/./%
D0./5P/*S+0N0 89D/./
are
reDedinCa
;1&1< ;0&n<
sim%ol_&udet#nume_&ud#
,#raDovC8C!uG
89D/./%
sim%ol_&udecod_loc#nume_loc#
,#,230#raDovC8C8147DeG
6+C06-.0.-%
sim%ol_&udetcod_loc#id_strada#nume_str#,#,230001
-nde(endenCei#,#,230002R>riiC8C8147003CireDi!or
S.*F7-%
35
*estricia referenial
*estricia referenial impune ca ntr-o relaie R
1
care refer o relaie R
2
,
valorile cheii externe s figureze printre valorile cheii primare din R
2
sau s fie valori
,null (nedefinite). R
1
i R
2
nu trebuie s fie neaprat distincte.
Exemplele 1 i 2 prezint un mecanism de legare a relaiilor i respect
restricia referenial a cheii.
*estricia entitii
*estricia entitii impune ca ntr-o relaie atributele cheii primare s fie nenule.
(Atributele cheie s nu conin valori nule). Dac exist valori ,null, cheia i poate
pierde rolul de identificator de tuplu. Astfel, la ncrcarea unui tuplu, valoarea cheii
trebuie s fie cunoscut, pentru a se putea verifica faptul c aceast valoare nu
exist deja ncrcat.
Exemplele 1 i 2 respect restricia entitii.
Relaia REZ din figura 4.17 ncalc restricia entitii deoarece exist chei
primare ce conin valori nule, dup cum este cazul judeului Braov.
A!t" $"st$i.ii '" int")$itat"
n categoria restricii de integritate intr urmtoarele tipuri de restricii:
a) restricii referitoare la dependena datelor:
dependen funcional;
dependen multivaloare;
dependen jonciune
b) restricii de comportament:
restricii de domeniu;
restricii temporale.
Restriciile referitoare la dependena datelor, reprezint modul n care datele
depind unele de altele.
Dependenele funcionale
Dependenele funcionale reprezint dependena ntre date prin care se poate
identifica un atribut/grup de atribute prin intermediul altui atribut/grup de atribute.
Dac X i Y sunt dou subansamble de atribute ale atributelor relaiei R,
spunem c ntre X i Y exist o dependen funcional, notat Y X , dac i numai
dac:
(i) fiecare valoare a lui X poate fi asociat unei singure valori din Y, i
(ii) dou valori distincte ale lui X nu pot fi asociate dect aceleiai valori ale lui Y.
X se numete determinantul (sursa) dependenei, iar Y se numete
determinatul (destinaia) dependenei.
Exemple: Urmtoarele atribute se afl n dependen funcional:
cod_potallocalitate, deoarece unui cod potal i corespunde o singur
localitate (sensul dependenei este foarte important, deoarece, viceversa ar nsemna:
o localitate are un singur cod_potal);
3:
nr_facturdata_factur, deoarece cunoaterea numrului facturii determin
cu exactitate data facturii.
Dou atribute nu sunt n dependen funcional, notat X Y, atunci
cnd cunoaterea unei valori a primului atribut fie nu permite cunoaterea nici uneia
dintre valorile celui de al doilea atribut, fie permite cunoaterea mai multor valori ale
celui de al doilea atribut.
Exemplu: Urmtorul atribut nu se afl n dependen funcional: .np
nr_factur, deoarece pentru o persoan se pot ntocmi mai multe facturi (aferente
fiecrei vnzri).
n cadrul modelului relaional, o dependen funcional este reprezentat
printr-o sgeat ce pornete din surs i se termin n destinaie.
Fig. 5.6. Reprezentarea dependenei funcionale ntre atributele ,nr_factura i
,data_facturii
Dependenele multi1aloare
Dependenele multi1aloare reprezint dependena n care un atribut/ grup de
atribute poate reprezenta/ identifica mai multe valori pentru o singur valoare a unui
alt atribut/ grup de atribute.
Dac X,Y i Z sunt trei subansambluri de atribute ale atributelor relaiei R,
spunem c ntre X i Y exist o dependen multi1aloare, notat Y X sau
Z Y X S
, dac i numai dac:
(i) la fiecare valoare a lui X poate fi asociat una sau mai multe valori ale lui Y, i
(ii) aceast asociere nu depinde de apariiile lui Z.
Altfel spus, dac Y X i (x,y,z), (x',y',z') sunt dou tupluri din R, atunci i
(x,y',z), (x,y,z') sunt tupluri din R.
Exemplu: n relaia OFERTE (alctuit din atributele: ,id_tip_oferte, ,cnp i
,simbol_judet) valorile atributului ,id_tip_oferte au urmtoarea semnificaie: 01
desemneaz imobil de tip apartament, iar 02, imobil de tip cas. Astfel, urmtoarea
relaie conine dependene multivaloare:
deoarece
nr_factura#data_facturiicnp1200:@07@
0517012052300232200:@0:@
2$25$1023457723
F0C.9*-%
id5ti(5o'erte)n(si4bo!5Gudet01170120523002
3""0125$1023457723""02170120523002
3S"0125$1023457723S"0125$1023457723S
"0225$1023457723C8
+F/*./%
37
Fig. 5.7. Relaia OFERTE n care exist dependen multivaloare
Dependenele de .onciune
Dac X
1
, X
2
, ...,X
m
sunt m subansambluri de atribute din relaia R, spunem c
exist o dependen de jonciune de ordinul m ntre X
1
, X
2
, ...,X
m
, notat X
1
/ X
2
/ .../X
m
,
dac i numai dac R reprezint jonciunea proieciilor sale pe X
1
, X
2
, ...,X
m
.
Observaie: Dac m=2. atunci are loc dependena multivaloare.
01 1701205230023 ""
01 25$1023457723 S"
01 1701205230023 S"
01 25$1023457723 ""
3$
CURS 6. Prelucrareae!aluarea "i optimi#area cerinelor
R")u!i!" !ui Co''
Prin sistem de gestiune a bazelor de date relaionale (SGBDR) se nelege un
SGBD care utilizeaz drept concepie de organizare a datelor modelul relaional.
Definirea unui SGBDR impune o detaliere a caracteristicilor pe care trebuie s
le prezinte un SGBD pentru a putea fi considerat relaional. n acest sens, Codd a
formulat (n 1985) 13 reguli, care exprim cerinele pe care trebuie s le satisfac un
SGBD. Aceste reguli sunt deosebit de utile n evaluarea unui SGBDR.
R
0
: Regula privind gestionarea datelor la nivel de relaie.
- sistemul trebuie s gestioneze BD numai prin mecanisme relaionale.
R
1
: Regula privind reprezentarea logic a datelor.
- ntr-o baz de date relaionat, informaia este reprezentat la nivel
logic sub forma unor tabele (relaii);
- acest lucru nseamn c toate datele trebuie s fie memorate i
prelucrate n acelai mod.
R
2
: Regula privind reprezentarea logic a datelor
- orice data din baza de date relaionat trebuie s poat fi accesat
prin specificarea:
numelui relaiei;
valorii cheii primare;
numele atributului.
R
3
: Regula privind valorile nule
- sistemul trebuie s permit declararea i manipularea sistematic a
valorilor NULL (semnific lipsa unor date);
- valorile NULL difer de irurile de caractere ,spaiu, irurile vide de
caractere.
- valorile NULL sunt deosebit de importante n implementarea
restriciilor de integritate:
integritatea entitilor;
integritatea referenial.
R
4
: Regula privind metadatele
- utilizatorii autorizai trebuie s poat aplica asupra descrierii bazei de
date aceleai operaii ca i asupra datelor obinuite.
R
5
: Regula privind facilitile limbajelor de utilizare:
- trebuie s existe cel puin un limbaj care s exprime oricare din
urmtoarele operaii:
definirea relaiilor;
sa vizualizeze;
s regseasc informaia;
s poat reactualiza informaia;
s verifice i s corecteze datele de intrare, etc.
- n general, toate implementrile SQL respect aceast regul.
R
6
: Regula privind actualizarea tabelelor virtuale:
- toate tabelele/relaiile virtuale trebuie s poat fi actualizate.
- nu toate tabelele virtuale sunt teoretic actualizate.
Exemplu: Fie tabela de baz PROD, cu urmtoarea schem
PROD(Denp:D
1
, Cant:D
2
, Pret:D
3
), cu ajutorul tabelei PROD este
definit o tabel virtual DSP, cu schema: DSP (Denp:D
1
, Cant:D
2
,
Pret:D
3
, Val:D
4
). Valorile atributului ,Val se calculeaz astfel:
Val=Cant*Pret.
Presupunem c se dorete schimbarea preului unitar la un anumit
produs, aceast schimbare trebuie efectuat n tabela de baz PROD,
atributul ,Pret din tabela virtual DSP, fiind actualizabil, ntruct
actualizarea se poate propaga spre tabela de baz.
Presupunem c se dorete schimbarea valorii ,Val la un anumit
produs:
modificarea de la tabela virtual spre tabela de baz nu mai este
posibil, atributul ,Val nu este actualizabil, deoarece schimbarea valorii
,Val se poate datora schimbrii cantitii ,Cant i/sau a preului unitar
,Pret.
astfel trebuie s existe un mecanism prin care s se poat
determina dac anumite vizualizri pot fi modificate sau nu.
- majoritatea implementrilor SQL ndeplinesc aceast cerin.
R
7
: Regula privind inserrile, modificrile i tergerile din baza de date.
- un SGBDR nu trebuie s oblige utilizatorul s caute ntr-o relaie,
tuplu cu tuplu, pentru a regsi informaia dorit;
- aceast regul exprim cerina ca n operaiile prin care se schimb
coninutul bazei de date s se lucreze la un moment dat pe o ntreag
relaie.
R
8
: Regula privind independena fizic a datelor
- o schimbare a structurii fizice a datelor nu trebuie s blocheze
funcionarea programelor de aplicaii;
- ntr-un SGBDR trebuie s se separe aspectul fizic al datelor (stocare
sau acces la date) de aspectul logic al datelor.
R
9
: Regula privind independena logic a datelor.
- o schimbare a relaiilor bazei de date nu trebuie s afecteze
programele de aplicaie.
R
10
: Regula privind restriciile de integritate
- restriciile de integritate trebuie s fie definite ntr-un limbaj relaional,
nu n programul de aplicaie.
R
11
: Regula privind distribuirea geografic a datelor
- distribuirea datelor pe mai multe calculatoare dintr-o reea de
comunicaii de date, nu trebuie s afecteze programele de aplicaie.
R
12
: Regula privind prelucrarea datelor la nivelul de baz
- dac sistemul posed un limbaj (de baz orientat pe prelucrarea de
tupluri i nu pe prelucrarea relaiilor, acest limbaj nu trebuie s fie
utilizat pentru a evita restriciile de integritate).
C!asii.a$"a $")u!i!o$ !ui Co''

n funcie de tipul de cerine pe care le exprim, regulile sunt grupate n 5
categorii:
1. Reguli de baz: R
0
i R
12
;
2. Reguli structurale: R
1
i R
6
;
3. Reguli privind integritatea datelor: R
3
i R
10
;
4. Reguli privind manipularea datelor: R
2
, R
4
, R
5
, R
7
;
5. Reguli privind independena datelor: R
8
, R
9
, R
11
.
E6a!ua$"a7p$"!u.$a$"a ."$in"!o$ 2i opti*i&a$"a
n SGBDR interfaa cu utilizatorul este de tip neprocedural. Utilizatorul
definete datele pe care dorete s le vizualizeze fr a da algoritmi de acces.
Sistemul trebuie s converteasc cererea utilizatorului ntr-o cerere optimal.
Evaluarea unei cereri se efectueaz n trei etape:
1. Analiza cererii ce const n studierea sintactic i semantic a
cererii pentru a verifica corectitudinea sa i a simplifica
criteriului de cutare.
2. Ordonanarea presupune:
- descompunerea cererii ntr-o mulime de operaii
elementare i
- determinarea ordinii optimale a acestor aplicaii.
3. Execuia n paralel i/sau secvenial a operaiilor elementare
pentru a obine rezultatul cererii.
Presupunem c utilizatorul transmite sistemului de gestiune o cerere
exprimat prin ordine SQL. Pentru a rspunde cererii, SGBD-ul trebuie s neleag
cererea utilizatorului. Cererea trebuie s fie corect sintactic, datele trebuie s fie
disponibile utilizatorului i trebuie localizate analiznd diferite drumuri de acces la
ele.
deea general este concretizat n schema de mai jos:
adic optimizarea cererilor de date se realizeaz prin parcurgerea urmtoarelor
etape:
1. exprimarea cererilor sub forma unei expresii algebrice relaionale;
2. aplicarea unor transformri algebrice asupra expresiilor obinute n etapa
precedent, n scopul executrii mai eficiente a lor;
3. planul de execuie;
4. optimizarea.
Un plan de e0ecuie implic o secven de pai pentru evaluarea cererii (n mod
obinuit, fiecare pas din planul de execuie corespunde unei operaii relaionale)
precum i metoda care va fi folosit pentru evaluarea operaiei. De obicei, pentru o
operaie relaional dat, exist mai multe metode ce pot fi folosite pentru evaluarea
acesteia.
Dou planuri de execuie diferite care au ntotdeauna acelai rezultat se numesc
ec)i1alente. Planuri de execuie echivalente pot avea diferite costuri. Scopul optimizrii
cererilor este de a gsi, printre diversele planuri de execuie echivalente, pe acela de
cost minim. ntr-un sistem centralizat, costul evalurii unei cereri este suma a dou
componente, costul /O (transferuri de date) i costul CPU (verificare de condiii, operaii
.oin etc.).
Strategiile de optimizare pot fi de dou tipuri:
1. Strategii generale de optimizare (independente de modul de memorare al
datelor);
cerere arbore algebric (nu este unic) plan de executie optimizare
2. Strategii specifice anumitor SGBDR (in cont de modul de memorare al
datelor).
mplementarea strategiilor generale de optimizare este permis datorit
proprietilor operaiilor din algebra relaional.
Aceste proprieti sunt:
a) Comutativitatea operaiilor de join i produs cartezian
E
1
E
2
E
2
E
1
E
1
E
2
E
2
E
1
b) Asociativitatea operaiilor de join i produs cartezian
(E
1
E
2
) E
3
E
1
(E
2
E
3
)
(E
1
E
2
) E
3
E
1
(E
2
E
3
)
c) Compunerea proieciilor
T
A1&...&Am
;T
B1&...&Bn
;R<< 2 T
A1&...&Am
;R<&
unde A
1
,...,A
m
trebuie s aparin de B
1
,...,B
n
.
d) Compunerea seleciilor
< ; << ; ;
2 1 2 1
R R
F F F F

.
Deoarece 1 2 2 1 F F F F = , seleciile se pot comuta
<< ; ; << ; ;
1 2 2 1
R R
F F F F

.
e) Comutarea seleciei i proieciei
- Dac condiia F implic numai atributele A
1
,...,A
n
, atunci
<< ; ; << ; ;
&...& 1 &...& 1
R R
An A F F An A
=
.
- Dac condiia F implic i atributele B
1
,...,B
m
, care nu aparine de A
1
,...,A
n
atunci
<<< ; ; ; << ; ;
&...& 1 & &...& 1 &...& 1 &...& 1
R R
Bm B An A F An A F An A
=
.
f) Comutarea seleciei cu produsul cartezian
- Dac toate atributele menionate n F sunt atribute ale lui E
1
, atunci
2 1 2 1
< ; < ; E E E E
F F

.
-Dac, n plus, F este de forma
2 1
F F F = i F
1
implic numai atributele din
E
1
,
iar F
2
implic numai atributele din E
2
, atunci
< ; < ; < ;
2 2 1 1 2 1
E E E E
F F F
.
Daca F
1
implic numai atribute din E
1
, dar F
2
implic atribute att din E
1
ct i
din E
2
, atunci
< < ; ; < ;
2 1 1 2 2 1
E E E E
F F F
.
g) Comutarea seleciei cu reuniunea
< ; < ; < ;
2 1 2 1
E E E E
F F F
.
h) Comutarea seleciei cu diferena
< ; < ; < ;
2 1 2 1
E E E E
F F F
.
i) Comutarea proieciei cu produsul cartezian
Dac A
1
,A
2
,...,A
n
sunt atribute din cadrul a dou expresii E
1
i E
2
, formate din
atributele B
1
,...,B
m
ale lui E
1
i din atributele C
1
,...,C
k
ale lui E
2
, atunci
< ; < ; < ;
2 &...& 1 1 &...& 1 2 1 &...& 1
E E E E
Ck C Bm B An A

.
j) Comutarea proieciei cu reuniunea
< ; < ; < ;
2 &...& 1 1 &...& 1 2 1 &...& 1
E E E E
An A An A An A

.
Aceste proprieti permit definirea unor strategii generale de optimizare a
cererilor de date i anume:
*egula de optimizare $. Seleciile se execut ct mai devreme posibil. Motivaia
acestei reguli este c seleciile reduc substanial dimensiunea relaiilor. Regula de
transformare 4 poate fi folosit pentru a separa dou sau mai multe selecii n selecii
individuale care pot fi distribuite jonciunii (.oin-ului) sau produsului cartezian folosind
comutarea seleciei cu jonciunea (.oin-ul).
*egula de optimizare '. Produsele carteziene se nlocuiesc cu .oin-uri, ori de
cte ori este posibil. Un produs cartezian ntre dou relaii este de obicei mult mai
scump (ca i cost) dect un .oin ntre cele dou relaii, deoarece primul genereaz
concatenarea tuplurilor n mod exhaustiv i poate genera un rezultat foarte mare.
Aceast transformare se poate realiza folosind legtura dintre produs cartezian, .oin i
selecie.
*egula de optimizare (# Dac sunt mai multe .oin-uri atunci cel care se execut
primul este cel mai restrictiv. Un .oin este mai restrictiv dect altul dac produce o
relaie mai mic. Se poate determina care .oin este mai restrictiv pe baza factorului de
selectivitate sau cu ajutorul informaiilor statistice. Algebric, acest lucru se poate realiza
folosind regula de transformare 2.
*egula de optimizare 3# Proieciile se execut la nceput pentru a ndeprta
atributele nefolositoare. Dac un atribut al unei relaii nu este folosit n operaiile
ulterioare atunci trebuie ndeprtat. n felul acesta se va folosi o relaie mai mic n
operaiile ulterioare. Aceasta se poate realiza folosind comutarea proieciei cu .oin-ul.
CURS $. %e&nica normali#'rii relaiilor
La proiectarea structurii unei baze de date relaionale trebuie stabilite (dup
cum s-a vzut n cursurile anterioare) n primul rnd tabelele n care vor fi memorate
datele i asocierile dintre tabele. Acestea sunt stabilite ntr-o form iniial, dup
care, prin rafinare succesiv se ajunge la forma definitiv. Acestei structuri iniiale i
sunt aplicate un set de reguli care reprezint paii de obinere a unei baze de date
normalizate. Dac o baz de date nu este normalizat ea nu poate fi utilizat cu un
maxim de eficien. Algoritmul de normalizare a bazelor de date relaionale precum i
paii acestuia au fost descrii de ctre E. F. Codd n 1972.
4ormalizarea este procesul reversibil de transformare a unei relaii n relaii de
structur mai simpl. (Procesul este reversibil n sensul c nici o informaie nu este
pierdut n timpul transformrii). Scopul normalizrii este de a suprima redundanele
logice, de a evita anomaliile la reactualizare i rezolvarea problemei reconexiunii.
Exemplu: Pentru a evidenia cteva exemple de redundane i anomalii, se va
considera cazul relaiei iniiale OFERTANT. Pentru a nu ncrca relaia, se vor
considera valori ale atributelor prescurtate.
Fig.7.1. Relaia OFERTANT
- Redundana logic: Tripletul (,N1, OStr. Victoriei, nr.22/12, Baia Mare,
Maramures, 'Nr1') apare de dou ori.
- Anomalii la inserare: Dac o persoan ofer spre vnzare mai multe imobile,
pentru nregistrarea ofertei trebuie rescris codul numeric personal nc o dat, deci
cheia devine duplicat.
- Anomalii de tergere: Stergerea unei persoane din baza de date atrage dup
sine pierderea informaiilor despre oferta respectiv.
- Anomalii la modificare: Dac se modific numele strzii Victoriei din
localitatea Baia Mare n strada ndependenei, modificarea trebuie efectuat pentru
fiecare ofert din Baia Mare amplasat pe strada Victoriei. Dac ar exista 25 de
oferte n aceast localitate pe strada Victoriei, costul modificrii ar fi mare pentru a
modifica toate nregistrrile. Aceast redundan este eliminat dac atributul
,adresa este mprit n alte trei atribute: ,simbol_judet, ,cod_loc, ,id_strada.
Valorile acestea vor fi codul judeului, localitii, respectiv a strzii preluate din relaiile
)n(Bnu4e!eadresa5 )!ientnr5
te!e'ono'ertaadresa5 i4obi!Cn(1N1Str. ,i)toriei& nr.22K12& #aia
"are& "ara4uresNr1)asa05i4obi!1Cn(1N1Str. ,i)toriei& nr. 4K5&
C!uG@Na(o)a& C!uGNr1a!a05i4obi!2Cn(2N2Str. ,ii!or& nr.55K4&
+radea& #iorNr2)asa05i4obi!3Cn(3N3Str. R>rii& nr. 14& #u)uresti
Nr3teren05i4obi!4
+F/*.0N.-%
deja existente JUDETE, LOCALTAT, respectiv STRAZ. n acest caz, modificarea
se face doar o singur dat, n tabela STRAZ.
No$*a!i&a$"a
Codd a definit iniial 3 forme normale, notate prin FN
1
, FN
2
i FN
3
. ntruct ntr-
o prim formulare, definiia FN
3
ridic ceva probleme, Codd i Boyce au elaborat o
nou variant, cunoscut sub numele de Boyce-Codd Normal Form (BCNF). Astfel
BCNF este reprezentat separat n majoritatea lucrrilor. R. Fagin a tratat cazul FN
4
i FN
5
.
O relaie este ntr-o form normal dac satisface o mulime de constrngeri
specificat n figura 7.2. De exemplu, se spune c o relaie se afl n a doua form
normal FN2 dac i numai dac se afl n FN1.
Fig.7.2. Formele normale ale relaiilor dintr-o BDR

Normalizarea bazei de date relaionale poate fi imaginat ca un proces prin care
pornindu-se de la relaia iniial/universal R se realizeaz descompunerea
succesiv a acesteia n subrelaii, aplicnd operatorul de proiecie. Relaia R poate fi
ulterior reconstruit din cele n relaii obinute n urma normalizrii, prin operaii de
jonciune.
8.1 P$i*a o$*( no$*a!( (-N
1
)
FN
1
este strns legat de noiunea de atomicitate a atributelor unei relaii.
Astfel, aducerea unei relaii n FN
1
presupune introducerea noiunilor de:
- atribut simplu;
- atribut compus;
- grupuri repetitive de atribute.
Atributul simplu5 Atribut compus
Prin atribut simplu (atribut atomic) se nelege un atribut care nu mai poate fi
descompus n alte atribute, n caz contrar, atributul este compus (atribut neatomic).
Exemplu: Urmtoarele exemple de atribute pot fi considerate simple sau compuse n
funcie de circumstane i de obiectivele bazei de date.
- Data calendaristic este un atribut n care apar cmpurile: zi, lun, an;
*e!aCia universa!>
FN1
FN2
FN3
#CFN
FN4
FN5
- Adresa este un atribut n care apar cmpurile: strada, nr, bloc, scara, etaj,
apartament, localitate, jude;
- Data operaiunii bancare este un atribut n care apar cmpurile data, ora;
- Buletin/carte identitate este un atribut n care apar cmpurile: seria, nr.
Aceste atribute pot fi atomice sau neatomice. Astfel adresa clienilor ageniei
imobiliare intereseaz la nivel global, pe cnd pentru adresa ofertei sau a cererii de
imobile este vital prelucrarea separat a fiecrui cmp considerat.
Analog, atributul ,nume reprezent un atribut simplu al acestei baze de date,
deoarece numele clientului intereseaz la nivel global.
Grupuri repetiti1e de atribute
Un grup repetiti1 este un atribut (grup de atribute) dintr-o relaie care apare cu
valori multiple pentru o singur apariie a cheii primare a relaiei nenormalizate.
Exemplu: Fie relaia nenormalizat (primar) FACTUR. Dorim s stabilim o structur
de tabele care s permit stocarea informaiilor coninute n document (factur) i
obinerea unor situaii sintetice privind evidena sumelor facturate pe produse, pe
clinei, pe anumite perioade de timp.
Fig. 7.3. Relaia FACTUR nenormalizat
n cazul n care o factur conine mai multe produse, relaia de mai sus va avea
grupurile repetitive: ,cod_produs, ,denumire_produs, ,cantitate, ,pret_unitar,
,valoare, ,valoare_tva.
Aducerea unei relaii universale la FN
1

FN
1
este tratat n general cu superficialitate, deoarece principala cerin
atomicitatea valorilor este uor de ndeplinit (cel puin la prima vedere).
F0C.9*-
nr5'a)turaB
data5'a)tura
nu4e5)!ient
adresa5)!ient
ban)a5)!ient
nr5)ont5)!ient
de!egat
)od5(rodus
denu4ire5(rodus
unitate5de54asura
)antiate
(ret5unitar
va!oare
va!oare5tva
toa!5va!oare5'a)tura
toa!5va!oare5tva
Dintre toate formele normale, doar FN
1
are caracter de obligativitate. Se spune
c o baz de date este normalizat daca toate relaiile se afl mcar n FN
1
.
6 relaie este n 74
$
dac domeniile pe care sunt definite atributele relaiei
sunt constituite numai din valori atomice. Un tuplu nu trebuie s conin atribute sau
grupuri de atribute repetitive.
Aducerea relaiilor n FN
1
presupune eliminarea atributelor compuse i a celor
repetitive.
Se cunosc trei soluii pentru determinarea grupurilor repetitive:
- eliminarea grupurilor repetitive pe orizontal (n relaia R iniial, n locul
atributelor compuse se trec componentele acestora, ca atribute simple);
- eliminarea grupurilor repetitive prin adugarea de tupluri;
- eliminarea grupurilor repetitive prin construirea de noi relaii
Primele dou metode genereaz relaii stufoase prin duplicarea forat a unor
atribute, respectiv tupluri, crendu-se astfel redundane masive cu multiple anomalii
de actualizare.
Metoda a treia presupune eliminarea grupurilor repetitive prin construirea de
noi relaii, ceea ce genereaz o structur ce ofer cel mai mic volum de redundan.
Etapele de aducere a unei relaii n FN
1
sunt:
. se construiete cte o relaie pentru fiecare grup repetitiv;
. n schema fiecrei noi relaii obinute la pasul 1 se introduce i cheia
primar a relaiei R nenormalizate;
. cheia primar a fiecrei noi relaii va fi compus din atributele chei ale
relaiei R, plus unul sau mai multe atribute proprii.
Exemplu: Deoarece o factur poate avea unul sau mai multe produse nscrise pe
aceasta, informaiile legate de produse vor fi separate ntr-o alt tabel. Aplicnd
etapele de aducere la FN1, se obin dou relaii:
Fig. 7.4. Relaia FACTUR adus n forma normal FN1
Observaia1: Cmpul ,adresa_client curpinde informaii despre judeul, localitatea,
strada i numrul domicililului clientului. Dac se consider c este de interes o
eviden a sumelor factorizate pe judee sau localiti, se vor pune n locul cmpului
,adresa_client trei cmpuri distincte: ,judet_client, ,localitate_client,
,adresa_client, uurnd n acest fel interogrile.
F0C.9*-
nr5'a)turaB
data5'a)tura
nu4e5)!ient
adresa5)!ient
ban)a5)!ient
nr5)ont5)!ient
de!egat
toa!5va!oare5'a)tura
toa!5va!oare5tva
6-N--5F0C.9*-
nr5'a)turaB
)od5(rodusB
denu4ire5(rodus
unitate5de54asura
)antiate
(ret5unitar
va!oare
va!oare5tva
Observaia2: ntre tabela FACTUR i tabela LN_FACTUR exist o relaie de ,unu
la muli, adic unui numr unic de factur i pot corespunde unul sau mai multe
produse care sunt memorate ca nregistrri n tabele LN_FACTUR. Cheia primar
n aceast tabel este o cheie compus, format din dou cmpuri: ,nr_factura i
,cod_produs.
ns eliminarea grupurilor repetitive, adic aducerea unei relaii la FN
1
, nu
rezolv complet problema normalizrii.
8.,. A 'oua o$*( no$*a!( (-N
,
)
FN
2
este strns legat de noiunea de dependen funcional. Noiunea de
dependen funcional a fost prezentat n cursul 5: ,Restricii de integritate ale
modelului relaional.
O relaie se afl n a doua form normal FN2 dac:
1. se afl n forma normal FN1 i
2. fiecare atribut care nu este cheie este dependent de ntreaga cheie primar.
Etapele de aducere a unei relaii de la FN
1
la FN
2
sunt:
. Se identific posibila cheie primar a relaiei aflate n FN1;
. Se identific toate dependenele dintre atributele relaiei, cu excepia acelora
n care sursa este un atribut component al cheii primare;
. Se identific toate dependenele care au ca surs un atribut sau subansamblu
de atribute din cheia primar;
V. Pentru fiecare atribut (sau subansamblu) al cheii de la pasul se creeaz o
relaie care va avea cheia primar atributul (subansamblul) respectiv, iar
celelalte atribute vor fi cele care apar ca destinaie n dependenele de la
etapa .
Exemplu: Relaia care conine date redundante (de exemplu, modificarea denumirii
unui produs atrage dup sine modificarea n fiecare tuplu n care apare acest produs)
este relaia LN_FACTUR. Se observ ca nu exist nici o dependen funcional
ntre atributele necomponente ale cheii. n schimb, toate atributele care nu intr n
alctuirea cheii compuse sunt dependente de aceasta, iar DF dintre atributul
component al cheii primare sunt: cod_produs --> denumire_produs, cod_produs -->
unitate_de_masura. Ca urmare se formeaz nc dou relaii.
Fig. 7.5. Relaia FACTUR n a doua forma normal FN2
6-N--5F0C.9*-
nr5'a)turaB
)od5(rodusB
)antiate
(ret5unitar
va!oare
va!oare5tva
P*+D9S/
)od5(rodusB
denu4ire5(rodus
unitate5de54asura
F0C.9*-
nr5'a)turaB
data5'a)tura
nu4e5)!ient
adresa5)!ient
ban)a5)!ient
nr5)ont5)!ient
de!egat
toa!5va!oare5'a)tura
toa!5va!oare5tva
Chiar dac au fost eliminate o parte din redundane, mai rmn i alte
redundane ce se vor elimina aplicnd alte forme normale.
CURS (. ) treia *orm' normal'
8./. A t$"ia o$*( no$*a!( (-N
/
)
O relaie este n forma normal trei 74( dac:
1. se gsete n FN2 i
2. fiecare atribut care nu este cheie (nu particip la o cheie) depinde direct de cheia
primar.
A treia regul de normalizare cere ca toate cmpurile din tabele s fie
independente ntre ele.
Etapele de aducere a unei relaii de la FN
2
la FN
3
sunt:
. Se identific toate atributele ce nu fac parte din cheia primara i sunt surse ale
unor dependene funcionale;
. Pentru aceste atribute, se construiete cte o relaie n care cheia primar va
fi atributul respectiv, iar celelalte atribute, destinaiile din DF considerate;
. Din relaia de la care s-a pornit se elimin atributele destinaie din DF
identificat la pasul , pstrndu-se atributele surse.
Exemplu: n relaia FACTUR se observ c atributul ,nume_client determin n mod
unic atributele ,adresa_client, ,banca_client i ,nr_cont_client. Deci pentru atributul
,nume_client se construiete o relaie CLENT n care cheia primar va fi acest
atribut, iar celelalte atribute vor fi ,adresa_client, ,banca_client i ,nr_cont_client.
Cmpurile ,valoare i ,valoare_tva depind de cmpurile ,cantitate, ,pret_unitar, i
de un procent fix de TVA. Fiind cmpuri ce se pot calcula n orice moment ele vor fi
eliminate din tabel LN FACTUR deoarece constituie informaie memorat
redundant.
Fig. 8.1. Relaia FACTUR n a treia forma normal FN3
Observaia 1: Aceast a treia form normal mai poate suferi o serie de rafinri
pentru a putea obine o structur performant de tabele ale bazei de date. De
exemplu se observ c ,nume_client este un cmp n care este nscris un text
destul de lung format dintr-o succesiune de litere, semne speciale (punct, virgul,
cratim), spaii, numere. Ordonarea i regsirea informaiilor dup astfel de cmpuri
este lent i mai greoaie dect dup cmpuri numerice. Din acest motiv se poate
6-N--5F0C.9*-
nr5'a)turaB
)od5(rodusB
)antiate
(ret5unitar
P*+D9S/
)od5(rodusB
denu4ire5(rodus
unitate5de54asura
F0C.9*-
nr5'a)turaB
data5'a)tura
nu4e5)!ient
de!egat
toa!5va!oare5'a)tura
toa!5va!oare5tva
C6-/N.-
nu4e5)!ientB
adresa5)!ient
ban)a5)!ient
nr5)ont5)!ient
introduce un nou atribut ,cod_client care s fie numeric i care s fie cheia primar
de identificare a pentru fiecare client.
Observaia 2: O alt observaie care poate fi fcut n legtur cu tabelele aflate n
cea de a treia form normal este aceea c ,total_valoare_factura este un cmp
care ar trebui s conin informaii sintetice obinute prin nsumarea valorii tuturor
ofertelor aflate pe o factur. Este de preferat ca astfel de cmpuri s fie calculate n
rapoarte sau interogri i s nu fie memorate n tabelele bazei de date.
Verificarea aplicrii corecte a procesului de normalizare se realizeaz astfel
nct uniunea acestora s produc relaia iniial, cu alte cuvinte, descompunerea
este fr pierderi.
Celelalte forme normale se ntlnesc mai rar n practic. Aceste forme nu sunt
respectate, n general, pentru c beneficiile de eficien pe care le aduc nu
compenseaz costul i munca de care este nevoie pentru a le respecta.
6-N--5F0C.9*-
nr5'a)turaB
)od5(rodusB
)antiate
(ret5unitar
P*+D9S/
)od5(rodusB
denu4ire5(rodus
unitate5de54asura
F0C.9*-
nr5'a)turaB
data5'a)tura
de!egat
C6-/N.-
)od5)!ientB
nu4e5)!ient
adresa5)!ient
ban)a5)!ient
nr5)ont5)!ient
CAPITOLUL II. S9L (9 sapt.)
CURS +. ,im-a.ul S/,
Noiuni int$o'u.ti6"
Limbajul SQL (Structured 9uery Language) este limbajul utilizat de
majoritatea sistemelor de baze de date relaionale (SGBDR) pentru definirea i
manipularea datelor.
Din punct de vedere istoric ar trebui menionat faptul c limbajul SQL a
fost dezvoltat ntr-un prototip de sistem de gestiune a bazelor de date relaionale
la BM, n 1970. n 1979 corporaia Oracle a introdus prima implementare a
limbajului SQL n varianta comercial. n 1987 nstitutul Naional de Standarde
(ANS) a elaborat standardul limbajului SQL. Ulterior au avut loc mai multe
revizii ale acestui standard.
Majoritatea limbajelor posed un set de instruciuni comun unanim
acceptat de toate marile companii productoare de soft, precum MCROSOFT
sau ORACLE.
Termenii utilizai de limbajul SQL sunt
- tabel (Table) utilizat pentru a desemna o relaie;
- linie (row) utilizat pentru a desemna un tuplu;
- coloan (column) utilizat pentru a desemna un atribut.
Componentele pe care le cuprinde limbajul SQL sunt urmtoarele:
1. componenta de descriere a datelor relaionale (limbajul de descriere a
datelor - LDD),
2. componenta de manipulare a datelor relaionale (limbajul de manipulare a
datelor - LMD),
ambele fiind absolut necesare n gestiunea BD.
Pe lng aceste componente principale, standardul SQL2 mai prevede i
alte componente ale limbajului:
3. controlul tranzaciilor;
4. controlul securitii !i refacerea datelor.
+ontrolul tranzaciilor conine comenzi pentru specificarea tranzaciilor.
Unele implementri adaug comenzilor prevzute n standard i alte comenzi
suplimentare de control al concurenei !i refacerea datelor#
+ontrolul securitii !i refacerea datelor conine comenzi de administrare
a bazei de date pentru definirea utilizatorilor i a drepturilor acestora de acces la
tabele. Aceast component este dependent de SGBD, iar pentru sisteme
performante, administratorul BD este obiectul activitii unei categorii speciale de
utilizatori ai BD administratori ai BD.
52
St$u.tu$a !"1i.a!( a !i*%a4u!ui S9L
Elementele unei instruciuni (statement) sunt:
- cu1intele c)eie (key words), dintre care fac parte comenzile (SELECT,
UPDATE, NSERT etc), operatorii (AND, OR, NOT, LKE), clauzele
(WHERE, SET, VALUES etc);
- identificatorii (identifier) sunt elementele care denumesc tabela, coloana
sau alt obiect BD; SQL face diferena ntre literele mari i mici, deci este
,case-sensitive; identificatorul care conine ghilimele se numete
identificator delimitat;
- constantele (literal) reprezint iruri de caractere (' '), numere ntregi,
numere reale (ex. 3.5; 4. ; .001; 5e2), constanta NULL care simbolizeaz
lipsa de informare, constante de tip logic (1 pentru TRUE i 0 pentru
FALSE);
- caracterele speciale, cum ar fi ; care semnific terminarea comenzilor, .
care semnific virgula zecimal, sau * care simbolizeaz operatorul de
nmulire.
Op"$ato$i S9L
SQL are urmtorii operatori:
operatori aritmetici binari/
+
-
*
% modulo
^ ridicarea la putere
& AND orientat pe bii
| OR orientat pe bii
# XOR orientat pe bii
<< deplasare la stnga
>> deplasare la dreapta
operatori binari de comparaie
<
>
<=
>=
=
<> sau != diferit
operatori aritmetici mari
53
@ valoarea absolut
! factorial
!! factorial, operator postfix
~ NOT orientat pe bii
operatori de comparaie
A BETWEEN min AND max (compar A cu dou valori: min i max)
A N (v
1
,...,v
n
) compar A cu o list de valori
A S NULL
A S NOT NULL
A LKE model_ir
operatori logici
Operatorii logici sunt legai prin cuvintele cheie AND, OR, NOT i
returneaz o valoare logic TRUE, FALSE sau NULL.
operatori relaionali
UNON (reuniune)
NTERSECT (intersecie)
MNUS (diferena).
-un.ii '"init" #n S9L
7uncii agregat
Funciile agregat calculeaz un rezultat din mai multe linii ale unui
tabel (funcii de totalizare):
COUNT (furnizeaz numrul de linii ale unui rezultat);
SUM (execut suma tuturor valorilor dintr-o coloan);
MAX (returneaz valoarea cea mai mare dintr-o coloan);
MN (returneaz valoarea cea mai mic dintr-o coloan);
AVG (calculeaz media valorilor dintr-o coloan).
Aceste funcii vor fi folosite n instruciunea SELECT.
7uncii scalare
Funciile scalare primesc unul sau mai multe argumente i returneaz
valoarea calculat sau NULL n caz de eroare. Argumentele funciilor pot fi
constante sau valori ale atributelor specificate prin numele coloanelor
corespunztoare. Dintre funciile scalare amintim:
funcii numerice
- de calcul trigonometric: sin, cos, tg, ctg etc.
- de calcul al logaritmului: ln, log, lg
54
- de calcul al puterilor: pow
- de rotunjire: floor, ceil etc.
funcii pentru manipularea !irurilor de caractere
funcii pentru data calendaristic
funcii de con1ersie
Tipu$i '" 'at"
n limbajul SQL sunt definite mai multe tipuri de date: numeric, ir de
caractere, ir de bii, data (calendaristic), timp.
Denumirile tipurilor de date precum i limitele acestora difer de la un
SGBD la altul, dar n general, sunt destul de asemntoare.
8ipul numeric include
- numere ntregi: NTEGER sau NT reprezentat pe 4 octei;
SMALLNT reprezentat pe 2 octei;
- numere reale reprezentate n virgul flotant, cu diferite precizii:
FLOAT reprezentat pe 4 octei;
REAL reprezentat pe 8 octei;
DOUBLE [PRECSON] reprezentat pe 8 octei;
- numere zecimale reprezentate cu precizia dorit:
tipul NUMERC sau DECMAL, cu forma numeric9"p,s):,
unde p este numrul total de cifre afiate, iar s este
numrul de cifre dup punctul zecimal.
8ipul !ir de caractere
CHARACTER (n) sau CHAR (n) definesc iruri de caractere cu lungimea fix.
CHARACTER VARYNG sau VARCHAR (n) definete irul de caractere cu
lungimea variabil.
Asemnarea dintre cele dou tipuri prezentate mai sus este aceea c
ambele reprezint iruri de maxim n caractere, iar deosebirea este aceea c
pentru iruri cu numr de caractere mai mic ca n, CHAR (n) completeaz irul cu
spaii albe pn la n caractere, iar VARCHAR (n) memoreaz numai attea
caractere cte are irul dat.
8ipul !iruri de bii
BT (n) definete secvene de cifre binare (care pot lua valoarea 0 sau 1) de
lungime finit n;
BT VARYNG (n) definete secvene de lungime variabil, cu limita maxim n.
8ipuri pentru data calendaristic !i timp
DATE permite memorarea datelor calendaristice n formatul yyyy-mm-dd;
55
TME permite memorarea timpului, folosind trei cmpuri hh:mm:ss;
TMESTAMP(p) permite memorarea combinat a datei calendaristice i a
timpului, cu precizia p pentru cmpul SECOND (al secundelor); valoarea implicit
a lui p este 6;
NTERVAL este utilizat pentru memorarea intervalelor de timp.
Tipurile de date sunt ,case-insensitive, deci nu in cont de caracterele
mari sau mici.
5:
CURS 10. ,im-a.e relaionale de de*inire a datelor 1,223
Limbajul de definire a datelor (a schemei unei BD) include instruciuni ce
permit:
- crearea schemei bazei de date;
- adugarea relaiilor la schema bazei;
- tergerea unor relaii existente;
- adugarea de noi atribute relaiilor existente;
- optimizarea bazei de date (index, grup, declanator);
- definirea structurii fizice i logice a unei BD;
- restricii cu privire la utilizarea structurii de mai sus.
+omenzi pentru crearea unei baze de date
Comanda pentru crearea unei baze de date este
CREATE DATABASE nume_baza;
Exemplu: S se creeze baza de date AGENTA_MOBLARA.
CREATE DATABASE AGENTA_MOBLARA;
Aceast comand creeaz o BD cu numele nume_baza. Nu toate SGBDR
suport noiunea explicit de BD, dei utilizarea unei asemenea noiuni poate
facilita controlul drepturilor de acces la relaiile BD. Sisteme precum DB2 nu
posed noiunea explicit de BD, n timp ce sistemul dBASE o suport.
Creatorul bazei de date devine automat administratorul BD.
+omenzi pentru suprimarea unei baze de date
Comanda pentru suprimarea unei baze de date este
DROP DATABASE nume_baza;
Aceast comand distruge BD cu numele nume_baza.
+omenzi pentru crearea relaiilor de baz
n cadrul acestor comenzi se precizeaz numele relaiei precum i numele
i tipul atributelor.
n SQL, cele mai frecvente tipuri de date sunt:
CHAR pentru ir de caractere de lungime fix;
VARCHAR2 pentru ir de caractere de lungime variabil;
NUMBER pentru numere ntregi sau reale de lungime variabil;
DATE pentru date calendaristice;
LONG pentru texte de lungime variabil
RAW pentru informaie binar de lungime variabil.
Comanda de creare a unei relaii este
57
CERATE TABLE nume_tabela (atribute);
+rearea unei relaii indicnd c)eia la ni1el de coloan
Exemplu: S se creeze relaia JUDETE (simbol_judet, nume_judet).
CREATE TABLE JUDETE
(simbol_judet CHAR(2) PRI:AR; <E;,
nume_judet VARCHAR(30));
+rearea unei relaii indicnd c)eile la ni1el de tabel
Exemplu: S se creeze relaia LOCALTAT (cod_loc, simbol_judet, nume_loc).
CREATE TABLE LOCALTAT
(cod_loc VARCHAR(7),
simbol_judet CHAR (2),
nume_loc VARCHAR (50),
PRI:AR; <E; (cod_loc, simbol_judet),
-OREIGN <E; (simbol_judet)
RE-ERENCES JUDETE(simbol_judet));
Dac cheia primar are mai mult de o coloan atunci cheile trebuie
indicate la nivel de tabel.
+rearea unui tabel prin copiere
Exemplu: S se creeze relaia LOCALTAT_CLUJ (cod_loc, simbol_judet,
nume_loc) utiliznd copierea datelor din relaia LOCALTAT.
CREATE TABLE LOCALTAT_CLUJ
SELECT
cod_loc ,
simbol_judet ,
nume_loc
-RO: LOCALTAT
=>ERE simbol_judet LI<E 'CJ';
+omenzi pentru suprimarea unei relaii de baz
Comanda de suprimarea unei relaii este
DROP TABLE nume_tabela;
Comanda SQL distruge relaia nume_tabela.
+omenzi pentru sc)imbarea numelui unei relaii
Comanda SQL pentru schimbarea numelui unei relaii este
RENAME nume_tabela TO nume_tabela_nou;
5$
Exemplu: S se modifice numele relaiei LOCALTAT_CLUJ n LOC_CJ, apoi s
se suprime relaia LOC_CJ.
RENA:E TABLE LOCALTAT_CLUJ TO LOC_CJ;
DROP TABLE LOC_CJ;
+omenzi pentru modificarea structurii unei relaii
Prin modificarea structurii unei relaii se nelege:
- extinderea schemei relaiei prin adugarea de noi atribute;
- restrngerea schemei unei relaii prin suprimarea unor atribute;
- modificarea numelui i/sau tipului unui atribut din cadrul relaiei.
Unele limbaje relaionale (QBE) admit toate aceste tipuri de modificri n
schema unei relaii, iar altele (SQL sau QUEL) numai o parte.
Comanda de modificare a unei relaii este
ALTER TABLE nume_tabel ...
Adugarea unui atribut cu a.utorul opiunii ADD
Exemplu: S se adauge atributul ,regiunea la relaia LOCALTAT. (Valorile
acestui atribut vor fi: Transilvania, Banat, Oltenia, Muntenia, Moldova,
Dobrogea.)
ALTER TABLE LOCALTAT ADD
(regiunea VARCHAR(10));
;odificarea unui atribut cu a.utorul opiunii ;6DI7<
Exemplu: Presupunnd c relaia FACTUR a fost adugat bazei de date
AGENTA_MOBLARA i c atributul ,pret_unitar este de tip NTEGER, s se
modifice forma preului unitar.
ALTER TABLE FACTUR :ODI-;
pret_unitar DECMAL (10,2) ;
+omenzi pentru declararea restriciilor de integritate "a constrngerilor)
Constrngere este un mecanism care asigur c valorile unei coloane sau
a unei mulimi de coloane satisfac o condiie declarat. Unei constrngeri i se
poate da un nume unic. Dac nu se specific un nume explicit atunci sistemul
automat i atribuie un nume de forma SYS_Cn, unde n reprezint numrul
constrngerii. Constrngerile pot fi terse, pot fi adugate, pot fi activate sau
dezactivate, dar nu pot fi modificate.
Prin comanda CREATE TABLE pot fi specificate anumite restricii
(constrngeri) prin care se exprim o condiie care trebuie respectat de toate
tuplurile uneia sau mai multor relaii. Acestea pot fi definite cu ajutorul comenzii
ALTER TABLE
59
Constrngerile declarative pot fi:
- constrngeri de domeniu, care definesc valorile luate de un atribut:
DEFAULT
NOT NULL
UNQUE
CHECK
- constrngeri de integritate a entitii care precizeaz cheia primar
PRMARY KEY
- constrngeri de integritate referenial care asigur corespondena ntre
cheile primare i cheile externe corespunztoare
FOREGN KEY
Fiecrei restricii i se poate da un nume, lucru util atunci cnd, la un
moment dat (salvri, restaurri, ncrcarea BD) se dorete dezactivarea uneia
sau mai multora dintre acestea. Astfel se prefigureaz numele fiecrei restricii cu
tipul su:
pk_(PRMARY KEY) pentru cheile primare
un_(UNQUE) pentru cheile alternative
nn_(NOT NULL) pentru atributele obligatorii
ck_(CHECK) pentru reguli de validare la nivel de atribut
fk_(FOREGN KEY) pentru cheile strine.
Exemplu: S se realizeze constrngerea de cheie primar, de cheie extern i
constrngerea de domeniu pentru relaia DESCRERE_MOBL.
CREATE TABLE DESCRERE_MOBL
(id_co SMALLNT (7) NOT NULL,
CONSTRAINT -OREIGN <E; fk_co(id_co)
RE-ERENCES CERER_OFERTE(id_co),
CONSTRAINT pk_co PRI:AR; <E; (id_co)?
tip_imobil VARCHAR(10),
etaj VARCHAR(10),
nr_camere SMALLNT (6),
suprafata DECMAL (12,4),
garaj TNYNT (4),
centrala_termica TNYNT (4),
termopane TNYNT (4));

Observaia 1: Liniile ce nu respect constrngerea sunt depuse automat
ntr-un tabel special.
Observaia 2: Constrngerile previn tergerea unui tabel dac exist
dependene. (vezi cursul ,Stergerea datelor)
Observaia 3: Constrngerile pot fi activate sau dezactivate n funcie de
necesiti.
Observaia 4: Constrngerile pot fi create o dat cu tabelul sau dup ce
acesta a fost creat.
;odificarea unei restricii de integritate
:0
Comanda de modificare a unei restricii este
ALTER TABLE nume_tabela MODFY (nume_atribut
TP_CONSTRNGERE);
Exemplu: S se modifice una din constrngerile din exemplul de mai sus.
ALTER TABLE DESCRERE_MOBL :ODI-;
tip_imobil VARCHAR (10) NOT NULL ;
Acti1area !i=sau dezacti1area unei constrngeri
Activarea sau dezactivarea unei constrngeri se realizeaz cu ajutorul
opiunilor ENABLE sau DSABLE.
Exemplu: S se dezactiveze, apoi s se activeze constrngerea de cheie
primar din relaia DESCRERE_OFERTA.
ALTER TABLE DESCRERE_MOBL ADD
(CONSTRANT id_co PRMARY KEY (id_co)
DISABLE);
ALTER TABLE DESCRERE_MOBL
ENABLE (CONSTRANT id_co);
Suprimarea unei constrngeri cu a.utorul opiunii D*6P
Comanda pentru suprimarea unei restricii este
ALTER TABLE nume_tabela DROP PRMARY KEY;
Exemplu: S se suprime restricia de cheie primar pentru atributul ,nr_factura
din tabela FACTUR.
ALTER TABLE FACTUR DROP PRI:AR; <E;;
Adugarea unei constrngeri cu a.utorul opiunii ADD
Comanda pentru adugarea unei restricii este
ALTER TABLE nume_tabela ADD CONSTRANT ...;
Exemplu: S se adauge restricia de cheie primar ,nr_factura pentru relaia
FACTUR.
ALTER TABLE FACTUR ADD CONSTRAINT
pk_nr_factura PRMARY KEY (nr_factura);
Observaia 1: Astfel, comanda ALTER TABLE realizeaz modificarea
structurii tabelului (la nivel de coloan sau la nivel de tabel), dar nu modificarea
coninutului acestuia.
:1
Observaia 2: Constrngerile pot fi adugate (ADD CONSTRANT), terse
(DROP CONSTRANT), activate (ENABLE) sau dezactivate (DSABLE), dar nu
pot fi modificate.
Observaia 3: Dac exist o cheie extern care refer o cheie primar i
dac se ncearc tergerea cheii primare, aceast tergere nu se poate realiza
(tabelele sunt legate prin declaraia de cheie extern). Stergerea este totui
permis dac n comanda ALTER apare opiunea CASCADE, care determin i
tergerea cheilor externe ce refer cheia primar urmrind sintaxa
ALTER TABLE Nume_tabela
DROP PRMARY KEY CASACDE;
Ex
+omenzi pentru acordarea drepturilor de acces la baza de date
La nivel logic, limbajele relaionale ofer comenzi pentru acordarea
drepturilor de acces la baza de date. Accesul unor persoane la BD se poate
realiza doar n condiiile recunoaterii acestora de ctre sistem drept utilizatori
autorizai.
Creatorul unei relaii primete n mod automat toate privilegiile de operare
asupra acestei relaii:
- cutri de date n relaie
- actualizri ale datelor n relaie
- actualizri ale schemei relaiei
- ataarea unor restricii de integritate
- suprimarea relaiei.
Poate acorda, la rndul su, privilegii asupra relaiei i altor utilizatori n
funcie de sistem:
- sistem centralizat (NGRES) n cadrul cruia singurul care poate acorda
drepturi de acces la BD este administratorul bazei de date, funcia de
administrator neputnd fi delegat altor persoane;
- sistem descentralizat (DBz, SABRNA, ORACLE) n cadrul cruia
administratorul poate da drepturi de acces la BD, dar, n acelai timp, putnd
delega i alte persoane s fie administratori.
Comanda n SQL de acordare a drepturilor utilizatorilor este
GRANT SELECT, UPDATE ,... ON nume_tabela TO
nume_utilizator;
Exemplu: S se confere utilizatorului cu numele Zita i cu parola BDZ dreptul de
conectare la BD, precum i unele drepturi de acces la una dintre tabelele bazei
de date.
GRANT SELECT, UPDATE ON DESCRERE_MOBL TO
Zita IDENTI-IED B; 'BDZ';
+omenzi pentru retragerea drepturilor de acces la baza de date
Comanda SQL pentru retragerea drepturilor de acces la BD este
:2
REVOKE UPDATE ON nume_tabela FROM nume_utilizator;
Exemplu: S se retrag drepturile utilizatorului Zita de actualizare a datelor.
RE@O<E UPDATE ON DESCRERE_MOBL -RO: Zita;
:3
CURS 11. ,im-a.e relaionale de manipulare a datelor 1,423 -
5nterogarea datelor
Limbajele de manipulare a datelor trebuie s ofere o serie de faciliti
pentru prelucrarea datelor din relaiile bazei de date i anume:
- interogri
- inserri
- modificri
- tergere.
1. 5nterogarea datelor
nterogarea bazei de date reprezint principala funcie a unui limbaj
relaional de manipulare a datelor.
Comanda fundamental a standardului SQL este SELECT, aceasta
permind interogarea unei baze de date.
Interogarea reprezint o ntrebare care i extrage rspunsul din baza de
date. Componentele interogrii se numesc clause.
Sintaxa general a comenzii SELECT este urmtoarea:
SELECT [ALL/DSTNCT/UNQUE] list de selecie
FROM list de relaii (tabele)
WHERE condiie de cutare asupra liniilor
GROUP BY list de atribute care permit partiionarea
HAVNG condiie asupra partiiilor
ORDER BY list de atribute;
Clauzele SELECT i FROM sunt obligatorii. SELECT specific datele care
se selecteaz, iar clauza FROM specific relaiile din care se selecteaz. Restul
clauzelor sunt opionale.
Exemplul 1: S se selecteze toate persoanele mpreun cu toate datele
personale ale acestora existente n baza de date.
SELECT * -RO: DATE_PERSOANA;
Exemplul 2: S se selecteze toate ofertele/cererile nregistrate n data de 2006-
07-03.
SELECT * -RO: CERER_OFERTE
=>ERE data_inreg='2006-07-03';
Interogarea datelor folosind operatorii IS !i IS 468
Exemplu: S se selecteze numele tuturor persoanelor care nu au completat
adresa de email, apoi s se afieze numele tuturor persoanelor care au numrul
de telefon completat.
SELECT numele FROM DATE_PERSOANA
WHERE email IS NULL;
SELECT numele FROM DATE_PERSOANA
:4
WHERE nr_telefon IS NOT NULL;
Interogarea datelor folosind operatorii logici A4D, 6*, 468
Sintaxa pentru interogarea care utilizeaz un operator logic este
condiie 1 AND condiie 2;
condiie1 OR condiie 2;
NOT condiie;
Exemplu: S se determine numrul facturii i codul numeric personal pentru
ofertele soluionate dup date de 2006-05-01 i cu un pre final mai mare sau
egal ca 100.000.
SELECT cnp,nr_factura FROM FACTUR
WHERE data_factura='2006-08-01' AND total>='100000';
Interogarea datelor folosind operatorul I4
Sintaxa este
SELECT valoare_cmp N (valoare1, valoare2,...);
Aceast sintax a operatorului N este similar cu urmtoarea list de
disjuncii:
Valoare_cmp=valoare1 OR valoare_cmp=valoare2 OR ...;
Exemplu: S se selecteze numrul facturii, id-ul cererii/ofertei, data facturii,
valoarea total a facturii, valoarea TVA i codul numeric personal pentru
cererile/ofertele soluionate cu valoarea total de 70.000,80.000, 90.000.
SELECT * FROM FACTUR
WHERE total IN (119000.00,178500.00,90000);
Interogarea datelor folosind sinta0a DIS8I4+8
Pentru a selecta seturi de valori distincte, adic eliminarea valorilor
duplicat, n SQL se folosete sintaxa DSTNCT, micornd astfel setul de date.
Sintaxa acestei comenzi este
SELECT DSTNCT nume_cmp1, nume_cmp2,... FROM
nume_tabela
WHERE comenzi;
sau
SELECT DSTNCT * FROM nume_tabela;
Sintaxa DSTNCT se refer la o nregistrare care poate cuprinde unul sau
mai multe cmpuri.
Exemplu: S se afieze toate datele distincte n care s-au nregistrat cereri sau
oferte.
SELECT DISTINCT data_inreg FROM CERER_OFERTE;
:5
Interogarea datelor folosind operatorul >I?@
Se cunosc mai multe modaliti de utilizare a expresiei LKE, i anume:
- pentru o expresie care ncepe cu o anumit liter, de exemplu litera 'A':
LKE 'A%';
- pentru o expresie care se termin cu o anumit liter, de exemplu litera
'A': LKE '%A';
- pentru o expresie care include o anumit liter, de exemplu litera 'A': LKE
'%A%';
Exemplu: S se selecteze numele, adresa i emailul tuturor persoanelor feminine
care au adres de email pe yahoo sau personal.
SELECT numele, adresa, email FROM DATE_PERSOANA
WHERE adresa LI<E '%BAA MARE%' AND (email LKE
'%yahoo%' OR email LKE '%personal%');
Interogarea datelor folosind operatorul B@8A@@4
Operatorul se utilizeaz n combinaie cu dou valori ntre care se afl
valoarea la care se refer operatorul. Sintaxa este
val BETWEEN minim AND maxim;
sau
val>=min AND val<=max;
Cele trei expresii val, min, max pot fi de tip numeric (numeric, decimal, int,
smalint etc.) sau de tip dat calendaristic.
Exemplu: S se selecteze codurile tuturor cererilor/ofertelor nregistrate n
perioada 1 ianuarie 2006 i 1 mai 20006.
SELECT id_co FROM CERER_OFERTE
WHERE data_inreg BET=EEN '2006-01-01' AND '2006-05-
01';
Interogarea datelor folosind funciile calendaristice <@A*, DA<, ;648B
Funciile YEAR, DAY, MONTH rein dintr-un cmp de tip dat
calendaristic anul, ziua, respectiv luna.
Exemplu: S se vizualizeze codurile tuturor cererilor/ofertelor nregistrate n luna
mai.
SELECT id_co FROM CERER_OFERTE
WHERE :ONT>(data_inreg)=05;
Interogarea datelor folosind ordonarea
Datele se pot ordona dup orice cmp. Ordonarea se poate face att
cresctor ct i descresctor. Sintaxa pentru interogarea
::
- ordonat cresctor este
ORDER BY nume_cmp (ASC);
- ordonat descresctor este
ORDER BY nume_cmp (DESC);
Dac ORDER BY nu este urmat de ASC sau DESC, ordonarea se face
implicit cresctor.
Exemplu: S se vizualizeze lista persoanelor n ordine alfabetic.
SELECT numele FROM DATE_PERSOANA
ORDER B; numele;
Interogarea datelor din mai multe tabele
nterogarea datelor din mai multe relaii este strns legat de noiunea de
cheie primar, cheie secundar, restricii de integritate, asocieri ntre relaii.
Exemplu: S se afieze ofertele i denumirile oraelor corespunztoare ofertelor.
SELECT id_co, nume_loc
FROM CERER_OFERTE, LOCALTAT
WHERE CERER_OFERTE.tipul='oferta' AND
CERER_OFERTE.cod_loc=LOCALTAT.cod_loc;
Observaii: Clauza FROM specific dou relaii. Clauza SELECT cuprinde valori
din relaia CERER_OFERTE i din relaia LOCALTAT, prin urmare trebuie
definite cmpurile n funcie de tabela din care face parte. Se utilizeaz sintaxa
nume_tabel.nume_cmp
Clauza WHERE include condiii care exprim o egalitate ntre valorile
identificatorului nume_cmp a relaiei nume_tabel i a celei ale referinei la acest
identificator n tabela referit.
:7
CURS 12. ,im-a.e relaionale de manipulare a datelor 1,423 -
5nterogarea datelor din mai multe relaii
Atunci cnd n clauza FROM a unei comenzi SELECT apar mai multe tabele
se realizeaz produsul cartezian al acestora. De aceea numrul de linii rezultat
crete considerabil, fiind necesar restricionarea acestora cu o clauza WHERE.
Atunci cnd este necesar obinerea de informaii din mai multe tabele se
utilizeaz condiii de .oin. n acest fel liniile dintr-un tabel pot fi puse n legtura cu
cele din alt tabel conform valorilor comune ale unor coloane. Condiiile de corelare
utilizeaz de obicei coloanele cheie primar i cheie extern.
Tipu$i '" aso.i"$i p"nt$u $"!aii
Rolul unei relaii fiind acela de a modela entiti, ntre relaii exist aceleai
tipuri de asocieri ca i ntre entiti, prezentate la nceputul cursului, i anume
asocieri unu la unu, unu la mai muli, muli la mai muli.
Asocieri de la unu la unu
Dou relaii stocheaz informaii n asocierea unu la unu dac unei nregistrri
din relaia A i corespunde (sau nu) o singur nregistrare din B.
Acest tip de asociere este utilizat mai rar. Exist, totui, cazuri n care este
necesar i util stabilirea unei astfel de relaii.
Exemplu:
Fig. 12.1. Asociere de tip 1:1
Asocieri de la unu la mai muli
O relaie A se afl ntr-o asociere de unu la mai muli cu o relaie B dac
fiecrei nregistrri din A i corespund una sau mai multe nregistrri din relaia B.
Unei nregistrri din relaia B nu i corespunde dect maxim o nregistrare din relaia
A.
Sunt utilizate urmtoarele denumiri:
B este relaia copil sau relaia care refer la A sau relaia c)eie strin;
A este relaia printe (master) sau relaia referit sau relaia c)eie primar.
C/*/*-5+F/*./
id5)o B
ti(
)n(
data5inreg
ti(5so!utionare
)od5!o)
id5strada
nr5i4obi!
(ret54in
(ret54aE
1%1 D/SC*-/*/5-"+# -6
id5)oB
ti(5i4obi!
etaG
nr5)a4ere
su(ra'ata
garaG
)entra!a5ter4i)a
ter4o(ane
:$
Exemplu:
Fig. 12.2. Asociere de tip 1:n
Observaie: Relaia A are cheia primar ,simbol_judet, iar relaia B are atributul
,simbol_judet cheie extern.
Asocieri de la mai muli la mai muli
O relaie A se afl n asociere de tipul muli la mai muli cu o relaie B dac
unei nregistrri din relaia A i pot corespunde mai multe nregistrri din relaia B i
unei nregistrri din relaia B i pot corespunde mai multe nregistrri din relaia A.
O asociere n la n nu se definete direct, asocierea construindu-se cu ajutorul
unei relaii de .onciune. n aceast relaie se pstreaz legtura ntre cele dou
relaii, precum i informaiile necesare.
Exemplu:
Fig. 12.3. Asociere de tip n:n
Observaie: n exemplul de mai sus, relaia LOCALTAT realizeaz jonciunea ntre
relaiile JUDETE i STRAZ, stocnd informaiile privind numele judeului
,nume_judet, simbolul judeului ,simbol_judet i identificatorul localitii ,cod_loc.
Astfel, asocierea n la n este vizualizat sub forma a dou relaii de unu la n.
Interogarea datelor din mai multe relaii folosind aliasuri
Un alias este o redenumire fie a unui cUmp, fie a unei relaii. Aliasurile sunt
utilizate la eliminarea rescrierii complete a denumirii unei relaii sau a unui cmp,
redenumindu-le ntr-un mod simplificat. Sintaxa utilizat este:
nume_relaie/camp AS nume_nou;
sau
nume_relaie/camp nume_nou;
Exist posibilitatea de a utiliza aliasuri pentru tabelele din clauza FROM i
utilizarea lor n cadrul comenzii SELECT respective (alias.coloana). Aceast
89D/./
si4bo!5GudetB
nu4e5Gudet
6+C06-.0.-
)od5!o)B
si4bo!5Gudet
nu4e5Gudet
1%n
0
89D/./
si4bo!5GudetB
nu4e5Gudet
6+C06-.0.-
)od5!o)B
si4bo!5Gudet
nu4e5Gudet
1%n
0
S.*07-
id5stradaB
)od5!o)B
nu4e5str
1%n
C
#
#
:9
identificare (prin 'tabel.coloana' sau 'alias.coloana') este obligatorie atunci cnd se
face referin la o coloana ce apare n mai mult de un tabel din clauza FROM.
Exemplul 1: S se determine toate ofertele de apartamente din oraul Baia Mare, de
pe strada Victoriei.
SELECT CO.id_co, L.nume_loc, S.nume_str, CO.nr_imobil,
D.etaj, D.nr_camere, D.garaj, D.suprafata,
D.centrala_termica, D.termopane, D.tip_imobil, CO.pret_min,
CO.pret_max
FROM CERER_OFERTE AS CO, LOCALTAT AS L, STRAZ
AS S, DESCRERE_MOBL AS D
WHERE CO.tipul='oferta' AND CO.id_co=D.id_co AND
CO.cod_loc=L.cod_loc AND CO.id_strada=S.id_strada AND
CO.cod_loc=S.cod_loc AND L.cod_loc='MM430' AND
S.id_strada='152' AND D.tip_imobil='apartament';
Lista afiat n urma acestei interogri poate fi de genul:
Fig. 12.4. Lista apartamentelor din Baia Mare, de pe strada Victoriei
Exemplul 2: S se afieze toate cererile nesoluionate de terenuri din localitatea
Bora, data nregistrrii, precum i datele personale ale clienilor.
SELECT CO.id_co, CO.tipul, CO.cnp, CO.data_inreg,
CO.tip_solutionare, CO.cod_loc, DP.numele,
DP.adresa, DP.nr_telefon, DP.email, D.tip_imobil
FROM CERER_OFERTE CO, DATE_PERSOANA DP,
DESCRERE_MOBL D
WHERE CO.tipul='cerere' AND CO.cnp=DP.cnp
AND cod_loc='MM435'
AND CO.tip_solutionare='0'
AND CO.id_co = D.id_co
AND D.tip_imobil LKE 'teren';
Observaie: n cazul n care un atribut apare doar ntr-o relaie dintre cele menionate
n list, nu este obligatorie precizarea relaiei (adic a aliasului) din care face parte
atributul respectiv, dup cum este ,cod_loc='MM435'.
Interogarea datelor din mai multe relaii folosind tipuri de asocieri
Tipurile de asocieri utilizate n interogarea mai multor relaii sunt:
- NNER JON (jonciunea intern)
- LEFT OUTER JON (semijonciunea la stnga)
- RGHT OUTER JON (semijonciunea la dreapta)
a) Sinta0a
SELECT ...FROM tabel_A I44@* ,6I4 tabel_B (condiii de join)
selecteaz toate informaiile din relaiile A i B care corespund condiiilor de asociere.
70
Exemplul 1: Selectai codul ofertei/cererilor i codul localitilor fiecrei oferte folosind
operaia de join, apoi utiliznd clauza WHERE.
SELECT CO.id_co, CO.cod_loc
FROM CERER_OFERTE CO INNER AOIN LOCALTAT L
ON (CO.cod_loc=L.cod_loc);
SELECT CO.id_co, CO.cod_loc
FROM CERER_OFERTE CO, LOCALTAT L
=>ERE CO. cod_loc=L.cod_loc;
Observaie: Rezultatul este acelai. Valorile NULL vor fi ignorate.
Exemplul 2: Selectai numele persoanelor care ofer imobile, codul ofertelor, precum
i denumirile localitilor, ordonnd alfabetic localitile.
SELECT DP.numele, CO.id_co, L.nume_loc
FROM DATE_PERSOANA DP
INNER AOIN CERER_OFERTE CO ON (DP.cnp=CO.cnp)
INNER AOIN LOCALTAT L ON (CO.cod_loc=L.cod_loc)
WHERE CO.tipul LKE 'oferta'
ORDER BY L.nume_loc;
SELECT DP.numele, CO.id_co, L.nume_loc
FROM DATE_PERSOANA DP? CERERi_OFERTE CO,
LOCALTAT L
=>ERE CO.tipul LKE 'oferta'
AND DP.cnp=CO.cnp
AND CO.cod_loc=L.cod_loc
ORDER BY L.nume_loc;
Observaie: Sintaxei SELECT-FROM-NNER JON i se pot aduga i alte condiii,
neincluse n condiiile de join, dac acestea se refer la alte cmpuri dect cele care
particip la join.
Exemplul 3: Selectai numele persoanelor care ofer imobile n judeul Maramure,
codul ofertelor, tipul acestora, precum i denumirile localitilor i a strzilor,
ordonnd alfabetic localitile i strzile.
1) Folosind NNER JON
SELECT DP.numele, CO.id_co, S.nume_str, D.tip_imobil,
L.nume_loc
FROM DATE_PERSOANA DP NNER JON
CERER_OFERTE CO ON (DP.cnp=CO.cnp)
INNER AOIN STRAZ S ON (CO.id_strada=S.id_strada )
INNER AOIN LOCALTAT L ON (CO.cod_loc=L.cod_loc
AND L.cod_loc LKE 'MM%')
INNER AOIN DESCRERE_MOBL D ON
(CO.id_co=D.id_co AND CO.tipul='oferta')
ORDER BY L.nume_loc, S.nume_str;
Observaie: Toate condiiile ce se refer la cmpurile din join se vor prezenta n
cadrul condiiilor de join.
71
2) Folosind WHERE
SELECT DP.numele, CO.id_co, S.nume_str, D.tip_imobil,
L.nume_loc
FROM DATE_PERSOANA DP, CERER_OFERTE CO,
STRAZ S, LOCALTAT L, DESCRERE_MOBL D
=>ERE CO.tipul='oferta' AND
DP.cnp=CO.cnp AND
CO.id_strada=S.id_strada AND
CO.cod_loc=L.cod_loc AND
CO.id_co=D.id_co AND
L.cod_loc LKE 'MM%'
ORDER BY L.nume_loc, S.nume_str;
3) Folosind NNER JON i WHERE
SELECT DP.numele, CO.id_co, S.nume_str, D.tip_imobil,
L.nume_loc
FROM DATE_PERSOANA DP NNER JON
CERER_OFERTE CO ON (DP.cnp=CO.cnp)
NNER JON STRAZ S ON (CO.id_strada=S.id_strada )
NNER JON LOCALTAT L ON (CO.cod_loc=L.cod_loc )
NNER JON DESCRERE_MOBL D ON
(CO.id_co=D.id_oferta)
WHERE L.cod_loc LKE 'MM%' AND CO.tipul='oferta'
ORDER BY L.nume_loc, S.nume_str;
b) Sinta0a
SELECT ...FROM tabel_A >@78 6C8@* ,6I4 tabel_B ON
(condiii de join)
selecteaz toate informaiile din A, pe care le completeaz cu informaii din B, n
msura n care satisfac condiiile de join; acolo unde nu vor exista informaii din B,
acestea vor fi completate cu NULL.
Exemplul1: Selectai toate ofertele. Dac exist informaii despre aceste oferte,
afiai i aceste informaii.
SELECT *
FROM CERER_OFERTE CO LEFT OUTER JON
DESCRERE_MOBL D ON (CO.id_co=D.id_co )
WHERE CO.tipul='oferta';
Observaie: Ordinea n care se scrie denumirea relaiei n sintaxa LEFT OUTER
JON este foarte important. Astfel, relaia din stnga este relaia primar, adic
relaia pentru care se dorete returnarea tuturor informaiilor; relaia din dreapta este
relaia secundar, adic informaiile din ea sunt necesare doar n msura n care se
potrivesc condiiilor de asociere. Astfel se explic i denumirea de asociere de la
stnga spre e0terior.
Exemplul2: Selectai toate ofertele, preciznd i numele judeelor, localitilor precum
i a strzilor. Dac exist informaii despre aceste oferte, afiai i aceste informaii.
SELECT L.nume_loc, CO.*, S.nume_str, D.tip_imobil,
72
D.nr_camere, D.suprafata, D.garaj,
D.centrala_termica, D.termopane
FROM CERER_OFERTE CO LEFT OUTER JON
DESCRERE_MOBL D ON(D.id_co=CO.id_co)
NNER JON STRAZ S ON S.id_strada = CO.id_strada AND
CO.cod_loc=S.cod_loc
NNER JON LOCALTAT L ON CO.cod_loc = L.cod_loc
WHERE CO.tipul LKE 'oferta';
c) Sinta0a
SELECT ...FROM tabel_A *IGB8 6C8@* ,6I4 tabel_B ON
(condiii de join)
selecteaz toate informaiile din B, pe care le completeaz cu informaii din A, n
msura n care satisfac condiiile de join; acolo unde nu vor exista informaii din A,
acestea vor fi completate cu NULL.
Exemplu: Selectai toate localitile i, n localitile n care exist cereri
nesoluionate, afiai numele clienilor i tipul de cerere de imobil respectiv.
SELECT L.nume_loc, DP.numele, CO.tip_solutionare,
D.tip_imobil
FROM LOCALTAT L RIG>T OUTER AOIN CERER_OFERTE
CO ON (L.cod_loc=CO.cod_loc)
NNER JON DATE_PERSOANA DP ON (DP.cnp=CO.cnp)
NNER JON DESCRERE_MOBL D ON
(CO.id_co=D.id_co AND CO.tipul = 'cerere')
WHERE CO.tip_solutionare=0;
Observaie: Sintaxa RGHT OUTER JON este utilizat mai rar; de obicei se
utilizeaz sintaxa LEFT OUTER JON.
73
CURS 13. ,im-a.e relaionale de manipulare a datelor 1,423 -
5nterogarea datelor din mai multe relaii 1continuare3
Interogarea datelor din mai multe relaii folosind instruciunea C4I64
Sintaxa interogrii datelor din mai multe relaii folosind instruciunea UNON
este
SELECT Cmp 1, Cmp 2, ..., Cmp n
FROM Tabel 1
UNON (ALL)
SELECT Cmp 1A, Cmp 2A,..., Cmp nA
FROM Tabel 2
i returneaz nregistrri distincte, dac este folosit instruciunea UNON i toate
nregistrrile, dac se folosete UNON ALL. Astfel operatorul UNON elimin
duplicatele, iar UNON ALL vizualizeaz toate nregistrrile, inclusiv duplicatele.
Pentru a utiliza aceast interogare, trebuie s se in seama de dou cerine:
domeniile Cmp 1A, Cmp 2A,..., Cmp nA i Cmap 1, Cmp 2, ..., Cmp n trebuie
s fie respectiv aceleai i, numrul de cmpuri din fiecare interogare trebuie s
coincid.
Operatorul UNON se folosete atunci cnd ntre relaii nu exist o asociere
direct.
Exemplul 1: Pentru exemplificare se vor considera relaiile: PROFESOR (prof_id,
nume, prenume), respectiv STUDENT (stud_id, nume, prenume). Selectai lista
numelor tuturor profesorilor i a studenilor.
SELECT nume, prenume FROM PROFESOR
UNON ALL
SELECT nume, prenume FROM STUDENT;
Rezultatul generat de interogare va fi
Fig. 13.1. nterogarea mai multor relaii folosind operatorul UNON ALL
Observai: Problema mai poate fi soluionat utiliznd alte interogri, dar acestea
rmn ca exerciii individuale.
Exemplul 2: S se determine care sunt ofertele i cererile soluionate prin facturi,
afind ntr-o list id_ul cererii/ofertei i cnp-ul cleintului, att din tabela
CERER_OFERTE ct i din tabela FACTUR.
SELECT cnp, id_co FROM FACTUR
UNION ALL
SELECT cnp, id_co FROM CERER_OFERTE;
Rezultatul generat de interogare va fi o lista greu de urmrit, dup cum este i cea
din figura 13.1, deoarece nu se specific clar care inregistrare corespunde facturilor,
i care tabelei CERER_OFERTE (acest neajuns va fi nlturat utiliznd
concatenarea):
numeprenumeP+P,0S
-6/-+N0N0
74
Fig. 13.2. nterogarea mai multor relaii folosind operatorul UNON ALL (cazul neclar)
Interogarea datelor mai multor relaii folosind operatorul de concatenare a
dou !iruri de caractere
Rolul operatorului de concatenare a dou iruri de caractere este de a uni
dou iruri de caractere ntr-unul singur. Este utilizat n toate SGBD-urile, cu mici
modificri ale simbolului: n Tranzact SQL se folosete simbolul ,+', n Oracle simbolul
,||' etc.
Se pot concatena o constant cu un cmp, sau dou cmpuri. Cmpurile
trebuie s fie de tip text.
Sintaxa pentru concatenarea a dou cmpuri este
CONCAT(Cmp1, Cmp2)
sau insernd virgula, spaiu sau oricare marcaj de delimitare
CONCAT(Cmp1,',', Cmp2) sau CONCAT (Cmp1,' ', Cmp2).
Sintaxa
CONCAT('Ceva', Cmp)
concateneaz cmpul i valoarea returnnd o singur valoare.
Sintaxa
CONCAT('Ceva1', 'Ceva1')
concateneaz cele dou constante ntr-una singur 'Ceva1Ceva2'.
Exemplu: S se determine care sunt ofertele i cererile soluionate prin facturi,
afind ntr-o list id_ul cererii/ofertei i cnp-ul cleintului, att din tabela
75
CERER_OFERTE ct i din tabela FACTUR. De aceast dat, s se precizeze
cnd este vorba de facturi, respectiv cnd este vorba de cerere sau ofert.
SELECT CONCAT('F:', ' ', 'cnp;',cnp,' ', 'id_co:',id_co,' ','data:',
data_factura) AS feacturi_si_oferte_cereri
FROM FACTUR
UNON
SELECT CONCAT('C_O:',' ', 'cnp;',cnp,' ', 'id_co:',id_co,'
','data:', data_inreg) FROM CERER_OFERTE;
Rezultatul generat de interogare va fi
Fig. 13.3. nterogarea mai multor relaii folosind concatenarea (cazul mai clar)
Observaie: Concatenarea prezint dezavantajul afirii cmpurilor null.
Interogarea datelor folosind funciile totalizatoare
- MAX
- MN
- COUNT
- SUM
- AVG
a) Interogarea datelor folosind funcia ;AD
7:
Sintaxa
MAX(Nume_cmp) FROM Tabela
returneaz un numr egal cu valoarea maxim a cmpului Nume_cmp din relaia
Tabela, valorile null fiind ignorate.
Exemplu: Selectai cea mai recent nregistrare din tabela CERER_OFERTE, fr a
da un nume rezultatului, apoi cu nume pentru cmpul rezultat.
SELECT :AB(data_inreg) FROM CERER_OFERTE;
SELECT :AB(data_inreg) AS data_ultimei_nregistrari FROM
CERER_OFERTE;
b) Interogarea datelor folosind funcia ;I4
Funcia MN este o funcie similar cu funcia MAX, cu ajutorul creia se poate
determina valoarea cea mai mic dintr-un cmp.
Att funcia MN ct i funcia MAX se poate aplica doar pentru tipurile de date
numeric sau dat calendaristic.
c) Interogarea datelor folosind funcia +6C48
Sintaxa
COUNT (*) FROM Nume_tabela
returneaz un numr egal cu numrul de nregistrri ale tabelei Nume_tabela.
Exemplu: Precizai numrul de oferte nregistrare.
SELECT COUNT(C) AS numar_de_oferte
FROM CERER_OFERTE
WHERE tipul LKE 'oferta';
Sintaxa
COUNT (Nume_cmp) FROM Tabela
returneaz un numr egal cu numrul de valori nenule ale cmpului Nume_cmp din
tabela Nume_tabela. Sunt ignorate valorile null.
Exemplu: Precizai numrul de cereri nesoluionate.
SELECT COUNT(tip_solutionare) AS cereri_solutionate
FROM CERER_OFERTE
WHERE tip_solutionare=1 AND
tipul='cerere';
Sintaxa
COUNT(DSTNCT Nume_cmp) FROM Tabela
returneaz un numr egal cu numrul de valori distincte nenule ale cmpului
Nume_cmp din tabela Nume_tabela. Sunt ignorate valorile null.
Exemplu: Precizai numrul de localiti din care provin ofertele.
SELECT COUNT(DISTINCT cod_loc) FROM CERER_OFERTE
WHERE tipul='oferta';
77
d) Interogarea datelor folosind funcia SC;
Sintaxa
SUM (Nume_cmp) FROM Tabela
returneaz un numr egal cu suma tuturor valorilor cmpului Nume_cmp din relaia
Nume_Tabela. Sunt ignorate valorile null.
Exemplu: Precizai suma tuturor ncasrilor existente pe facturile emise.
SELECT SU:(DISTINCT total) FROM FACTUR;
Sintaxa
SUM (DSTNCT Nume_cmp) FROM Tabela
returneaz un numr egal cu suma valorilor distincte ale cmpului Nume_cmp din
relaia Nume_Tabela.
Funcia SUM se aplic acelor cmpuri care au domeniul de valori de tipul
FLOAT, DECMAL, NUMERC, NT etc. i nu are sene pentru cmpuri de tip text.
e) Interogarea datelor folosind funcia AEG
Sintaxa
AVG (nume_cmp) FROM Nume_tabela
returneaz un numr egal cu media aritmetic a tuturor valorilor cmpului
Nume_cmp din relaia Nume_tabela. Valorile null sunt ignorate.
Funcia AVG se utilizeaz doar pentru date de tip numeric: NT, FLOAT,
NUMERC.
Exemplu: Selectai media valorilor vnzrilor din agenia imobiliar.
SELECT A@G (total) FROM FACTUR;
Interogarea datelor folosind instruciunea G*6CP B<
Prin instruciunea GROUP BY se grupeaz datele dup fiecare produs n
parte.
Exemplu: Selectai fiecare tip de imobil n parte grupndu-le alfabetic i precizai
numrul de imobile vndute din fiecare tip.
SELECT D.tip_imobil, COUNT(F.id_co) AS suma
FROM DESCRERE_MOBL D, FACTUR F
WHERE F.id_co=D.id_co
GROUP BY D.tip_imobil;
nterogarea returneaz urmtoarele informaii:
Fig. 13.4 Rezultatul interogrii folosind instruciunea GROUP BY i funcia SUM
Menionarea clauzelor SELECT, FROM, WHERE, GROUP BY, ORDER BY n
aceast ordine este obligatorie. Greeala frecvent care duce la apariia unor mesaje
7$
de eroare este aceea a introducerii unor cmpuri dup care se grupeaz n clauza
SELECT i neintroducerea lor n clauza GROUP BY.
Pentru a evita pierderea de informaii, este indicat ca atributul dup care se
grupeaz s fie cheie primar.
SELECT CO.id_co, J.nume_judet, L.nume_loc, S.nume_str,
CO.pret_min, CO.pret_max
FROM JUDETE J, CERER_OFERTE CO, LOCALTAT L,
STRAZ S
WHERE CO.cod_loc=L.cod_loc
AND CO.id_strada=S.id_strada
AND L.simbol_judet=J.simbol_judet
GROUP B; J.nume_judet;
Fig.13.5. Rezultatul interogrii folosind instruciunea GROUP BY cu pierderi de
informaii
Acest inconvenient este nlturat dac se grupeaz dup numele judeului,
localitii i a strzii, caz n care vor aprea tupluri duplicat.
SELECT CO.id_co,J.nume_judet, L.nume_loc, S.nume_str,
CO.pret_min, CO.pret_max
FROM JUDETE J, CERER_OFERTE CO, LOCALTAT L,
STRAZ S
WHERE CO.cod_loc=L.cod_loc
AND CO.id_strada=S.id_strada
AND L.simbol_judet=J.simbol_judet
GROUP B; L.cod_loc;
Fig.13.6. Rezultatul interogrii folosind instruciunea GROUP BY fr pierderi de
informaii
Interogarea datelor folosind instruciunea BAEI4G
79
nstruciunea HAVNG se utilizeaz numai n combinaie cu instruciunea
GROUP BY. Dac gruparea de date trebuie s satisfac vreo condiie, aceast
condiie se exprim cu ajutorul sintaxei HAVNG.
Clauza HAVNG este utilizat cnd se dorete filtrarea datelor grupate
conform unor criterii. Aceste criterii presupun compararea unor valori obinute prin
apelarea unor funcii totalizatoare. Aceste tipuri de comparri presupun gruparea
datelor. Din aceast cauz, HAVNG cere obligatoriu clauza GROUP BY.
Exemplu: Selectai adresele ofertelor grupate dup judee, localiti i strzi care au
preul minim cuprins ntre 50000 i 300000.
SELECT CO.id_co,J.nume_judet, L.nume_loc, S.nume_str,
CO.pret_min, CO.pret_max
FROM JUDETE J, CERER_OFERTE CO, LOCALTAT L,
STRAZ S
WHERE CO.cod_loc=L.cod_loc
AND CO.id_strada=S.id_strada
AND L.simbol_judet=J.simbol_judet
GROUP BY CO.id_co
HAVNG CO.pret_min BETWEEN 50000 AND 300000;
Ordinea obligatorie a unei fraze SELECT complete este: SELECT, FROM,
WHERE, GROUP BY, HAVNG, ORDER BY.
$0
Curs 14. 6uncii utili#ate 7n interog'ri
Cele mai des ntlnite funcii n interogri sunt:
a) funcii pentru iruri de caractere
b) funcii pentru valori numerice
c) funcii pentru date calendaristice
d) funcii de conversie dintr-un tip n altul.
a) 7uncii pentru !iruri de caractere
- CONCAT: concateneaz dou iruri de caractere
SELECT CONCAT('My', 'S', 'QL');
-> 'MySQL'
SELECT CONCAT('My', NULL, 'QL');
-> NULL
SELECT CONCAT(14.3);
-> '14.3'
- REPLACE: nlocuirea unui ir de caractere cu un altul ntr-o expresie de acest
tip;
SELECT REPLACE('www.mysql.com', 'w', 'Ww');
-> WwWwWw.mysql.com
- CHAR_LENGTH: returneaz numrul de caractere dintr-un ir;
- FELD(str,str1,str2,str3,.): returneaz poziia irului de caractere ,str n lista
irurilor de caractere ,str1,str2,str3; dac irul ,str nu este gsit, returneaz
valoarea 0.
SELECT FELD('ej', 'Hej', 'ej', 'Heja', 'hej', 'foo');
-> 2
SELECT FELD('fo', 'Hej', 'ej', 'Heja', 'hej', 'foo');
-> 0
- LEFT(str,n): returneaz subirul fromat dintr-un numr de ,n caractere;
SELECT LEFT('paralelipiped', 5);
-> 'paral'
- LOWER(str): toate literele din ,str vor fi convertite n minuscule;
SELECT LOWER('LTERE MAR');
-> 'litere mari'
- UPPER(str): toate literele din ,str vor fi convertite n majuscule;
SELECT LOWER('LTERE mari');
-> 'LTERE MAR'
- LPAD(str,n,caracter): completeaz la stnga cu un caracter pn la atingerea
unei lungimi specificate
SELECT LPAD('buna',6,'?');
->??buna
SELECT LPAD('buna',1,'??');
->b
- RPAD(str,n,caracter): completeaz la dreapta cu un caracter pn la atingerea
unei lungimi specificate
SELECT RPAD('buna',5,'?');
$1
->buna?
- LTRM(str): elimin spaiile de la stnga valorii ,str;
SELECT LTRM(' barbar');
->barbar
- RTRM(str): elimin spaiile de la dreapta valorii ,str;
SELECT RTRM('barbar ');
->barbar
- TRM: eliminarea simultan a spaiillor la stnga i la dreapta;
SELECT TRM(' bar ');
->bar
- SUBSTR(sir,n): extragerea unei poriuni dintr-un ir ncepnd cu a n-a liter;
SELECT SUBSTRNG('Paralelipiped',5);
->lelipiped
b) 7uncii pentru 1alori numerice
- CEL(p): ntoarce cel mai mic ntreg mai mare sau egal cu argumentul p;
SELECT CEL(1.23);
->2
SELECT CEL(-1.23);
->-1
- FLOOR(p): ntoarce cel mai mare ntreg mai mic sau egal cu argumentul p;
SELECT FLOOR(-1.23);
->-2
SELECT FLOOR(1.23);
->1
- ROUND(p,n): rotunjete rezultatul unei expresii (p) la un numr de poziii
funcionare dac n este pozitiv, sau, dac n este negativ, se face la ordinul
zecilor, sutelor, miilor etc.
SELECT ROUND(-1.23);
->-1
SELECT ROUND(-1.58);
->-2
SELECT ROUND(1.58);
->2
SELECT ROUND(1.298, 1);
->1.3
SELECT ROUND(1.298, 0);
->1
SELECT ROUND(23.298, -1);
->20
- TRUNC(p,n): are efect similar funciei ROUND, numai c n loc de rotunjire se
face trunchiere.
SELECT TRUNCATE(1.223,1);
->1.2
SELECT TRUNCATE(1.999,1);
->1.9
SELECT TRUNCATE(1.999,0);
->1
SELECT TRUNCATE(-1.999,1);
$2
->-1.9
SELECT TRUNCATE(122,-2);
->100
c) 7uncii pentru date calendaristice
- CURRENT_DATE(): furnizeaz data curent sub forma 'YYYY-MM-DD';
SELECT current_date();
-> 2006-08-15
- SYSDATE(): furnizeaz data curent i ora exact sub forma 'YYYY-MM-DD
HH-MM-SS';
SELECT SYSDATE();
-> 2006-08-15 15:06:44
- CURRENT_TMESTAMP(), NOW(), SYSTMESTAMP: sunt sinonime cu
SYSDATE;
- DATE_ADD (data,NETRVAL nr.): adun un numr de ani, luni sau zile la data
argument;
SELECT DATE_ADD('2006-08-15', NTERVAL 1 MONTH);
-> 2006-09-15
- LAST_DAY(data): furnizeaz ultima zi din luna n care se afl data argument;
SELECT LAST_DAY('2008-02-15');
-> 2008-02-29
- DATEDFF(data1,data2): calculeaz numrul de zile dintre cele dou date
calendaristice;
SELECT DATEDFF('1997-12-31 23:59:59','1997-12-30');
->1
SELECT DATEDFF('1997-11-30 23:59:59','1997-12-31');
->-31
- DAYNAME(data): afieaz denumirea zilei corespunztoare datei argument;
SELECT DAYNAME('2006-08-19');
-> 'Saturday'
- DAYOFMONTH(data), DAYOFYEAR(data): (ziua din lun, ziua din an)
furnizeaz numrul de ordine n cadrul lunii, respective a anului pentru o dat
calendaristic.
SELECT DAYOFYEAR('2006-08-19');
->231
d) 7uncii de con1ersie dintr5un tip n altul
Funcia de conversie cel mai des utilizat este funcia CAST.
- CAST: realizeaz diferite conversii, de exemplu
SELECT CONCAT('Data: ', CAST(NOW() AS DATE));
-> Data: 2006-08-18
concateneaz irul de caractere 'data:' cu data calendaristic actual, convertit la
ir de caractere.
@0emple
Exemplul 1: Modificai toate numerele de telefon din judeul Maramure, astfel ca
prefixul s nu mai fie 0262 ci 0362, din baza de date AGENTE_MOBLARA.
$3
UPDATE DATE_PERSOANA SET
nr_telefon=CONCAT('0362', SUBSTR(nr_telefon, 5))
WHERE SUBSTR(nr_telefon,1,4)='0262';
Pentru modificarea datelor s-a folosit comanda
UPDATE nume_tabel SET instructiuni
WHERE conditii,
iar funcia
SUBSTR(sir,nr)
extrage ciferele din ntregul numr de telefon, ncepnd cu a cincea poziie, cifre ce
vor fi concatenate cu prefixul '0362'. De asemenea, prin funcia
SUBSTR(nr_telefon,1,4)
se realizeaz extragerea primelor patru numere din ntregul numr de telefon.
Exemplul 2: Afiai numele i data naterii clienilor din baza de date
AGENTE_MOBLARA, cunoscnd codul numeric personal al acsotra.
SELECT CONCAT('Numele: ',numele) AS numele,
CONCAT('Anul: ', '19',SUBSTR(cnp,2,2),' , ','Luna:',
SUBSTR(cnp,4,2), ', ','Ziua: ',
SUBSTR(cnp,6,2))
AS data_nasterii
FROM DATE_PERSOANA;
Observaie: n interogarea de mai sus se concateneaz irul 'Numele' cu numele
clientului, apoi se concateneaz irul 'Anul' cu irul '19' (deoarece se consider c nu
sunt clieni nscui dup anul 1999) i cu cele dou cifre ale codului numeric
personal care desemneaz anul naterii unei persoane (SUBSTR(cnp,2,2)). n mod
analog se efectueaz i celelalte concatenri.
Fig. 14.1. Utilizarea funciilor CONCAT i SUSTR
Exemplul 3: Afiai preurile ofertelor (preul minim i preul maxim) folosind alinierea
la dreapta i la stnga.
SELECT LPAD(pret_min,30,' ') AS 'pret minim',
RPAD(pret_max,30,' ') AS 'pret maxim'
FROM CERER_OFERTE
WHERE tipul LKE 'oferta'
ORDER BY pret_min,pret_max;
$4
Fig. 14.2. Utilizarea funciilor LPAD i RPAD
Exemplul 4: S se afieze numrul de cereri de imobile primite n prima jumtate a
oricrei luni fa de cele primite n cea de a doua jumtate.
SELECT LTRI:(COUNT(id_co)) AS 'nr de cereri in
prima jumatate a lunii'
FROM CERER_OFERTE
WHERE DA;O-:ONT>(data_inreg)<16
AND tipul ='cerere';
(a)
SELECT COUNT(id_co) AS 'nr de cereri in a doua
jumatate a lunii'
FROM CERER_OFERTE
WHERE DA;O-:ONT>(data_inreg)>15
AND tipul ='cerere';
(b)
Fig. 14.3. Utilizarea funciei DAYOFMONTH (a), (b)
$5
SINTEZD EI EBERCIFII
1. C"i opt op"$ato$i iniia!i
-i). 1. R"p$"&"nta$"a op"$ato$i!o$ $"!aiona!
*estri)Cia Proie)Cia
a
b
)
E
M
a
a
b
b
)
)
E
M
E
M
E
M
Produs *euninuea
-nterse)Cia
Di'erenCa
a1
a2
a3
b1
b1
b2
b1
b2
b3
)1
)2
)3
a1
a2
a3
b1
b1
b2
)1
)1
)3
9niune;natura!><
H4(>rCirea
a
b
)
a
a
a
b
)
E
M
z
E
M
E
z
a
$:
,. T"st"
Cu$s 1 G E1"$.iii
1. Prin tipul unei date nelegem:
a) mulimea valorilor pe care le poate lua data;
b) structura, mulimea valorilor, operaiile admise i modul de tratare a erorilor;
c) structura, mulimea valorilor, operaiile admise, regulile de protecie i
securitatea datelor.
,. Prin valoarea atomica, nelegem:
a) o valoare reprezentat printr-un singur simbol;
b) o valoare din care nu putem elimina nici o component fr s denaturm
semnificaia datei;
c) o valoare cu format rigid
/. Atributul reprezint:
a) mulimea valorilor posibile ale unei date;
b) o caracteristic a unei entiti;
c) formatul de reprezentare a unei date
H. Prin baza de date, nelegem:
a) orice colecie de date;
b) o colecie de date conectate logic, exhaustiv i neredundant;
c) orice colecie de date materializat sub forma unor fiiere de disc magnetic
I. Prin sistem de gestiune a bazelor de date, nelegem:
a) modul de organizare al unui sistem informatic, care manipuleaz date din
baze de date;
b) un program sau pachet de programe, care permite crearea, pstrarea i
eliminarea bazelor de date;
c) un sistem de programe, care permite utilizatorului definirea, crearea i
ntreinerea bazei de date, precum i accesul controlat la aceasta.
J. Definii urmtorii termeni:
- baz de date
- sistem de gestiune de baz de date
- entitate
- diagram E-R
- atribut
- asociere
8. Care sunt etapele de realizare a unei baze de date?
$7
Cu$s ,G E1"$.iii
K. O relaie este:
a) orice tabel bidimensional cu valori atomice;
b) orice tabel;
c) orice tabel bidimensional
9. Se numete grad al unei relaii:
a) numrul domeniilor distincte ale relaiei;
b) numrul de tupluri distincte ale relaiei;
c) numrul de atribute ale relaiei
1L. Cardinalitatea unei relaii reprezint:
a) numrul de atribute ale relaiei;
b) numrul de tupluri ale relaiei;
c) numrul de atribute identificator, ale relatiei.
11. Care sunt componentele unei diagrame E-R?
1,. Ce se nelege prin cardinalitate?
1/. Numii trei tipuri de asocieri ntre entiti.
1H. Pentru baza de date FURNZOR_COMPONENTE descris mai jos, n figura
2, precizai tipurile de relaionri ntre relaiile F,C, respectiv FC, apoi realizai
diagrama E-R.
1I. Dai exemple de:
- o relaie de tip muli la muli
- o relaie de tip unu la unu
- o relaie de tip unu la muli.
1J. Relaiile de tip mai multe la mai multe sunt dificil de implementat ntr-un
proiect
eficient de baze de date. Ce este de fcut, n acest caz?
18. Desenai diagrama entitate-relaie (preciznd i tipul asocierilor) pentru
urmtoarea baz de date COLECTE_MUZCA: presupunei c avei o colecie
muzical rock, format din CD-uri i DVD-uri i casete audio i dorii s construii o
baz de date care s permit s gsii nregistrrile pe care le avei pentru un anumit
interpret (de exemplu, Joe Cocker), pentru un anumit chitarist (de exemplu, Joe
Satriani), pentru un anumit baterist (de exemplu, Lars Ulrich), pentru un anumit
album (de exemplu, Master of Puppets), o anumit formaie (de exemplu, Metallica).
$$
Cu$s /G E1"$.iii
1K. Se numete domeniu al unui atribut:
a) mulimea valorilor posibile ale unui atribut;
b) tipul datelor de atribut;
c) mulimea valorilor actuale ale unui atribut
19. Se numete baz de date relaional:
a) un set de tabele;
b) un set de tabele normalizate;
c) un set de tabele bidimensionale
,L. Definii urmtorii termeni:
- cheie primar
-cheie extern
- BDR
- domeniu
- entitate
- atribut
- relaie
,1. Care sunt conceptele utilizate pentru a descrie elementele de baz ale
organizrii unei BDR?

$9
Cu$s HG E1"$.iii
,,. Dou relaii R1 i R2 sunt compatibile cu reuniunea, dac:
a) au acelai numr de atribute;
b) au acelai numr de atribute, iar atributele care ocup aceeai poziie au
acelai nume;
c) au acelai numr de atribute, iar atributele care ocup aceeai poziie au
acelai domeniu.
,/. Pentru a putea determina intersecia relaiilor R1 i R2 este necesar ca:
a) relaiile s fie compatibile cu intersecia;
b) relaiile s fie compatibile cu reuniunea;
c) relaiile s aib cel puin un tuplu comun.
,H. Dac R1 are n1 tupluri, R2 are n2 tupluri, atunci R1 U R2 are:
a) cel puin n1 + n2 tupluri;
b) n1 + n2 tupluri;
c) cel mult n1 + n2 tupluri.
,I. Operatorul de proiecie aplicat unei relaii, permite:
a) eliminarea unor coloane;
b) modificarea poziiei coloanelor;
c) eliminarea unor coloane i modificarea poziiei lor
,J. Pentru a putea realiza jonciunea natural ntre relaiile R1 i R2 este necesar
ca:
a) relaiile R1 i R2 s fie compatibile cu reuniunea;
b) relaiile R1 i R2 s aib cte un atribut cu acelai domeniu;
c) relaiile R1 i R2 s aib cel puin cte un atribut cu acelai nume i acelai
domeniu.
,8. Se consider relaiile:
STUDENT (NR_LEG, NUME, PRENUME, GRUPA) i
TELEFON (NR_LEG, PREFX, TELEFON, TP_TELEFON).
Se presupune c fiecare student are cel mult un telefon mobil. Pentru a rezolva
cererea "s se afieze toi studenii unei grupe precizate, iar acolo unde este cazul s
se afieze i telefonul mobil, este necesar s utilizam:
a) o jonciune natural;
b) o jonciune de egalitate;
c) o jonciune extern.
,K. Rezultatul aplicrii unui operator relaional, este ntotdeauna:
a) o relaie;
b) o relaie sau o valoare;
c) o relaie sau un set de relaii.
,9. Definii urmtorii operatori:
- reuniunea
- diferena
- produsul cartezian
- proiecia
- selecia
- intersecia
- diviziunea
/L. Enumerai cele trei tipuri de jonciune.
/1. Care dintre operatorii relaionali definii n cursul 4 au o definiie care nu se
bazeaz pe aceeai structur?
90
/,. Fie baza de date FURNZOR_COMPONENTE modelat de urmtoarele
valori eantion:
Fig. 2. Baza de date FURNZOR_COMPONENTE (valori eantion)
Furnizorii i componentele sunt identificate n mod unic prin numrul
furnizorului F, respectiv prin numrul componentei C. Fiecare furnizor are un numr
,F, un nume ,numeF, care nu este neaprat unic, o valoare de cotare sau a strii
,stare i o localizare ,oras. Se presupune c fiecare furnizor este localizat n exact
un singur ora. Fiecare component are un numr ,C care este unic, un nume
,numeC, o culoare ,culoare, o mas ,mas i localitate n care sunt stocate
componentele. Relaia FC reprezint livrrile i se exprim astfel: Furnizorul F
livreaz componenta C n cantitatea ,cant.
Care este valaorea expresiei F JON FC JON C?
//. Fie R o relaie de gardul n. Cte proiecii diferite ale relaiei R exist?
/H. Reuniunea, intersecia, produsul i jonciunea sunt att comutative, ct i
asociative. Verificai aceste proprieti pe baza unor exemple construite de
dumneavoastr.
/I. Fie expresia a JON b. Dac relaiile a i b au anteturi disjuncte, atunci
aceast expresie este echivalent cu a TMES b; dac au acelai antet, atunci este
echivalent cu a NTERSECT b. Verificai aceste afirmaii pe baza unor exemple
construite de dumneavoastr.
/J. n aritmetic, nmulirea i mprirea sunt operaii inverse. TMES i
DVDEDBY sunt operaii inverse n algebra relaional?
FBnu4eFStareorasF1Po(20#u)urestiF20)i4
10P!oiestiF30rde!ean30P!oiestiF4Po(es)u20#
u)urestiF5-ones)u30,as!ui
F
CBnu4eCCu!oare"asaorasC1(iu!ita*osu12.0#u)uresti
C2#o!t,erde17.0P!oiestiC3Suruba!bastru17.00radC4Su
rub*osu14.0#u)urestiC5Ca4a0!bastru12.0P!oiestiC:*
oata dintatarosu19.0#u)uresti
C
FBCB)antF1C1300F
1C2200F1C3400F1
C4200F1C5100F1C
:100F2C1300F2C24
00F3C2200F4C2200
F4C4300F4C5400
FC
91
Cu$s IG E1"$.iii
/8. Fie A si B dou atribute (simple sau compuse) ale relaiei R. Se spune c
atributul B este dependent funcional de A, dac:
a) fiecrei valori a lui A i este asociat exact o valoare a atributului B;
b) fiecrei valori a lui A i este asociat cel puin o valoare nenul a atributului
B;
c) fiecare valoare a lui B este asociat unei valori a lui A.
/K. Explicai urmtoarele noiuni:
- restricii de integritate
- cheia primar a unei relaii
- cheia extern a unei relatii
- relaie care refer
- relaie referit.
/9. n baza de date FURNZOR_COMPONENTE, dai exemple de
a) chei primare i secundare
b) chei simple i chei compuse
c) relaie care refer i relaie referit.
HL. Precizai care sunt restriciile de integritate minimal ale modelului relaional,
apoi enunai aceste restricii.
H1. Ce nseamn dependen funcional? Dai dou exemple de DF.
H,. Se definete o relaie ORAR, cu urmtoarele atribute:
Z ziua din sptmn (de la 1 la 5)
T perioada din zi (de la 1 la 6)
C numrul slii de clas
P numele profesorului
L numele leciei.
Tuplul (z,t,c,p,l) apare n aceast relaie dac i numai dac la momentul (z,t)
lecia l este predat de profesorul p n sala de clas c. Se presupune c leciile au
durata de o perioad i c ficare lecie are un nume, care este unic pentru toate
leciile predate ntr-o sptmn. Ce dependene funcionale conine aceast relaie?
Care sunt cheile candidat?
H/. Fie relaia F_O_C din figura urmtoare:
Fig. 3. Relaia F_O_C (valori eantion)
Determinai dependnele funcionale.
FBorasCB)antF1#rasovC11
00F1#rasovC2100F2-asiC
1200F2-asiC2200F3-asiC2
300F4#rasovC2400F4#ras
ovC4400F4#rasovC5400
F5+5C
92
Cu$s 8G Cu$s KG E1"$.iii
HH. Se spune c o relaie este n forma normal 1, dac:
a) nu conine atribute compuse;
b) fiecare atribut are numai valori atomice;
c) conine cel puin o cheie candidat.
HI. Se spune c o relaie se afl n a doua form normal, dac:
a) se afl n prima form normal i fiecare atribut care nu este cheie primar
este total dependent de cheia primara;
b) se afl n prima form normal i orice atribut care nu este cheie candidat
este total dependent de cheia primar;
c) se afl n prima form normal i orice atribut care nu este determinat este
total dependent de cheia primar.
HJ. Se consider relaia EXAMEN (NR_LEG, DATA_EXAMEN, D_MATERE,
SALA, NOTA). Aceast relaie se afl n:
a) a -a form normal;
b) a -a form normal;
c) prima form normal.
H8. Exist numai trei forme normale? Enumerai formele normale.
HK. Definii urmtoerele noiuni:
- atribut simplu (atomic)
- atribut compus.
H9. S se normalizeze bazele de date prezente pe parcursul acestui capitol:
COLECTE_MUZCALA, FURNZOR_COMPONENTE.
93
Cu$s 9G E1"$.iii
IL. Limbajul SQL reprezint:
a) un limbaj procedural de descriere i manipulare a datelor ntr-o baz de
date;
b) un limbaj neprocedural de descriere i manipulare a datelor ntr-o baza
de date;
c) un limbaj neprocedural de descriere i manipulare a datelor ntr-o baza
de date relaional, sau obiect relational.
I1. Ce este SQL?
I,. Care sunt limbajele SQL?
I/. Explicai care este rezultatul returnat de fiecare dintre urmtoarele funcii:
MAX, MN, COUNT, SUM, AVG.
IH. Care sunt domeniile celor mai utilizate tipuri de variabile numerice? Dar
pentru tipul ir de caractere?
94
Cu$s 1LG E1"$.iii
II. Precizai care sunt rezultatele generate de comanda ALTER
TABLE...ADD.
IJ. Care este comanda prin care o cheie primar, o cheie extern sau o
constrngere este exprimat?
I8. Creai tabelul ,salariat avnd urmtoarea structur:
$ume Caracteristici Tipul
)od5angaGat N+. N966 -N./R/*;4<
nu4e ,0*C10*;25<
(renu4e ,0*C10*;25<
'un)tia ,0*C10*;20<
se' -N./R/*;4<
data5angaGarii D0./
varsta N9"#/*
e4ai! C10*;10<
sa!ariu ,a!oare i4(!i)it> 0 D/C-"06;9&2<
Fig. 4. Structura tabelului SALARAT (prima form)
IK. Pentru baza de date COLECTE_MUZCA (vezi problema 9), s se
execute toate comenzile din cursul 10, i anume
- crearea bazei de date
- crearea tabelelor indicnd cheile
- modificarea numelui unei tabele
- adugarea unui atribut
- modificarea unui atribut
- adugarea/ suprimarea unor restricii de integritate
- modificarea unei constrngeri
- acordarea/ retragerea drepturilor de acces la baza de date.
I9. Exersai aceleai comenzi pentru baza de date
FURNZOR_COMPONENTE.
JL. S se defineasc o constrngere la nivel de coloan prin care s se
specifice cheia primar i cheia extern prin construirea tabelei F din baza de
date FURNZOR_COMPONENTE descris n problema 15.
J1. S se defineasc o constrngere la nivel de tabel prin care s se specifice
cheia primar i cheia extern prin construirea tabelei FC din baza de date
FURNZOR_COMPONENTE descris n problema 15.
J,. Dup ce tabela F a fost creat n problema 33, suprimai cheia primar a
tabelei F din baza de date FURNZOR_COMPONENTE apoi recreai cheia
primar a tabelei.
J/. Aceeai cerin ca n problema precedent, pentru cheia strin.
JH. Stergei i apoi creai din nou tabelul ,salariat cu urmtoarea structur.
$U*E T#' C+$ST,-$.E,E
95
)od5ang -N./R/*;4< Ceie (ri4ar>
nu4e ,0*C10*;25< N+. N966
(renu4e ,0*C10*;25<
data5nasterii D0./ data5nasteriiNdata5angaGarii
'un)tia ,0*C10*;9< N+. N966
se' -N./R/*;4<
*e'er> )a Di )eie eEtern>
)od5ang din a)e!aDi tabe!
data5angaGarii D0./
e4ai! ,0*C10*;20< uni)
sa!ariu D/C-"06;12&3< V 0
)od5de(t -N./R/*;4< N+. N966
Co4binaCia N9"/ W
P*/N9"/ s> 'ie uni)>
Fig. 5. Structura tabelului SALARAT (a doua form)
JI. Stergei tabelul ,salariat, iar apoi recreai-l implementnd toate
constrngerile la nivel de tabel.
Observaie: ConstrUngerea de ti( N+. N966 se (oate de)!ara doar !a nive! de )o!oan>.
9:
Cu$s 11G E1"$.iii

JJ. Se consider comanda SQL
SELECT * FROM (STUDENT NNER JON ADRESA ON
NR_LEG = NR_LEG)
NNER JON TELEFON ON NR_LEG = NR_LEG
Care dintre urmtoarele afirmaii este corect:
a) comanda este corect;
b) comanda va genera un mesaj de eroare;
c) comanda se execut dar nu se afieaz nimic.
J8. Se consider comanda SQL
SELECT * FROM STUDENT
LEFT OUTER JON TELEFON ON STUDENT. NR_LEG =
TELEFON.NR_LEG WHERE GRUPA = 7710;
Se presupune c n grupa selectat sunt 30 de studeni, 5 studeni au un telefon
i 4 studeni au cte dou telefoane. Atunci, n urma execuiei se va afia:
a) o list cu 30 linii;
b) o list cu 34 de linii;
c) o list cu 13 linii.
JK. S se afieze numele clienilor care au achiziionate ntre 3 i 10 imobile,
din baza de date AGENTE_MOBLARA.
J9. Pentru baza de date FURNZOR_COMPONENTE realizai urmtoarele
interogri:
A) afiarea tuturor furnizorilor i a oraelor unde sunt situate, ordonnd
descresctor dup numele furnizorilor;
B) afiarea tuturor furnizorilor din Ploieti;
C) afiarea componentelor care au masa sub 14 u.m, inclusiv;
D) afiarea componentelor de culoare roie i albastr care nu sunt produse
n oraul Ploieti;
E) afiarea acelor furnizori care au livrat componenta C2, ordonnd dup
furnizori;
F) afiarea mediei cantitii livrate de furnizorul F1; (utilizai dicionarul pentru
a afla detalii despre funcia MN, MAX, SUM, COUNT, AVG);
G) afiarea furnizorilor care au livrat cel mai mare numr de componente de
un anumit tip;
H) afiarea furnizorilor care au livrat cea mai mic cantitate de componente,
afind numele acestora oraul de provenien al furnizorilor i
componenta livrat;
) afiarea tuturor culorilor folosite pentru componentele livrate de furnizori;
J) afiarea tuturor informaiilor furnizorilor a cror nume ncepe cu "A;
K) afiarea numelui furnizorilor care au starea cuprins ntre 10 si 20;
8L. S se vizualizeze toate denumirile albumelor existente n baza de date
COLECTE_MUZCA, ordonate alfabetic.
81. S se realizeze interogri asemntoare cu cele de la exerciiul 39 pentru
baza de date COLECTE_MUZCA.
97
Cu$$s 1,G E1"$.iii
8,. n cazul bazei de date FURNZOR_COMPONENTE, s se realizeze
urmtoarele interogri:
a) Care sunt numele furnizorilor ce au livrat componenta C2 i care sunt
oraele din care provin aceti furnizori?
b) Care component roie s-a livrat n cea mai mare cantate?
c) Din ce ora provine furnizorul cu cele mai puine componente vndute, i
care sunt aceste componente?
d) S se vizualizeze toate informaiile legate de furnizorii care au livrat
componente, precum i toate informaiile despre aceste componente.
8/. Afiai lista cu toi interpreii i cu albumele lor existente n baza de date
COLECTE_MUZCA, ordonnd dup interprei.
8H. Vizualizai aceeai list de mai sus existent pe casete audio.
8I. Care dintre interprei figureaz i pe CD i pe casete audio?
8J. Descriei tipurile de JON utilizate n procesul de interogare a relaiilor unei
baze de date.
88. Pentru toate interogrile de mai sus, s se formuleze fraze SELECT att
cu ajutorul clauzei WHERE ct i cu ajutorul operaiilor de JON.
8K. Fie baza de date H-R cu diagrama reprezentat n figura 6.
89.
as Gob
is 4anager o'
DEPART:ENTS
De(art4ent5id
De(art4ent5na4e
"anager5id
6o)ation5id
E:PLO;EES
e4(!oMee5id
'irst5na4e
!ast5na4e
sa!arM
"anager5id
De(art4ent5id
8ob5id
6o)ation5id
A
LOCATIONS
!o)ation5id
)ountrM5id
street5address
)itM
A
REGIONS
region5id
region5na4e
COUNTRIES
)ountrM5id
)ountrM5na4e
region5id
A
AOBS
Gob5id
Gob5tit!e
4in5sa!arM
4aE5sa!arM
AOB3>ISTOR;
e4(!oMee5id
start5date
end5date
Gob5id
de(art4ent5id
AOB3GRADES
Rrade5!eve!
6oXest5sa!
1igest5sa!
4anages
be!ongs to
6o)ated in
6o)ated in ;2<
6o)ated in
;3<
9$
Fig. 6. Diagrama bazei de date H-R
n ipoteza n care tabelele au fost poulate cu date, s se afieze numele salariailor i
numele departamentelor n care lucreaz. Se vor afia i salariaii care nu lucreaz
ntr-un departament. (right outher join).
KL. S se afieze numele departamentelor i numele salariailor care lucreaz n
ele. Se vor afia i departamentele care nu au salariai. (left outher join).
99
Cu$s 1/G E1"$.iii
K1. Din cte localiti provin furnizorii? (BD utilizat este
FURNZOR_COMPONENTE).
K,. Pentru baza de date AGENTE_MOBLARA, precizai:
A) care sunt localitile cu cele mai multe solicitri (cereri) de imobil? Dar cu cele
mai multe oferte?
B) n ce lun a anului s-au nregistrat cele mai multe oferte? Dar cele mai puine
cereri?
C) Care este clientul ce a achiziionat cele mai multe imobile?
K/. n ce interogri este necesar utilizarea cuvntului HAVNG?
a) cnd este necesar s eliminm linii duble din rezultat;
b) cnd este necesar s ordonm mulimea rezultat;
c) cnd este necesar s efectum un calcul pe grup;
d) cnd este necesar s restricionm grupurile de linii returnate.
KH. Cu care clauz se utilizeaz n permanen clauz HAVNG?
KI. Precizai deosebirea dintre clauzele ORDER BY i GROUP BY.
100
Cu$s 1HG E1"$.iii
KJ. Care sunt funciile pentru adugarea i eliminarea caracterelor suplimentare
(inclusiv a spaiilor albe) din irurile de caractere?
K8. Se pot folosi mai multe funcii ntr-o singur instruciune?
KK. Afiai ultima zi a lunii curente.
K9. S se afieze data curent i data peste trei luni.
9L. Afiai data peste un an, 2 luni i 3 zile de la data curent.
91. S se afieze lista clienilor din baza de date AGENTE_MOBLARA ce
trebuie felicitai de Sfnta Maria.
9,. Extragei din fiecare nume a clientului patru caractere, ncepnd cu al cincilea,
apoi s se afieze numrul de caractere care intr n componena numelui fiecrui
client (se va utiliza baza de date AGENTE_MOBLARA).
9/. Scriei cu majuscule numele furnizorilor din baza de date
FURNZOR_COMOPNENTE.
9H. nlocuii literele ,F i ,C cu ,furniz, respecitv cu ,compon n baza de date
FURNZOR_COMOPNENTE.
9I. S se afieze lista furnizorilor i componentelor din baza de date
FURNZOR_COMOPNENTE sub forma ,Furnizorul ... a livrat componenta ... n
cantitatea de ....
9J. Folosii toate cele patru funcii numerice (CEL, FLOOR, ROUND, TRUNC)
pentru suma de achitat lunar n decursul unui an, sum ce se obine mprind preul
total (de pe factur) al unei tranzacii imobiliare la numrul de luni dint-un an (din
baza de date AGENTE_MOBLARA).
98. Calculai numrul de zile cuprins ntre data de nregistrare a ofertelor i data
de soluionare a acestora, adic data de pe factur (n cazul n care ofertele au fost
soluionate) utiliznd BD AGENTE_MOBLARA.
9K. Cte oferte au fost primite n timpul primelor trei zile ale sptmnii (de-a
lungul tuturor lunilor) din baza de date AGENTE_MOBLARA? Dar n restul zilelor
sptmnii?
99. Afiai n ce zile ale sptmnii s-au nregistrat oferte n baza de date
AGENTE_MOBLARA. Aceeai cerin pentru numele lunilor (folosii funcia
MONTHNAME).
101
#07/ D/ D0./.........................................................................................................................1
C0P-.+696 -. P*+-/C.0*/ ;D/S-RN< D/ D0./ ;9 sa(t.<................................................1
C9*S 1. Pre!i4inarii..............................................................................................................1
1.1. NoCiuni 'o!osite =n teoria baze!or de date................................................................1
1.2. Fun)Cionarea unei baze de date...............................................................................2
1.3 *ea!izarea unei baze de date...................................................................................3
C9*S 2. Construirea de diagra4e entitate@re!aCie..................................................................:
C9*S 3. Proie)tarea 4ode!u!ui re!aCiona!............................................................................15
3.1 Stru)tura re!aCiona!> a date!or...................................................................................15
C9*S 4. +(eratorii 4ode!u!ui re!aCiona!.............................................................................1$
3.2 +(eratorii 4ode!u!ui re!aCiona!..................................................................................1$
C9*S 5. *estri)Cii de integritate a!e 4ode!u!ui re!aCiona!...................................................32
3.3 *estri)Cii de integritate a!e 4ode!u!ui re!aCiona!.........................................................32
C9*S :. Pre!u)rareaKeva!uarea Di o(ti4izarea )erinCe!or.....................................................3$
C9*S 7. .eni)a nor4a!iz>rii re!aCii!or...............................................................................43
7.1 Pri4a 'or4> nor4a!> ;FN1<........................................................................................44
7.2. 0 doua 'or4> nor4a!> ;FN2<......................................................................................4$
C9*S $. 0 treia 'or4> nor4a!>............................................................................................49
7.3. 0 treia 'or4> nor4a!> ;FN3<......................................................................................49
C0P-.+696 --. SQ6 ;9 sa(t.<.................................................................................................51
C9*S 9. 6i4baGu! SQ6........................................................................................................51
C9*S 10. 6i4baGe re!aCiona!e de de'inire a date!or ;6DD<.................................................5:
C9*S 11. 6i4baGe re!aCiona!e de 4ani(u!are a date!or ;6"D< @ -nterogarea date!or.........:3
C9*S 12. 6i4baGe re!aCiona!e de 4ani(u!are a date!or ;6"D< @ -nterogarea date!or din 4ai
4u!te re!aCii...........................................................................................................................:7
C9*S 13. 6i4baGe re!aCiona!e de 4ani(u!are a date!or ;6"D< @ -nterogarea date!or din 4ai
4u!te re!aCii ;)ontinuare<.......................................................................................................73
Curs 14. Fun)Cii uti!izate =n interog>ri..................................................................................$0
S-N./7F Y- /Z/*C-[--.........................................................................................................$5
102
/i%lio"rafie
1. OBaze de dae!Or"anizare# pr$ie%are &i implemenareP@ -on 6ungu& Constanta #odea&
Reorgeta #>des)u& Crsitian -oniC>& /d. 066 /du)ationa!& #u)ureDti& 1995.
2. OPr$ie%area bazel$r de dae' ($rmalizare &i p$s$n$rmalizare' )mplemen*ri +,- &i
Ora%leP@ "arin Fota)e& /d. Po!iro4.
3. OBaze de dae relai$nale ! pr$ie%are &i implemenareP@ -!eana Po(es)u& /ditura
9niversit>Cii din #u)ureDti& 199:.
4. OTransa% +,-P@ Yte'an 0rde!eanu& /d. Ni)u!es)u.
5. O+,-' .iale%e .B/# Ora%le &i 0is1al F$2Pr$P@ "arin Fota)e& Po!iro4& 2001.
:. OOra%le 3i/' 45id1l dezv$l*rii apli%aiil$r pr$6esi$naleP@ "arin Fota)e& C>t>!in
Str=4bei& 6iviu CreCu& Po!iro4& 2003.
103

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