You are on page 1of 41

Algebra relaional

Limbajul de definire a datelor (LDD) precizeaz entitile, relaiile


dintre ele, atributele, structura atributelor, cheile, constrngerile, prin
urmare definete structura obiectelor bazei de date (schema bazei).
Limbajul de prelucrare a datelor (LMD) dintr-o baz de date
relaionale cuprinde aspecte referitoare la introducerea, eliminarea,
modificarea i cutarea datelor.
Introducerea datelor permite adugarea de tupluri la o relaie.
Tuplurile pot fi introduse de utilizator sau pot fi obinute din alte
relaii existente n baza de date.
Eliminarea datelor permite tergerea tuplurilor ce satisfac
condiii date.
Modificarea datelor permite reactualizarea tuplurilor ce
satisfac condiii date cu noi valori ale atributelor sau cu rezultate
ale unor operaii aritmetice efectuate asupra unor valori existente.
Cutarea datelor permite gsirea tuplurilor sau a unor pri ale
tuplurilor ce satisfac condiii date.
Modelul relaional ofer dou mulimi de operatori pe relaii:
algebra relaional (filtrele se obin aplicnd operatori specializai
asupra uneia sau mai multor relaii din cadrul bazei relaionale);
calculul relaional (filtrele se obin cu ajutorul unor formule
logice pe care tuplurile rezultatului trebuie s le satisfac).

Algebra relaional a fost introdus de E.F. Codd ca o mulime de
operaii formale acionnd asupra unor relaii i avnd ca rezultat alte
relaii. Baza teoretic pentru limbajele de interogare relaionale o constituie
operatorii introdui de Codd pentru prelucrarea relaiilor.
Operatorii modelului relaional definesc operaiile care se pot efectua
asupra relaiilor n scopul realizrii funciilor de prelucrare asupra BD.
Operatorii sunt numai pentru citire (nu actualizeaza operanzi)!!!
Scopul fundamental al algebrei relationale este de a permite scrierea
expresiilor relationale. Expresiile servesc ca o reprezentare de nivel
superior, simbolic, a inteniilor utilizatorului i pot fi supuse unei
diversiti de reguli de transformare (optimizare).
2
Relaiile sunt nchise fa de algebra relaional (operanzii i
rezultatele sunt relaii ieirea unei operaii poate deveni intrare pentru
alta) posibilitatea imbricrii rxpresiilor n algebra relaional).
Operatorii algebrei relaionale sunt:
operatori tradiionali pe mulimi (UNION, INTERSECT,
PRODUCT, DIFFERENCE);
operatori relaionali speciali (PROJECT, SELECT, JOIN,
DIVISION).
Calculul relaional reprezint o adaptare a calculului predicatelor la
domeniul bazelor de date relaionale. Ideea de baz este de a identifica o
relaie cu un predicat. Pe baza unor predicate iniiale, prin aplicarea unor
operatori ai calculului cu predicate (conjuncia, disjuncia, negaia,
cuantificatorul existenial i cel universal) se pot defini noi relaii.
Calculul relaional poate s fie orientat pe tupluri sau orientat pe
domenii.
Echivalena dintre algebra relaional i calculul relaional a fost
demonstrat de J.D.Ullman. Aceast echivalen arat c orice relaie
posibil de definit n algebra relaional poate fi definit i n cadrul calcului
relaional, i reciproc.
Operatorii (unari sau binari) algebrei relaionale realizeaz
urmtoarele funcii:
SELECT (selecie) extrage tupluri ce satisfac o condiie specificat;
PROJECT (proiecie) extrage atributele specificate;
DIFFERENCE (diferen) extrage tupluri care apar ntr-o relaie, dar
nu apar n cealalt;
PRODUCT (produs cartezian) genereaz toate perechile posibile de
tupluri, primul element al perechii fiind luat din prima relaie, iar cel de-
al doilea element din cealalt relaie;
UNION (reuniune) reunete dou relaii;
INTERSECT (intersecie) extrage tupluri care apar n ambele relaii;
DIVISION (diviziune) extrage valorile atributelor dintr-o relaie, care
apar n toate valorile atributelor din cealalt relaie;
JOIN (compunere) extrage tupluri din mai multe relaii corelate:
NATURAL JOIN (compunere natural) combin tupluri din dou
relaii, cu condiia ca atributele comune s aib valori identice;
3
SEMI-JOIN (semi-compunere) selecteaz tupluri ce aparin unei
singure relaii, care sunt corelate cu tupluri din cea de a doua relaie;
-JOIN (-compunere) combin tupluri din dou relaii (nu neaparat
corelate), cu condiia ca valorile atributelor specificate s satisfac o
anumit condiie;
OUTER JOIN (compunere extern) combin tupluri din dou relaii,
astfel nct condiiile de corelare s fie satisfcute. Tuplurile din orice
relaie care nu satisfac aceste condiii sunt completate cu valori null.
Pentru operatorii UNION, INTERSECT i DIFFERENCE, se
presupune c sunt aplicai numai la relaii avnd aceeai aritate, iar ordinea
(nu numele) atributelor este aceeai.
Operatorul PROJECT
Proiecia este o operaie unar care elimin anumite atribute ale unei
relaii producnd o submulime pe vertical a acesteia. Suprimarea unor
atribute poate avea ca efect apariia unor tupluri duplicate, care trebuie
eliminate.
Prin proiecie se construiete dintr-o relaie R, o nou relaie:
a) tergnd din R atributele care nu sunt menionate n parametrii
proieciei;
b) eliminnd dublurile care apar dup tergere.
Pentru a reprezenta operatorul proiecie sunt utilizate diferite notaii:

A1, ..., Am
(R) PROJECT (R, A
1
, ..., A
m
)
R[A
1
, ..., A
m
]
unde A
1
, A
2
, ..., A
m
sunt parametrii proieciei relativ la relaia R.
Exemplu. S se obin o list ce conine numele, prenumele i sexul
angajailor.
1. Proiecie n algebra relaional:
Rezultat = PROJECT(SALARIAT, nume, prenume, sex)
2. Proiecie cu dubluri n SQL:
SELECT nume, prenume, sex
FROM salariat;
3. Proiecie fr dubluri n SQL:
SELECT DISTINCT nume, prenume, sex
FROM salariat;
4
Operatorul SELECT
Selecia (restrictia) este o operaie unar care produce o submulime
pe orizontal a unei relaii R. Aceast submulime se obine prin
extragerea tuplurilor din R care satisfac o condiie specificat.
Sunt utilizate diferite notaii:

condiie
(R) R[condiie]
SELECT(R, condiie) RESTRICT(R, condiie).
Exemplu. S se obin informaii complete despre angajaii de sex
masculin.
1. Selecie n algebra relaional:
Rezultat = SELECT(SALARIAT, sex = m)
2. Selecie n SQL:
SELECT *
FROM salariat
WHERE sex = m;
Operatorul UNION
Reuniunea a dou relaii R i S este mulimea tuplurilor aparinnd
fie lui R, fie lui S, fie ambelor relaii.
Sunt utilizate notaiile:
R S
UNION(R, S)
OR(R, S)
APPEND(R, S).
Exemplu. S se obin lista cu numele persoanelor fizice i a
subantreprenorilor.
SELECT nume
FROM subantreprenor
UNION
SELECT nume
FROM pers_fizica;
5
Operatorul DIFFERENCE
Diferena a dou relaii R i S este mulimea tuplurilor care aparin
lui R, dar nu aparin lui S. Diferena este o operaie binar necomutativ
care permite obinerea tuplurilor ce apar numai ntr-o relaie.
Sunt utilizate diferite notaii:
R S
DIFFERENCE(R, S)
REMOVE(R, S)
MINUS(R, S).
Exemplu. S se obin lista cu numrul contractului, tipul
contractului, valoarea investiiei i durata lucrrii pentru contractele de
subantrepriz pentru care valoarea investiiei nu depete 60000$.
1. Diferen n algebra relaional:
R=PROJECT(SELECT(CONTRACT, tip_contract=T),
nr_contract, tip_contract, val_investitie, durata_lucrare);
S=PROJECT(SELECT(CONTRACT, val_investitie > 60000),
nr_contract, tip_contract, val_investitie, durata_lucrare);
Rezultat = DIFFERENCE(R, S)
2. Diferena n SQL:
SELECT nr_contract,tip_contract,
val_investitie,durata_lucrare
FROM contract
WHERE tip_contract
MINUS
SELECT nr_contract,tip_contract,
val_investitie,durata_lucrare
FROM contract
WHERE val_investitie>60000;
Evident diferena se poate referi la tabele diferite! Implementai
cererea prin care se listeaz toate oraele n care se afl o filial, dar nici o
proprietate.
Operatorul INTERSECT
Intersecia a dou relaii R i S este mulimea tuplurilor care aparin
i lui R i lui S. Operatorul INTERSECT este un operator binar, comutativ,
derivat:
6
R S = R (R S)
R S = S (S R).
Sunt utilizate diferite notaii:
INTERSECT(R, S)
R S
AND(R, S).
n anumite dialecte SQL exist operator special (INTERSECT), care
realizeaz aceast operaie. Operatorii INTERSECT i DIFFERENCE pot
fi simulai n SQL (n cadrul comenzii SELECT) cu ajutorul opiunilor
EXISTS, NOT EXISTS, IN, != ANY.
Exemplu. Utiliznd tabelele agent_teritorial i programator s se
obin lista codurilor salariailor care sunt programatori, dar care lucreaz i
ca ageni teritoriali.
1. Intersecie n algebra relaional:
R = PROJECT(AGENT_TERITORIAL, cod_salariat);
S = PROJECT(PROGRAMATOR, cod_salariat),
Rezultat = INTERSECT(R, S).
2. Intersecie n SQL:
SELECT cod_salariat
FROM agent_teritorial
INTERSECT
SELECT cod_salariat
FROM programator;
3. Simularea interseciei n SQL:
SELECT cod_salariat
FROM programator p
WHERE EXISTS
(SELECT cod_salariat
FROM agent_teritorial a
WHERE p.cod_salariat=a.cod_salariat);
Operatorul PRODUCT
Fie R i S relaii de aritate m, respectiv n. Produsul cartezian al lui R
cu S este mulimea tuplurilor de aritate m + n unde primele m componente
formeaz un tuplu n R, iar ultimele n componente formeaz un tuplu n S.
Sunt utilizate diferite notaii:
7
R S
PRODUCT(R, S)
TIMES(R, S).
Exemplu. S se obin lista tuturor posibilitilor de investiie n
diverse obiective de ctre o firm care este persoan juridic.
1. Produs cartezian n algebra relaional:
R = PROJECT(PERS_JURIDICA, nume, cod_contractant);
S = PROJECT(OBIECTIV_INVESTITIE, denumire);
Rezultat = PRODUCT(R, S).
2. Produs cartezian n SQL:
SELECT cod_contractant, nume, denumire
FROM obiectiv_investitie, pers_juridica;
Operatorul DIVISION
Diviziunea este o operaie binar care definete o relaie ce conine
valorile atributelor dintr-o relaie care apar n toate valorile atributelor din
cealalt relaie.
Sunt utilizate diferite notaii:
DIVIDE(R, S)
DIVISION(R, S)
R S.
Diviziunea conine acele tupluri de dimensiune n m la care, adugnd
orice tuplu din S, se obine un tuplu din R.
Operatorul diviziune poate fi exprimat formal astfel:
R
(n)
S
(m)
= {t
(n-m)
s S, (t, s) R} unde n > m i S .
Operatorul DIVISION este legat de cuantificatorul universal () care
nu exist n SQL. Cuantificatorul universal poate fi ns simulat cu ajutorul
cuantificatorului existenial () utiliznd relaia:
x P(x) x P(x).
Prin urmare, operatorul DIVISION poate fi exprimat n SQL prin
succesiunea a doi operatori NOT EXISTS.
Exemplu. S se obin codurile salariailor ataai tuturor proiectelor
pentru care s-a alocat un buget egal cu 1000.
1. Diviziune n algebra relaional:
8
R = PROJECT(ATASAT_LA, cod_salariat, nr_proiect);
S = PROJECT(SELECT(PROIECT, buget = 1000), nr_proiect);
Rezultat = DIVISION(R, S).
2. Diviziune n SQL:
SELECT UNIQUE cod_salariat
FROM atasat_la sx
WHERE NOT EXISTS
(SELECT *
FROM proiect pp
WHERE proiect.buget=1000
AND NOT EXISTS
(SELECT *
FROM atasat_la bb
WHERE pp.nr_proiect=bb.nr_proiect
AND bb.cod_salariat=sx.cod_salariat));
3. Simularea diviziunii cu ajutorul funciei COUNT:
SELECT cod_salariat
FROM atasat_la
WHERE nr_proiect IN
(SELECT nr_proiect
FROM proiect
WHERE buget=1000)
GROUP BY cod_salariat
HAVING COUNT(nr_proiect)=
(SELECT COUNT(*)
FROM proiect
WHERE buget=1000);

Operatorul JOIN
Operatorul de compunere (uniune) permite regsirea informaiei din
mai multe relaii corelate. Operatorul combin produsul cartezian, selecia
i proiecia.
Operatorul NATURAL JOIN
Operatorul de compunere natural (NATURAL JOIN) combin
tupluri din dou relaii R i S, cu condiia ca atributele comune s aib
valori identice.
Algoritmul care realizeaz compunerea natural este urmtorul:
1. se calculeaz produsul cartezian R S;
9
2. pentru fiecare atribut comun A care definete o coloan n R i o
coloan n S, se selecteaz din R S tuplurile ale cror valori
coincid n coloanele R.A i S.A (atributul R.A reprezint numele
coloanei din R S corespunztoare coloanei A din R);
3. pentru fiecare astfel de atribut A se proiecteaz coloana S.A, iar
coloana R.A se va numi A.
Operatorul NATURAL JOIN poate fi exprimat formal astfel:
JOIN(R, S) =
i1,...,im

(R.A1 = S.A1) ... (R.Ak = S.Ak)
(R S),
unde A
1
, ..., A
k
sunt atributele comune lui R i S, iar i
1
, ..., i
m
reprezint lista
componentelor din R S (pstrnd ordinea iniial) din care au fost
eliminate componentele S.A
1
, ..., S.A
k
.
Exemplu. S se obin informaii complete despre angajai i
departamentele n care lucreaz.
1. Operatorul de compunere natural n algebra relaional:
Rezultat = JOIN(SALARIAT, DEPARTAMENT).
2. Operatorul de compunere natural n SQL:
SELECT *
FROM salariat, departament
WHERE nr_depart = cod_departament;

Operatorul -JOIN
Operatorul -JOIN combin tupluri din dou relaii (nu neaprat
corelate) cu condiia ca valorile atributelor specificate s satisfac o
anumit condiie specificat explicit n cadrul operaiei.
Operatorul -JOIN este un operator derivat, fiind o combinaie de
produs scalar i selecie:
JOIN(R, S, condiie) =
condiie
(R S)
Exemplu. S se afieze pentru fiecare salariat, codul acestuia i grila
sa de salarizare.
SELECT empno, level
FROM salgrade, emp
WHERE sal BETWEEN losal AND hisal;
Exemplu. S se obin informaii despre contractani (codul i banca)
i obiectivele de investiie asociate acestora (denumire, numr certificat de
urbanizare) cu condiia ca obiectivele s nu fie la aceeai adres ca i
contractanii.
10
1. Operatorul -JOIN n algebra relaional:
R = PROJECT(CONTRACTANT, cod_contractant, banca);
S = PROJECT(OBIECTIV_INVESTITIE, denumire, nr_cert_urb);
Rezultat = JOIN(R, S, OBIECTIV_INVESTITIE.adresa <>
CONTRACTANT.adresa).
2. Opratorul -JOIN n SQL:
SELECT cod_contractant,banca, nr_cert_urb,
denumire
FROM contractant a,obiectiv_investitie b
WHERE b.adresa <> a.adresa;
Operatorul SEMI-JOIN
Operatorul SEMI-JOIN conserv atributele unei singure relaii
participante la compunere i este utilizat cnd nu sunt necesare toate
atributele compunerii. Operatorul este asimetric.
Tupluri ale relaiei R care particip n compunerea (natural sau
-JOIN) dintre relaiile R i S.
SEMI-JOIN este un operator derivat, fiind o combinaie de proiecie
i compunere natural sau proiecie i -JOIN:
SEMIJOIN(R, S) =
M
(JOIN(R, S))
SEMIJOIN(R, S, condiie) =
M
(JOIN(R, S, condiie)),
unde am notat prin M atributele relaiei R.
Exemplu. S se obin informaii referitoare la persoanele fizice
(nume, buletin) care investesc n obiective cu caracter recreativ.
1. Operatorul SEMI-JOIN n algebra relaional:
R = SELECT(OBIECTIV_INVESTITIE, denumire = cabana OR
denumire = casa de vacanta)
S = JOIN(PERS_FIZICA, R)
Rezultat = PROJECT(S, nume, buletin).
2. Operatorul SEMI-JOIN n SQL:
SELECT nume,bi
FROM pers_fizica a,obiectiv_investitie b
WHERE a.cod_contractant = b.cod_contractant
AND (denumire=cabana)OR (denumire= casa
de vacanta);

11
Operatorul OUTER JOIN
Operaia de compunere extern combin tupluri din dou relaii
pentru care sunt satisfcute condiiile de corelare. n cazul aplicrii
operatorului JOIN se pot pierde tupluri, atunci cnd exist un tuplu n una
din relaii pentru care nu exist nici un tuplu n cealalt relaie, astfel nct
s fie satisfcut relaia de corelare.
Operatorul elimin acest inconvenient prin atribuirea valorii null
valorilor atributelor care exist ntr-un tuplu din una dintre relaiile de
intrare, dar care nu exist i n cea de-a doua relaie.
Practic, se realizeaz compunerea a dou relaii R i S la care se
adaug tupluri din R i S, care nu sunt coninute n compunere, completate
cu valori null pentru atributele care lipsesc.
Compunerea extern poate fi: LEFT, RIGHT, FULL. De exemplu,
OUTER JOIN LEFT reprezint compunerea n care tuplurile din R, care nu
au valori similare n coloanele comune cu relaia S, sunt de asemenea
incluse n relaia rezultat.
Exemplu. S se obin informaii referitoare la persoanele fizice care
sunt investitori (chiar dac nu au investit n obiective industriale) i la
obiectivele de investiie industriale (chiar i cele care nu sunt construite de
persoane fizice).
R = SELECT(OBIECTIV_INVESTITIE, denumire = 'industrial')
Rezultat = OUTERJOIN(PERS_FIZICA, R).
Operatorii algebrei relaionale pot fi reprezentai grafic cu ajutorul
unor simboluri speciale. curs!
Operaii adiionale: complement, despicare, nchidere tranzitiv.
Funcii asociate: MIN, MAX, COUNT, AVG, SUM, VAR, STD etc.










12

Evaluarea i optimizarea interogrilor

Procesarea interogrilor
O expresie a algebrei relaionale este constituit din relaii legate
prin operaii din algebra relaional. O expresie se poate reprezenta grafic
cu ajutorul unui arbore, numit arbore algebric, n care nodurile corespund
operatorilor din cadrul expresiei respective.
Evaluarea unei expresii presupune efectuarea prelucrrilor indicate
de operatorii din expresie n ordinea apariiilor sau n ordinea fixat prin
paranteze. Rezultatul evalurii unei expresii este o relaie derivat din
relaiile menionate ca operanzi n cadrul expresiei.
Dou expresii sunt echivalente, dac n urma evalurii lor se obine
ca rezultat aceeai relaie.

Exemple referitoare la moduri echivalente de exprimare a unei cereri
(vor fi rezolvate la curs!).
1. Informaii despre salariaii care nu contribuie la machetarea nici
unei publicaii, dar au retribuia mai mare dect o valoare dat.
2. Codul i numele subantreprenorilor care au realizat lucrri
specializate la obiective case de vacan sau cabane.
3. Codurile i telefoanele investitorilor, valoarea si durata de execuie
a investitiilor a caror valoare este ntre dou limite specificate.
4. Perioada de desfurare i preul ofertelor care ncep dup 1
ianuarie 2003 i sunt:
sejururi la munte;
excursii n care autocarele sunt conduse de oferi angajai dup 1
mai 1987 i supravegheate de ghizi ce cunosc limba englez care
au fcut specializare n Suedia.
n majoritatea sistemelor de gestiune, i n special n cele relaionale,
interfaa cu utilizatorul este de tip neprocedural. Utilizatorul definete datele
pe care dorete s le vizualizeze fr a da algoritmii de acces. Sistemul
trebuie s converteasc cererea utilizatorului:
ntr-o cerere optimal;
n proceduri de acces optimal la datele fizice.
Garantarea absolut a performanelor optime pentru procesorul
limbajului relaional este imposibil. Corect ar fi utilizarea cuvntului
ameliorare n locul cuvntului optimizare.
13
Evaluarea unei interogri se efectueaz n trei etape.
Analiza cererii presupune studierea sintactic i semantic a cererii
pentru a verifica corectitudinea sa i a simplifica criteriul de
cutare.
Ordonanarea presupune descompunerea cererii ntr-o mulime de
operaii elementare i determinarea unei ordini optimale a acestor
operaii. Operaiile sunt, n general, cele ale algebrei relaionale. La
sfritul etapei se obine un plan de execuie pentru cerere.
Execuia presupune efectuarea (paralel i/sau secvenial)
operaiilor elementare furnizate de planul de execuie pentru a
obine rezultatul cererii.

Presupunem c utilizatorul transmite sistemului de gestiune o cerere
exprimat prin ordine SQL. Pentru a rspunde cererii, SGBD-ul trebuie s
neleag cererea utilizatorului. Cererea trebuie s fie corect sintactic, datele
trebuie s fie disponibile utilizatorului i trebuie localizate analiznd diferite
drumuri de acces la ele. Aceste funcii sunt realizate de SGBD cu ajutorul a
dou module funcionale care comunic permanent:
analizorul cererilor, care asigur verificarea sintactic i
semantic a cererii, localizarea datelor implicate n cerere (gsirea
adresei blocurilor ce conin datele), furnizarea planului de execuie.
administratorul datelor (executorul), care execut efectiv cererea
(primete planurile de execuie furnizate de modulul de optimizare
i le execut). Execuia presupune cutarea blocurilor ce conin
datele i transferul blocurilor n memoria cache.
Ideea general:
cerere arbore algebric (nu este unic) plan de executie optimizare
Un plan de execuie implic o secven de pai pentru evaluarea cererii
(n mod obinuit, fiecare pas din planul de execuie corespunde unei operaii
relaionale) precum i metoda care va fi folosit pentru evaluarea operaiei.
De obicei, pentru o operaie relaional dat, exist mai multe metode ce pot
fi folosite pentru evaluarea acesteia.
Dou planuri de execuie diferite care au ntotdeauna acelai rezultat se
numesc echivalente. Planuri de execuie echivalente pot avea diferite
costuri. Scopul optimizrii cererilor este de a gsi, printre diversele planuri
de execuie echivalente, pe acela de cost minim. ntr-un sistem centralizat,
costul evalurii unei cereri este suma a dou componente, costul I/O
(transferuri de date) i costul CPU (verificare de condiii, operaii join etc.).
14

Ordinea de execuie a operaiilor
O interogare const dintr-un numr de operaii. Ordinea n care se
efectueaz operaiile are un rol important n evaluarea costului necesar
realizrii interogrii.
Exist dou modaliti de abordare pentru a determina ordinea de
execuie a operaiilor:
algebric;
bazat pe estimarea costului.
Ambele folosesc o mulime de reguli care permit transformarea unui
plan de execuie (reprezentat ca o expresie scris n termenii algebrei
relaionale) n altul, echivalent.
Optimizarea cererilor bazat pe algebra relaional se realizeaz n
dou etape:
se exprim cererile sub forma unor expresii algebrice relaionale;
se aplic acestor expresii transformri algebrice care conduc la
expresii echivalente, dar care vor fi executate mai eficient.
Procesul de transformare a cererilor se realizeaz conform unei
strategii de optimizare care poate s fie:
independent de modul de memorare a datelor (strategie general);
dependent de modul de memorare (strategie specific unui anumit
SGBD).

Proprietile operatorilor algebrei relaionale
Proprietatea 1. Comutativitatea operaiilor de join i produs cartezian:
JOIN(R1, R2) = JOIN(R2, R1)
R1 R2 = R2 R1
Proprietatea 2. Asociativitatea operaiilor de join i produs cartezian:
JOIN(JOIN(R1, R2), R3) = JOIN(R1, JOIN(R2, R3))
(R1 R2) R3 = R1 (R2 R3)
Proprietatea 3. Compunerea proieciilor:

A1,...,Am
(
B1,...,Bn
(R)) =
A1,...,Am
(R),
unde {A
1
, A
2
,...,A
m
} {B
1
, B
2
,...,B
n
}.
Proprietatea 4. Compunerea seleciilor:

cond1
(
cond2
(R)) =
cond1cond2
(R) =
cond2
(
cond1
(R)),
unde am notat prin cond condiia dup care se face selecia.
15
Proprietatea 5. Comutarea seleciei cu proiecia:

A1,...,Am
(
cond
(R)) =
cond
(
A1,...,Am
(R)),
unde condiia dup care se face selecia implic numai atributele A
1
,...,A
m
.
Dac condiia implic i atributele B
1
,...,B
n
, care nu aparin mulimii
{A
1
,...,A
m}
, atunci:

A1,...,Am
(
cond
(R)) =
A1,...,Am
(
cond
(
A1,...,Am,B1,...,Bn
(R)))
Proprietatea 6. Comutarea seleciei cu produsul cartezian:
Dac toate atributele menionate n condiia dup care se face selecia
sunt atribute ale relaiei R1, atunci:

cond
(R1 R2) =
cond
(R1) R2
Dac condiia este de forma cond1cond2 i dac cond1 implic
numai atribute din R1, iar cond2 implic numai atribute din R2, atunci

cond
(R1 R2) =
cond1
(R1)
cond2
(R2)
Dac cond1 implic numai atribute din R1, iar cond2 implic atribute
att din R1 ct i din R2, atunci:

cond
(R1 R2) =
cond2
(
cond1
(R1) R2)
Proprietatea 7. Comutarea seleciei cu reuniunea:

cond
(R1 R2) =
cond
(R1)
cond
(R2)
Proprietatea 8. Comutarea seleciei cu diferena:

cond
(R1 R2) =
cond
(R1)
cond
(R2)
Proprietatea 9. Comutarea proieciei cu reuniunea:

A1,...,Am
(R1 R2) =
A1,...,Am
(R1)
A1,...,Am
(R2)
Proprietatea 10. Comutarea proieciei cu produsul cartezian:
Dac A
1
,...,A
m
este o list de atribute ce apar n schemele relaionale R1
i R2 i dac lista este format din atribute aparinnd lui R1 (notate prin
B
1
,...,B
n
) i din atribute aparinnd lui R2 (notate prin C
1
,...,C
k
) atunci:

A1,...,Am
(R1 R2) =
B1,...,Bn
(R1)
C1,...,Ck
(R2)
Proprietatea 11. Compunerea proieciei cu operaia join:
Dac A
1
,...,A
m
este o list de atribute ce apar n schemele relaionale R1
i R2 i dac lista este format din atribute aparinnd lui R1 (notate prin
B
1
,...,B
n
) i din atribute aparinnd lui R2 (notate prin C
1
,...,C
k
) atunci:

A1,...,Am
(JOIN(R1,R2,D)) =
A1,...,Am
(JOIN(
D,B1,...,Bn
(R1),
D,C1,...,Ck
(R2),D),
unde am notat prin JOIN(R1, R2, D) operaia de compunere natural ntre R1
i R2 dup atributul comun D.
16
Proprietatea 12. Compunerea seleciei cu operaia join:

cond
(JOIN (R1, R2, D)) =
cond
(JOIN (
D,A
(R1),
D,A
(R2), D)),
unde A reprezint atributele care apar n condiia dup care se face selecia.
Reguli de optimizare frecvent folosite:
Regula de optimizare 1. Seleciile se execut ct mai devreme
posibil. Motivaia acestei reguli este c seleciile reduc substanial
dimensiunea relaiilor. Regula de transformare 4 poate fi folosit
pentru a separa dou sau mai multe selecii n selecii individuale
care pot fi distribuite join-ului sau produsului cartezian folosind
comutarea seleciei cu join-ul.
Regula de optimizare 2. Produsurile carteziene se nlocuiesc cu join-
uri, ori de cte ori este posibil. Un produs cartezian ntre dou relaii
este de obicei mult mai scump (ca i cost) dect un join ntre cele
dou relaii, deoarece primul genereaz concatenarea tuplurilor n
mod exhaustiv i poate genera un rezultat foarte mare. Aceast
transformare se poate realiza folosind legtura dintre produs
cartezian, join i selecie.
Regula de optimizare 3. Dac sunt mai multe join-uri atunci cel care
se execut primul este cel mai restrictiv. Un join este mai restrictiv
dect altul dac produce o relaie mai mic. Se poate determina care
join este mai restrictiv pe baza factorului de selectivitate sau cu
ajutorul informaiilor statistice. Algebric, acest lucru se poate realiza
folosind regula de transformare 2.
Regula de optimizare 4. Proieciile se execut la nceput pentru a
ndeprta atributele nefolositoare. Dac un atribut al unei relaii nu
este folosit n operaiile ulterioare atunci trebuie ndeprtat. n felul
acesta se va folosi o relaie mai mic n operaiile ulterioare. Aceasta
se poate realiza folosind comutarea proieciei cu join-ul.
Exemple curs!!!

Regulile lui Codd
Caracteristici ale modelului relaional:
nu exist tupluri identice;
ordinea liniilor i a coloanelor este arbitrar;
articolele unui domeniu sunt omogene;
fiecare coloan definete un domeniu distinct i nu se poate repeta n
cadrul aceleiai relaii;
17
toate valorile unui domeniu corespunztoare tuturor cazurilor nu mai
pot fi descompuse n alte valori (sunt atomice).

Avantajele modelului relaional:
fundamentare matematic riguroas;
independen fizic a datelor;
posibilitatea filtrrilor;
existena unor structuri de date simple;
realizarea unei redundane minime;
suplee n comunicarea cu utilizatorul neinformatician.

Ca limite ale modelului relaional putem meniona:
rmne totui redundan,
ocup spaiu,
apar fenomene de inconsisten,
nu exist mecanisme pentru tratarea optim a cererilor recursive,
nu lucreaz cu obiecte complexe,
nu exist mijloace perfecionate pentru exprimarea constrngerilor de
integritate,
nu realizeaz gestiunea totala a datelor distribuite,
nu realizeaz gestiunea cunotinelor.

n anul 1985, E.F. Codd a publicat un set de 13 reguli n raport cu
care un sistem de gestiune a bazelor de date poate fi apreciat ca relaional.
Nici un sistem de gestiune a bazelor de date pus n vnzare pe piaa
comercial nu respect absolut toate regulile definite de Codd, dar acest
lucru nu mpiedic etichetarea acestor sisteme drept relaionale.
Nu trebuie apreciat un SGBD ca fiind relaional sau nu, ci msura n
care acesta este relaional, deci numrul regulilor lui Codd pe care le
respect.
Regula 1 regula gestionrii datelor. Un SGBD relaional trebuie s
fie capabil s gestioneze o baz de date numai prin posibilitile sale
relaionale.
Regula 2 regula reprezentrii informaiei. ntr-o baz de date
relaional, informaia este reprezentat la nivel logic sub forma unor
tabele ce poart numele de relaii.
18
Regula 3 regula accesului garantat la date. Fiecare valoare dintr-o
baz de date relaional trebuie s poat fi adresat n mod logic printr-o
combinaie format din numele relaiei, valoarea cheii primare i numele
atributului.
Regula 4 regula reprezentrii informaiei necunoscute. Un sistem
relaional trebuie s permit utilizatorului definirea unui tip de date numit
null pentru reprezentarea unei informaii necunoscute la momentul
respectiv.
Regula 5 regula dicionarelor de date. Asupra descrierii bazelor de
date (informaii relative la relaii, vizualizri, indeci etc.) trebuie s se
poat aplica aceleai operaii ca i asupra datelor din baza de date.
Regula 6 regula limbajului de interogare. Trebuie s existe cel
puin un limbaj pentru prelucrarea bazei de date.
Regula 7 regula de actualizare a vizualizrii. Un SGBD trebuie s
poat determina dac o vizualizare poate fi actualizat i s stocheze
rezultatul interogrii ntr-un dicionar de tipul unui catalog de sistem.
Regula 8 regula limbajului de nivel nalt. Regulile de prelucrare
asupra unei relaii luat ca ntreg sunt valabile att pentru operaiile de
regsire a datelor, ct i asupra operaiilor de inserare, actualizare i
tergere a datelor.
Regula 9 regula independenei fizice a datelor: Programele de
aplicaie i activitile utilizatorilor nu depind de modul de depunere a
datelor sau de modul de acces la date.
Regula 10 regula independenei logice a datelor. Programele de
aplicaie trebuie s fie transparente la modificrile de orice tip efectuate
asupra datelor.
Regula 11 regula independenei datelor din punct de vedere al
integritii. Regulile de integritate trebuie s fie definite ntr-un sublimbaj
relaional, nu n programul de aplicaie.
Regula 12 regula independenei datelor din punct de vedere al
distribuirii. Distribuirea datelor pe mai multe calculatoare dintr-o reea de
comunicaii de date, nu trebuie s afecteze programele de aplicaie.
Regula 13 regula versiunii procedurale a unui SGBD. Orice
component procedural a unui SGBD trebuie s respecte aceleai
restricii de integritate ca i componenta relaional.
Deoarece regulile lui Codd sunt prea severe pentru a fi respectate de
un SGBD operaional, s-au formulat criterii minimale de definire a unui
sistem de gestiune relaional.
19
Un SGBD este minimal relaional dac:
toate datele din cadrul bazei sunt reprezentate prin valori n tabele;
nu exist pointeri observabili de ctre utilizator;
sistemul suport operatorii relaionali de proiecie, selecie i
compunere natural, fr limitri impuse din considerente interne.
Un SGBD este complet relaional dac este minimal relaional i
satisface n plus condiiile:
sistemul suport restriciile de integritate de baz (unicitatea cheii
primare, constrngerile refereniale, integritatea entitii).
sistemul suport toate operaiile de baz ale algebrei relaionale.



NORMALIZAREA RELAIILOR

n procesul modelrii unei baze de date relaionale, o etap important
o reprezint normalizarea relaiilor conceptuale (Codd, 1972), adic
obinerea de relaii molecularefr a pierde nimic din informaie pentru a
elimina:
redundana;
anomaliile reactualizrii informaiilor.
Tehnica normalizrii permite obinerea unei scheme conceptuale
rafinate printr-un proces de ameliorare progresiv a unei scheme conceptuale
iniiale a bazei de date relaionale. Dup fiecare etap de ameliorare, relaiile
bazei de date ating un anumit grad de perfeciune, deci se afl ntr-o anumit
form normal. Trecerea unei relaii dintr-o form normal n alta, presupune
eliminarea unei anumit tip de dependene nedorite, care sunt transformate n
dependene admisibile, adic dependene care nu provoac anomalii.
Procesul de ameliorare a schemei conceptuale trebuie:
s garanteze conservarea datelor, adic n schema conceptual
final trebuie s figureze toate datele din cadrul schemei iniiale;
s garanteze conservarea dependenelor dintre date, adic n
schema final fiecare dependen trebuie s aib determinantul i
determinatul n schema aceleiai relaii;
s reprezinte o descompunere minimal a relaiilor iniiale,
adic nici una din relaiile care compun schema final nu trebuie
s fie coninut ntr-o alt relaie din aceast schem.
20
Exist dou metode pentru a modela baze de date relaionale fr
anomalii sau pierderi de informaie.
Schema descompunerii pleac de la o schem relaional
universal ce conine toate atributele BD. Schema se descompune
prin proiecii succesive n subrelaii. Descompunerea se oprete
cnd continuarea ei ar duce la pierderi de informaie. Algoritmii
de descompunere se bazeaz, n general, pe descrierea formal a
dependenei dintre atribute.
Schema sintezei pleac de la o mulime de atribute
independente. Utiliznd proprieti de semantic i legturi ntre
atribute se pot compune noi relaii, astfel nct, acestea s nu
sufere de anumite anomalii. Algoritmii se bazeaz, n general, pe
teoria grafurilor pentru a reprezenta legtura ntre atribute.
Dependene funcionale
O relaie universal este o relaie ce grupeaz toate atributele care
modeleaz sistemul real cercetat. Fie E, mulimea dependenelor
considerate de proiectantul bazei pentru o schem relaional sau pentru o
relaie universal. Plecnd de la o mulime de proprieti formale ale
dependenelor, proprieti considerate drept reguli de deducie (axiome),
poate fi obinut mulimea maximal de dependene asociate lui E. Aceast
mulime definete nchiderea lui E.
Fie E mulimea dependenelor unei relaii i p
1
, p
2
, ..., p
r
, r 1,
proprieti formale ale acestor dependene. Dac exist o mulime E, astfel
nct orice dependen a mulimii E este derivabil din E prin aplicarea
proprietilor p
1
, p
2
, ..., p
r
, atunci mulimea E definete acoperirea lui E
pentru proprietile p
1
, p
2
, ..., p
r
.
E este o acoperire minimal pentru E, dac nu exist nici o
submulime proprie, nevid a lui E care s fie o acoperire pentru E.
Evident, E i E au nchideri identice, deci dispun de acelai potenial
informaional!
Fie R(A
1
, A
2
, ..., A
n
) o schem relaional i fie X, Y submulimi de
atribute ale lui R. X determin funcional Y sau Y depinde funcional (FD)
de X, dac pentru orice relaie r (valoare curent a lui R) nu exist dou
tupluri care s aib aceleai valori pentru atributele lui X i s aib valori
diferite pentru cel puin un atribut din Y. Cu alte cuvinte, o valoare a lui X,
determin unic o valoare a lui Y.
21
Notaia utilizat pentru desemnarea dependenei funcionale este X
Y. X este numit determinant, iar Y este numit determinat (sau
dependent). Dependena funcional X Y este trivial dac Y X.
Comparnd toate submulimile de atribute ale unei relaii i
determinnd legturile dintre ele, se pot obine toate dependenele
funcionale pe care o relaie le satisface. Aceast abordare nu este eficient,
consumnd mult timp.
Exist posibilitatea ca, tiind anumite dependene funcionale i
utiliznd reguli de deducie, s fie obinute toate dependenele funcionale.
Fie X, Y, Z, W mulimi de atribute ale unei scheme relaionale R i fie
urmtoarele axiome:
Ax1 reflexivitate. X X. Mai general, dac Y X, atunci X Y.
Ax2 creterea determinantului. Pot fi considerate urmtoarele
formulri echivalente pentru aceast axiom.
1. Dac X Y i X Z, atunci Z Y.
2. Dac X Y i W Z, atunci X Z Y W.
3. Dac X Y atunci X Z Y Z.
4. Dac X Y atunci X Z Y.
Ax3 tranzitivitate. Dac X Y i Y Z, atunci X Z.
O mulime de axiome este complet dac i numai dac plecnd de
la o mulime de dependene E se pot obine toate dependenele nchiderii
lui E, utiliznd axiomele mulimii.
O mulime de axiome este nchis dac i numai dac plecnd de la
o mulime de dependene E, nu poate fi dedus cu ajutorul axiomelor o
dependen care nu aparine nchiderii lui E. (nu obin altele!)
Ullman a demonstrat c axiomele Ax1 Ax3, numite axiomele lui
Amstrong, reprezint o mulime nchis i complet de axiome. Consecina
acestui rezultat este c nchiderea lui E reprezint mulimea
dependenelor deduse din E, prin aplicarea axiomelor lui Amstrong!!!
Nu toate dependenele funcionale sunt folositoare pentru modelarea
relaional. O dependen funcional X Y se numete dependen
funcional total (FT), dac i numai dac nu exist nici o submulime
proprie X X, astfel nct X Y. Dac exist o submulime proprie X
X, astfel nct X Y, atunci dependena funcional X Y este parial.
n axioma Ax2, dependena Z Y este o dependen funcional parial.
22
n cazul dependenei funcionale totale, axiomele lui Amstrong se
reduc la o axiom unic i anume pseudo-tranzitivitatea:
dac X Y i W Y Z, atunci W X Z.
Aceast axiom este o regul de deducie complet pentru total
dependene:
pseudo-tranzitivitatea implic tranzitivitatea (W = );
reflexivitatea nu poate fi utilizat pentru a obine dependene
totale;
reflexivitatea i pseudo-tranzitivitatea implic creterea.
Dac F este o mulime de dependene funcionale totale, atunci
nchiderea pseudo-tranzitiv F
+
a acestei mulimi este reuniunea
mulimilor dependenelor funcionale totale care pot fi obinute din F
folosind axioma de pseudo-tranzitivitate.
Dou mulimi de dependene funcionale totale sunt echivalente
dac au nchideri pseudo-tranzitive identice. Pentru a modela scheme
relaionale se consider mulimi minimale de dependene funcionale totale,
capabile s genereze toate nchiderile pseudo-tranzitive. Aceste mulimi
definesc acoperiri minimale.
O mulime de dependene funcionale totale F
*
asociat unei mulimi
de atribute A definete o acoperire minimal dac satisface urmtoarele
proprieti:
nici o dependen funcional din F
*
nu este redundant;
toate dependenele funcionale totale ntre submulimi ale lui A
sunt n nchiderea pseudo-tranzitiv a lui F
*
.
Orice mulime de dependene totale are cel puin o acoperire minimal.
Alegerea acoperirii minimale este punctul de start n modelarea schemelor
relaionale.
Dependenele funcionale ntre atributele bazei pot fi reprezentate
grafic. Fie A = {A
1
, A
2
, ..., A
n
} o mulime de atribute i fie o mulime de
dependene funcionale {X
i
A
j
}, unde X
i
este o submulime a lui A.
Graful dependenelor funcionale este un graf direcionat bipartit,
definit astfel:
1. pentru fiecare atribut A
j
exist un singur nod avnd eticheta A
j
;
2. pentru fiecare dependen funcional de forma A
i
A
j
, exist un
arc de la A
i
la A
j
;
23
3. pentru fiecare dependen funcional de forma X
i
A
j
, unde
mulimea X
i
este definit de X
i
= {Ai
1
, ..., Ai
p
} cu p > 1, exist un
nod auxiliar etichetat prin X
i
i o mulime de arce plecnd de la
Ai
1
, ..., Ai
p
pentru a obine pe X
i
i printr-un arc adiional de la X
i
la
A
j
. Nodurile X
i
se reprezint prin dreptunghiuri.
Exemplu:
1. Graful dependenelor funcionale pentru schema relaional
CONSUMATOR_DE_VIN(W#, localitate, varsta, calitate, regiune, tara, D#,
nume, data, cantitate) i acoperirea minimal.

localitate

W#
calitate
varsta
regiune
tara

data cantitate

D#

nume

localitate

W#
calitate
varsta
regiune
tara

data cantitate

D#

nume
24
2. Graful dependenelor funcionale pentru schema relaional
OBIECTIV_INVESTITIE. Dependentele sunt deduse din regulile impuse de
beneficiar!
aria_construita
denumire
nr_certificat_urbanizare
cod_obiectiv# adresa
nr_aut_construtie
nr_contract cod_contractant

Necesitatea normalizrii

Anomaliile care apar n lucrul cu baza de date se produc datorit
dependenelor care exist ntre datele din cadrul relaiilor bazei de date.
Dependenele sunt plasate greit n tabele!!!
Avion
A# nume capacitate localitate
1 AIRBUS 250 PARIS
2 AIRBUS 250 PARIS
3 AIRBUS 250 LONDRA
4 CAR 100 PARIS
5 B707 150 LONDRA
6 B707 150 LONDRA

Constrngere:
toate avioanele cu acelai nume au aceeai capacitate.
Datorit dependenei introduse pot exista: anomalii la inserare,
modificare sau tergere, redundan n date, probleme de reconexiune.
1. Redundan logic. Cuplul (AIRBUS, 250) apare de trei ori.
2. Anomalie la inserie. S-a cumprat un B727 cu 150 locuri. El
poate fi inserat n relaia AVION doar dac se definete o nou
valoare pentru cheia primar.
3. Anomalie la tergere. Dac este tears nregistrarea pentru care
A# este 4, atunci se pierde informaia c un avion CAR are
capacitatea 100.
25
4. Anomalie la modificare. Dac se modific capacitatea lui B707
de la 150 la 170, atunci costul modificrii este mare pentru a
modifica toate nregistrrile, iar dac se modific doar o
nregistrare atunci constrngerea nu va mai fi verificat.
5. Problema reconexiunii. Considerm schemele relaionale:
AVION1 = PROJECT(AVION, A#, nume)
AVION22 = PROJECT(AVION, nume, capacitate, localitate)
AVION3 = JOIN(AVION1, AVION2).
Se observ c schema AVION3 este diferit de AVION.
Apare un tuplu nou: (3, AIRBUS, 250, PARIS).

Anomaliile au aprut datorit dependenei funcionale (constrngerii)
introduse anterior!!!
Normalizarea are drept scop:
suprimarea redundanei logice,
evitarea anomaliilor la reactualizare,
rezolvarea problemei reconexiunii.
Exist o teorie matematic a normalizrii al crei autor este E.F.
Codd. Soluia: construirea unor tabele standard (forme normale).
Normalizarea este procesul reversibil de transformare a unei relaii, n
relaii de structur mai simpl. Procesul este reversibil n sensul c nici o
informaie nu este pierdut n timpul transformrii. O relaie este ntr-o form
normal particular dac ea satisface o mulime specificat de constrngeri.
Procesul normalizrii se realizeaz plecnd de la o relaie universal ce
conine toate atributele sistemului de modelat, plus o mulime de anomalii.
Orice form normal se obine aplicnd o schem de descompunere. Exist
dou tipuri de descompuneri.
Descompuneri ce conserv dependenele. Aceast
descompunere presupune desfacerea relaiei R n proieciile R
1
,
R
2
, ..., R
k
, astfel nct dependenele lui R sunt echivalente (au
nchideri pseudo-tranzitive identice) cu reuniunea dependenelor
lui R
1
, R
2
, ..., R
k
.
Descompuneri fr pierderi de informaie (L-join). Aceast
descompunere presupune desfacerea relaiei R ntr-o mulime de
proiecii R
1
, R
2
, ..., R
j
, astfel nct pentru orice realizare a lui R
este adevrat relaia:
R = JOIN(
B1
(R),
B2
(R), ...,
Bj
(R))
26
unde, pentru 1 k j, B
k
reprezint mulimea atributelor corespunztoare
proieciei R
k
(R
k
=
Bk
(R)). Prin urmare, relaia iniial poate fi reconstruit
considernd compunerea natural a relaiilor obinute prin descompunere.
Formele normale sunt obinute prin descompuneri fr pierderi de
informaie.
O descompunere fr pierdere de informaie, utilizat n procesul
normalizrii, este dat de regula Casey-Delobel:
Fie R(A) o schem relaional i fie , , o partiie a lui A.
Presupunem c determin funcional pe . Atunci:
R(A) = JOIN(

(R),

(R)).
mulimea atributelor care intervin n dependenele funcionale;
reprezint reuniunea determinantului cu restul atributelor lui A.














Pentru exemplul analizat anterior:
= {nume},
= {capacitate},
= {A#, localitate}.
Aplicnd Casey-Delobel se obin schemele:
AVION1(nume#, capacitate)
AVION2)A#, nume, localitate).
Se observ c anomaliile comentate au disprut!
AVION1
Nume Capacitate
AIRBUS 150
CAR 100
B707 150

Relatia universala
FN1
FN2
FN3
BCNF
FN4
FN5
27
AVION2
A# Nume Localitate
1 AIRBUS PARIS
2 AIRBUS PARIS
3 AIRBUS LONDRA
4 CAR PARIS
5 B707 LONDRA
6 B707 LONDRA

Forma normal (FN1)
O relaie este n prima form normal dac fiecrui atribut care o
compune i corespunde o valoare indivizibil (atomic).
Exemplu: variante pentru a implementa FN1 pentru tabelul MASINA:
Persoana Vehicul
Eu R25 - W14 - R21
Tu 205
El R5 - 305
noi BX - 305 - R12 - R25
Varianta 1
Persoana Vehicul
Eu R25
Eu W14
Eu R21
Tu 205
El R5
El 305
Noi BX
Noi 305
Noi R12
Noi R25
Varianta 2
Persoana Prima Doi Trei Patru
Eu R25 W14 R21
Tu 205
El R5 305
Noi BX 305 R12 R25
28
Varianta 3 (4 tabele)
Masina 31 (similar se definesc Masina_32, Masina_33, Masina_34)..
Persoana Vehicul
Eu R25
Tu 205
El R5
Noi BX
Masina_34
Persoana Vehicul
Noi R25

Forma normal 2 (FN2)
O relaie R este n a doua form normal dac i numai dac:
relaia R este n FN1;
fiecare atribut care nu este cheie (nu particip la cheia primar)
este dependent de ntreaga cheie primar.
atasat_la
Cod_salariat# Job_cod Nr_proiect# Functia Suma
S1 Programator P1 Supervizor 60
S1 Programator P2 Cercetator 25
S1 Programator P3 Auxiliar 10
S3 Vanzator P3 Supervizor 60
S5 Inginer P3 Supervizor 60
atasat_2a
Cod_salariat# Nr_proiect# Functia Suma
S1 P1 Supervizor 60
S1 P2 Cercetator 25
S1 P3 Auxiliar 10
S3 P3 Supervizor 60
S5 P3 Supervizor 60
atasat_2b
Cod_salariat# Job_cod
S1 Programator
S3 Vanzator
S5 Inginer

29
A doua condiie exprim necesitatea total dependenei de cheia
primar. Aceast form normal interzice manifestarea unor dependene
funcionale pariale n cadrul relaiei R!!!
Pentru a obine o relaie FN2 se poate aplica regula Casey-Delobel.
Fie relaia R(K1, K2, X, Y), unde K1 i K2 definesc cheia primar, iar X i Y
sunt mulimi de atribute, astfel nct K1 X. Din cauza dependenei
funcionale K1 X care arat c R nu este n FN2, se nlocuiete R (fr
pierdere de informaie) prin dou proiecii R1(K1, K2, Y) i R2(K1, X).

K1 K2




X



Y

Exemplu. Presupunem c un antier poate executa mai multe lucrri
de baz i c o lucrare poate fi executat de mai multe antiere.
LUCRARE(cod_obiectiv#, cod_lucrare#, nume);
SANTIER(nr_santier#, specialitate, sef);
EXECUTA(cod_obiectiv#, cod_lucrare#, nr_santier#, descriere,
functie, conducator, data_inceput, data_sfarsit).
Pentru relaia EXECUTA sunt evidente dependenele:
{cod_obiectiv#, cod_lucrare#} {data_inceput, data_sfarsit},
{cod_obiectiv#, cod_lucrare#, nr_santier#} {descriere, functie,
conducator}.
Relaia EXECUTA este n FN1, dar nu este n FN2 deoarece
atributele data_inceput i data_sfarsit nu depind de numrul antierului,
deci nu depind de ntreaga cheie primar. Pentru a obine o relaie n FN2
se aplic regula Casey Delobel i relaia EXECUTA se desface n:
EXECUTA_1(cod_obiectiv#, cod_lucrare#, nr_santier#, descriere,
functie, conducator)
EXECUTA_2(cod_obiectiv#, cod_lucrare#, data_inceput,
data_sfarsit).
30
Forma normal 3 (FN3)
Intuitiv, o relaie R este n a treia form normal dac i numai dac:
relaia R este n FN2;
fiecare atribut care nu este cheie (nu particip la o cheie) depinde
direct de cheia primar.
Fie R o relaie, X o submulime de atribute ale lui R i A un atribut al
relaiei R. A este dependent tranzitiv de X dac exist Y astfel nct X Y
i Y A (A nu aparine lui Y i Y nu determin pe X). X nu este dependent
funcional de Y sau A!
De exemplu, dac K
1
, K
2
, K
3
A
1
i dac K
1
, K
2
, A
1
A
2
, atunci
K
1
, K
2
, K
3
K
1
, K
2
, A
1
i K
1
, K
2
, A
1
A
2
. Prin urmare, A
2
este dependent
tranzitiv de K
1
, K
2
, K
3
.
Formal, o relaie R este n a treia form normal dac i numai dac:
relaia R este n FN2;
fiecare atribut care nu este cheie (nu particip la o cheie) nu este
dependent tranzitiv de nici o cheie a lui R.
O relaie este n FN3 dac i numai dac fiecare atribut (coloan)
care nu este cheie, depinde de cheie, de ntreaga cheie i numai de cheie.
Pentru a obine o relaie FN3 se poate aplica regula Casey-Delobel.
Fie relaia R(K, X
1
, X
2
, X
3
), unde atributul X
2
depinde tranzitiv de K,
iar K este cheia primar a lui R. Presupunem c K X
1
X
2
. Din cauza
dependenei funcionale X
1
X
2
care arat c R nu este n FN3, se
nlocuiete R (fr pierdere de informaie) prin dou proiecii R1(K, X
1
, X
3
)
i R2(X
1
, X
2
).

K X1 X2


X3

Exemplu: Tabelul atasat_2a nu este in FN3. De ce?
atasat_3a
Cod_salariat# Nr_proiect# Functia
S1 P1 Supervizor
S1 P2 Cercetator
S1 P3 Auxiliar
S3 P3 Supervizor
S5 P3 Supervizor
31
atasat_3b
Functia Suma
Supervizor 60
Cercetator 25
Auxiliar 10
Exemplu. n tabelul EXECUTA1(cod_obiectiv#, cod_lucrare#,
nr_santier#, descriere, functie, conducator) continu s existe redundan n
date.
Atributul conducator depinde indirect de cheia primar prin
intermediul atributului functie. ntre atributele relaiei exist dependenele:
{cod_obiectiv#, cod_lucrare#, nr_santier#} {descriere},
{cod_obiectiv#, cod_lucrare#, nr_santier#} {functie} {conducator}.
Pentru a aduce relaia EXECUTA_1 n FN3 se aplic regula Casey-
Delobel. Relaia se desface, prin eliminarea dependenelor funcionale
tranzitive, n proieciile:
EXECUTA11(cod_obiectiv#, cod_lucrare#, nr_santier#, descriere, functie)
EXECUTA12(functie, conducator).
Schema de sintez pentru obinerea lui FN3
Algoritmul de sintez construiete o acoperire minimal F a
dependenelor funcionale totale. Se elimin atributele i dependenele
funcionale redundante. Mulimea F este partiionat n grupuri F
i
, astfel
nct n fiecare grup F
i
sunt dependene funcionale care au acelai membru
stng i nu exist dou grupuri avnd acelai membru stng. Fiecare grup F
i

produce o schem FN3. Algoritmul realizeaz o descompunere ce conserv
dependenele.
Algoritm SNF3 (aducerea unei relaii n FN3 prin utilizarea unei
scheme de sintez):
1. Se determin F o acoperire minimal a lui E (mulimea
dependenelor funcionale).
2. Se descompune mulimea F n grupuri notate F
i
, astfel nct n
cadrul fiecrui grup s existe dependene funcionale avnd
aceeai parte stng.
3. Se determin perechile de chei echivalente (X, Y) n raport cu F
(dou mulimi de atribute X, Y sunt chei echivalente dac n
mulimea de dependene E exist att dependena X Y, ct i
dependenta Y X).
32
4. Pentru fiecare pereche de chei echivalente: se identific grupurile
F
i
i F
j
care conin dependenele funcionale cu partea stng X i
respectiv Y; se formeaz un nou grup de dependene F
i j
, care va
conine dependenele funcionale avnd membrul stng (X, Y); se
elimin grupurile F
i
i F
j
, iar locul lor va fi luat de grupul F
i j
.
5. Se determin o acoperire minimal a lui F, care va include toate
dependenele X Y, unde X i Y sunt chei echivalente (celelalte
dependene sunt redundante).
6. Se construiesc relaii FN3 (cte o relaie pentru fiecare grup de
dependene funcionale).
Se observ c algoritmul solicit
determinarea unei acoperiri minimale (algoritmii EAR i EDF);
determinarea nchiderii (A
+
) unei mulimi de atribute A n raport
cu mulimea de dependene funcionale E (algoritm AIDF).
Determinarea acoperirii minimale presupune eliminarea atributelor i
dependenelor redundante. Acoperirea minimal nu este unic i depinde de
ordinea n care sunt eliminate aceste atribute i dependene redundante.
Algoritm EAR (elimin atributele redundante din determinantul
dependenelor funcionale)
Pentru fiecare dependen funcional din E i pentru fiecare atribut
din partea stng a unei dependene funcionale:
Pas1. Se elimin atributul considerat.
Pas2. Se calculeaz nchiderea prii stngi reduse.
Pas3. Dac nchiderea conine toate atributele din determinantul
dependenei, atunci atributul eliminat la pasul 1 este redundant i rmne
eliminat. n caz contrar, atributul nu este redundant i se reintroduce n
partea stng a dependenei funcionale.
Algoritm EDF (elimin dependenele funcionale redundante din E)
Pentru fiecare dependen funcional X Y din E:
Pas1. Se elimin dependena din E.
Pas2. Se calculeaz nchiderea X
+
, n raport cu mulimea redus de
dependene.
Pas3. Dac Y este inclus n X
+
, atunci dependena X Y este
redundant i rmne eliminat. n caz contrar, se reintroduce n E.
33
Algoritm AIDF (determin nchiderea lui A)
Pas1. Se caut dac exist n E dependene X Y pentru care
determinantul X este o submulime a lui A, iar determinatul Y nu este
inclus n A.
Pas2. Pentru fiecare astfel de dependen funcional se adaug
mulimii A atributele care constituie determinatul dependenei.
Pas3. Dac nu mai exist dependene funcionale de tipul de la pasul
1, atunci A
+
= A.
Exemplu:
Fie dependenele funcionale:
f1: F N; f2: F P; f3: P, F, N U;
F4: P C; f5: P T; f6: C T; f7: N F.
Pas1 (suprimarea atributelor redundante). Atributul Ai este
redundant n dependena funcional A1, A2 , Ai , An Z, dac
dependena funcional A1, A2 , A 1 i , A 1 + i An Z poate fi
generat plecnd de la mulimea iniial de dependene (E) i de la
axiomele considerate.
f1: F N; f3: P, F, N U sau N, P, F U;
Aplicnd axioma de pseudotranzitivitate se obine:
F, P, F U P, F U
Pas2 (suprimarea dependenelor funcionale redundante).
Dependena funcional f este redundant n E dac E
+
= (E - f)
+
, unde E
+

reprezint nchiderea lui E.
Se observ c f5 este redundant (poate fi obinut din f4 i f6). La
sfritul etapei se obine:
f1: F N; f2: F P; f3: P, F U; P este redundant =>F-->U
f4: P C; f6: C T; f7: N F.
Pas3 (gruparea dependenelor avnd acelai membru stng).
F1 = {f1, f2, f3}; F2 = {f4}; F3 = {f6}; F4 = {f7}
Pas4 (regruparea mulimilor F
i
si F
j
dac exist dependene de
forma X Y i Y X, unde X reprezinta partea stanga a dependenei lui
F
i
i Y este partea stng a dependenei lui F
j
.
34
Din F1 i F4 se obine:
G1 = {f1, f2, f3, f7}; G2 = {f4}; G3 = {f6}.
Pas5 (generarea relaiilor FN3).
R1(F#, N, P, U); R2(P#, C); R3(C#, T).
De remarcat: R1 nu este in BCNF! De ce? Exista dependenta N -->F.
Exerciiu:
Presupunem c o parte din activitiile de pe un aeroport sunt
caracterizate de atributele:
A -- numr zbor;
B -- tip avion;
C -- aeroport plecare;
D -- aeroport sosire;
E -- linia aerian;
F -- ora plecrii;
G -- capacitate;
H -- numr locuri rezervate;
I -- data;
J -- tarif;
K -- prestaii la bord.
ntre aceste atribute exist legturi exprimate prin dependenele:
A BEFG
ACDI H
CD J
CDF K
B G
CF ABE
AC D
ABD C
EG B
Aplicnd algoritmul de sintez se obin relaiile:
R1(B#, G)
R2(E#, G#, B)
R3(A#, B, E, F)
R4(C#, D#, J)
R5(A#, C#, I#, H)
R6(A, C, D, F, K) n care cheile primare pot s fie oricare dintre:
AD sau AC sau CF.
ncercai s justificai acest rezultat!!!
35
Forma normal Boyce-Codd (BCNF)
Determinantul este un atribut sau o mulime de atribute
neredundante, care constituie un identificator unic pentru alt atribut sau alt
mulime de atribute ale unei relaii date.
Intuitiv, o relaie R este n forma normal Boyce-Codd dac i
numai dac fiecare determinant este o cheie candidat.
Formal, o relaie R este n forma normal Boyce-Codd dac i
numai dac pentru orice dependen funcional total X A, X este o
cheie (candidat) a lui R.

Regula Casey Delobel pentru R(K1#, K2#, X) presupunnd c exist
dependena: X K2. R1(K1#, X) i R2(X#, K2)

K1 K2









X
Exemplu:
ADRESA(cod_parsoana#, telefon#, adresa)


cod_persoana


adresa


telefon

n dependena adresa telefon se observ c determinantul nu este
o cheie candidat. Relaia ADRESA se desface n:
ADRESA_1(cod_persoana#, adresa);
ADRESA_2(adresa#, telefon).
Relaiile sunt n BCNF, se conserv datele, dar nu se conserv
dependenele (s-a pierdut cod_persoana, telefon adresa).
36
Exemplu:
Relaia INVESTESTE_IN leag entitile INVESTITOR i
OBIECTIV_INVESTITIE. Ea are schema relaional:
INVESTESTE_IN(cod_contractant#, cod_obiectiv#, nr_contract,
cota_parte). ntre atributele relaiei exist dependenele:
{cod_contractant#, cod_obiectiv#} {nr_contract, cota_parte},
{nr_contract} {cod_obiectiv}.
Se aplic regula Casey-Delobel i se aduce relaia n BCNF.
INVESTESTE_IN_1(cod_obiectiv, nr_contract#);
INVESTESTE_IN_2(cod_contractant#, nr_contract, cota_parte).
Pentru ca o relaie s fie adus n BCNF nu trebuie n mod
obligatoriu s fie n FN3. Se pot aduce n BCNF i relaii aflate n FN1 sau
FN2. Acest lucru este posibil ntruct dependenele funcionale pariale i
cele tranzitive sunt tot dependene noncheie, adic dependene ai cror
determinani nu sunt chei candidat. Presupunem c R este o relaie ce
conine atributele A.
Algoritm TFBCNF (aducerea unei relaii R din FN1 n BCNF)
1. Dac relaia conine cel mult dou atribute, atunci R este n
BCNF i algoritmul s-a terminat.
2. Dac relaia conine mai mult de dou atribute, se consider toate
perechile (X, Y) de atribute distincte din A.
3. Se determin A
1
+
, nchiderea mulimii A
1
= A {X, Y}.
4. Dac pentru orice pereche (X, Y), X A
1
+
atunci relaia R este n
BCNF i algoritmul s-a terminat.
5. n caz contrar (pentru cel puin o pereche (X, Y), X aparine lui
A
1
+
), relaia R nu este n BCNF.
6. Se reduce progresiv schema relaiei i se reia algoritmul,
exploatnd relaia redus. Orice relaie obinut prin reducerea lui
R i care este n BCNF se consider ca fcnd parte din
descompunerea lui R n procesul aducerii sale n BCNF.
Forma normal 4 (FN4)
FN4 elimin redundanele datorate relaiilor m:n, adic datorate
dependenei multiple.
Intuitiv, o relaie R este n a patra form normal dac i numai dac
relaia este n BCNF i nu conine relaii m:n independente.
37
Fie R o relaie definit pe o mulime de atribute A = {A
1
, A
2
, ..., A
n
}
i fie X, Y, Z A. Se spune c X multidetermin pe Z sau c Z este
multidependent de X :
dac pentru fiecare valoare a lui Z n R exist numai o valoare
pentru perechea (X, Y);
dac valoarea lui Z depinde numai de valoarea lui X.
Acest tip de dependen, numit i multivaloare sau multidependen
(MVD) se noteaz prin X Z.
Intuitiv, multidependena reprezint situaia n care valoarea
unui atribut (sau a unei mulimi de atribute) determin o mulime de
valori a altui atribut (sau mulimi de atribute)!!!
Multidependena X Y poate fi gndit ca o regul de deducie:
dac tuplurile <x, y, z> i <x, y, z> sunt n relaie la un moment r, atunci la
momentul r sunt n relaie i tuplurile <x, y, z> i <x, y, z>.


x y z



x y
'
z
'


x y z
'

x y
'
z


Orice dependen funcional este o multidependen. Afirmaia
invers nu este adevrat. Dac X Y (FD), atunci pentru oricare dou
tupluri <x, y, z> i <x, y, z>, se obine y = y. Prin urmare n relaie apar
tuplurile <x, y, z> i <x, y, z> i deci X Y (MVD).
Fie W, V, X, Y i Z submulimi de atribute ale unei scheme relaionale
R. Fiind dat o mulime T de multidependene exist o mulime complet
de axiome (Ax1Ax8) care permit obinerea tuturor multidependenelor ce
se pot deduce din mulimea T:
Ax1. Dac Y X, atunci X Y.
Ax2. Dac X Y, atunci X Z Y Z.
Ax3. Dac X Y i Y Z, atunci X Z.
Ax4. Dac X Y, atunci X R {X Y}.
Ax5. Dac X Y i V W, atunci W X V Y.
38
Ax6. Dac X Y i Y Z, atunci X (Z Y).
Ax7. Dac X Y, atunci X Y.
Ax8. Dac X Y, Z W, W Y i Y Z = , atunci X W.
O multidependen elementar este o multidependen care are
pri stngi i drepte minimale (nu exist X X i Y Y a.i. X Y).
Formal, relaia R este n a patra form normal dac i numai dac:
R este n BCNF;
orice dependen multivaloare este o dependen funcional.
O relaie BCNF este n FN4 dac pentru orice multidependen
elementar de forma X Y, X este o supercheie a lui R. Aducerea
relaiilor n FN4 presupune eliminarea dependenelor multivaloare atunci
cnd sunt mai mult de una n cadrul unei relaii.
Regula de descompunere n relaii FN4. Fie R(X, Y, Z) o schem
relaional care nu este n FN4 i fie X Y o multidependen
elementar care nu este de forma CHEIE atribut. Aceast relaie
este descompus prin proiecie n dou relaii:
R = JOIN(
XY
(R),
XZ
(R)).
Aplicnd recursiv aceast regul, se obin relaii FN4.
Exemplu. Fie relaia INVESTITIE(cod_contractant#, denumire,
telefon) i presupunem c un investitor poate avea mai multe numere de
telefon i c poate investi n mai multe obiective. ntre atributele relaiei
exist multidependenele:
cod_contractant# denumire;
cod_contractant# telefon.
Relaia INVESTITIE este n BCNF. Pentru a aduce relaia n FN4 o
vom descompune prin proiecie n dou relaii:
INVESTITIE_1(cod_contractant#, denumire),
INVESTITIE_2(cod_contractant#, telefon).
INVESTITIE = JOIN(INVESTITIE_1, INVESTITIE_2).
Forma normal 5 (FN5)
FN5 i propune eliminarea redundanelor care apar n relaii m:n
dependente. n general, aceste relaii nu pot fi descompuse. S-a artat c o
relaie de tip 3 este diferit de trei relaii de tip 2. Exist totui o excepie, i
anume, dac relaia este ciclic
39
Intuitiv, o relaie R este n forma normal 5 dac i numai dac:
1. relaia este n FN4;
2. nu conine dependene ciclice.
Dependena funcional i multidependena permit descompunerea
prin proiecie, fr pierdere de informaie, a unei relaii n dou relaii.
Regulile de descompunere (FN1 FN4) nu dau toate descompunerile
posibile prin proiecie ale unei relaii. Exist relaii care nu pot fi
descompuse n dou relaii dar pot fi descompuse n trei, patru sau mai
multe relaii fr a pierde informaii. Pentru a obine descompuneri L-join
n trei sau mai multe relaii, s-a introdus conceptul de join-dependen sau
dependen la compunere (JD).
Fie {R
1
, R
2
, ..., R
p
} o mulime de scheme relaionale care nu sunt
disjuncte i a cror reuniune este R.
R satisface join-dependena *{R
1
, R
2
, ..., R
p
} dac la fiecare moment
al lui R are loc egalitatea:
R = JOIN(
1
(R),
2
(R), ...,
p
(R))
unde
k
reprezint mulimea atributelor corespunztoare lui R
k
(1 k p).
Join-dependena *{R
1
, R
2
, ..., R
p
} are loc n R, dac R
1
, R
2
, ..., R
p
este
o descompunere L-join a lui R. Pentru p = 2 se regsete multidependena.
O join-dependen *{R
1
, R
2
, ..., R
p
} n care una dintre R
i
este chiar R,
definete o join-dependen trivial.
Join-dependena generalizeaz multidependena. ntr-adevr,
multidependena X Y n relaia R(X, Y, Z) (deci i X Z),
corespunde join-dependenei *{X Y, X Z}. Invers, join-dependena
*{R
1
, R
2
} corespunde multidependenei R
1
R
2
R
1
(R
1
R
2
).
Formal, o relaie R este n FN5 dac i numai dac orice join-
dependen *{R
1
, R
2
, ..., R
p
} care are loc n R fie este trivial, fie conine o
supercheie a lui R (adic, o anumit component R
i
este o supercheie a lui
R). Cu alte cuvinte, o relaie R este n FN5 dac orice join-dependen
definit pe R este implicat de cheile candidat ale lui R.
ntre mulimile de atribute X, Y i Z din cadrul relaiei R exist o join-
dependen dac exist multidependene ntre fiecare dintre perechile de
mulimi (X, Y), (Y, Z) i (X, Z).
Aducerea n FN5 prin eliminarea join dependenelor!
Exemplu.
Fie schema R(furnizor, cod_consumabil, cantitate, pret).
40
Reguli:
un furnizor produce mai multe consumabile;
nu toi furnizorii produc aceleai consumabile;
preul unui consumabil de la un furnizor este variabil i nu
depinde de cantitate.

Furnizor Cod_consumabil Cantitate Pret
F1 1 500 100
F2 1 100 80
F2 1 500 100
F2 2 500 100

Relaia este n FN4, dar exist redundan n date. Relaia se
descompune prin proiecie n:
R1(furnizor#, cod_consumabil#)
R2(furnizor#, cantitate, pret)
R3(cod_consumabil#, cantitate, pret).
S-au eliminat redundanele:
(F2,1) pentru R1;
(F2, 500, 100) pentru R2;
(1, 500, 100) pentru R3.
Se observ c:
JOIN(R1, R2) R;
JOIN(R1, R3) R;
JOIN(R3, R2) R;
JOIN(R1, R2, R3) = JOIN(R1, JOIN(R2, R3)) = R
Exist join dependena:
*{R1(furnizor, cod_consumabil), R2(furnizor, cantitate, pret),
R3(cod_consumabil, cantitate, pret)}
Exemplu.
Fie schema relaional:
EXECUTANT(nr_santier#, cod_obiectiv#, cod_lucrare#, data_inceput,
data_sfarsit). Un antier poate executa mai multe lucrri referitoare la
acelai obiectiv sau poate executa o lucrare pentru un obiectiv n intervale
de timp distincte. Se presupune c mai multe antiere pot executa aceeai
lucrare, n acelai interval de timp sau n intervale de timp distincte.
41
Relaia, datorit dependenelor formulate anterior, nu este n FN5. Ea
se poate desface prin proiecie n trei relaii:
EX1(nr_santier#, cod_obiectiv#, cod_lucrare#);
EX2(nr_santier#, data_inceput, data_sfarsit);
EX3(cod_obiectiv#, cod_lucrare#, data_inceput, data_sfarsit).
Sunt evidente relaiile:
EXECUTANT JOIN(EX1, EX2),
EXECUTANT JOIN(EX1, EX3),
EXECUTANT JOIN(EX2, EX3),
EXECUTANT = JOIN(JOIN(EX1, EX2), EX3).

Concluzii:
1. FN1 FN2 elimin redundanele datorate dependenei netotale
a atributelor care nu particip la o cheie, fa de cheile lui R. Se
suprim dependenele funcionale care nu sunt totale.
2. FN2 FN3 elimin redundanele datorate dependenei
tranzitive. Se suprim dependenele funcionale tranzitive.
3. FN3 BCNF elimin redundanele datorate dependenei
funcionale. Se suprim dependenele n care partea stng nu
este o supercheie.
4. BCNF FN4 elimin redundanele datorate multidependenei.
Se suprim toate multidependenele care nu sunt i dependene
funcionale.
5. FN4 FN5 elimin redundanele datorate dependentei. ciclice.
Se suprim toate join-dependenele care nu sunt implicate de o
cheie.
6. BCNF, FN4 i FN5 corespund la regula c orice determinant este
o cheie, dar de fiecare dat dependena cu care se definete
determinantul este alta i anume dependena funcional,
multidependena sau join-dependena).
7. Descompunerea unei relaii FN2 n FN3 conserv datele i
dependenele, pe cnd descompunerea unei relaii FN3 n BCNF
i, respectiv, a unei relaii BCNF n FN4 conserv doar datele.

You might also like