Documente Academic
Documente Profesional
Documente Cultură
Curs Baze de Date-Semestrul I
Curs Baze de Date-Semestrul I
O baz de date :
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.
3.
2)
3)
4)
5)
6)
4.
5.
Exemplu: n figura 1.1 este prezentat o baz de date foarte mic, ce conine un
singur fiier, numit VINOTECA; 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.
raft#vinproducatoransticlelansat2Cab.
SauvignonWindsor19951220043Pinot
NoirFetzer19973200422Pinot
NoirDehlinger19992200250MerlotClos du Bois199892004
1.3
3
3. ncrcarea
datelor
2. Proiectarea
LMD
4. ntreinerea
LMD, LDD
LDD
Baza
de
date
LMD
4. Exploatarea
5
DATE_
PERSOANA
LOCALITATI
CERERI_
OFERTE
JUDETE
DESCRIERE_I
MOBIL
STRAZI
(1,1)
sunt finalizate
(0,1)
FACTURI
prin
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
7
1.
Asocieri de tip unu la unu sunt asocieri n care maximele cardinalitii au
valoarea 1.
E1
(...,1)
(...,1)
E2
E1
(...,1)
(...,n)
E2
(...,n)
E1
(...,1)
E2
(1,1)
B
CERERI_OFERTE
1
2
3
i corespunde
(0,n)
CERERI_OFERTE
Fig. 2.6. Asociere de unu la mai muli ntre entitile LOCALITI i CERERI_OFERTE
3.
Asocieri de tipul muli la muli sunt asocieri n care maximele cardinalitii au
valoarea muli.
8
(...,n)
E1
(...,n)
E2
PRODUS
D1
D2
D3
P1
P2
P3
(0,n)
(0,n)
DEPOZIT
nmagazi
PRODUS
neaz
E1
(...,n)
(...,n)
E2
E1
(...,1)
A1
(...,n)
a)
(...,n)
A2
(...,1)
E2
b)
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 DEPOZIT_PRODUS astfel:
DEPOZIT
D1
D2
D3
D4
(1,n)
asociaz
(0,n)
DEPOZIT_
PRODUS
D1-P1
D1-P3
D2-P1
D3-P4
(0,n)
asociaz
(1,n)
PRODUS
P1
P2
P3
P4
Fig. 2.10. Transformarea asocierii de tipul muli la muli n asocieri de tipul unu la
muli
Asocieri pariale i totale
9
E1
(,)
E2
E1
(,)
a)
(0,)
E2
b)
(1,)
(1,)
E2
a)
E1
(1,)
(n,)
E2
E1
(n,)
b)
E1
(n,)
(1,)
E2
c)
(n,)
E2
d)
FACTURI
F1
F2
10
CERERI_O
FERTE
1
2
3
DESCRIERE_IMOBIL
I1
I2
I3
LOCALITATI
L1
L2
L3
1
2
3
ELEVI
E1
E2
E3
E4
C1
C2
C3
PRODUS
D1
D2
D3
D4
P1
P2
P3
STUDENTI
C1
C2
C3
S1
S2
S3
S4
a#
(a)
E
(b)
STRAZI
are asociat
(1,1)
LOCALITATI
(0,n)
are asociat
(1,1)
JUDETE
(1,1)
se regsete
(1,n)
(1,n) conin
CERERI_
OFERTE
(1,1)
(1,1)
incheie
(1,1)
(1,1)
DATE_PERSOANA
(0,1)
finisate
(0,1)
FACTURI
conin
(1,1)
DESCRIERE
_IMOBIL
CERERI_OFERTE
id_strada
nr_imobil
pret_min
pret_max
tip_solutionare
13
STRZI
id_strada#
cod_loc#
nume_str
LOCALITATI
cod_loc#
simbol_judet
nume_loc
JUDETE
simbol_judet#
nume_judet
_
CERERI-OFERTE
id_co #
tip
cnp
data_inreg
tip_solutionare
cod_loc
id_strada
nr_imobil
pret_min
pret_max
DESCRIERE_IMOB IL
id_co#
tip_imobil
etaj
nr_camere
suprafata
garaj
centrala_termica
termopane
14
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:
FormalUzualFizicRealieTablouFiier
TupluLinienregistrareAtributColoanC
ampDomeniuTip de datTip de dat
Domeniul
Domeniul reprezint o mulime de valori, notat prin litere mari D 1,D2 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: D1: {Da, Nu} reprezint un domeniu definit explicit. D 2: {x/ x este de dat
calendaristic} sau D3: {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,V2,V3,...,Vn>, unde V1 este o valoare din
domeniul D1, V2D2 etc.
Exemplu: Considerm c tuplul referitor la persoana x din entitatea
CERERI_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>.
Relaia
sau
R:
D2
2661805270023
1701205230023
D3
D1
2006-05-27
2006-07-03
Da
Nu
Atributul
2661805270023
1701205230023
2006-05-27
2006-07-03
soluionare:D3
Da
Nu
Schema unei relaii este numele relaiei urmat de lista de atribute, pentru
fiecare atribut precizndu-se domeniul asociat.
Astfel, pentru o relaie R cu atributele A1, A2, ... , An i domeniile D1, D2, ... ,Dm,
cu m n, schema relaiei R poate fi prezentat astfel:
R(A1: D1, A2:D2, ... , An: Dm)
sau
R:
A1:D1 ... An:Dm
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;
17
18
Reuniunea
R1
R2
19
idtipulcnptip_solutionare1066oferta2660805270023
Da1210oferta1881106300897Da220cerere282050630
0898Da1316cerere1881106300897Da
ARHIVA_OFERTE:
ARHIVA_CERERI:
idtipulcnptip_solutionare1066oferta26608052700
23Da1210oferta1881106300897Da
idtipulcnptip_solutionare210cerere282050630089
8Da1316cerere1881106300897Da
Diferena
R1
R2
20
REZ:
idtipulcnptip_solutionare2066oferta26608052700
23Da
ARHIVA_OFERTE:
ARHIVA_CERERI:
idtipulcnptip_solutionare1210oferta18811063008
97Da2066oferta2660805270023Da
idtipulcnptip_solutionare0221cerere28205063008
98Da1210cerere1881106300897Da3161cerere2690
125270032Da
Produsul cartezian
R1
R2
TARIFE:
LOCALIT:
21
R[ A j , A j ,..., Am ]
PROJECT ( R, A j , A j ,..., Am )
Reprezentarea grafic:
P
Aj,Aj,...,Am
R
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
REZ: numelenr_telefonPop Ana-Sas
Ioan0362/409209
numele,
nr_telefon
DATE_PERSOANA:
cnpnumeleadresanr_telefonemail1701205230032Pop AnaStr. Viilor, nr.55/4,
Oradea, Bihorpa@yahoo.it
2660805270023Sas IoanStr. Victoriei, nr.22/12, Baia Mare,
Maramures0362/409209-
Selecia
22
R
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 CERERI_OFERTE,
dup cum se va vedea n figura 4.10.
OFERTE VECHI:
id_ co#tipulcnp data_ inregCod_locId_ stradaNr_ imobiletajPret_minPret_
maxId_confort12oferta26608052700232006-05-27CJ14712022P45470012
Data_nreg<2006-07-03
OFERTE:
id_ co#tipulcnp data_ inregCod_locId_ stradaNr_ imobiletajPret_minPret_
maxId_confort12oferta26608052700232006-05-27CJ14712022P4547001313oferta17012052300232006-0703BV23012052230350012
Jonciunea
Notaie: R1
R2;
JOIN(R1,R2,condiie)
Reprezentarea grafic:
R3
atribut
din R1
atribut
din R2
Operator de
comparaie
R1
R2
cnpnumeleadresanr_telefonnr_
cnp
cnp
=
FACTURI:
DATE_PERSOANA:
cnp#numeleadresanr_
telefon1551212245038Pop RaduStr. Al. Cuza, nr.4/34,
Ploiesti07443045052560405570053Chis AlinaStr. Luminii, 76,
Buzau0721435622
nr_
factura#id_cocnp2243155121224
5038
Tipuri de jonciuni
n funcie de
tipul condiiilor de conectare
modul de definire a schemei
extensia relaiei rezultate prin jonciune,
vom studia:
jonciunea natural
jonciunea extern
semijonciunea.
Jonciunea natural
R1
R2
25
REZ
:
cnpnumeleadresanr_telefonnr_
cnp
cnp
=
DATE_PERSOANA:
FACTURI:
cnp#numeleadresanr_
telefon1551212245038Pop RaduStr. Al. Cuza, nr.4/34,
Ploiesti07443045052560405570053Chis AlinaStr. Luminii, 76,
Buzau0721435622
nr_
factura#id_cocnp2243155121224
5038
cod_loc
cod_loc
LOCALITATI:
cod_loc#nume_locsimbol
_judetCJ400ClujNapocaCJBV230BrasovBV
CERERI_OFERTE:
id_ co#tipulcnp data_ inregcod_locid_
stradanr_
imobilpret_
minpret_
maxtip_
solutionare12oferta17012052300232006-07-03BV230120523035da234cerere27608052700242006-0921CJ400120224547da44oferta26611112466422006-09-17MM430133450nu
Fig. 4.15. Jonciunea natural a relaiilor CERERI_OFERTE
Jonciunea extern
26
i LOCALITATI
R1
R2
cod_loc#denumiresimbol_judetdenumire430Baia
MareMMMaramures435BorsaMMMaramures400ClujNapocaCJCluj710BotosaniBT---BVBrasov
simbol_judet
simbol_judet
LOCALITATI:
JUDETE:
cod_loc#nume_locsimbol_judet430Baia
MareMM435BorsaMM400ClujNapocaCJ710BotosaniBT
simbol_judet#nume_judetMM
MaramuresCJClujBVBrasov
Semijonciunea
27
R1
R2
simbol_judet
LOCALITATI:
cod_loc#nume_locsimbol_judet430Baia
MareMM435BorsaMM400ClujNapocaCJ710BotosaniBT
JUDETE:
simbol_judet#nume_judetM
MMaramuresCJClujBVBraso
v
Intersecia
R1
R2
v350 000
ORASE:
MUNICIPII:
localitatejudetepopulatieBorsaMaram
localitatejudetepopulatieBaia
MareMaramures148
270BrasovBrasov350 000
Diviziunea
29
r
Complementarea
A2.D2
1
2
3
a) relaia R
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
nchiderea tranzitiv
31
(R) :
R:
Persoana: DUrma:
DAnaMariaAnaIonIo
Persoana: DUrma:
DAnaMariaAnaIonIo
nVasileIonNicoleta
MariaOana
nVasileIonNicoleta
MariaOanaAnaOana
AnaVasileAnaNicole
ta
a)
b)
32
33
Exemplul 1:
R2:
R1: A:DAB:DBa1b1a2b3
a 3b 2
ADAB:DBa1b1a1
b2a2b3a3b2
a) cheie simpl
b) cheie compus
STRAZI:
simbol_judet#nume_judMM
MaramuresABAlba
simbol_judecod_loc#id_strad#nume_strBVBV230120
IndependeneiBVBV230078GriiCJCJ147120Cireilor
Fig. 5.2. Chei simple i chei compuse n cadrul relaiilor JUDEE, respectiv STRZI
Observaie: Cheia relaiei JUDEE este simbol_jude deoarece fiecare jude are o
codificare unic a denumirii sale, deci fiecrui jude i corspunde un singur simbol.
Cheia relaiei STRZI 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 cheie (chei candidate).
Definiia 1. Se numete cheie 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 cheie extern atributul/grupul de atribute dintr-o relaie
R1 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
34
reprezentate prin relaiile R1 i R2. n acest caz, R 1 se numete relaie care refer, iar
R2 se numete relaie referit.
Exemplul 1:
DATE_PERSOANA:
cnpnumele simbol_
judet1701205230023Sas
IoanBV2660805270023Pop Ana
JUDETE:
simbol_judetdescriereBVBraso
vCJClujMMMaramures
CJ
JUDETE:
simbol_judet#nume_judB
VBraovCJCluj
simbol_judecod_loc#nume_locB
VBV230BraovCJCJ147Dej
STRZI: simbol_judetcod_loc#id_strada#nume_strBVBV230001
IndependeneiBVBV230002GriiCJCJ147003Cireilor
Restricia referenial
Restricia entitii
Restricia 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.
Alte restricii de integritate
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
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: cnp
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.
FACTURI:
nr_factura#data_facturiicnp12006-0705170120523002322006-06282581023457723
Fig. 5.6. Reprezentarea dependenei funcionale ntre atributele nr_factura i
data_facturii
Dependenele multivaloare
id_tip_ofertecnpsimbol_judet01170120523002
3MM012581023457723MM02170120523002
3SM012581023457723SM012581023457723S
M022581023457723CJ
deoarece
37
01
1701205230023 MM
01
2581023457723 SM
01
01
1701205230023 SM
2581023457723 MM
Dependenele de jonciune
Dac X1, X2, ...,Xm sunt m subansambluri de atribute din relaia R, spunem c
exist o dependen de jonciune de ordinul m ntre X 1, X2, ...,Xm, notat X1/ X2/ .../Xm,
dac i numai dac R reprezint jonciunea proieciilor sale pe X 1, X2, ...,Xm.
Observaie: Dac m=2. atunci are loc dependena multivaloare.
38
2.
3.
4.
5.
A1,..., An ( F ( R )) F ( A1,..., An ( R )) .
cnp#numeleadresa_ clientnr_
telefonofertaadresa_ imobilCnp1N1Str. Victoriei, nr.22/12, Baia
Mare, MaramuresNr1casaA_imobil1Cnp1N1Str. Victoriei, nr. 4/5,
Cluj-Napoca, ClujNr1halaA_imobil2Cnp2N2Str. Viilor, nr.55/4,
Oradea, BihorNr2casaA_imobil3Cnp3N3Str. Grii, nr. 14, Bucuresti
Nr3terenA_imobil4
FN4
FN5
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;
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.
Un grup repetitiv 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) FACTURI. 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.
FACTURI
nr_factura#
data_factura
nume_client
adresa_client
banca_client
nr_cont_client
delegat
cod_produs
denumire_produs
unitate_de_masura
cantiate
pret_unitar
valoare
valoare_tva
toal_valoare_factura
toal_valoare_tva
Fig. 7.3. Relaia FACTURI 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
FN1 este tratat n general cu superficialitate, deoarece principala cerin
atomicitatea valorilor este uor de ndeplinit (cel puin la prima vedere).
Dintre toate formele normale, doar FN1 are caracter de obligativitate. Se spune
c o baz de date este normalizat daca toate relaiile se afl mcar n FN 1.
O relaie este n FN1 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 FN1 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:
I. se construiete cte o relaie pentru fiecare grup repetitiv;
II. n schema fiecrei noi relaii obinute la pasul 1 se introduce i cheia
primar a relaiei R nenormalizate;
III. 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:
FACTURI
LINII_FACTURI
nr_factura#
data_factura
nume_client
adresa_client
banca_client
nr_cont_client
delegat
toal_valoare_factura
toal_valoare_tva
nr_factura#
cod_produs#
denumire_produs
unitate_de_masura
cantiate
pret_unitar
valoare
valoare_tva
LINII_FACTURI
PRODUSE
nr_factura#
data_factura
nume_client
adresa_client
banca_client
nr_cont_client
delegat
toal_valoare_factura
toal_valoare_tva
nr_factura#
cod_produs#
cantiate
pret_unitar
valoare
valoare_tva
cod_produs#
denumire_produs
unitate_de_masura
Chiar dac au fost eliminate o parte din redundane, mai rmn i alte
redundane ce se vor elimina aplicnd alte forme normale.
LINII_FACTURI
PRODUSE
CLIENTI
nr_factura#
data_factura
nume_client
delegat
toal_valoare_factura
toal_valoare_tva
nr_factura#
cod_produs#
cantiate
pret_unitar
cod_produs#
denumire_produs
unitate_de_masura
nume_client#
adresa_client
banca_client
nr_cont_client
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.
LINII_FACTURI
PRODUSE
CLIENTI
FACTURI
nr_factura#
data_factura
delegat
nr_factura#
cod_produs#
cantiate
pret_unitar
cod_produs#
denumire_produs
unitate_de_masura
cod_client#
nume_client
adresa_client
banca_client
nr_cont_client
52
Operatori SQL
SQL are urmtorii operatori:
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 IN (v1,...,vn) compar A cu o list de valori
A IS NULL
A IS NOT NULL
A LIKE 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
UNION (reuniune)
INTERSECT (intersecie)
MINUS (diferena).
Funcii definite n SQL
Funcii 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);
MIN (returneaz valoarea cea mai mic dintr-o coloan);
AVG (calculeaz media valorilor dintr-o coloan).
Aceste funcii vor fi folosite n instruciunea SELECT.
Funcii scalare
funcii numerice
- de calcul trigonometric: sin, cos, tg, ctg etc.
- de calcul al logaritmului: ln, log, lg
54
Tipuri de date
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.
Tipul numeric include
CHARACTER (n) sau CHAR (n) definesc iruri de caractere cu lungimea fix.
CHARACTER VARYING 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.
BIT (n) definete secvene de cifre binare (care pot lua valoarea 0 sau 1) de
lungime finit n;
BIT VARYING (n) definete secvene de lungime variabil, cu limita maxim n.
56
57
58
59
60
MODIFY
(nume_atribut
61
63
65
Datele se pot ordona dup orice cmp. Ordonarea se poate face att
cresctor ct i descresctor. Sintaxa pentru interogarea
66
Interogarea 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 CERERI_OFERTE, LOCALITATI
WHERE CERERI_OFERTE.tipul=oferta AND
CERERI_OFERTE.cod_loc=LOCALITATI.cod_loc;
Observaii: Clauza FROM specific dou relaii. Clauza SELECT cuprinde valori
din relaia CERERI_OFERTE i din relaia LOCALITATI, 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.
67
CURS 12. Limbaje relaionale de manipulare a datelor (LMD) Interogarea 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 join. 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.
Tipuri de asocieri pentru relaii
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.
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:
CERERI_OFERTE
id_co #
tip
cnp
data_inreg
tip_solutionare
cod_loc
id_strada
nr_imobil
pret_min
pret_max
1:1
DESCRIERE_IMOB IL
id_co#
tip_imobil
etaj
nr_camere
suprafata
garaj
centrala_termica
termopane
Exemplu:
B
A
JUDETE
simbol_judet#
nume_judet
1:n
LOCALITATI
cod_loc#
simbol_judet
nume_judet
B
1:n
LOCALITATI
cod_loc#
simbol_judet
nume_judet
1:n
STRAZI
id_strada#
cod_loc#
nume_str
Un alias este o redenumire fie a unui cmp, 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
69
a) Sintaxa
SELECT ...FROM tabel_A INNER JOIN tabel_B (condiii de join)
selecteaz toate informaiile din relaiile A i B care corespund condiiilor de asociere.
70
CO,
2) Folosind WHERE
SELECT DP.numele, CO.id_co, S.nume_str, DI.tip_imobil,
L.nume_loc
FROM DATE_PERSOANA DP, CERERI_OFERTE CO,
STRAZI S, LOCALITATI L, DESCRIERE_IMOBIL DI
WHERE 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=DI.id_co AND
L.cod_loc LIKE 'MM%'
ORDER BY L.nume_loc, S.nume_str;
3) Folosind INNER JOIN i WHERE
SELECT DP.numele, CO.id_co, S.nume_str, DI.tip_imobil,
L.nume_loc
FROM DATE_PERSOANA DP INNER JOIN
CERERI_OFERTE CO ON (DP.cnp=CO.cnp)
INNER JOIN STRAZI S ON (CO.id_strada=S.id_strada )
INNER JOIN LOCALITATI L ON (CO.cod_loc=L.cod_loc )
INNER JOIN DESCRIERE_IMOBIL DI ON
(CO.id_co=DI.id_oferta)
WHERE L.cod_loc LIKE 'MM%' AND CO.tipul='oferta'
ORDER BY L.nume_loc, S.nume_str;
b) Sintaxa
SELECT ...FROM tabel_A LEFT OUTER JOIN 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 CERERI_OFERTE CO LEFT OUTER JOIN
DESCRIERE_IMOBIL DI ON (CO.id_co=DI.id_co )
WHERE CO.tipul='oferta';
Observaie: Ordinea n care se scrie denumirea relaiei n sintaxa LEFT OUTER
JOIN 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 exterior.
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, DI.tip_imobil,
72
73
CURS 13. Limbaje relaionale de manipulare a datelor (LMD) Interogarea datelor din mai multe relaii (continuare)
este
SELECT Cmp 1, Cmp 2, ..., Cmp n
FROM Tabel 1
UNION (ALL)
SELECT Cmp 1A, Cmp 2A,..., Cmp nA
FROM Tabel 2
i returneaz nregistrri distincte, dac este folosit instruciunea UNION i toate
nregistrrile, dac se folosete UNION ALL. Astfel operatorul UNION elimin
duplicatele, iar UNION 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 UNION se folosete atunci cnd ntre relaii nu exist o asociere
direct.
Exemplul 1: Pentru exemplificare se vor considera relaiile: PROFESORI (prof_id,
nume, prenume), respectiv STUDENTI (stud_id, nume, prenume). Selectai lista
numelor tuturor profesorilor i a studenilor.
SELECT nume, prenume FROM PROFESORI
UNION ALL
SELECT nume, prenume FROM STUDENTI;
Rezultatul generat de interogare va fi
numeprenumePOPVAS
ILEIONANA
Fig. 13.1. Interogarea mai multor relaii folosind operatorul UNION 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
CERERI_OFERTE ct i din tabela FACTURI.
SELECT cnp, id_co FROM FACTURI
UNION ALL
SELECT cnp, id_co FROM CERERI_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 CERERI_OFERTE (acest neajuns va fi nlturat utiliznd
concatenarea):
74
Fig. 13.2. Interogarea mai multor relaii folosind operatorul UNION ALL (cazul neclar)
Fig. 13.3. Interogarea mai multor relaii folosind concatenarea (cazul mai clar)
Observaie: Concatenarea prezint dezavantajul afirii cmpurilor null.
a)
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 CERERI_OFERTE, fr a
da un nume rezultatului, apoi cu nume pentru cmpul rezultat.
SELECT MAX(data_inreg) FROM CERERI_OFERTE;
SELECT MAX(data_inreg) AS data_ultimei_nregistrari FROM
CERERI_OFERTE;
b)
Funcia MIN este o funcie similar cu funcia MAX, cu ajutorul creia se poate
determina valoarea cea mai mic dintr-un cmp.
Att funcia MIN ct i funcia MAX se poate aplica doar pentru tipurile de date
numeric sau dat calendaristic.
c)
d)
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, CERERI_OFERTE CO, LOCALITATI L,
STRAZI S
WHERE CO.cod_loc=L.cod_loc
AND CO.id_strada=S.id_strada
AND L.simbol_judet=J.simbol_judet
GROUP BY J.nume_judet;
80
a)
b)
c)
d)
->buna?
LTRIM(str): elimin spaiile de la stnga valorii str;
SELECT LTRIM(' barbar');
->barbar
RTRIM(str): elimin spaiile de la dreapta valorii str;
SELECT RTRIM('barbar
');
->barbar
TRIM: eliminarea simultan a spaiillor la stnga i la dreapta;
SELECT TRIM(' bar ');
->bar
SUBSTR(sir,n): extragerea unei poriuni dintr-un ir ncepnd cu a n-a liter;
SELECT SUBSTRING('Paralelipiped',5);
->lelipiped
CEIL(p): ntoarce cel mai mic ntreg mai mare sau egal cu argumentul p;
SELECT CEIL(1.23);
->2
SELECT CEIL(-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);
82
->-1.9
SELECT TRUNCATE(122,-2);
->100
c) Funcii pentru date calendaristice
-
84
85
SINTEZ I EXERCIII
1. Cei opt operatori iniiali
a
b
c
Restricia
x
y
Proiecia
Reuninuea
a
a
b
b
c
c
x
y
x
y
x
y
Produs
Intersecia
Diferena
a1
a2
a3
b1
b1
b2
b1
b2
b3
c1
c2
c3
a1
a2
a3
b1
b1
b2
c1
c1
c3
a
b
c
a
a
a
b
c
x
y
z
x
y
x
z
Uniune(natural)
mprirea
86
2. Teste
Curs 1 - Exerciii
1.
2.
3.
4.
5.
6.
7.
87
Curs 2- Exerciii
8.
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
10.
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?
12.
Ce se nelege prin cardinalitate?
13.
Numii trei tipuri de asocieri ntre entiti.
14.
Pentru baza de date FURNIZORI_COMPONENTE descris mai jos, n figura
2, precizai tipurile de relaionri ntre relaiile F,C, respectiv FC, apoi realizai
diagrama E-R.
15.
Dai exemple de:
- o relaie de tip muli la muli
- o relaie de tip unu la unu
- o relaie de tip unu la muli.
16.
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?
17.
Desenai diagrama entitate-relaie (preciznd i tipul asocierilor) pentru
urmtoarea baz de date COLECTIE_MUZICA: 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).
88
Curs 3- Exerciii
18.
89
Curs 4- Exerciii
22.
32.
Fie baza de date FURNIZORI_COMPONENTE modelat de urmtoarele
valori eantion:
F F#numeFStareorasF1Pop20BucurestiF2Achim
FC F#C#cantF1C1300F
10PloiestiF3Ardelean30PloiestiF4Popescu20B
ucurestiF5Ionescu30Vaslui
C C#numeCCuloareMasaorasC1piulitaRosu12.0Bucuresti
1C2200F1C3400F1
C4200F1C5100F1C
6100F2C1300F2C24
00F3C2200F4C2200
F4C4300F4C5400
C2BoltVerde17.0PloiestiC3Surubalbastru17.0AradC4Su
rubRosu14.0BucurestiC5CamaAlbastru12.0PloiestiC6R
oata dintatarosu19.0Bucuresti
91
Curs 5- Exerciii
37.
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.
38.
Explicai urmtoarele noiuni:
- restricii de integritate
- cheia primar a unei relaii
- cheia extern a unei relatii
- relaie care refer
- relaie referit.
39.
n baza de date FURNIZORI_COMPONENTE, dai exemple de
a) chei primare i secundare
b) chei simple i chei compuse
c) relaie care refer i relaie referit.
40.
Precizai care sunt restriciile de integritate minimal ale modelului relaional,
apoi enunai aceste restricii.
41.
Ce nseamn dependen funcional? Dai dou exemple de DF.
42.
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?
43.
Fie relaia F_O_C din figura urmtoare:
F_O_C
F#orasC#cantF1BrasovC11
00F1BrasovC2100F2IasiC
1200F2IasiC2200F3IasiC2
300F4BrasovC2400F4Bras
ovC4400F4BrasovC5400
92
93
Curs 9- Exerciii
50.
94
Caracteristici
NOT NULL
Valoare implicit 0
Tipul
INTEGER(4)
VARCHAR(25)
VARCHAR(25)
VARCHAR(20)
INTEGER(4)
DATE
NUMBER
CHAR(10)
DECIMAL(9,2)
TIP
95
CONSTRNGERE
cod_ang
nume
prenume
data_nasterii
functia
INTEGER(4)
VARCHAR(25)
VARCHAR(25)
DATE
VARCHAR(9)
sef
INTEGER(4)
data_angajarii
email
salariu
cod_dept
DATE
VARCHAR(20)
DECIMAL(12,3)
INTEGER(4)
Cheie primar
NOT NULL
data_nasterii<data_angajarii
NOT NULL
Refer ca i cheie extern
cod_ang din acelai tabel
unic
>0
NOT NULL
Combinaia NUME +
PRENUME s fie unic
iar
apoi
recreai-l
implementnd
toate
Observaie: Constrngerea de tip NOT NULL se poate declara doar la nivel de coloan.
96
97
DEPARTMENTS
79.
Department_id
Department_name
Manager_id
Location_id
EMPLOYEES
employee_id
first_name
last_name
salary
Manager_id
Department_id
Job_id
Location_id
belongs to
Located in
LOCATIONS
location_id
country_id
street_address
city
is manager of
has job
JOBS
job_id
job_title
min_salary
max_salary
Located in (2)
COUNTRIES
country_id
country_name
region_id
Located in
(3)
JOB_HISTORY
employee_id
start_date
end_date
job_id
department_id
REGIONS
region_id
region_name
98
JOB_GRADES
Grade_level
Lowest_sal
Highest_sal
99
100
101
BAZE DE DATE.........................................................................................................................1
CAPITOLUL I. PROIECTARE (DESIGN) DE DATE (9 sapt.)................................................1
CURS 1. Preliminarii..............................................................................................................1
1.1.
Noiuni folosite n teoria bazelor de date................................................................1
1.2.
Funcionarea unei baze de date...............................................................................2
1.3
Realizarea unei baze de date...................................................................................3
CURS 2. Construirea de diagrame entitate-relaie..................................................................6
CURS 3. Proiectarea modelului relaional............................................................................15
3.1 Structura relaional a datelor...................................................................................15
CURS 4. Operatorii modelului relaional.............................................................................18
3.2 Operatorii modelului relaional..................................................................................18
CURS 5. Restricii de integritate ale modelului relaional...................................................32
3.3 Restricii de integritate ale modelului relaional.........................................................32
CURS 6. Prelucrarea/evaluarea i optimizarea cerinelor.....................................................38
CURS 7. Tehnica normalizrii relaiilor...............................................................................43
7.1 Prima form normal (FN1)........................................................................................44
7.2. A doua form normal (FN2)......................................................................................48
CURS 8. A treia form normal............................................................................................49
7.3. A treia form normal (FN3)......................................................................................49
CAPITOLUL II. SQL (9 sapt.).................................................................................................51
CURS 9. Limbajul SQL........................................................................................................51
CURS 10. Limbaje relaionale de definire a datelor (LDD).................................................56
CURS 11. Limbaje relaionale de manipulare a datelor (LMD) - Interogarea datelor.........63
CURS 12. Limbaje relaionale de manipulare a datelor (LMD) - Interogarea datelor din mai
multe relaii...........................................................................................................................67
CURS 13. Limbaje relaionale de manipulare a datelor (LMD) - Interogarea datelor din mai
multe relaii (continuare).......................................................................................................73
Curs 14. Funcii utilizate n interogri..................................................................................80
SINTEZ I EXERCIII.........................................................................................................85
102
Bibliografie
1. Baze de date-Organizare, proiectare i implementare- Ion Lungu, Constanta Bodea,
Georgeta Bdescu, Crsitian Ioni, Ed. ALL Educational, Bucureti, 1995.
2. Proiectarea bazelor de date. Normalizare i postonormalizare. Implementri SQL i
Oracle- Marin Fotache, Ed. Polirom.
3. Baze de date relaionale - proiectare i implementare- Ileana Popescu, Editura
Universitii din Bucureti, 1996.
4. Transact SQL- tefan Ardeleanu, Ed. Niculescu.
5. SQL. Dialecte DB2, Oracle i Visual FoxPro- Marin Fotache, Polirom, 2001.
6. Oracle 9i2. Ghidul dezvoltrii aplicaiilor profesionale- Marin Fotache, Ctlin
Strmbei, Liviu Creu, Polirom, 2003.
103