34
BAZE DE DATE Capitolul I BAZE DE DATE Bibliografie 1. Abiteboul S., R.Hull, V.Vianu “Foundations of Databases”, Addison-Wesley, Reading, MA, 1995. 2. Chandra, A. K., D. Harel “Structure and complexity of relational queries”, J. Computer and Systems Sciences 25:1, pp.99-128. 3. Date, C.J. “Baze de date”, traducere de Simona Preda si Titi Preda, editura PLUS, 2005. 4. Date, C.J., H. Darwen “A Guide to the SQL standard”, Addison-Wesley, Reading, MA, 1997.

Capitol 1

Embed Size (px)

Citation preview

Page 1: Capitol 1

BAZE DE DATE – Capitolul I

BAZE DE DATE

Bibliografie

1. Abiteboul S., R.Hull, V.Vianu – “Foundations of

Databases”, Addison-Wesley, Reading, MA, 1995.

2. Chandra, A. K., D. Harel – “Structure and

complexity of relational queries”, J. Computer and

Systems Sciences 25:1, pp.99-128.

3. Date, C.J. – “Baze de date”, traducere de Simona

Preda si Titi Preda, editura PLUS, 2005.

4. Date, C.J., H. Darwen – “A Guide to the SQL

standard”, Addison-Wesley, Reading, MA, 1997.

Page 2: Capitol 1

BAZE DE DATE – Capitolul I

5. Date, C.J., Hugh Darwen – “A Guide to the SQL

Standard”, Reading Mass., Addison-Wesley, 1997.

6. Date, C.J. – “A Critique of the SQL Database

Language”, ACM SIGMOD Record 14, N.3, 1984.

7. Dubois, Paul – “MySQL” , traducere în limba

română, Editura Teora, 2001.

8. England K. – “Microsoft SQL Server 200

Performance Optimization and Tuning Handbook”,

Digital Press, 2001.

9. Fagin, R. – “On an authorization mechanism”, ACM

Transactions on Database systems, 3:3, pp.310-319,

1978.

10. Fehily, C. – “SQL visual quickstart guide”,

traducere în limba română, Editura B.I.C. ALL, 2004.

Page 3: Capitol 1

BAZE DE DATE – Capitolul I

11. V.Felea: Baze de date relationale. Dependente.

Editura Universitatii “Al.I.Cuza” Iasi, 1996

12. V.Felea, C.Matei si M.Balta: Interogarea bazelor

de date, Aplicatii in Oracle si SQL Server, Editura

MATRIXROM Bucuresti 2005.

13. V.Felea: Elemente ale implementarii modelului

relational in Sisteme de Gestiune de Baze de Date”,

Editura MATRIX-ROM, Bucuresti 2007.

14. Fotache Marin, Catalin Strimbei, Liviu Cretu –

“ORACLE 9i2, Ghidul dezvoltarii aplicatiilor

profesionale”, Editura Polirom, 2003.

15. Garcia-Molina Hector, Jeffrey D.Ullman,

Jennifer Widom – “Database Sistems: The complete

book”, Pearson Education International, 2002.

Page 4: Capitol 1

BAZE DE DATE – Capitolul I

16. Gulutzan, P., T.Pelzer – “SQL-99 Complete,

Really, R&D Books”, Lawrence, KA, 1999.

17. Gulutzan P., Peltzer T. – “SQL Performance

Tuning”, Addison Wesley, 2002

18. Lorie, R.A., J.F. Nilsson – “An Access

Specification Language for a Relational Data Base

System”, IMB J. R&D, 23, 3, 1979.

19. Lorie, R.A., J.J. Daudenarde – “SQL and its

Applications”, Englewoods Cliffs, N.J.,

Prentice_Hall,1991.

20. Melton, J., A.R.Simon – “SQL-1999-

Understanding Relational Components”, San

Francisco, Calif., Morgan-Kaufmann, 2002.

Page 5: Capitol 1

BAZE DE DATE – Capitolul I

21. Melton, J., A.R.Simon – “Understanding the

New SQL: A Complete Guide”, Morgan-Kaufmann,

San Francisco, 1993.

22. Palinski, J.A. – “Oracle SQL and PL/SQL

Handbook”, Addison-Wesley, 2003.

23. Perkins, J. şi Bryan Morgan – “SQL fără

profesor în 14 zile”, traducere în limba română,

Editura Teora, 1997.

24. Popescu, Ileana, “Oracle8. – “Prelucrarea

avansata a informatiei”, Editura Tehnica, Bucuresti,

1999.

25. Riordan R. – “Designing Relational Database

Systems”, Microsoft Press, 1999.

Page 6: Capitol 1

BAZE DE DATE – Capitolul I

26. Rozenshtein, D.A., Abramovich and E.Birger –

“Optimizing Transact-SQL: Advanced Programming

Techniques”, Fremont, Calif., SQL Forum Press,

1995.

27. Sheldon R., Wilansky E. – “MCSE Training Kit

: Microsoft SQL Server 2000 Database Design and

Implemention”, Microsoft Press, 2001

28. Smith, J.M., P.Y.Chang – “Optimizing the

performance of a relational algebra database

interface”, Comm. ACM 18:10 (1975), pp.568-579.

29. Stonebraker M., J.M. Hellerstein (eds) –

”Reading in Databases Systems”, Morgan-

Kaufmann, Sab Francisco, 1998.

Page 7: Capitol 1

BAZE DE DATE – Capitolul I

30. Ullman J.D. – “Principles of Database and

Knowledge-Base Systems”, Volume I, Computer

Science Press, New York, 1988.

31. Ullman J.D. – “Principles of Database and

Knowledge-Base Systems”, Volume II, Computer

Science Press, New York, 1989.

32. Urman, S. – “Oracle 9i PL/SQL Programming”,

Osborne/McGraw-Hill, 2002.

33. Welling, L., Laura Thomson – “Dezvoltarea de

aplicaţii WEB cu PHP si MySQL”, traducere în

limba română, Editura Teora, 2004.

Page 8: Capitol 1

BAZE DE DATE – Capitolul I

CAPITOLUL I

ELEMENTE ALE MODELULUI

RELAŢIONAL

Considerăm o mulţime nevidă, finită de simboluri,

notată cu U. Numim elementele lui U atribute.

Fie U = {A1, A2, …, An}. Fiecărui atribut Ai îi vom

asocia o mulţime nevidă de valori notată dom(Ai), care va

fi numită domeniul valorilor atributului Ai. Această

mulţime dom(Ai) este numită şi mulţime valorilor posibile

pentru Ai, 1 i n.

Vom numi uplu peste U o aplicaţie, notată , : U

Uni1

dom(Ai), astfel încât ( Ai) dom(Ai), 1 i n.

Page 9: Capitol 1

BAZE DE DATE – Capitolul I

Pentru fiecare uplu peste U putem să-i asociem

mulţimea {A1:V1, A2 : V2, …, An : Vn}, unde Vi = ( Ai),

1 i n.

Invers, dacă este dată mulţimea {A1:V1, A2 : V2, …,

An : Vn}, cu Vi dom(Ai), 1 i n, atunci putem

defini uplul peste U prin (Ai) = Vi , 1 i n. Deci

există o corespondenţă biunivocă între mulţimea de uple

peste U şi mulţimea mulţimilor de forma considerată. Mai

mult, dacă ordonăm mulţimea de atribute ale lui U sub

forma: U = (A1, A2, …, An), atunci în locul mulţimii

{A1:V1, A2 : V2, …, An : Vn} se poate considera numai

vectorul (V1, V2, …,Vn).

Page 10: Capitol 1

BAZE DE DATE – Capitolul I

În sisteme de gestiune de baze de date (FOX,

DBASE, ORACLE, etc.) se lucrează cu astfel de ordonări.

Vom privi uplele atât ca aplicaţii, cât şi ca vectori,

considerând U ordonată.

(i) Relatia ca set.

O relaţie peste U, notată r, este o mulţime de uple

peste U. În cazul în care mulţimea de uple este vidă,

spunem că relaţia este vidă. În cazul în care mulţimea de

uple este finită, spunem că relaţia este finită.

Rezultă că într-o astfel de relaţie nu putem avea două

uple identice.

Page 11: Capitol 1

BAZE DE DATE – Capitolul I

Ca operaţii de actualizare a unei relaţii putem avea

adăugarea de noi uple, ştergerea unor uple, modificarea de

uple.

În prelucrarea unei relaţii, mulţimea de uple variază

în timp, ceea ce este constant în timp este structura sa,

adică numele relaţiei, împreună cu mulţimea de atribute.

Să notăm această structură prin R(U) sau R[U], sau R(A1,

A2, …, An) sau R[A1, A2, …, An], unde R este un simbol

numit numele relaţiei, iar U sau {A1, A2, …, An} este

mulţimea de atribute corespunzătoare.

R(U) poartă denumirea şi de schemă de relaţie.

În cazul în care r este o relaţie finită peste U şi U se

ordonează sub forma (A1, A2, …, An), atunci rezultă o

reprezentare a lui r sub forma unui tablou:

Page 12: Capitol 1

BAZE DE DATE – Capitolul I

r

A1 A2 … An

V1

1

V12 … V1n

……….

Vh1 Vh2 … Vhn

unde (Vi1, Vi2, …,Vin) constituie un uplu din r, 1 i

h. Avem Vij dom(Aj), 1 j n, 1 i h.

Din acest motiv, în majoritatea sistemelor de gestiune

de baze de date, structurile de date ce memorează aceste

relaţii se numesc tabele, iar uplele se numesc linii.

Page 13: Capitol 1

BAZE DE DATE – Capitolul I

O schemă de baze de date, notată D, este o mulţime

finită de scheme de relaţie: D = {R1[U1],…., Rp[Up]},

unde Rj[Uj] este o schemă de relaţie, 1 j p.

O bază de date peste schema de baze de date D, este

o aplicaţie ce asociază fiecărei scheme de relaţie Rj[Uj] o

relaţie rj peste Uj, 1 j p. Dacă D se consideră ordonată

sub forma (R1[U1], …, Rp[Up]), atunci baza de date este

un vector de relaţii, notat r = (r1, r2, .., rp).

Structura unei relaţii se numeşte partea sa

intensională, iar uplele relaţiei poartă denumirea de partea

sa extensională.

Operaţii referitoare la relaţii:

a) Proiecţia unei relaţii.

Page 14: Capitol 1

BAZE DE DATE – Capitolul I

Fie t un uplu peste R[U] şi X o submulţime a lui U.

Proiecţia lui t relativ la X, notată prin t[X] este restricţia

lui t (ca uplu) la submulţimea X. Aici t este considerat ca

aplicaţie. Dacă X este mulţimea vidă, atunci t[X] il vom

considera uplul vid. Dacă U este ordonată sub forma

(A1,A2,…,An), iar în această ordonare X=(Ai1,Ai2,…,Aik),

cu i1<i2<…<ik şi X=(V1,V2,…,Vn), atunci t[X]

=(Vi1,Vi2,…,Vik). Dacă r este o relaţie peste U, atunci

proiecţia lui r relativă la X, notată r[X] va fi definita prin:

r[X]={t[X] / t r}.

b) Reuniunea a două relaţii.

Fie r1 şi r2 relaţii peste R[U]. Atunci r1 r2 notează

reuniunea celor două şi se defineşte ca:

Page 15: Capitol 1

BAZE DE DATE – Capitolul I

r1 r2={t / t uplu, t r1 sau t r2}

c) Diferenţa a două relaţii.

Fie r1 şi r2 relaţii peste R[U]. Diferenţa lor, notată r1-r2 se

defineşte astfel:

r1-r2={t / t uplu, t r1 şi t r2}

d) Unire (join) oarecare.

Fie relaţiile ri definite peste Ri[Ui], i=1,2 U1 U2= .

Fie A 1, A 2,…, A q U1, B 1, B 2,…, B q U2 şi i un

operator de comparare între dom(A i) şi dom(B i), 1 i q.

Sintactic i este unul din operatorii =, <, >, <=, >=, <>.

Deci i este o relaţie binară pe dom(A i) dom(B i).

Page 16: Capitol 1

BAZE DE DATE – Capitolul I

Rezultă că cele două domenii conţin valori comparabile

prin i. Considerăm =( A 1 1B 1) … ( A q qB q),

unde semnul “ ” reprezintă conjuncţia.

Join-ul oarecare între r1 şi r2 prin expresia se notează

prin r1 r2 şi se defineşte prin:

r1 r2={t / t uplu peste U1 U2, t[Ui] ri, i=1,2 şi

t[A j] jt[B j], j=1,q}

Se pot defini expresii de tip mai generale decit cea de

sus, folosind parantezele şi operatorii de conjuncţie şi

disjuncţie ( , respectiv ) astfel:

- o expresie elementară este de forma A B, unde A şi B

sunt atribute, iar este operator de comparare.

- o expresie join se defineşte astfel:

Page 17: Capitol 1

BAZE DE DATE – Capitolul I

1. Dacă e este o expresie elementară, atunci e şi (e) sunt

expresii join.

2. Dacă e1 şi e2 sunt expresii join, atunci e1 e2, e1 e2,

(e1 e2), (e1 e2) sunt expresii join.

3. Orice expresie join se obţine numai prin regulile 1 şi 2.

Dacă este o expresie join, atunci se defineşte faptul că

(t1,t2) satisface în mod recursiv, t1 r1, t2 r2.

1. (t1,t2) satisface A B dacă t1[A] t2[B].

2. (t1,t2) satisface e1 e2 şi (e1 e2) dacă (t1,t2) satisface e1

şi e2.

3. (t1,t2) satisface e1 e2 şi (e1 e2), dacă (t1,t2) satisface e1

sau e2.

Page 18: Capitol 1

BAZE DE DATE – Capitolul I

În acest caz joinul oarecare se defineşte prin:

r1 r2={(t1,t2) / (t1,t2) uplu peste U1 U2, ti ri, i=1,2 şi

(t1,t2) satisface }

e) Produsul cartezian.

Fie ri relaţii definite peste Ri[Ui], i=1,2 şi U1 U2= .

Produsul cartezian al relaţiilor r1 şi r2 se noteaza prin r1 r2

şi se defineşte prin: r1 r2={t / t uplu peste U1 U2,

t[Ui] ri, i=1,2}

Obs. Produsul cartezian este un join oarecare cu expresia

join =TRUE.

Page 19: Capitol 1

BAZE DE DATE – Capitolul I

f) Unirea naturală (join natural)

Fie ri relaţii peste Ri[Ui], i=1,2. Se numeşte join natural

sau unire a celor două relaţii, notat r1*r2 o relaţie peste

U1 U2 definită prin:

r1*r2={t / t uplu peste U1 U2, t[Ui] ri, i=1,2}

Fie R un nume pentru relaţia peste U1 U2. Deci relaţia

r1*r2 va fi considerată peste schema R[U1 U2].

Considerăm un exemplu pentru operaţia de join natural.

Fie R1[ABCD], R2[CDE] şi relaţiile r1 şi r2 date astfel:

Page 20: Capitol 1

BAZE DE DATE – Capitolul I

C D E

r2 0 0 0 V1

1 1 1 V2

1 1 0 V3

1 0 0 V4

1 0 1 V5

A B C D

r1 1 0 0 0 t1

1 1 0 0 t2

0 1 0 1 t3

0 0 0 1 t4

1 1 1 1 t5

Page 21: Capitol 1

BAZE DE DATE – Capitolul I

Joinul natural va fi:

r1*r2=

A B C D E

1 0 0 0 0

1 1 0 0 0

1 1 1 1 1

1 1 1 1 0

A B C D E

1 0 0 0 0

1 1 0 0 0

1 1 1 1 1

1 1 1 1 0

A B C D E

1 0 0 0 0

1 1 0 0 0

1 1 1 1 1

1 1 1 1 0

A B C D E

1 0 0 0 0

1 1 0 0 0

1 1 1 1 1

1 1 1 1 0

Page 22: Capitol 1

BAZE DE DATE – Capitolul I

Se observă că uplele t3 şi t4 din r1 nu contribuie la

construcţia joinului, deoarece nu există uple Vj r2, astfel

încît t3[CD]=Vj[CD], şi nu există uple Vj r2, astfel încît

t4[CD]=Vj[CD]. La fel uplele V4 şi V5 din r2 nu contribuie

la formarea joinului, deoarece V4[CD]=V5[CD] r1[CD].

Să remarcăm faptul că perechea (ti,Vj), ti r1, Vj r2

contribuie la formarea joinului, dacă ti[CD]=Vj[CD].

În acest caz, va rezulta un uplu în joinul natural, notat w,

definit prin: w[U1]=ti[U1], w[U2-U1]=Vj[U2-U1].

Se observă uşor următoarele relaţii:

1. (r1*r2)[U1] r1, (r1*r2)[U2] r2.

2. Dacă r1 ={t1 / t1 r1, t2 r2, a.î., t1[U1 U2]=t2[U1 U2]}

şi r2 ={t2 / t2 r2, t1 r1, a.î., t1[U1 U2]=t2[U1 U2]}

Page 23: Capitol 1

BAZE DE DATE – Capitolul I

şi r1 =r1-r1 , r2 =r2-r2 , atunci

r1*r2= r1 *r2 , (r1*r2)[U1]=r1 , (r1*r2)[U2]=r2 .

3. Dacă 1

r r1 şi 2

r r2 satisfac relaţia 21

rr =r1*r2, atunci

r1 1r şi r1 2

r , adică relaţiile r1 , r2 sunt minimale în r1

respectiv r2 cu proprietatea r1 * r2 =r1* r2. În cazul în

care U1 U2= , atunci este clar că joinul natural este

tocmai produsul cartezian r1 r2.

Operaţia de join natural se poate extinde la mai multe

relaţii.

Fie ri peste Ri[Ui], i=1,h. Joinul natural al acestora se

notează prin

r1*r2* …*rh sau *<ri,i=1,h>, sau * <ri,i=1,h> şi se

defineşte prin:

Page 24: Capitol 1

BAZE DE DATE – Capitolul I

r1*r2* …*rh={t / t uplu peste U1 … Uh, a.î. t[Ui] ri,

i=1,h}

Este clar că operaţia de join natural nu depinde de ordinea

considerării relaţiilor ri, i=1,h.

Dacă notăm cu *2 operaţia de join natural între două

relaţii şi cu *h operaţia de join natural între h relaţii, apare

următoarea problemă:

Problema 1. Operaţia *h se poate exprima cu ajutorul

operaţiei *2 ?

Răspunsul la problema 1 este NU. Demonstraţi.

Page 25: Capitol 1

BAZE DE DATE – Capitolul I

g) Selecţia.

Fie r o relaţie peste R[U].

Definim întâi expresia elementară de selecţie prin:

A B sau A c sau c B, unde A,B U, iar c este o

constantă, comparabilă cu elementele din dom(A) şi

dom(B).

Dacă e1 şi e2 sunt expresii elementare de selecţie, atunci

(e1), e1 e2, e1 e2, (e1 e2), (e1 e2) este o expresie de

selecţie. Orice expresie de selecţie se obţine numai prin

regulile de mai sus. Fie E o expresie de selecţie.

Precizăm cazul în care uplul t satisface E.

Dacă E A B, atunci t satisface E, dacă t[A] t[B].

Dacă E A c, atunci t satisface E, dacă t[A] c.

Dacă E c B, atunci t satisface E, dacă t satisface c t[B].

Page 26: Capitol 1

BAZE DE DATE – Capitolul I

Dacă E e1 e2, atunci t satisface E, dacă t satisface e1 şi e2.

Dacă E e1 e2, atunci t satisface E, dacă t satisface e1 sau t

satisface e2.

Fie F o expresie de selecţie.

Selecţia se notează prin F(r) şi se defineşte prin:

F(r)={t / t uplu peste R[U], t satisface F}.

h) Intersecţia relaţiilor.

Fie ri relaţii peste Ri[Ui], i=1,2 şi U1=U2.

Atunci intersecţia se defineşte prin:

r1 r2={t / t uplu peste U1, a.î. t r1 şi t r2}

Se arată că o parte din operaţiile cu relaţii se exprimă cu

ajutorul altor operaţii. Mulţimea de operaţii: reuniune,

diferenţă, produs cartezian, proiecţie şi selecţie se arată a

Page 27: Capitol 1

BAZE DE DATE – Capitolul I

fi minimală cu proprietatea că celelalte operaţii se

exprimă cu ajutorul acestora.

(ii) Relatia ca multiset

Fie schema R(U). O relatie ca multiset peste R(U) este un

multiset de uple peste U.

r={u1:m1,…, uh:mh}.

Orice relatie de tip set este multiset. Operatii:

a) Proiectia. r={u1:m1,…, uh:mh} peste R(U) si X

<=U, r[X]

vi=ui[X], consideram v1:m1,…, vh:mh , vi pot fie

egale. Se grupeaza toate egale si se aduna

Page 28: Capitol 1

BAZE DE DATE – Capitolul I

multiplicitatile pentru cele egale.

A B C D mi

---------------------

0 0 0 0 3

0 0 1 0 2

0 0 0 1 4

1 1 0 1 2

1 1 1 2 1

--------------------

X=AB,

v1[X]=(0 0) : 3

v2[X]=(0 0) : 2

v3[X]=(0 0) : 4 r[X]={(0 0):9, (1 1):3}.

Page 29: Capitol 1

BAZE DE DATE – Capitolul I

v4[X]=(1 1) : 2

v5[X]=(1 1) : 1

--------------------

b) Reuniunea a doua relatii:

r1={u1:m1, …, uh:mh}, r2={v1:n1,…, vp:np}, peste

R(U).

r1 r2 ={w1 : q1,…, wl: ql }, u1,…, uh, v1,…, vp,

For i=1 to h

1) If exista vj astfel incat ui= vj , atunci wα= ui,

qα=mi+nj,

2) altfel wα= ui, qα=mi

endfor

Page 30: Capitol 1

BAZE DE DATE – Capitolul I

For j=1 to p

3) If vj ≠ ui, for all i=1,h, atunci wα= vj, qα=nj

Endfor

Exemplu: r1 = {(0 0):2,(0 1):3, (1 0):2},

r2 = {(0 0):1,(1 1):3},

r1 r2 ={(0 0):3, (0 1):3, (1 0):2, (1 1):3}

c) Diferenta a 2 relatii multiset.

r1={u1:m1, …, uh:mh}, r2={v1:n1,…, vp:np}, peste

R(U).

r1 r2 ={w1 : q1,…, wl: ql },

For i=1 to h

4) If exista vj astfel incat ui= vj , si mi > nj, atunci

wα= ui, qα=mi-nj, altfel

Page 31: Capitol 1

BAZE DE DATE – Capitolul I

5) If exista vj astfel incat ui= vj , si mi <= nj, atunci

continue,

6) altfel wα= ui, qα=mi

endfor

d) Joinul oarecare.

r1={u1:m1, …, uh:mh}, peste R1(U1), r2={v1:n1,…,

vp:np}, peste R2(U2), U1 U2 =Φ,

r1 θ r2= {w : q | w peste U1 U2, exista i si j,

w[U1 ]= ui, w[U2 ]= vj, w satisface θ}.

e) Produsul cartezian.

r1={u1:m1, …, uh:mh}, peste R1(U1), r2={v1:n1,…,

vp:np}, peste R2(U2), U1 U2 =Φ,

Page 32: Capitol 1

BAZE DE DATE – Capitolul I

r1 x r2= {w : q | w peste U1 U2, exista i si j,

w[U1 ]= ui, w[U2 ]= vj}.

f) Join natural.

(C1) ui [U1 U2 ]= vj[U1 U2 ],

(C2) w[U1]= ui [U1], w[U2- U1]= vj[U2- U1], q= mi * nj .

r= Φ

For i=1,h

For j=1,p

If perechea (ui, vj) satisface (C1), then

calculeaza w:q conform lui (C2) si adauga w:q la r,

endif

endfor

Page 33: Capitol 1

BAZE DE DATE – Capitolul I

endfor

Exemplu:

A B C D mi C D E nj

----------------------- -----------------

0 1 0 0 3 u1 0 0 1 2 v1

0 0 1 0 2 u2 1 0 0 3 v2

0 1 1 1 2 u3 0 1 1 1 v3

0 0 0 3 v4

Page 34: Capitol 1

BAZE DE DATE – Capitolul I

A B C D E ql

------------------------

(u1,v1)-> 0 1 0 0 1 6

(u1,v4)-> 0 1 0 0 0 9

(u2,v2)-> 0 0 1 0 0 6

-------------------------

Sunt valabile proprietatile joinului natural pentru

cazul set?