Author
popescu-gabriel
View
30
Download
0
Embed Size (px)
BD Algebra relationala 1
Algebra relationala
Modelul relational al datelor si algebra relationalaModelul relational al datelor si algebra relationala
In terminologia relationala, un rind al tabelei este denumit nn--upluuplu, o coloana poarta denumirea de atributatribut iar tabela se numeste relatierelatie. Tipul datelor descriind tipul valorilor ce pot apare in fiecare coloana este numit si domeniudomeniu. Un domeniudomeniu D este reprezentat de un set de valori atomice.
Este foarte util sa se specifice pentru un domeniu un nume relevant pentru interpretarea valorilor datelor, ca de exemplu pentru relatia aferenta entitatilor student, numele relatiei poate fi asignat la valoarea STUDENT, iar atributele sale ca in exemplul de mai jos:
NUMENUME :Setul numelor persoanelor
Algebra relationala 2BD
NUMENUME :Setul numelor persoanelor
NR_TELNR_TEL :Numarul de telefon reprezentat pe 8 digiti
DEP_NRDEP_NR :Numarul departamentului la care studentul studiaza
Conceptul matematic ce acopera modelul relational este produsul cartezian al listei domeniilor. Un domeniu este un simplu set de valori ca de exemplu setul intregilor. Produsul cartezian al domeniilor D1,D2,...Dn sau D1xD2,x..xDn este setul tuturor n_uplurilor (v1,v2,...,vn) in care viDi. O relatie este reprezentata de orice subset al produsului cartezian al unuia sau mai multor domenii.
O schema relatie R data prin R(A1,A2,...,An) reprezinta un set al atributelor Ai. Fiecare atribut Ai joaca rolul numelui acelui domeniu Di in relatia R. Di este domeniul lui Ai si se noteaza dom(Ai). O schema relatie este utilizata pentru descrierea relatiei R, unde R este numele relatiei. Se defineste gradul relatiei ca fiind numarul atributelor n ale schemei relatiei. Fie de exemplu o schema relatie de grad 7, ce descrie studentii intr-o universitate:
STUDENT(Nume, SSN, Telefon, Adresa_stabila, Adresa_flotanta, Virsta, Directie_specializare)
O relatie r(sau relatie instanta) a unei relatii R(A1,A2,...,An) notata prin r(R), se reprezinta ca un set al n-uplurilor ti, asa ca r=(t1,t2,...,tm). Fiecare n-uplu t este o lista ordonata de n valori
Algebra relationala 3BD
prin r(R), se reprezinta ca un set al n-uplurilor ti, asa ca r=(t1,t2,...,tm). Fiecare n-uplu t este o lista ordonata de n valori t=, unde fiecare valoare vi pentru i=1,n este un element al dom(Ai) sau o valoare speciala nula. Se utilizeaza de asemenea in mod curent termenii relatie intensiva pentru R respectiv relatie extensiva pentru relatia instanta r(R).
Se poate da pentru o relatie urmatoarea definitie:
O relatie r(R) este un subset al produsului cartezian al domeniilor ce defineste R
r(R) (dom(A1),dom(A2),...,dom(An))
Produsul cartezian contine toate combinatiile domeniilor. Deci, notind numarul valorilor sau cardinalitatea domeniului D prin [D], sipresupunind ca toate domeniile sint finite, numarul total al n-uplurilorin produsul cartezian va fi dat de
[dom(A1)]*[dom(A2)]*....*[dom(An)]
Caracteristici ale relatiilor
ordinea n-uplurilor intr-o relatie. Se spune despre doua relatii in care ordinea atributelor este diferita ca sint identice.
ordonarea valorilor intr-un n-uplu. Un n-uplu este o lista ordonata de n valori. Desi, la nivel logic ordinea atributelor si valorile lor nu esteimportanta, trebuie mentinuta corespondenta intre atribute si valori.
Algebra relationala 4BD
importanta, trebuie mentinuta corespondenta intre atribute si valori. O relatie r a schemei relatiei R=(A1,A2,...,An) este un set finit de n-upluri r=(t1,t2,...,tm) unde fiecare n-uplu ti are forma data de R, cu D o reuniune a domeniilor atributelor, D=dom(A1)dom(A2) ....dom(An). In aceasta definitie t(Ai) este o valoare din dom(Ai) pentru i=1,n.
valorile intr-un n-uplu. Fiecare valoare in n-uplu este o valoareatomica ce nu poate fi divizata in fragmente. Daca sint atribute care nu au valori aplicabile la anumite n-upluri, atunci va fi reprezentatade o valoare speciala numita atributul null.
interpretareainterpretarea uneiunei relatiirelatii. O schema relatie poate fi interpretata ca o declaratie sau un tip de asertiune.
Se defineste schema bazei de date relationale S ca un set al schemei relatiilor S=[R1,R2,...,Rm] impreuna cu un set al restrictiilorde integritate. Se defineste instanta unei baze de date relationale caun set al relatiilor instanta [r1,r2,...,rm]. Se da mai jos, schema bazeide date relationale COMPANIE, avind relatiile ANGAJAT, DEPARTAMENT, LOC_DEP, PROIECT, LUCREAZA_LA, INTRETINUT.
ANGAJAT (Nume, Ini, Pren, Ssn, Dat_Na, Adr, Sex, Salariu, Sssn, D_Nr)
DEPARTAMENT(Dep_Nume, Dep_Nr, Dep_Manager,
Algebra relationala 5BD
DEPARTAMENT(Dep_Nume, Dep_Nr, Dep_Manager, Dat_Inc_Manager)
LOC_DEP(Dep_Nr, Dep_Loc )
PROIECT(P_Nume, P_Nr, P_Loc, Dep_Nr)
LUCREAZA_LA(A_Ssn, P-Nr , Ore)
INTRETINUT(A_Ssn , C_Nume, Sex, Data_N, Relatie)
Obs: Nu am insistat pe includerea in schema a tuturor atributelor, ci pemodelarea schemei conform modelului relational
Operatia SELECTOperatia SELECT
Relatia ce rezulta dupa operatia SELECT contine aceleasi atribute cu relatia initiala, asupra careia se face operatia. Se poate spune ca in general operatia SELECT are urmatoarea sintaxa:
S()
Expresiile booleene specificate in , fac parte din clase de forma:
sau
Algebra relationala 6BD
sau
unde,
este numele unui atribut al relatiei definite; este data de unul din operatorii {=,=,#}, iar are interpretarea de constanta.
Exemple:
SD_NR=4(ANGAJAT)
SSALARIU>4000(ANGAJAT)
S(D_NR=3 .AND. SALARIU>4000) .OR. (D_NR=4)(ANGAJAT)Semnificatia operatiilor booleene este:
(cond1 .AND. cond2) adevarata daca ambele conditii sint adevarate,
altfel falsa.
(cond1 .OR. cond2) este adevarata daca fie conditia 1, fie conditia 2
este adevarata.
(.NOT. cond) este adevarata atunci cind conditia este falsa.
Faptul ca operatia se aplica la o singura relatie face ca operatia de
selectie sa fie unara. Operatia se aplica la fiecare n_uplu individual,
iar gradul relatiei rezultante in urma unei operatii SELECT este egal
Algebra relationala 7BD
iar gradul relatiei rezultante in urma unei operatii SELECT este egal
cu gradul (ordinul) relatiei initiale R. Operatia SELECT este
comutativacomutativa adica
S(S(R))=S(S(R))
O cascada de operatii SELECT se pot combina utilizind operatorul
AND.
S(S(...(S(R))..)=S.AND.
.AND..AND. (R)
Operatia PROJECTOperatia PROJECT
Daca se considera o relatie similara cu o tabela atunci operatiaSELECT selecteaza acele rinduri din tabela ce corespund conditiei de selectie.
Operatia PROJECT este utilizata pentru a selecta numai acele coloanece corespund listei atributelor specificate. Se presupune ca se doresteobtinerea pentru angajatii companiei a numelui si prenumelui.
P(NUME, PREN)(ANGAJAT)
Se observa ca forma generala a unei operatii PROJECT este
P()
Algebra relationala 8BD
P()
unde,
P este simbolul utilizat pentru operatia PROJECT;
reprezinta lista atributelor pastrate din relatiaspecificate prin .
Operatia PROJECT nu este in general comutativa. Aplicarea uneisuccesiuni de operatii PROJECT, daca succesiunea este valida, este echivalenta cu o singura operatie PROJECT.
P(P(R))=P(R)
Obs: Operatia este valida numai daca lista2 contine toate atributele din lista1
Combinatii Select Project
Se considera ca exemplu, obtinerea relatiei ce contine numele, prenumele si salariul angajatilor ce lucreaza in departamentul 3. Pentru aceasta este necesara aplicarea atit a operatiei SELECT cat si a operatiei PROJECT. Aplicarea pe rand a operatiilor SELECT siPROJECT duce la crearea unei relatii intermediare notata in exemplul de mai jos REL1.
REL1= SD_NR=3(ANGAJAT)
REZULTAT = PNUME,PREN,SALARIU(REL1)
Oalta, cea a utilizarii unei operatii compuse, asigura obtinerea
Algebra relationala 9BD
Oalta, cea a utilizarii unei operatii compuse, asigura obtinerearelatiei rezultat fara o relatie intermediara.
REZULTAT = PNUME,PREN,SALARIU(SD_NR=3(ANGAJAT))
Aplicarea secventelor complexe de operatii poate rezolva siproblema redenumirii atributelor in relatiile intermediare. Astfel, redenumirea atributelor in relatia rezultat se exemplifica in urmatorulexemplu
TEMP = SD_NR=5(ANGAJAT)
REZ(P_NUME,U_NUME,SALARIU) = PNUME,PREN,SALARIU(TEMP)
Setul teoretic al operatiilor
Prin setul teoretic se inteleg operatiile standard cum sunt
REUNIUNE, INTERSECTIE, DIFERENTA. Operatiile din aceasta
categorie se aplica asupra a doua relatii, deci fac parte din categoria
operatiilor binare. Ca exemplu, se presupune ca se doreste lista
numerelor de cod (Social Security Number) a tuturor angajatilor ce
lucreaza in departamentul 3 sau sunt supervizori angajati ai
departamentului 3. O modalitate de realizare este data mai jos:
REL1= S (ANGAJAT)
Algebra relationala 10BD
REL1= SD_NR=3(ANGAJAT)
REL2 = PSSN(REL1)
REL3(Ssn) = PSSSN(REL1)
REZ = REL2 REL3
Aplicarea operatiei REUNIUNE asupra unei baze de date relationale
nu este posibila intotdeauna. Referitor la operatiile de mai sus este
necesar ca cele doua relatii sa aiba acelasi tip de n-upluri conditie
numita si compatibilitateacompatibilitatea reuniuniireuniunii.
Se spune ca doua relatii R(A1,A2,...An) si S(A1,A2,...,An) sint
compatibile reuniunii daca au acelasi grad n, si daca dom(Ai) este
identic cu dom(Bi) pentru 1
Rezultatul produsului cartezian intre relatiile R(A1,A2,..,An) si
S(B1,B2,...,Bm) este o relatie Q(A1,A2,..,An,B1,B2,..,Bm) avind m+n
atribute in ordinea specificata. In relatia rezultata se combina un
n-uplu al relatiei R cu fiecare n-uplu al relatiei S, asa ca, daca R are
nr n-upluri si S are ns n-upluri, atunci Q=RxS va avea nr*ns n-upluri.
Ca exemplu, se considera cerinta de obtinere pentru fiecare
angajata de sex feminin lista numelor persoanelor pe care le are in
intretinere. O posibilitate este:
REL1 = S (ANGAJAT)
Algebra relationala 12BD
REL1 = SSEX='F'(ANGAJAT)
REL2 = PNUME,PREN,SSN(REL1)
REL3 = REL2 x INTRETINUT (produs cartezian)
REL4 = SSSN=A_SSN(REL3)
REZ = PNUME,PREN,C_NUME(REL4)
REL3 este rezultatul aplicarii produsului cartezian intre REL2 si
relatia INTRETINUT.
Operatia JOIN
Operatia JOIN este utilizata pentru combinarea n-uplurilor din douarelatii intr-o singura relatie. Este una din operatiile specifice bazelor de date relationale ce implica mai mult de o relatie, permitind construireade noi relatii pe baza celor existente.
Se considera ca se doreste sa se obtina numele managerului fiecaruidepartament. Pentru aceasta este necesara combinarea n-uplurilorANGAJAT cu n-uplurile DEPARTAMENT si selectarea acelora pentrucare atributele Ssn si Dep_manager au valori egale. Aceasta poate fi realizata prin utilizarea operatiei JOIN, astfel:
REL1 = DEPARTAMENT >< DEP_MANAGER=SSNANGAJAT
Algebra relationala 13BD
REL1 = DEPARTAMENT >< DEP_MANAGER=SSNANGAJAT
REZ = PDEP_NUME,NUME,PREN(REL1)
In concluzie operatia JOIN intre doua relatii R(A1,A2,..,An) siS(B1,B2,..,Bm) are structura
R>
Structura tipica a unei conditii join este: AND AND AND..AND unde, fiecare conditie este de forma [email protected], cu Ai atribut al relatiei R si
Bi atribut al relatiei S. Sigur ca aceasta conditie nu poate fi adevarata decit daca atributele Ai si Bi reprezinta acelasidomeniu. Operatia notata simbolic @ esta asimilata cu una din operatiile {=,,#}. Se precizeaza faptul ca n-uplurile la care atributele JOIN sunt nulle nu apar la rezultat.
Cele mai obisnuite operatii JOIN invoca numai conditii de egalitate, motiv pentru care operatia se va numi EQUIJOIN. In aceasta situatie se
Algebra relationala 14BD
motiv pentru care operatia se va numi EQUIJOIN. In aceasta situatie se pot obtine in rezultat mai multe perechi de atribute care au aceeasivaloare ca urmare a indeplinirii egalitatii. Intrucit relatia obtinuta estesuperflua, o noua operatie a fost introdusa, operatie numita siNATURAL JOIN care elimina al doilea atribut din conditia de egalitate. Pentru NATURAL JOIN se va lista numele atributelor comune intrecare avem conditia de egalitate.
Se cere obtinerea informatiilor despre proiecte impreuna cu cele ale departamentelor ce le coordoneaza:
PROIECT_DEPART = PROIECT >< (DEP_NR)DEPARTAMENT
O operatie ceruta des in baze de date este DIVISION, operatie ce
doreste sa dea raspuns la intrebari de tipul "care este numele
angajatilor ce lucreaza la aceleasi proiecte ca si angajatul Popescu
Vasile ?". Pentru rezolvare se procedeaza astfel:
1. se determina lista proiectelor la care lucreaza Popescu Vasile,
obtinand o noua relatie REL2
REL1 = SNUME='POPESCU' .AND. PREN='VASILE'(ANGAJAT)
REL2 = PP_NR(LUCREAZA_LA * A_SSN=SSNREL1)
2. se creeaza relatia ce include perechea atributelor ,
Algebra relationala 15BD
2. se creeaza relatia ce include perechea atributelor ,
pentru angajatii ce lucreaza la proiectul ce are numarul
REL3 = PP_NR,A_SSN(LUCREAZA-LA)
3. in final se aplica relatia DIVISION la doua relatii, ce va identifica
angajatii doriti.
REL4(SSN) = REL3+REL2
REZ = PNUME,PREN(REL4 * ANGAJAT)
JOIN aditional
Operatia JOIN se aplica doar la n-uplurile ce satisfac conditia de join. Ca exemplu, la NATURAL JOIN intre relatiile R si S, toate n-uplurile pentru care atribute cu nume identic din cele doua relatii sunt egale apar in rezultat, iar n-uplurile din cele doua relatii ce nu satisfac conditia sint eliminate din rezultat. Sunt situatii in care se doreste ca rezultatul sa contina toate n-uplurile unei relatii. Pentru aceasta a fost introdus un set de operatii numit si JOIN ADITIONAL pentru pastrarea tuturor n-uplurilor din R , S sau din ambele. De exemplu, pentru a obtine lista ce contine toti angajati si la cei care
Algebra relationala 16BD
exemplu, pentru a obtine lista ce contine toti angajati si la cei care sunt manageri si departamentul ;a care sunt manageri se poate aplica o operatie JOIN ADITIONAL STING (LEFT OUTER JOIN), operatie cu simbulul ]>< SSN=DEP_MANAGER(DEPARTAMENT)
REZ = PNUME,INI,PREN,DEP_NUME(REL1)
Similar pentru JOIN ADITIONAL DREPT
Functii
Operatiile discutate nu pot obtine rezultate ale functiilor matematice
efectuate asupra colectiilor de valori din baza de date (operatii
asupra valorilor unui atribut in toate n-uplurile relatiei). De exemplu,
o cerere care sa furnizeze suma salariilor tuturor angajatilor.
Functii agregat:
Principalele functii oferite de algebra relationala sunt: SUM, AVERAGE,
MAX, MIN, COUNT. SUM si AVERAGE se pot aplica numai atributelor
cu domeniu numeric, MAX, MIN numai atributelor cu domeniu ce poate
Algebra relationala 17BD
cu domeniu numeric, MAX, MIN numai atributelor cu domeniu ce poate
fi ordonat, pe cind functia COUNT se poate aplica pentru atribute cu
orice domeniu. Oricare din aceste functii se iau in calcul toate n-uplurile
unei relatii.
Functii de grup:
Se aplica independent pentru n-uplurile apartinand unor grupuri de
n-upluri.
Ca exemplu, aplicarea functiilor pe grupul angajatilor care lucreaza in cadrul aceluiasi departament, identificati prin valoarea atributului D_nrca atribute de grupare
O operatie de tip functie de grup se scrie:
F()
unde,
este o lista a atributelor relatiei specificate prin;
se refera la o lista cu perechii ,.
Algebra relationala 18BD
se refera la o lista cu perechii ,.
Obs:
Daca atributele de grupare lipsesc functiile se aplica pe intreagarelatie obtinand o relatie ce contine un singur n-uplu si un numar de atribute egal cu numarul functiilor invocate.
Atunci cand sunt precizate atribute de grupare relatia rezultat are un numar de atribute dat de suma dintre numarul atributelor de gruparesi numarul de functii invocate si un n umar de n-uluri egal cu numarul valorilor distincte ale atributelor de grupare.
Exemple:
Se considera baza de date COMPANIE la care se doreste sa se obtina pentru fiecare departament, numarul angajatilor si media salariilor angajatilor pe departament. Relatia rezultata are atributele D_NR, NUMAR_ANGAJATI, MEDIE_SALARIU obtinute prin aplicarea functiilor COUNT si AVERAGE in conjunctie cu atributul de grupare.
R(D_NR, NUMAR_ANGAJATI, MEDIE_SALARIU) =
F (ANGAJAT)
Algebra relationala 19BD
D_NRFCOUNT SSN, AVERAGE SALARIU(ANGAJAT)
Daca in schimb nu se specifica atributele de grup atunci functia se
aplica la toate n-uplurile relatiei, obtinind o relatie cu un singur
n-uplu:
FCOUNT SSN, AVERAGE SALARIU(ANGAJAT)
Exemple
Ex.1. Sa se gaseasca adresa tuturor angajatilor ce lucreaza pentru departamentul 'Cercetare,.
CERCET_DEPART = SDEP_NUME='Cercetare'(DEPARTAMENT)
CERCET_DEPART_ANGAJAT = (CERCET_DEPART >< DEP_NR=DEP_NRDEPARTAMENT)
PROIECT_DEP_MANAGER = (COORD_DEP ><
DEP_MANAGER=SSNANGAJAT)
REZ = PP_NR,DEP_NR,NUME,INI,PREN,ADR,DAT_NA(PROIECT_DEP_MANAGER)
Ex.3. Sa se gaseasca numele angajatilor care lucreaza la toate proiectele controlate de departamentul cu numarul 5.
DEP5_PROIECT(P_NR) = PP_NR(SDEP_NR=5(PROIECT)
ANG_PROIECT(SSN,P_NR) = PA_SSN,P_NR(LUCREAZA_LA)
REZ1 = ANG_PROIECT + DEP5_PROIECT
REZ = PNUME,INI,PREN(REZ1*ANGAJAT)
Ex.4. Sa se gaseasca lista tuturor angajatilor care au in intretinere doua sau mai multe persoane. In mod strict aceasta nu poate fi rezolvata prin operatii ale algebrei relationale. Pentru aceasta se utilizeaza
Algebra relationala 21BD
prin operatii ale algebrei relationale. Pentru aceasta se utilizeaza functia COUNT ce nu face parte din operatiile algebrei relationale. In formularea de mai jos s-a presupus ca persoanele in intretinerea unui anumit angajat au nume distincte.
REL1(SSN,NR_DE_INTRETINUTI) = A_SSN F
COUNTC_NUME(INTRETINUT)
REL1 = SNR_DE_INTRETINUTI>2(REL1)
REZ = P NUME,INI,PREN (REL1 * ANGAJAT)
Ex.5. Sa se gaseasca lista numelor angajatilor care nu au persoane in intretinere.
REL1 = PSSN (ANGAJAT)
ANG_CU_INTRETINUT = PA_SSN(INTRETINUT)
ANG_FARA_INTRETINUT = (REL1 - ANG_CU_INTRETINUT)
REZ = PNUME,INI,PREN(ANG_FARA_INTRETINUT * ANGAJAT)
Ex.6. Sa se gaseasca lista managerilor care au cel putin o persoana in intretinere.
REL1(SSN) = PDEP_MANAGER(DEPARTAMENT)
Algebra relationala 22BD
REL1(SSN) = PDEP_MANAGER(DEPARTAMENT)
ANG_CU_INTRETINUT = PA_SSN(INTRETINUT)
MANAGER_CU_INTRETINUT = (REL1 II ANG_CU_INTRETINUT)
REZ = PNUME,INI,PREN(MANAGER_CU_INTRETINUT * ANGAJAT)