Documente Academic
Documente Profesional
Documente Cultură
Baze de Date CA Suport Pentru Sisteme de Tip ERP
Baze de Date CA Suport Pentru Sisteme de Tip ERP
Baze de Date CA Suport Pentru Sisteme de Tip ERP
,
_
1 2 1
1 1 1
1
c b a
c b a
r
, ( ) 1 2 2
2
c b a r . Aplicnd operatorul de
reuniune a celor dou relaii va rezulta o nou relaie r
3
cu aceeai schem de definire Z= {A, B,
C} cu
,
_
1 2 2
1 2 1
1 1 1
2 1 3
c b a
c b a
c b a
r r r ceea ce poate fi exprimat n SQL astfel:
SELECT r
1
.* FROM r
1
UNION
SELECT r
2
.* FROM r
2
unde prin * s-au desemnat toate atributele schemei de definire a relaiei specificate.
Exemple:
1. Reuniunea datelor din balana curent (Balanta) cu datele aferente balanelor arhivate n
vederea analizei evoluiei conturilor, adic BalantaIstoric_Balante, ceea ce poate fi
exprimat n SQL astfel:
Select Balanta.* From Balanta
UNION
Select Istoric_Balante.* From Istoric_Balante;
Not. Prin construcia Balanta.* am desemnat toate coloanele din tabela balana, Balanta.
nefiind altceva dect specificaia prin care se spune de ce tabel aparin coloanele respective.
a) b)
Figura 11. Reuniunea relaiilor
22
SISTEME INFORMATICE FINANCIAR-CONTABILE
2. Reuniunea datelor din jurnalul curent cu cele din jurnalul arhivat n vederea vizualizrii
fiei unui cont (n cerere nu se specific acum filtrul de selecie):
Select Jurnal.* From Jurnal
Union
Select Istoric_Jurnal.* From Istoric_Jurnal;
Intersecia relaiilor. Intersecia relaiilor r
1
(X) i r
2
(X) este mulimea tuturor rndurilor
(tuplurilor) ce aparin att lui r
1
ct i lui r
2
.
Acest tip de operaie
permite gruparea ntr-o alt relaie
r
3
a tuturor elementelor comune
celor dou relaii r
1
i r
2
, ceea ce
grafic este sugerat n figura 12 a)
sau b).
Fie
,
_
1 2 2
1 2 1
1 1 1
1
c b a
c b a
c b a
r
i ( ) 1 2 2
2
c b a r , intersecia relaiilor r
1
cu r
2
apare astfel:
r
3
=r
1
r
2
adic
( ) 1 2 2
3
c b a r
Exemplu:
Lista drumurilor internaionale care se regsesc descrise n drumuri naionale conform
definiiei din subschema bazei de date din figura 13 poate fi obinut cu fraza:
Autorii
a) b)
Figura 12. Intersecia relaiilor
Figura 13. Exemplu de Subschema
23
BAZE DE DATE RELAIONALE. IMPLEMENTAREA CONCEPTELOR N SQL
SELECT r1.dr, r1.drum, r1.kmi, r1.mi, r1.kms, r1.ms FROM drumint r1
INTERSECT
SELECT r2.dr, r2.drum, r2.kmi, r2.mi, r2.kms, r2.ms FROM drumnat r2;
Diferena a dou relaii. Diferena dintre dou relaii r
1
i r
2
cu aceeai schem de definire
X
1
=X
2
, reprezint mulimea tuturor rndurilor (tuplurilor) ce aparin lui r
1
, dar nu aparin lui
r
2
. Relaia rezultat va avea aceeai schem de definire X
3
=X
1
=X
2
.
Reprezentarea grafic a diferenei poate fi sugerat ca n figura 14 a) sau b).
Fie
,
_
1 2 2
1 2 1
1 1 1
1
c b a
c b a
c b a
r
i
( ) 1 2 2
2
c b a r
, diferena dintre r
1
i r
2
este:
,
_
1 2 1
1 1 1
3
c b a
c b a
r
Exemplu:
Pentru subschema din figura 8 lista poriunilor de drum care nu au drenuri:
SELECT i.dr, i.drum, i.km, i.mi, i.kms, i.ms FROM drumuri i
MINUS
SELECT d.dr, d.drum, d.km, d.mi, d.kms, d.ms FROM drenuri d
Redenumirea coloanelor (atributelor). Aa cum am enunat n paragrafele anterioare
operatorii de reuniune, intersecie i diferen nu pot fi aplicai dect asupra relaiilor
compatibile cu reuniunea, adic tabele cu acelai numr de atribute, cu atributele corespondente
definite pe aceleai domenii, denumite la fel i date n aceeai ordine. Dac atributele
indeplinesc celelate condiii exceptnd ordinea (se afl n poziii diferite) acest caz poate fi
rezolvat simplu prin specificarea lor n frazele SQL n aceeai ordine. n cazul n care atributele
corespondente au denumiri diferite dar ndeplinesc celelalte criterii compatibilizarea lor cu
reuniunea poate fi realizat precednd operaia respectiv cu o operaie de redenumire a lor. De
exemplu dac dorim s vedem prin ce conturi s-au consemnat operaiunile firmei n luna
curent ar trebui s utilizm relaia Jurnal_Curent i s efectum o reuniune a coloanelor
ContDB i ContCR. Pentru a rezolva acest cerere vom utiliza un operator de redenumire
(introdus n SQL prin clauza AS) a crui aplicare va precede realizarea efectiv a operaiei de
reuniune, astfel:
Select Distinct ContDB AS Simbol From Jurnal_Curent
UNION
Select Distinct ContCR AS Simbol From Jurnal_Curent;
Operatorul de redenumire, pe care l vom nota cu , poate fi definit astfel:
Fie r(X) o relaie definit pe mulimea de atribute X i Y o alt mulime de atribute cu aceeai
cardinalitate cu X. Fie A
1
,A
2
,...,A
k
o ordonare a atributelor din X i B
1
,B
2
,...,B
k
o ordonare a
a) b)
Figura 14. Diferena relaiilor
24
SISTEME INFORMATICE FINANCIAR-CONTABILE
atributelor din Y care asigur faptul c A
i
i B
i
(i=1,2,,k) sunt definite pe acelai domeniu. n
aceste condiii redenumirea, notat
prin
conine un tuplu t' pentru fiecare tuplu t din r, definit astfel: t' este un tuplu din Y i t'[B
i
]= t
[A
i
] pentru i=1,2,,k. Aceast definiie confirm faptul c schimbrile care au loc sunt
schimbri ale denumirii atributelor, valorile acestora rmnnd nealterate i asociindu-se
noilor atribute.
Exemplu:
Dorim s reprezentm relaiile paterne i materne ale unui arbore genealogic prin
relaiile:
Dac dorim s obinem o relaie care conine prinii i copii acesta ar fi o reunuiune a
celor dou relaii definite anterior i instinctiv am avea pentru ea coloanele (Printe,Copil).
Coloana Printe este denumit n una din relaii Tat iar n cealalt Mam fcnd astfel
imposibil reuniunea prin faptul c nu au acelai nume. Aplicarea operatorului de redenumire
va face posibil reuniunea lor conform modului ilustrat n figura 15.
Aceast operaie poate fi
descris n SQL astfel:
Select Tat As Printe,
Patern.Copil From Patern
Union
Select Mam As Printe,
Matern.Copil From Matern
Autorii
Patern
Tat Copil
Adam Cain
Adam Abel
Abraham Isac
Abraham Ismael
Matern
Mam Copil
Eva Cain
Eva Set
Sara Isac
Hagar Ismael
Printe Copil
Adam Cain
Adam Abel
Abraham Isac
Abraham Ismael
Eva Cain
Eva Set
Sara Isac
Hagar Ismael
Figura 15. Utilizarea operatorului de redenumire
25
) (
2 1 ,..., ,
,..., , A
2 1
r
k
k
B B B
A A
) ( ) ( Matern Patern
Mam te in Par Tat te in Par
BAZE DE DATE RELAIONALE. IMPLEMENTAREA CONCEPTELOR N SQL
Produsul cartezian a dou relaii. Produsul cartezian a dou tabele (relaii) r
1
(X
1
) i r
2
(X
2
),
notat prin r
1
xr
2
, reprezint mulimea rndurilor (tuplurilor) t, astfel nct un rnd (tuplu) t este
concatenarea unui rnd (tuplu) t
1
r
1
cu un rnd (tuplu) t
2
r
2
, adic t[r
1
]=t
1
[r
1
] i t[r
2
]=t
2
[r
2
].
Schema relaiei rezultat X
3
este reprezentat de concatenarea schemelor relaiilor implicate,
adic X
3
= X
1
X
2
, n condiiile n care intersecia schemelor este vid X
1
X
2
=. Dac
intersecia celor dou scheme operand nu este vid atunci schema rezultatului va conine
coloanele comune luate o singur dat i toate coloanele diferite care apar n relaiile operand.
Implementarea practic a SGBD-urilor relaionale moderne realizeaz concatenarea
schemelor relaiilor operand asigurnd unicitatea denumirilor de coloane prin calificarea
acestora cu numele relaiei din care fac parte astfel nct restricia de disjunctivitate a
schemelor s nu mai aib importan iar schema rezultatului s fie reprezentat de reuniunea
schemelor operanzilor.
S considerm relaiile r
1
cu schema de definire X={A} i r
2
cu schema de definire
Y={B}. Se poate obine o nou relaie r
3
ca produs al celor dou, cu condiia ca: XY=.
Astfel relaia r
3
= r
1
x r
2
= {(a
i
, b
i
) | a
i
r
1
i b
i
r
2
} cu schema Z dat de reuniunea schemelor
de relaie r
1
i r
2
, adic Z=XY. n exemplul din figura 16 b) elementele relaiei rezultat sunt
mulimea perechilor [(a,b), (x,y,z)], iar schema de definire pentru r
3
va fi dat de reuniune
schemelor relaiilor r
1
i r
2
, adic Z={A, B}.
n general, aceasta operaie se utilizeaz destul de rar singular. Ea este o operaie de
pregtire a datelor n vederea realizrii operaiilor speciale ale algebrei relaionale. Utilizarea sa
singular este uzual n cazuri similare urmtoarelor exemple.
Reprezentarea grafic a produsului cartezian a dou relaii r
1
i r
2
este sugerat n figura
16 a) sau b).
Exemple:
1. Considerm dou relaii cu denumirile de MATERIALE (alias M) i FURNIZORI (alias
F), avnd schemele de definire:
M(CODM, DEMAT, UM, PRE_LIVR) i
F(CODF, DENFURNIZOR, LOCALITATEA) care au urmtoarele instane:
Tabela 2. MATERIALE
CODM DENMAT UM PRET_LIVR
1111 CABLU COAXIAL Ml 10
1112 CABLU ELECTRIC Ml 15
1
1
1
1
1
1
1
1
1
]
1
1
1
]
1
1
]
1
z b
y b
x b
z a
y a
x a
z
y
x
b
a
b)
a)
Figura 16. Produsul cartezian al
relaiilor
26
PRODUCT
R
1
R
2
x
R
3
SISTEME INFORMATICE FINANCIAR-CONTABILE
Tabela 3. FURNIZORI
CODF DENFURNIZOR LOCALITATEA
100 COMPUTERLAND BUCURESTI
101 LASER CSI CONSTANTA
Se observ c MF = , ceea ce nseamn c are sens efectuarea produsului dintre cele
dou relaii MxF, obinndu-se o nou relaie cu denumirea MATERIALE-FURNIZORI (tabela
4):
Tabela 4. MATERIALE-FURNIZORI
CODM DENMAT UM PRET_LIVR CODF DENFURNIZOR LOCALITATEA
1111 CABLU COAXIAL Ml 10 100 COMPUTERLAND BUCURSTI
1111 CABLU COAXIAL Ml 10 101 CSI CONSTANTA
1112 CABLU ELECTRIC Ml 15 100 COMPUTERLAND BUCURSTI
1112 CABLU ELECTRIC Ml 15 101 CSI CONSTANTA
Deci, semnificaia practic a produsului cartezian corespunde generrii unei tabele
(relaii) din dou tabele (relaii) prin combinarea fiecrui rnd (tuplu) din prima relaie cu
fiecare rnd (tuplu) al celei de a doua tabele (relaii).
Produsul cartezian al cele doua relaii se exprim n SQL astfel:
SELECT * FROM MATERIALE, FURNIZORI;
2. O fabric productoare de automobile produce toate automobilele sale ntr-o gam
unitar de culori. Dac dorim s meninem o eviden a acestora sub forma (AUTO1):
AUTO1
Marca Tip_auto Cilindree Culoare
Dacia SuperNova Berlin 1400 Alb
Dacia SuperNova Berlin 1400 Rou
Dacia SuperNova Berlin 1400 Verde
Dacia 1310 Break 1300 Rou
Dacia 1310 Break 1300 Verde
Dacia 1310 Break 1300 Alb
atunci valorile atributelor Marca, Tip_Auto, Cilindree se vor duplica de attea ori cte culori
avem.
Pentru a evita aceast situaie n baza de date vor fi meninute dou tabele:
AUTO CULOARE
Marca Tip_auto Cilindree Culoare
Dacia SuperNova Berlin 1400 Alb
Dacia 1310 Brek 1300 Rou
Verde
Autorii
27
BAZE DE DATE RELAIONALE. IMPLEMENTAREA CONCEPTELOR N SQL
Obinerea unei liste cu toate tipurile de automobile i culorile n care se produc, poate fi
realizat prin produsul cartezian dintre:
AUTO x CULOARE
ceea ce permite obinerea relaiei iniiale AUTO1 printr-o fraz de genul:
SELECT AUTO.*, CULOARE.* FROM AUTO, CULOARE;
6.2. Operaii relaionale speciale
n aceast categorie de operaii vom include selecia, proiecia, jonciunea (join) i
diviziunea.
Operaia de selecie. Operatorul algebric de selecie produce o subrelaie r' (subset,
submulime) "orizontal" a unei relaii r date, supuse operaiei de selecie. Subrelaia obinut
va conine multitudinea rndurilor relaiei supuse seleciei care satisfac un predicat P
specificat. Relaia rezultat va avea aceeai schem de definire ca i relaia operand.
Fie o relaie r cu schema X, A un atribut aparinnd lui X, a un element al atributului A
i t multitudinea rndurilor (tuplurilor) ce satisfac o anumit condiie. Operaia de selecie poate
fi exprimat astfel:
r' (X) = {tr | t[A] = a}.
Reprezentarea grafic a operaiei de selecie este redat n figura 17.
Predicatul P poate fi o expresie logic care poate combina condiii simple cu ajutorul
conectivelor logice AND (), OR() i NOT().
Operaia de selecie poate fi notat astfel ) (r
F
, unde F este funcia (expresia) care
descrie predicatul iar r este relaia. Mai precis, fiind dat o relaie r(X), o formul propoziional
(expresia predicatului) F pe X este o formul obinut combinnd condiii atomice de tipul AB
sau Ac cu ajutorul conectivelor (I - And), (SAU - Or) i (Nu Not), unde:
- este un operator de relaie (=, >, <, <=, >=,<>, Like, Between etc);
- A i B sunt atribute din X care sunt compatibile (adic comparaiile au sens i neles pe
valorile domeniilor lor);
- c este o constant compatibil cu domeniul lui A.
Fiind dat o formul F i un tuplu t, formula este evaluat la o valoare logic (boolean
sau de adevr) astfel:
- AB este evaluat la Adevrat pe tr(X) dac i numai dac t[A] este n relaia cu t[B]
(de exemplu A=B este adevrat pe t dac i numai dac t[A]=t[B]);
- Ac este evaluat la Adevrat pe t dac i numai dac t[A] este n relaia cu c;
- F
1
F
2
, F
1
F
2
, F
1
au un neles uzual;
- Expresia F poate conine subexpresii iar ordinea de evaluare este dat n mod natural de
tipul de operatori utilizai i precedena acestora. Prioritatea de evaluare poate fi schimbat
expres de utilizarea parantezelor.
Cu aceste precizri definiia seleciei este:
Selecia ) (r
F
produce o relaie cu aceleai atribute ca r i care conine numai acele
tupluri din r pentru care F este evaluat la Adevrat.
28
SISTEME INFORMATICE FINANCIAR-CONTABILE
n figura 17 b) se sugereaz faptul
c din multitudinea rndurilor tabelei
se extrag numai acelea haurate.
Numrul de tupluri din relaia
rezultat (cardinalitatea tabelei
rezultat) este mai mic dect (sau cel
mult egal cu) cel al relaiei operand.
Exemplu:
1. Presupunem o relaie MATERIALE cu schema de definire
X={CODM,DENMAT,UM,PU,STOC_EXISTENT,STOC_NORMAT}
i valorile asociate conform tabelei 5.
Tabela 5 MATERIALE
CODM DENMAT UM PU STOC_
EXISTENT
STOC_
NORMAT
1111 CABLU COAXIAL Kg 10 12000 11000
1113 CABLU ELECTRIC Kg 15 15000 18000
1115 CONECTOR MAMA BUC 50 500 300
1116 CAPSE BUC 1.5 12 11
1120 CONECTOR TATA BUC 1 80 80
.... ...............................
Presupunem c dorim s selectm toate materialele ale cror coduri sunt mai mici dect
1116 i au stocul existent mai mare dect stocul normat, adic:
n urma operaiei de selecie va rezulta subrelaia redat n tabela 6.
Tabela 6. MATERIALE_SELECTATE
CODM DENMAT UM PU STOC_
EXISTENT
STOC_
NORMAT
1111 CABLU COAXIAL Kg 10 12000 11000
1115 CONECTOR MAMA BUC 50 500 300
Exemple:
1) Se solicit listarea tuturor drumurilor judeene din judeul Arge (figura 13). n acest
caz tabela implicat, la nivel instituiei CESTRIN-AND, este DNJUD, iar condiia (predicatul)
de selecie este JUD = "AG". Prin acest predicat vor fi selectate din tabel numai acele rnduri
care conin n coloana JUD valoarea "AG", adic ) (
" "
DNJUD
AG JUD
ceea ce se exprim n
SQL astfel:
Autorii
a) b)
Figura 17. Operaia de Selecie
29
) (
) _ _ ( ) 1116 (
MATERIALE
NORMAT STOC EXISTENT STOC CODM > >
,
unde Trim() este o funcie care elimin eventualele spaii din faa valorii pentru Simbol iar
Substr(c,i,l) extrage din irul de caractere c subirul din poziia i pe lungime l. Aceast cerere
poate fi exprimat n SQL astfel:
Select * From Balanta Where Simbol Like "6*";
unde expresia format cu operatorul Like, Simbol Like 6* este echivalent cu
Substr(Trim(Simbol),1,1).
Operaia de proiecie. Proiecia unei relaii r cu schema X=(A
1
,A
2
,....,A
n
) pe atributele
A
1
,A
2
,.....,A
m
(unde m<n) produce o relaie r' cu schema X'=(A
1
,A
2
,...,A
m
), obinut prin
selectarea atributelor specificate i eliminarea tuplurilor duplicate.
Pentru operaia de proiecie sunt consacrate urmtoarele notaii:
Y
(r),
A1,A2,......Am
R[A
1
,A
2
,...A
m
]
PROJECT (r/A
1
,A
2
,........A
m
).
n figura 12 este redat reprezentarea grafic a operaiei de proiecie.
O definiie alternativ pentru proiecie este urmtoarea: fiind dat o relaie r(X) i o
mulime YX atunci proiecia lui r pe Y, indicat prin
Y
(r), este mulimea tuplurilor din Y
obinute din tuplurile lui r considernd numai valorile pe atributele Y, adic
Y
(r)={t[Y] |
t r}. Proiecia relaiei
Y
(r) conine acelai numr de tupluri ca i r (are aceeai cardinalitate)
dac i numai dac Y este o supercheie pentru r.
n figura 18 b) se
sugereaz faptul c din
multitudinea coloanelor tabelei
a) b)
Figura 18. Operaia de Proiecie
30
SISTEME INFORMATICE FINANCIAR-CONTABILE
se extrag numai acelea haurate, proiecia producnd o descompunere vertical a tabelei de
origine.
Exemple:
1) Considernd relaia MATERIALE_CONTRACTATE cu valori asociate conform
tabelei 7.
Tabela 7. MATERIALE_CONTRACTATE
NRC# CODM# PU CANT_CONTR
100 1111 10 10000
101 1112 15 20000
110 1111 10 30000
115 1113 20 10000
120 1112 15 5000
Prin aplicarea operatorului de proiecie asupra atributului CODM# aparinnd relaiei
MATERIALE_CONTRACTATE, deci
CODM
(MATERIALE_CONTRACTATE) se obine:
CODM#
-----------
1111
1112
1113
Se observ c s-a obinut lista materialelor contractate, din care dublurile au fost
excluse. Acest operaie poate fi descris n SQL astfel:
Select Distinct CODM From MATERIALE_CONTRACTATE;
2) Se cere indicativul drumului public i lungimea pentru drumurile care leag localitile
BUCURESTI-PITESTI (vezi schema din figura 13).
La rezolvarea acestei cereri se va utiliza tabela DRUMURI din care vor fi selectate
atributele (coloanele) DRUM i LUNGIME la care se aplic condiia (predicatul) de selecie
(INCEPUT="BUCURESTI" i Sfrit="PITESTI") sau (INCEPUT="PITESTI" i
Sfrit="BUCURESTI"). Partea marcat n condiie, permite definirea oricruia din sensurile
unui DRUM:
SELECT DISTINCT DRUM, LUNGIME FROM DRUMURI WHERE
(UPPER(INCEPUT)='BUCURESTI' AND UPPER(Sfrit)='PITESTI') OR
(UPPER(SfritT)='BUCURESTI' AND UPPER(INCEPUT)='PITESTI')
3) Selecia din Jurnal a formulelor Contabile i sumelor aferente poate fi obinut cu fraza:
SELECT Jurnal.ContDB As [Cont Debitor], Jurnal.ContCR As [Cont Creditor],
Jurnal.Valoare FROM Jurnal;
a crei execuie produce un tabel de tipul:
Cont Debitor Cont Creditor Valoare
Autorii
31
BAZE DE DATE RELAIONALE. IMPLEMENTAREA CONCEPTELOR N SQL
321 5311 1606267
4013 5311 1615500
421 5311 1831458
5311 581 9130000
6012 5311 3903152
6018 5311 1473567
604 5311 1018852
607 371 992061780
707 121 1168997903
766 121 50101
Operaia de jonciune. Operaia de jonciune (JOIN) este una din cele mai importante operaii
ale algebrei relaionale. Aceasta ne permite s stabilim conexiuni ntre datele coninute n
diverse relaii, s comparm valorile coninute n ele i astfel s utilizm caracteristicile
fundamentale ale modelului reieite din bazarea sa pe valori. Operaia de jonciune este o
derivaie a produsului cartezian (n anumite situaii este redundant cu acesta). n general
realizarea produsului cartezian este o operaie laborioas i costisitoare. Operaia de jonciune
presupune utilizarea unui calificator care s permit compararea valorilor diferitelor (sau
acelorai) atribute din dou relaii (sau dintr-o singur relaie).
Operaia de jonciune are sens i i gsete o larg aplicabilitate n situaia n care
intersecia schemelor relaiilor este diferit de zero (adic au cel puin un atribut comun
aparinnd aceluiai domeniu, fr s fie obligatoriu ca denumirea acestora s fie identic), ceea
ce poate fi exprimat astfel:
r
1
r
2
pentru X
1
X
2
#.
Notaiile consacrate pentru operaia de jonciune sunt:
- r
1
r
2
;
- JOIN (r
1
,r
2
/);
- r
1
x r
2
[]
unde este un calificator multi-atribut care permite compararea atributelor relaiei r
1
cu
atributele relaiei r
2
. Operatorii de comparaie atribuii lui pot fi: <, =, >, , i .
A treia notaie sugereaz faptul c operaia de jonciune este un produs cartezian asupra
cruia se aplic o restricie .
Reprezentarea grafic a operaiei de jonciune este similar celei a produsului cartezian.
n general, jonciunea combin dou sau mai multe relaii, nu neaprat distincte, pe toate
atributele comune lor. Deci, se poate spune c operaia de jonciune a dou relaii r
1
i r
2
, care au
cte un atribut aparinnd aceluiai domeniu, produce o nou relaie r
3
ale crei rnduri (tupluri)
se formeaz prin concatenarea rndurilor (tuplurilor) celor dou relaii care satisfac restricia
asupra valorilor asociate atributelor ce se compar, urmat de eliminarea unuia dintre atributele
comune. Atributele pe care se face jonciune se numesc "atribute de jonciune".
n activitatea practic pot apare mai multe cazuri particulare de jonciune pe care le vom
evidenia n cele ce urmez.
Jonciunea natural. Jonciunea natural (natural join), notat cu simbolul , este jonciunea
bazat pe egalitatea atributelor de jonciune ale relaiilor implicate. Dac relaiile r
1
(X
1
) i r
2
(X
2
)
au egale atributele A
i
X
1
i respectiv B
j
X
2
atunci jonciunea natural este jonciunea dup
calificarea A
i
=B
j
iar rezultatul jonciunii este o relaie r
3
cu schema definit pe reuniunea
mulimilor de atribute ale operanzilor dar cu atributele comune luate o singur dat, adic pe
32
SISTEME INFORMATICE FINANCIAR-CONTABILE
mulimea (X
1
X
2
)-(X
1
X
2
). Atributele comune n relaiile operand le vom nota cu X
1,2
i sunt
reprezentate de intersecia schemelor X
1
cu X
2
, adic X
1,2
=(X
1
X
2
) iar t
1
[X
1,2
]=t
2
[X
1,2
]. Cu
aceste precizri jonciunea natural r
1
r
2
a lui r
1
(X
1
) cu r
2
(X
2
) este o relaie definit pe (X
1
X
2
)
astfel:
r
1
r
2
={t(X
1
X
2
) | t
1
r
1
i t
2
r
2
cu t[X
1
]=t
1
i t[X
2
]=t
2
} sau, mai concis
r
1
r
2
={t(X
1
X
2
) | t[X
1
]r
1
i t[X
2
]r
2
}
Dac pentru fiecare tuplu t
1
din X
1
exist un tuplu t n r
1
r
2
astfel nct t[X
1
]=t
1
i
similar pentru fiecare tuplu t
2
din X
2
exist un tuplu t n r
1
r
2
astfel nct t[X
2
]=t
2
vom spune c
jonciunea este jonciune complet (adic fiecare tuplu din operanzi contribuie la formarea acel
puin un tuplu n rezultat). Dac exist tupluri n r
1
sau r
2
care nu contribuie la rezultatul r
1
r
2
vom spune c avem tupluri balansate (dangling tuples) n relaiile joncionate. Numrul de
tupluri ale jonciunii r
1
r
2
va fi cuprins ntre 0 i produsul cardinalitilor |r
1
|x|r
2
| relaiilor
operand cu urmtoarele precizri:
- dac jonciunea lui r
1
cu r
2
este complet atunci numrul su de tupluri va fi cel puin egal
cu Max(|r
1
|,|r
2
|);
- dac X
1
X
2
conine o cheie a lui r
2
jonciunea lui r
1
cu r
2
conine cel mult |r
1
| tupluri;
- dac X
1
X
2
este o cheie primar a lui r
2
atunci vom avea o restricie referenial ntre
X
1
X
2
n r
1
i acest cheie a lui r
2
iar jonciunea conine exact |r
1
| tupluri.
Operatorul de jonciune natural este:
- comutativ, adic r
1
r
2
este ntotdeauna egal cu r
2
r
1
;
- distributiv, adic r
1
(r
2
r
3
)= (r
1
r
2
)r
3
.
Dac X
1
#X
2
atunci rezultatul jonciunii este definit ntotdeauna pe reuniunea X
1
X
2
i conine ca
tupluri produsul cartezian al r
1
cu r
2
, adic r
1
xr
2
. Acest produs cartezian poate produce tupluri
nesemnificative n rezultat. Pentru a elimina acest inconvenient a fost introdus un operator de
jonciune derivat, denumit tetha-join (jonciune teta), definit ca produs cartezian urmat de
selecie, astfel: r
1
F
r
2
=
F
(r
1
r
2
). Dac condiia F este o conjuncie de expresii atomice
formate cu operatorul de egalitate atunci operatorul de jonciune este denumit equi-join.
Exemple:
1) Din relaia descris n tabela 5 (MATERIALE) i relaia descris n tabela 7
(MATERIALE_CONTRACTATE) dorim s extragem cantitile contractate din fiecare
material astfel pentru a obine o tabel cu schema <codm, denmat, um, pu, cant_contr>:
SELECT m.codm, m.denmat, m.um, m.pu, c.cant_contr
FROM materiale m, materiale_contractate c
WHERE m.codm=c.codm;
unde m i c sunt aliasuri ale tabelelor dup care apar.
2) Considerm relaiile r
1
i r
2
cu schemele X
1
= {A,B,C} i respectiv X
2
={B,C,D}. n
urma operaiei de jonciune natural a lui r
1
cu r
2
va rezulta r
3
cu X
3
={A,B,C,D} redat n figura
19.
r
1
A B C
r
3
= r
1
r
2
a1 b1 c1
a2 b2 c2 A B C D
a3 b1 c2 a1 b1 c1 d1
Autorii
33
BAZE DE DATE RELAIONALE. IMPLEMENTAREA CONCEPTELOR N SQL
a4 b2 c3 a1 b1 c1 d2
r
2
a2 b1 c1 d1
B C D a2 b1 c1 d2
b1 c1 d1 a4 b2 c3 d3
b1 c1 d2
b2 c3 d3
Figura 19. Jonciunea natural a lui R1 cu R2 pe coloanele B i C
3) Se dorete listarea tuturor drumurilor naionale pe judee, din subschema prezentat n
figura 13, astfel:
DJDP ADRESA DRUM KMI MI KMS MS Lungime
Coloanele (atributele) DJDP i ADRESA apar n tabela (relaia) DJDP (Direcii
Judeene de Drumuri i Poduri) iar restul coloanelor (DRUM, KMI, MI, KMS, MS,
LUNGIME) apar n tabela DNJUD (Reea Drumuri Naionale pe Judee). Pentru a rspunde la
aceast cerere se va efectua o jonciune natural ntre tabelele DJDP i DNJUD pe atributul
JUD.
Predicatul jonciunii este:
DJDP.JUD = DNJUD.JUD
n situaia n care operatorul de comparaie este > avem de a face cu "jonciune mai
mare dect...". n mod asemntor jonciunea mai poate avea i alte denumiri n funcie de
operatorul de comparaie luat n considerare.
Autojonciunea. Autojonciunea relaiei r dup atributul A
i
este jonciunea relaiei r cu ea nsi
dup predicatul A
i
=A
j
, ceea ce se poate exprima astfel: JOIN(r,r/A
i
=A
j
).
Exemplu:
Se dorete listarea drumurilor pe judeele pe care le parcurg cu poriunile de drum
aferente pentru toate drumurile naionale (subschema din figura 13). Tronsoanele de drum vor
fi listate n ordinea natural de continuitate. Pentru rezolvarea acestei cereri va fi implicat
tabela DNJUD creia i se va aplica o autojonciune pe coloana DRUM. Deoarece operaia de
jonciune implic dou relaii (tabele) la intrare vom conveni faptul c tabelei implicate DNJUD
i se vor atribui dou supranume (alias): DNJUD alias R
1
i DNJUD alias R
2
. Coloanele
selectate vor fi: <JUD, DRUM, KMI, MI, KMS, MS>. n acest caz predicatul va arta astfel:
R
1
.DRUM = R
2
.DRUM mpreun cu relaia de ordine dintre rndurile (tuplurile) rezultate:
R
2
.KMI Ascendent, R
2
.MI Ascendent, R
2
.KMS Ascendent, R
2
.MS Ascendent. Deoarece
asocierea implicat n aceast cerere este definit recursiv (DNJUD la DNJUD prin DRUM) va
trebui s introducem n cerere i condiia ca rezultatul s fie format din tupluri distincte
(DISTINCT).
Exemplu:
Dorim s obinem din relaia Angajat, lista cu Nume Angajat, Prenume Angajat, Nume
So(ie), Prenume So(ie) ceea ce implic o autojonciune a relaiei Angajat cu ea nsi. Relaia
Angajat este:
34
SISTEME INFORMATICE FINANCIAR-CONTABILE
Angajat
CNP Sot Nume Prenume
1500223010017 Ion Ion
1520110402345 2531017337581 Ionescu Claudiu
2531017337581 1520110402345 Ionescu Maria
iar cererea SQL care realizeaz autojonciunea poate arta astfel:
SELECT Angajat.Nume, Angajat.Prenume, Angajat_1.Nume, Angajat_1.Prenume
FROM Angajat INNER JOIN Angajat AS Angajat_1 ON Angajat.CNP = Angajat_1.Sot;
iar rezultatul este:
Angajat.Nume Angajat.Prenume Angajat_1.Nume Angajat_1.Prenume
Ionescu Claudiu Ionescu Maria
Ionescu Maria Ionescu Claudiu
Pentru relaia Angajat SGBD-ul utilizat a creat un alias (Angajati AS Angajati_1) pentru a
putea utiliza numele su la calificarea atributelor (de jonciune, de regul, dar nu are importan
dac se calific i alte tipuri).
Jonciune extern (outer join). n rezultatul tipurilor de jonciune prezentate pn acum
apreau numai rndurile care se obineau din jonciunea rndurilor celor dou relaii operand
(conform condiiei de jonciune). Rndurile dintr-o relaie operand fr corespondent n cealalt
relaie operand nu apreau n rezultatul jonciunii. Exist totui numeroase cazuri n care este
util s apar n rezultatul jonciunii i astfel de rnduri dintr-o relaie operand fr corespondent
de jonciune n cealalt relaie operand. Jonciunea care ofer aceast posibilitate a fost numit
jonciunea extern [DATE86]. Operatorul de jonciune extern are trei variante. Pentru definirea
acestor variante vom considera dou relaii r
1
i r
2
pe care se aplic operandul de jonciune.
Pentru exemplificare vom considera dou relaii astfel:
r1 Nume Loc_de_Munc r2 Loc_de_Munc ef
Anton Vnzri Producie Adam
Barbu Producie Achiziie Radu
Costea Achiziie
Cu aceste precizri operatorul de jonciune extern este definit astfel:
- r
1
LEFT
r
2
care include n rezultat toate tuplurile din relaia r
1
i numai acele tupluri din r
2
care au corespondent n r
1
, conform modului ilustrat n relaia:
r
1
LEFT
r
2
Nume Loc_de_Munc ef
Anton Vnzri Null
Barbu Producie Adam
Costea Achiziie Adam
- r
1
RIGHT
r
2
care include n rezultat toate tuplurile din relaia r
2
i numai acele tupluri din r
1
care au corespondent n r
2
, conform modului ilustrat n relaia:
r
1
RIGHT
r
2
Nume Loc_de_Munc ef
Barbu Producie Adam
Costea Producie Adam
Null Achiziie Radu
Autorii
35
BAZE DE DATE RELAIONALE. IMPLEMENTAREA CONCEPTELOR N SQL
- r
1
FULL
r
2
care include n rezultat toate tuplurile din relaia r
1
i r
2
care au corespondent i
tuplurile din ambele care nu au corespondent, conform modului ilustrat n relaia:
r
1
FULL
r
2
Nume Loc_de_Munc ef
Anton Vnzri Null
Barbu Producie Adam
Costea Producie Adam
Null Achiziie Radu
Exemple:
1) n rezultatul (obinut prin jonciune) care ofer date despre clienii i produsele
comandate de acetia se dorete s apar i date despre produsele fabricate dar care nu au fost
nc solicitate de nici un client. Produsul fabricat dar necomercializat nc nu are corespondent
n relaia beneficiari.
Fie relaiile BENEFICIARI i PRODUSE din figura 20.
BENEFICIARI
COD DENUMIRE ADRESA COD_PRODUS
101 CESTRIN SOVEJA 115 40542
102 ASE CSIE DOROBANTI 40521
PRODUSE
COD_PRODUS DENP CARACTERISTICI
40521 Coprocesor 66 MHz
40542 486;DX2 66 Mhz; 4Mb
41736 Statie lucru IBM Compatibil
Figura 20. Relaiile BENEFICIARI i PRODUSE
Rezultatul solicitat mai sus se obine prin jonciunea extern a celor dou relaii pe
atributul COD_PRODUS i arat astfel:
COD DENUMIRE ADRESA COD_PRODUS DENP CARACTERISTICI
101 CESTRIN Soveja 115 40542 Coprocesor 66 MHz
102 ASE DOROBANI 40521 AT486;DX2 66 MHz; 4 Mb
41736 Staie lucru IBM compatibil
Se observ faptul c pentru produsul "Staie lucru" nu exist n rspuns valori n
coloanele corespunztoare relaiei BENEFICIARI.
2) Obinerea liniilor necesare pentru balana curent utilizeaz subschema bazei de date
ilustrat n figura 21 pentru care condiia de jonciune specific includerea n rezultat a tuturor
rndurilor din Balanta i numai a acelor rnduri din tabela Plan_de_Conturi pentru care valoarea
din coloana Simbol este egal cu o valoare Simbol din Balanta.
Fraza SQL care realizeaz jonciunea este:
SELECT DISTINCT Balanta.[An Balanta], Balanta.[Luna Balanta], Balanta.Simbol,
Plan_de_Conturi.Descriere, Plan_de_Conturi.DescrExt, Format(Balanta.[DbIan], "#,#00.00")
AS DbIan, Format(Balanta.[CrIan],"#,#00.00") AS CrIan, Format(Balanta.[DbPrec],"#,#00.00")
AS DbPrec, Format(Balanta.[CrPrec], "#,#00.00") AS CrPrec, Balanta.DbLuna,
36
SISTEME INFORMATICE FINANCIAR-CONTABILE
Balanta.CrLuna, (Balanta.DbIan+ Balanta.DbPrec+ Balanta.DbLuna) AS DbTotal,
(Balanta.CrIan+Balanta.CrPrec +Balanta.CrLuna) AS CrTotal,
(IIf((Balanta.DbIan+Balanta.DbPrec+ Balanta.DbLuna)>Balanta.CrIan+ Balanta.CrPrec+
Balanta.CrLuna), (Balanta.DbIan+Balanta.DbPrec+Balanta.DbLuna)-(Balanta.CrIan+
Balanta.CrPrec+Balanta.CrLuna),0)) AS SoldDB, (IIf((Balanta.DbIan+
Balanta.DbPrec+Balanta.DbLuna)<(Balanta.CrIan+Balanta.CrPrec+ Balanta.CrLuna),
(Balanta.CrIan+Balanta.CrPrec+Balanta.CrLuna)-(Balanta.DbIan+Balanta.DbPrec+
Balanta.DbLuna),0)) AS SoldCR
FROM Plan_de_Conturi RIGHT JOIN Balanta ON Plan_de_Conturi.Simbol = Balanta.Simbol
ORDER BY Balanta.Simbol;
3) Centralizarea balanei curente utilizeaz schema din figura 22
n aceast subschem tabelele TotalCR i TotalDB sunt cereri formulate ca n figura 23 iar
Balanta i Plan_de_Conturi sunt tabele de baz ale bazei de date financiar-contabile.
Expresia frazei de calcul este:
Autorii
Figura 21. Subschema pentru operaia de
evaluare a balanei
Figura 22. Subschema utilizat la calculul balanei
37
BAZE DE DATE RELAIONALE. IMPLEMENTAREA CONCEPTELOR N SQL
SELECT DISTINCT Balanta.[An Balanta], Balanta.[Luna Balanta], Balanta.Simbol,
Plan_de_Conturi.Descriere, Plan_de_Conturi.DescrExt, Format(Balanta.DbIan, "#,#00.00") AS
DbIan, Format(Balanta.CrIan,"#,#00.00") AS CrIan, Format(Balanta.DbPrec, "#,#00.00") AS
DbPrec, Format(Balanta.CrPrec, "#,#00.00") AS CrPrec, TotalDB.DbLuna, TotalCR.CrLuna,
(Balanta.DbIan+ Balanta.DbPrec+ Balanta.DbLuna) AS DbTotal, (Balanta.CrIan+
Balanta.CrPrec+ Balanta.CrLuna) AS CrTotal, (IIf((Balanta.DbIan+ Balanta.DbPrec+
Balanta.DbLuna)>(Balanta.CrIan+Balanta.CrPrec+Balanta.CrLuna),
(Balanta.DbIan+Balanta.DbPrec+Balanta.DbLuna)-(Balanta.CrIan+Balanta.CrPrec+
Balanta.CrLuna),0)) AS SoldDB, (IIf((Balanta.DbIan+ Balanta.DbPrec+ Balanta.DbLuna)<
(Balanta.CrIan+ Balanta.CrPrec+ Balanta.CrLuna),
(Balanta.CrIan+Balanta.CrPrec+Balanta.CrLuna)-(Balanta.DbIan+Balanta.DbPrec+
Balanta.DbLuna),0)) AS SoldCR
FROM ((Plan_de_Conturi RIGHT JOIN Balanta ON Plan_de_Conturi.Simbol = Balanta.Simbol)
LEFT JOIN TotalCR ON Balanta.Simbol = TotalCR.Simbol) LEFT JOIN TotalDB ON
Balanta.Simbol = TotalDB.Simbol
ORDER BY Balanta.Simbol;
Operaia de mprire. Aceast operaie realizeaz mprirea unei relaii demprit r
1
, de grad
m+n, la o relaie mpritor r
2
, de grad n i produce o relaie rezultat de grad m. Atributele m+i
ale lui r
1
i atributele i ale lui r
2
, pentru 1<=i<=n, trebuie s fie definite pe aceleai domenii. S
considerm primele m atribute ale lui r
1
ca un atribut compus X, i ultimele n ca un alt atribut
compus Y. Rezult c relaia r
1
poate fi gndit ca o mulime de perechi de valori <x,y>. Similar
relaia r
2
poate fi gndit ca o mulime de valori <y>. Rezultatul mpririi lui r
1
prin r
2
l
reprezint mulimea valorilor <x> pentru care perechea <x,y> apare n r
1
pentru toate valorile
<y> care apar n r
2
. Atributele rezultatului au aceleai denumiri ca primele m atribute ale relaiei
r
1
.
Notaiile consacrate pentru operaia de mprire sunt:
- r
1
r
2
;
- DIVISION (r
1
,r
2
)
n figura 24 a) i b) este redat reprezentarea grafic a operaiei de mprire. n plus
figura 24 b) ofer un exemplu de aplicare.
SELECT Balanta.Simbol, Sum(Jurnal.Valoare) AS CrLuna
FROM Balanta, Jurnal
WHERE (((Jurnal.ContCR) Like (Trim([Balanta].[Simbol]) & "*")))
GROUP BY Balanta.Simbol;
SELECT Balanta.Simbol, Sum(Jurnal.Valoare) AS CrLuna
FROM Balanta, Jurnal
WHERE (((Jurnal.ContCR) Like (Trim([Balanta].[Simbol]) & "*")))
GROUP BY Balanta.Simbol;
Figura 23. Cererile TotalCR i TotalDB
a)
Figura 24. Diviziunea relaiilor
DIVIDE a
r3
a x x
a y y
a z r2
b x
c y
r1 b)
38
R
1
R
2
R
3
SISTEME INFORMATICE FINANCIAR-CONTABILE
n figura 24 b) din relaia r
1
se ia fiecare valoare distinct, pe care o vom denumi q, a
primei coloane i se constituie mulimea de valori format din valorile asociate din cea de a doua
coloan. Dac acest mulime format este egal sau include mulimea valorilor din relaia r
2
atunci valoarea q la care s-a asociat apare n rezultat. Operaia de mprire trebuie s respecte
condiia ca produsul cartezian al relaiei rezultat r
3
cu relaia mpritor r
2
s produc numai
tupluri din relaia demprit r
1
, adic r
3
xr
2
r
1
.
6.3. Construirea expresiilor n algebra relaional
Algebra relaional este un limbaj procedural bazat pe concepte algebrice care const
dintr-o colecie de operatori definii pe relaii i care produce ca rezultat relaii. Proceduralitatea
sa este dat de faptul c atunci cnd scriem expresii ale algebrei relaionale nu facem altceva
dect s dm o secven de operaii care vor genera rspunsul cererii noastre. O expresie general
n algebra relaional este construit din subexpresii. Dac E
1
i E
2
sunt expresii ale algebrei
relaionale atunci expresiile:
- E
1
E
2
; E
1
-E
2
; E
1
xE
2
;
- ) (
1
E
P
, unde P este un predicat pe E
1
;
-
S
(E
1
), unde S este o list constnd din unele atribute din E
1
sunt expresii ale algebrei relaionale i formeaz operaiile fundamentale ale algebrei
relaionale. Ele sunt suficiente pentru a exprima orice cerere a algebrei relaionale.
Pentru exemplificri considerm baza de date Personal cu schema:
Angajat(CNP, Nume, Vrsta, Salariu, Cod_Loc)
Loc_de_Munc(Cod, Denumire, ef)
cu extensiile relaiilor prezentate n figura 25.
Not. Coloanelor Cod_Loc din Angajat i Cod din Loc_de_Munc li s-au dat
denumiri diferite pentru a nu mai fi necesar calificarea n exemplificri. n situaii
reale este preferabil utilizarea aceleiai denumiri pentru coloanele de jonciune.
Autorii
Angajat
CNP Nume Vrsta Salariu Cod_Loc
148 Ion RADU 54 20 101
149 Nicu STEFAN 53 20 101
150 Adi ADAM 52 35 102
151 Ion PREDA 51 40 101
250 Mara CUCU 52 30 103
253 Dana PREDA 49 15 102
267 Lia STEFAN 35 20 103
280 Mia BRAN 22 15 102
Loc_de_Munc
Cod Denumire Sef
101 Productie 150
102 Vnzri 251
103 Aprovizionare 151
Figura 25. Extensia relaiilor bazei de date Personal
39
BAZE DE DATE RELAIONALE. IMPLEMENTAREA CONCEPTELOR N SQL
Exemple:
- intersecia relaiilor r
1
cu r
2
poate fi nlocuit cu operaii de diferen astfel:
r
1
r
2
= r
1
- (r
1
- r
2
);
- jonciunea cu predicat (tetha-join) a relaiilor r
1
cu r
2
dup predicatul poate fi nlocuit cu
o selecie, astfel:
r
1
r
2
=
(r
1
xr
2
);
- jonciunea natural a relaiilor r
1
(X
1
) i r
2
(X
2
), r
1
r
2
, este o relaie pe schema X
1
X
2
i este
proiecia pe X
1
X
2
a unei jonciuni cu predicat care necesit expresii de forma r
1
.A=r
2
.A
pentru fiecare atribut AX
1
X
2
. Dac X
1
X
2
={A
1
,A
2
,...,A
n
} atunci
) (
2 . . .... . . 1 2 1
2 1 1 2 1 1 2 1
r r r r
n n
A r A r A r A r X X
;
- diviziunea a dou relaii, r
1
(X
1
) i r
2
(X
2
), cu X
1
X
2
este o relaie pe schema X
1
-X
2
. Un tuplu
t aparine relaiei r
1
r
2
dac pentru fiecare tuplu t
2
din r
2
exist un tuplu t
1
n r
1
care satisface
urmtoarele dou condiii:
t
1
[X
2
]=t
2
[X
2
]
t
1
[X
1
-X
2
]=t[X
1
-X
2
].
Operaia de mprire poate fi exprimat n termenii celor cinci operaii fundamentale astfel:
) ) ) ( (( ) (
1 2 1 1 2 1
2 1 2 1 2 1
r r r r r r
X X X X X X
expresia
avnd rolul de a elimina acele tupluri care nu ndeplinesc condiia X
1
X
2
=.
6.4. Echivalena expresiilor n algebra relaional
Ca orice limbaj formal algebra relaional permite formularea expresiilor echivalente.
Vom nota echivalena prin . Vom defini echivalena referindu-ne la expresiile definite pe
schemele bazelor de date.
Definiie:
Dou expresii pe o schem de baz de date, E
1
i E
2
, sunt echivalente pe o relaie R,
ceea ce notm cu E
1
R
E
2
, dac E
1
(r)=E
2
(r) pentru fiecare instan r a relaiei R. Dou expresii
pe o schem de baz de date, E
1
i E
2
, sunt absolut echivalente, adic E
1
E
2
dac E
1
R
E
2
pentru fiecare schem de relaie R.
Echivalena expresiilor n algebra relaional este extrem de important la optimizarea
cererilor exprimate n SQL prin aceea c ele sunt translatate n expresii ale algebrei relaionale,
expresii pentru care se evalueaz costul satisfacerii cererii (cost exprimat n termenii
dimensiunii rezultatelor intermediare i finale). Dac exist mai multe expresii diferite
echivalente cererii atunci se va alegea acea expresie care cost cel mai puin. Pentru a obine
expresiile echivalente se utilizeaz transformri echivalente, adic operaii prin care se
substituie o expresie echivalent cu o alta.
De exemplu, forma general a frazei SQL:
40
) ) ) ( ((
1 2 1
2 1 2 1
r r r
X X X X
SISTEME INFORMATICE FINANCIAR-CONTABILE
Select A
1
,A
2
,...,A
n
From r
1
,r
2
,...,r
m
[Where P] n care:
- A
1
,A
2
,...,A
n
reprezint atributele care dorim s apar n rezultat;
- r
1
,r
2
,...,r
m
reprezint relaiile implicate;
- P este predicatul sau condiia pe care trebuie s o ndeplineasc tuplurile care vor contribui
la calculul rezultatului;
este echivalent cu urmtoarea expresie a algebrei relaionale:
)) ... ( (
2 1 ,...,
1
m P A A
r r r
n
Dac clauza Where ... lipsete (posibilitate indicat prin [...]) atunci predicatul P este considerat
Adevrat.
n cele ce urmeaz vom prezenta cteva exemple de transformri echivalente:
1
o
. Atomizarea seleciilor: o selecie construit pe baza unui predicat conjunctiv, de exemplu
F
1
F
2
, poate fi substituit cu o cascad de selecii, astfel:
)) ( ( ) (
2 1 2 1
E E
F F F F
;
Exemplu:
Pe relaia Angajat cu extensia prezentat n figura 25 se dorete lista cu CNP, Nume, Vrsta
care au fie salariu mai mare de 25 milioane fie locul de munc 101. Acest cerere poate fi
exprimat n SQL ca:
a) selecie cu expresie predicativ format cu conectiva Or
SELECT Angajat.CNP, Angajat.Nume, Angajat.Vrsta
FROM Angajat
WHERE (([Angajat]![Salariu]>20 Or [Angajat]![Cod_Loc]=101));
b) ca reuniune de selecii
SELECT Angajat.CNP, Angajat.Nume, Angajat.Vrsta
FROM Angajat
WHERE (([Angajat]![Salariu]>20))
UNION
SELECT Angajat.CNP, Angajat.Nume, Angajat.Vrsta
FROM Angajat
WHERE (([Angajat]![Cod_Loc]=101));
ambele exprimri producnd acelai rezultat:
CNP Nume Vrsta
151 Ion PREDA 51
150 Adi ADAM 52
149 Nicu STEFAN 53
148 Ion RADU 54
250 Mara CUCU 52
2. O selecie pe predicatul F
1
F
2
pe relaia R este echivalent cu o intersecie de selecii pe F
1
i respectiv F
2
pe relaia R:
) ( ) ( ) (
2 1 2 1
R R R
F F F F
;
3. O selecie pe predicatul F
1
F
2
pe relaia R este echivalent cu o diferen de selecii pe F
1
i respectiv F
2
pe relaia R:
) ( ) ( ) (
2 1 2 1
R R R
F F F F
.
42
SISTEME INFORMATICE FINANCIAR-CONTABILE
Exemple:
Considerm schema bazei de date
Angajat(CNP, Nume, Vrsta, Salariu, Cod_Loc)
Loc_de_Munc(Cod, Denumire, ef)
Cu extensiile relaiilor din figura 25.
a) Dorim s obinem lista CNP, Nume, Vrsta cu angajaii care au salariul mai mare de
25 milioane. Acest cerere este formulat n termenii algebrei relaionale ca o
proiecie pe CNP, Nume, Vrsta din selecia din relaia Angajat dup predicatul
Salariu>25, adic
CNP,Nume,Vrsta
(
Salariu>25
(Angajat)), exprimat n SQL astfel:
SELECT Angajat.CNP, Angajat.Nume, Angajat.Vrsta
FROM Angajat
WHERE ((([Angajat]![Salariu])>25));
i produce ieirea:
CNP Nume Vrsta
151 Ion PREDA 51
150 Adi ADAM 52
250 Mara CUCU 52
b) S se listeze numele angajailor i denumirea locului de munc cu angajaii care au
salariul mai mare de 25 milioane:
Nume,Denumire
(Loc_de_MuncCod_Loc=Cod (
Salariu>25
(Angajat)));
Cererea SQL poate fi formulat astfel:
SELECT Angajat.Nume, Loc_de_Munc.Denumire
FROM Loc_de_Munc
INNER JOIN Angajat ON Loc_de_Munc.Cod = Angajat.Cod_Loc
WHERE ((([Angajat]![Salariu])>25));
i produce rezultatul:
Nume Denumire
Ion PREDA Productie
Adi ADAM Vnzri
Mara CUCU Aprovizionare
7. Calculul relaional
Termenul calcul relaional se refer la o familie de limbaje de interogare (cereri) bazate
pe calculul predicatelor de ordinul nti. Fa de algebra relaional care este un limbaj
procedural limbajele bazate pe calculul relaional sunt declarative adic specificarea cererii este
efectuat n termenii proprietilor rezultatului. Exist o multitudine de versiuni ale calculului
relaional dintre care vom prezenta, n cele ce urmeaz, calculul relaional orientat pe domeniu i
calculul relaional orientat pe tuplu cu declararea limitelor (intervalelor) variabilelor libere. n
cadrul calculului relaional simbolurile de predicate corespund relaiilor din baza de date.
Pentru a efectua o comparie ntre calculul relaional i algebra relaional vom defini, n
cele ce urmeaz, noiunea de independen de domeniu i noiunea de echivalen.
Autorii
43
BAZE DE DATE RELAIONALE. IMPLEMENTAREA CONCEPTELOR N SQL
O expresie a unui limbaj de cereri (interogare) este independent de domeniu dac
rezultatul su, pe orice instan corect a bazei de date, nu se schimb dac schimbm domeniile
pe baza crora este evaluat expresia. Un limbaj este independent de domeniu dac toate
expresiile sale sunt independente de domeniu. Cu aceste precizri algebra relaional este un
limbaj independent de domeniu n timp ce calculul relaional nu este.
Dou limbaje de cereri sunt echivalente atunci cnd pentru orice expresie n unul din ele
exist o expresie echivalent n cellalt i reciproc. n concordan cu acest definiie algebra
relaional i calculul relaional pe domeniu nu sunt echivalente deoarece prima este
independent de domeniu n timp ce calculul relaional este dependent de domeniu.
7.1. Calculul relaional orientat pe domeniu
Expresiile calculului relaional orientat pe domeniu au forma {A
1
:x
1
,...,A
k
:x
k
| f }, unde:
- A
1
,...,A
k
sunt atribute distincte care nu trebuie s apar n neaprat n schema bazei de date pe
care se definete interogarea (pot fi constante, apeluri de funcii etc.);
- x
1
,...,x
k
sunt variabile;
- f este o formul care respect urmtoarele reguli:
este de una din urmtoarele forme atomice:
R(A
1
:x
1
,...,A
p
:x
p
), unde R(A
1
,...,A
p
) este o schem relaional i x
1
,...,x
p
sunt
variabile;
x y sau x c, cu x i y variabile iar c constant i un operator de comparare
(=, <, <=, >, >=, <>).
dac f
1
i f
2
sunt formule atunci f
1
f
2
, f
1
f
2
i f
1
sunt formule;
dac f este o formul i x o variabil atunci x(f) i x(f) sunt formule (: exist
- EXISTS i : oricare ar fi - ANY).
Lista de perechi A
1
:x
1
,...,A
k
:x
k
este denumit "list int" deoarece definete structura
rezultatului construit din relaia pe A
1
,...,A
k
care conine tupluri ale cror valori substituite pentru
x
1
,...,x
p
evalueaz formula la Adevrat.
Evaluarea formulei la Adevrat urmeaz regulile:
o formul atomic R(A
1
:x
1
,...,A
p
:x
p
) este evaluat la Adevrat pentru valorile x
1
,...,x
p
care formez un tuplu n R;
o formul atomic x y sau x c este evaluat la adevrat dac x este n relaia
cu y, respectiv c;
conectivele , i au nelesul general de operatori logici i se evalueaz n
conformitate cu acest neles;
o formul construit cu cuantificatorii:
x(f) este Adevrat dac exist cel puin o valoare pentru x care o face adevrat
pe f;
x(f) este Adevrat dac f este adevrat pentru orice valoare a lui x.
Exemplu:
Considerm schema din figura 25
Angajat(CNP, Nume, Vrsta, Salariu, Cod_Loc)
Loc_de_Munc(Cod_Loc, Denumire, ef)
44
SISTEME INFORMATICE FINANCIAR-CONTABILE
i dorim s obinem lista cu angajaii care au salariul mai mare de 25 milioane. Acest
cerere este formulat n termenii algebrei relaionale ca o selecie din relaia Angajat
dup predicatul Salariu>25, adic
Salariu>25
(Angajat).
Acest expresie poate fi formulat n termenii calculului relaional astfel:
{CNP:m, Nume:n, Vrsta:v, Salariu:s, Cod_Loc:l | Angajat(CNP:m, Nume:n,
Vrsta:v, Salariu:s, Cod_Loc:l) s>25}
n acest exprimare condiia:
- Angajat(CNP:m, Nume:n, Vrsta:v, Salariu:s, Cod_Loc:l) specific faptul c
valorile m,n,v,s,l trebuie s fie tuplu n relaia Angajat;
- s>25 specific faptul c n rspuns vor fi incluse numai acele tupluri pentru care
valoarea variabilei s este mai mare ca 25.
Dac vom considera numai partea de calcul relaional n care expresiile sunt
independente de domeniu vom avea urmtoarele echivalene cu algebra relaional:
- pentru fiecare expresie a calculului relaional care este independent de domeniu exist o
expresie a algebrei relaionale echivalent acesteia;
- pentru fiecare expresie a algebrei relaionale exist o expresie a calculului relaional
echivalent acesteia.
SGBD-urile actuale implementeaz un limbaj uzual bazat n parte pe calculul relaional
orientat pe domeniu cunoscut sub numele de QBE (Query_by_Example). Acesta utilizeaz o
interfa grafic cu utilizatorul prin care acesta este eliberat de sarcina specificrii detaliilor.
Pentru cererile exprimate n QBE exist posibilitatea vizualizrii automate a expresiilor
echivalente exprimate n algebra relaional (sub form de fraze SQL).
7.2. Calculul relaional orientat pe tuplu cu declararea rangului (intervalelor de
variaie a) variabilelor libere
O expresie n calculul relaional orientat pe tuplu cu declararea rangului variabilelor
libere are forma general:
{T | L | f }, unde
- L este lista rangului (intervalelor) care enumereaz variabilele libere ale formulei f cu
intervalul respectiv de variaie. L este o list de tipul x(R), cu x o variabil i R o denumire de
relaie; dac x(R) este n lista rangului atunci n momentul evalurii expresiei valorile
posibile ale lui x sunt exact tupluri din relaia R;
- T este lista int compus din elemente de tipul Y:x.Z (sau mai simplu, prin reducere, de tip
x.Z), unde x este variabil iar Y i Z sunt secvene de atribute (de lungime egal); atributele
din Z trebuie s apar n schema relaiei care determin rangul lui x. n cazul n care rangul
lui x este relaia pe atributele X atunci X:x.X poate fi abreviat cu x.* i putem s-l scriem n
expresii ca atare;
- f este o formul cu:
atomi de tipul x.A c sau x
1
.A
1
x
2
.A
2
care compar, n concordan, valorile lui
x pe atributul A cu constanta c i valorile lui x
1
pe atributul A
1
cu valorile lui x
2
pe
atributul A
2
;
conective de tip logic ,i ;
cuantificatori, care asociaz rangul variabilelor, respectiv:
Autorii
45
BAZE DE DATE RELAIONALE. IMPLEMENTAREA CONCEPTELOR N SQL
x(R)(f) care nseamn "exist un tuplu x n relaia R care satisface formula f";
x(R)(f) care nseamn "fiecare tuplu x din R satisface formula f".
Declarrile de ranguri n lista de ranguri i cuantificri au un rol important: la
introducerea unei variabile x o declaraie de rang R(x) specific faptul c x poate s ia valori
numai dintre tuplurile relaiei R cu care este asociat. Din acest motiv acest limbaj nu necesit
condiii atomice ca cele cerute de calculul relaional orientat pe domeniu.
Ca i n algebra relaional n calculul relaional orientat pe tuplu este posibil definirea
expresiilor echivalente dintre care prezentm urmtoarele:
1. f
1
f
2
(f
1
f
2
);
2. f
1
f
2
(f
1
f
2
);
3. t(f(t)) t(f(t)), unde t(f(t)) este interpretat ca tuplu t pentru care formula (predicatul)
f este evaluat la Adevrat.
Exemple:
Considerm schema bazei de date:
Angajat(CNP, Nume, Vrsta, Salariu, Cod_Loc)
Loc_de_Munc(Cod, Denumire, ef)
cu extensiile relaiilor din figura 25.
1). Lista angajailor care au salariul mai mare de 25 milioane se exprim astfel:
2). Lista
angajailor cu structura CNP, Nume, Vrsta i cu salariul mai mare de 25 milioane se obine
printr-o expresie de forma:
{a.( CNP, Nume, Vrsta) | a(Angajat) | a.Salariu>25 }
3). Lista cu numele angajailor care au salariul mai mare de 25 milioane i denumirea locului de
munc se obine printr-o definiie de forma:
{a.Nume, l.Denumire | a(Angajat), l(Loc_de_Munc) | a.Cod_Loc=l.Coda.Salariu>25 }
Dei exprimarea pare uoar dezavantajul calculului relaional orientat pe tuplu cu
declararea rangului nu permite exprimarea aricrei cereri (n particular nu permite, de exemplu,
exprimarea operatorului de reuniune) aa cum o permite algebra relaional (sau calculul
relaional orientat pe domeniu.
Implementarea practic a calculului orientat pe tuplu este efectuat n SGBD-urile
actuale n dou moduri:
{ a.* | a(Angajat) | a.Salariu>25}
46
Lista int format
din toate atributele
relaiei
Rangul este reprezentat
de toate tuplurile relaiei
Angajat
Formula de selecie a
tuplurilor
SISTEME INFORMATICE FINANCIAR-CONTABILE
- prin acces la cereri SQL din limbaje procedurale pentru prelucrri tipice n care prin SQL se
obine o relaie pe care se efectueaz prelucrrile dorite, la modul tuplu cu tuplu, prin
instruciunile procedurale ale limbajului gazd;
- prin definirea de cursori i a unor instruciuni, pe aceti cursori, care permit accesul i
prelucrarea tuplu cu tuplu (metod implementat, de exemplu, n Oracle prin PL/SQL).
8. Vederi (viziuni)
Conform afirmaiilor din paragrafele anterioare ntr-o baz de date pot exista dou
categorii majore de relaii i anume:
- relaii de baz, al cror coninut este memorat n spaiul fizic alocat bazei de date;
- relaii derivate, al cror coninut este derivat din cel al altor relaii (de baz sau derivate).
Relaiile derivate pot fi clasificate n dou tipuri de baz:
- vederi materializate reprezentate de acele relaii derivate al cror coninut este stocat n baza
de date (temporar sau nu);
- relaii virtuale, denumite vederi (views) sau viziuni n cele ce urmeaz, care sunt definite prin
funcii (expresii n limbajul de cereri) ale cror date sunt nestocate n baza de date dar care se
comport i pot fi utilizate ca i cum ar fi relaii de baz.
Vederile materializate au avantajul faptului c sunt disponibile imediat pentru cereri i
dezavantajul c ocup spaiu fizic cu toate dezavantajele legate de gestiunea i tratarea operaiilor
efectuate asupra acestuia. Relaiile virtuale sunt extrem de uzuale deoarece sunt tratate ca i cum
ar fi materializate fr ns a pune probleme privind actualizarea, inserarea, tergerea etc sau de
orice alt natur generat de meninerea datelor stocate asociate lor. De regul, definirile
vederilor sunt stocate n spaiul fizic al bazei de date.
Exemplu:
Fie o baz de date pe relaiile:
R
1
(A,B,C), R
2
(D,E,F) i R
3
(G,H) care conine o vedere definit de un produs cartezian
(jonciune fr predicat) urmat de selecie:
Pe acest schem, cererea este executat prin nlocuirea lui R cu
definiia sa, astfel
Dintre avantajele utilizrii vederilor enumerm:
utilizatorii interesai numai de o parte a bazei de date pot fi scutii de celelalte detalii
irelevante pentru ei;
expresiile complexe pot fi definite utiliznd vederi (mai ales n cazul utilizrii repetate a unor
subexpresii). n acest sens o vedere sau viziune poate fi perceput ca o funcie sau procedur
din limbajele de programare: odat definit va fi invocat prin specificarea numelui su n
locurile cerute de sintaxa expresiilor relaionale n care este utilizat;
Autorii
47
) (
2 1
R R R
D A
>
) (
3
R R
G B
) ) ( (
2 3 1
R R R
D A G B
>
BAZE DE DATE RELAIONALE. IMPLEMENTAREA CONCEPTELOR N SQL
fiecrei vederi i se poate asocia o schem de autorizare a accesului prin aceasta putnd defini
protecii private ale bazei de date. Prin acest gen de definiri SGBD-urile actuale pun la
dispoziia utilizatorului o schem privat a bazei de date, denumit la cel mai nalt nivel prin
numele utilizatorului, schem n care sunt incluse numai vederile i relaiile la care are acces;
la eventualele restructurri ale bazei de date vechile sale relaii, cerute de aplicaiile existente
cu o anume structur, pot fi nlocuite cu vederi care pun la dispoziie acele relaii care nu mai
apar dup restructurare sau relaiile cu acele scheme cerute de aplicaii. De exemplu dac o
schem de relaie R(A,B,C) este nlocuit cu alte dou relaii R
1
(A,B) i R
2
(B,C) (lucru care
se ntmpl, de exemplu, la normalizare) atunci putem defini o vedere R=R
1
R
2
prin care
lsm neschimbate aplicaiile care utilizau R integral.
48