Sunteți pe pagina 1din 9

Exemplu:

Să se afle titlul şi editura cărţilor scrise de autori români, al căror preţ este cuprins între 50-100 lei şi
care au fost împrumutate de studenţii care stau în Căminul nr. 1 şi Căminul nr. 2.

Soluţia 1.
R1 ← JONCŢIUNE (AUTOR, AUTORCARTE; cod autor)
R2 ← JONCŢIUNE (R1, CARTE; cota carte)
R3 ← JONCŢIUNE (R2, STUDCARTE; cota carte)
R4 ← JONCŢIUNE (R3, STUDENT; numar matricol)
R5 ← JONCŢIUNE (R4, STUDCAMIN; numar matricol)
R6 ← SELECŢIE (R5; nationalitate = „roman”)
R7 ← SELECŢIE (R6; pret unitar >= 50 and pret unitar <= 100)
R8 ← SELECŢIE (R7; nume camin = „Căminul nr. 1”
OR nume camin = „Căminul nr. 2”)
R9 ← PROIECŢIE (R8; nume autor)

Soluţia 2.
R1 ← SELECŢIE (AUTOR; nationalitate = „roman”)
R2 ← JONCŢIUNE (R1, AUTORCARTE; cod autor)
R3 ← JONCŢIUNE (R2, CARTE; cota carte)
R4 ← SELECŢIE (R3; pret unitar >= 50 and pret unitar <= 100)
R5 ← JONCŢIUNE (R4, STUDCARTE; cota carte)
R6 ← JONCŢIUNE (R5, STUDENT; numar matricol)
R7 ← JONCŢIUNE (R6, STUDCAMIN; numar matricol)
R8 ← SELECŢIE (R7; nume camin = „Căminul nr. 1”
OR nume camin = „Căminul nr. 2”)
R9 ← PROIECŢIE (R8; nume autor)

Soluţia 3.
R1 ← JONCŢIUNE (AUTOR, AUTORCARTE; cod autor)
R2 ← JONCŢIUNE (R1, CARTE; cota carte)
R3 ← JONCŢIUNE (R2, STUDCARTE; cota carte)
R4 ← JONCŢIUNE (R3, STUDENT; numar matricol)
R5 ← JONCŢIUNE (R4, STUDCAMIN; numar matricol)
R6 ← SELECŢIE (R5; nationalitate = „roman”)
R7 ← SELECŢIE (R6; pret unitar >= 50 and pret unitar <= 100)
R8 ← SELECŢIE (R7; nume camin = „Căminul nr. 1”)
R9 ← PROIECŢIE (R8; nume autor)
R10 ← SELECŢIE (R9; nume camin = „Căminul nr. 2”)
R11 ← PROIECŢIE (R10; nume autor)
R12 ← R9  R11

Exemplu:
Să se afle cum se numesc studenţii care au împrumutat cărţi scrise de Sima Cosmin.

Soluţia 1.
R1 ← JONCŢIUNE (AUTOR, AUTORCARTE; cod autor)
R2 ← JONCŢIUNE (R1, CARTE; cota carte)
R3 ← JONCŢIUNE (R2, STUDCARTE; cota carte)
R4 ← JONCŢIUNE (R3, STUDENT; numar matricol)
R5 ← SELECŢIE (R4; nume autor = „Sima Cosmin”)
R6 ← PROIECŢIE (R5; nume)

Soluţia 2.
R1 ← SELECŢIE (AUTOR; nume autor = „Sima Cosmin”)
R2 ← JONCŢIUNE (R1, AUTORCARTE; cod autor)
R3 ← JONCŢIUNE (R1, CARTE; cota carte)
R4 ← JONCŢIUNE (R2, STUDCARTE; cota carte)
R5 ← JONCŢIUNE (R3, STUDENT; numar matricol)
R6 ← PROIECŢIE (R8; nume)

Exemplu:
Să se afle cum se numesc autorii ale căror cărţi au fost împrumutate de studentul Neacsu Florin.

R1 ← JONCŢIUNE (AUTOR, AUTORCARTE; cod autor)


R2 ← JONCŢIUNE (R1, CARTE; cota carte)
R3 ← JONCŢIUNE (R2, STUDCARTE; cota carte)
R4 ← JONCŢIUNE (R3, STUDENT; numar matricol)
R5 ← JONCŢIUNE (R4, STUDCAMIN; numar matricol)
R6 ← SELECŢIE (R5; nationalitate = „roman”)
R7 ← SELECŢIE (R6; pret unitar >= 50 and pret unitar <= 100)
R8 ← SELECŢIE (R7; nume camin = „Căminul nr. 1”
OR nume camin = „Căminul nr. 2”)
R9 ← PROIECŢIE (R8; nume autor)
Exemplu:
Să se afle din ce localităţi sunt studenţii cu burse de studiu.

Soluţia 1.
R1 ← SELECTIE (BURSA; tip bursa=”Studiu”)
R2 ← JONCŢIUNE (BURSA, STUDENT; numar matricol)
R3 ← JONCŢIUNE (STUDENT, LOCALITATE; cod localitate)
R4 ← PROIECŢIE (R3; nume localitate)
Soluţia 2.
R2 ← JONCŢIUNE (BURSA, STUDENT; numar matricol)
R3 ← JONCŢIUNE (R1, LOCALITATE; cod localitate)
R1 ← SELECTIE (R2; tip bursa=”Studiu”)
R4 ← PROIECŢIE (R3; nume localitate)

Exemplu:
Să se afle numele şi facultatea studenţilor din judetele Dâmboviţa, Gorj şi Constanţa care au bursă
excepţională.

Soluţia 1.
R1 ← SELECTIE (LOCALITATE; judeţ=”Dambovita”)
R2 ← SELECTIE (LOCALITATE; judeţ=”Gorj”)
R3 ← SELECTIE (LOCALITATE; judeţ=”Constanţa”)
R4 ← R1  R2  R3
R5 ← JONCŢIUNE (R4, STUDENT; cod localitate)
R6 ← JONCŢIUNE (R5, BURSA; numar matricol)
R7 ← SELECTIE (R6; tip bursa=”Exceptionala”)
R8 ← PROIECŢIE (R7; nume, facultate)

Soluţia 2.
R1 ← JONCŢIUNE (STUDENT, LOCALITATE; cod localitate)
R2 ← JONCŢIUNE (R2, BURSA; numar matricol)
R3 ← SELECTIE (R2; judeţ=”Constanţa” OR judeţ=”Gorj” OR
judeţ=”Constanţa”)
R4 ← SELECTIE (R3; tip bursa=”Exceptionala”)
R5 ← PROIECŢIE (R6; nume, facultate)

Exemplu:
Să se afle cum se numesc autorii români ale căror cărţi au apărut la editura Bibliotheca, în domeniul
Informatică şi au fost împrumutate de studenţii care nu stau în Caminul nr. 2.
Soluţia 1.
R1 ← SELECTIE (AUTOR; nationalitate=”Roman”)
R2 ← JONCŢIUNE (R1, AUTORCARTE; cod autor)
R3 ← JONCŢIUNE (R2, CARTE; cota carte)
R4 ← SELECTIE (R3; editura=”Bibliotheca” and
domeniu=”Intormatica”)
R5 ← JONCŢIUNE (R4, STUDCARTE; cota carte)
R6 ← JONCŢIUNE (R5, STUDENT; numar matricol)
R7 ← JONCŢIUNE (R6, STUDCAMIN; numar matricol)
R8 ← SELECTIE (R7; nume camin ≠“Caminul nr. 2”)
R9 ← PROIECŢIE (R8; nume autor)

Soluţia 2.
R1 ← JONCŢIUNE (AUTOR, AUTORCARTE; cod autor)
R2 ← JONCŢIUNE (R1, CARTE; cota carte)
R3 ← JONCŢIUNE (R2, STUDCARTE; cota carte)
R4 ← JONCŢIUNE (R3, STUDENT; numar matricol)
R5 ← JONCŢIUNE (R4, STUDCAMIN; numar matricol)
R6 ← SELECTIE (R5; nationalitate=”Roman”)
R7 ← SELECTIE (R6; editura=”Bibliotheca” and
domeniu=”Intormatica”)
R8 ← SELECTIE (R7; nume camin ≠“Caminul nr. 2”)
R9 ← PROIECŢIE (R8; nume autor)

Exemplu:
Să se afle data imprumutului pentru cărţile care nu aparţin domeniilor contabilitate sau informatică şi au
fost împrumutate de studenţii Stanciu Mirela şi Buciumeanu Olivia.

Soluţia 1.
R1 ← SELECTIE (CARTE; domeniu≠”Contabilitate”)
R2 ← SELECTIE (CARTE; domeniu≠”Informatica”)
R3 ← R1  R2
R4 ← JONCŢIUNE (R3, STUDCARTE; cota carte)
R5 ← JONCŢIUNE (R5, STUDENT; numar matricol)
R6 ← SELECTIE (R5; nume=”Stanciu Mirela”)
R7 ← SELECTIE (R6; nume=”Buciumeanu Olivia”)
R8 ← R1  R2
R9 ← PROIECŢIE (R8; data imprumut)

Soluţia 2.
R1 ← JONCŢIUNE (CARTE, STUDCARTE; cota carte)
R2 ← JONCŢIUNE (R1, STUDENT; numar matricol)
R3 ← SELECTIE (R2; domeniu≠”Contabilitate” AND
domeniu≠”Informatica”)
R4 ← SELECTIE (R3; nume=”Stanciu Mirela”
nume=”Buciumeanu Olivia”)
R5 ← PROIECŢIE (R4; data imprumut)
Exemplu:
Să se afle titlul cărţilor împrumutate de Danciu Daria în luna martie 2017.

Soluţia 1.
R1 ← JONCŢIUNE (CARTE, STUDCARTE; cota carte)
R2 ← SELECTIE (R1; data imprumut >= 01.03.2017 and
data imprumut <= 31.03.2017)
R3 ← JONCŢIUNE (R2, STUDENT; numar matricol)
R4 ← SELECTIE (R3; nume=”Danciu Daria”)
R5 ← PROIECŢIE (R4; titlu)

Soluţia 2.
R1 ← JONCŢIUNE (CARTE, STUDCARTE; cota carte)
R2 ← JONCŢIUNE (R1, STUDENT; numar matricol)
R3 ← SELECTIE (R2; data imprumut >= 01.03.2017 and
data imprumut <= 31.03.2017)
R4 ← SELECTIE (R3; nume=”Danciu Daria”)
R5 ← PROIECŢIE (R4; titlu)

Exemplu:
Să se afle numele studenţilor din regiunea Muntenia care nu au împrumutat cartea cu titlul Baze de date.

Soluţia 1.
R1 ← SELECTIE (CARTE; tilu≠”Baze de date”)
R2 ← JONCŢIUNE (R1, STUDCARTE; cota carte)
R3 ← JONCŢIUNE (R2, STUDENT; numar matricol)
R4 ← JONCŢIUNE (R3, LOCALITATE; cod localitate)
R5 ← SELECTIE (R4; regiune=”Muntenia”)
R6 ← PROIECŢIE (R5; nume)

Soluţia 2.
R1 ← JONCŢIUNE (CARTE, STUDCARTE; cota carte)
R2 ← JONCŢIUNE (R1, STUDENT; numar matricol)
R3 ← JONCŢIUNE (R1, LOCALITATE; cod localitate)
R4 ← SELECTIE (R3; tilu≠”Baze de date”)
R5 ← SELECTIE (R4; regiune=”Muntenia”)
R6 ← PROIECŢIE (R5; nume)

Exemplu:
Să se afle numele autorilor români care au scris cărţi de au fost împrumutate de studenţii de la
Facultatea de Ştiinţe Economice, de la secţiile CIG şi FB, născuţi în anul 1995.

Soluţia 1.
R1 ← SELECTIE (AUTOR; nationalitate=”Roman”)
R2 ← JONCŢIUNE (R1, AUTORCARTE; cod autor)
R3 ← JONCŢIUNE (R2, CARTE; cota carte)
R4 ← JONCŢIUNE (R3, STUDCARTE; cota carte)
R5 ← JONCŢIUNE (R4, STUDENT; numar matricol)
R6 ← SELECTIE (R5; facultate=”Stiinte Economice”)
R7 ← SELECTIE (R6; sectia=”CIG”)
R8 ← SELECTIE (R6; sectia=”FB”)
R9 ← R7  R8
R10 ← SELECTIE (R9; data nasterii>=01.01.1995 and
data nasterii<=31.12.1995)
R11 ← PROIECŢIE (R10; nume autor)

Soluţia 2.
R1 ← JONCŢIUNE (AUTOR, AUTORCARTE; cod autor)
R2 ← JONCŢIUNE (R1, CARTE; cota carte)
R3 ← JONCŢIUNE (R2, STUDCARTE; cota carte)
R4 ← JONCŢIUNE (R3, STUDENT; numar matricol)
R5 ← SELECTIE (R4; nationalitate=”Roman”)
R6 ← SELECTIE (R5; facultate=”Stiinte Economice”)
R7 ← SELECTIE (R6; sectia=”CIG” or sectia=”FB”))
R8 ← SELECTIE (R7; data nasterii>=01.01.1995 and
data nasterii<=31.12.1995)
R9 ← PROIECŢIE (R8; nume autor)

4.3.5. Diviziunea

Diviziunea este cel mai complex şi mai greu de explicat dintre operatori. Codd l-a imaginat ca un
operator invers produsului cartezian. Pentru al defini se porneşte de la două relaţii R1(A,B) şi R2(B).
Diviziunea relaţională R1R2 are ca rezultat o relaţie definită ca ansamblul subtuplurilor R1(A), pentru
care produsul lor cartezian cu R2(B) este un subansamblu al R1(A,B).
Rezultatul expresiei R1R2 reprezintă câtul diviziunii, ea fiind o relaţie ce poate fi notată R3(A).
Într-o altă formulare ai  R3 dacă şi numai dacă  bi  R2   (ai, bi)  R1.
În continuare pentru simplitate A şi B sunt considerate două atribute, deşi ele pot fi şi grupe de
atribute. În figura de mai jos este prezentată diviziunea relaţională.

R1
A B
a1 b1
a2 b1
a3 b1
a1 b2
a3 b2 R2
a4 b2 B


a1 b3 b1 R3
a3 b3 b2 A
a6 b3 b3 a1
a1 b4 b4 a2
a3 b4
a4 b4
a1 b5
a2 b5
a3 b5
a5 b5
Determinarea relaţiei R3  R1  R2 este sinonimă cu a rezolva problema: care dintre a1, a2, a3, a4
şi a5 apar în tupluri R1 împreună cu toate valorile lui B din R2, respectiv b1, b2, b3, b4 şi b5?
Toate valorile atributului A din R1 sunt parcurse pe rând:
• a1 apare cu b1 (în tuplul 1), cu b2 (în tuplul 2), cu b3 (în tuplul 7), cu b4 (în tuplul 10) şi cu b5 (în
tuplul 13). Prin urmare a1 îndeplineşte condiţie şi va fi inclus în relaţia R3;
• a2 apare cu b1 (în tuplul 2) dar nu apare cu b2  nu va face parte din R3;
• a3 apare cu b1 (în tuplul 3), cu b2 (în tuplul 5), cu b3 (în tuplul 8), cu b4 (în tuplul 11) şi cu b5 (în
tuplul 15)  îndeplineşte condiţia şi ca fi inclus în R3;
• a4 nu apare cu b1  nu va face parte din R3;
• a5 nu apare cu b1  nu va face parte din R3;
În urma acestui raţionament, tabele R3 va fi alcătuită din două tupluri (a1 şi a3).
Diviziunea relaţională este deosebit de utilă pentru formularea consultărilor în care apare clauza 
(„oricare ar fi”)

Exemplul 26. Care sunt studenţi care au împrumutat cel puţin o carte în fiecare zi?

Într-o altă formulare putem spune că ne interesează studenţii care au împrumutat „o carte” în
toate zilele în care s-au efectuat împrumuturi.
Prin urmare, câtul va fi o tabelă cu un singur atribut nume (numele studentului), iar divizorul va
fi o relaţie alcătuită numai din atributul data imprumut(conţine toate zilele în care s-au efectuat
împrumuturi). Dacă avem în vedere exemplul anterior, am putea nota R3 (nume) şi R2 (data_împrumut).
Cunoscând structura câtului şi a divizorului, putem determina structura tabelei deîmpărţit, R1 (nume,
data_împrumut). Relaţia R1 va conţine numele studenţilor şi zilele în care aceştia au împrumutat măcar o
carte.
Pentru formularea soluţiei parcurgem următorii paşi:
- construirea relaţiei deîmpărţit:

R11 ← JONCŢIUNE (STUDENT, STUDCARTE; numar matricol)


R1 ← PROIECŢIE (R11; nume, data_împrumut)

- construirea relaţiei numitor:

R2 ← PROIECŢIE (STUDCARTE; data_împrumut)

- şi finalul:

R3 ← R1 ÷ R2.

Cu toate că prezintă un efort în formulare, acest gen de soluţii se aplică la o gamă destul de largă de
probleme. Să discutăm în continuare câteva exemple:

Exemplu:
De la ce secţii sunt studenţii care au împrumutat şi cartea Baze de date şi cartea Microeconomie?

R1.1 ← SELECŢIE (CARTE; titlu = „Baze de date” OR titlu =


„Microeconomie”)
R1.2 ← JONCŢIUNE (R1.1; STUDCARTE; cota carte)
R1.3 ← JONCŢIUNE (R1.2, STUDENT; numar matricol)
R1 ← PROIECŢIE (R13; numar matricol, sectia)
R2 ← PROIECŢIE (R13; sectia)
R3 ← R1 ÷ R2

Exemplu:
Căror studenţi le-au fost împrumutate toate cărţile din bibliotecă?

R11 ← JONCŢIUNE (CARTE, STUDCARTE; cota carte)


R1 ← PROIECŢIE (R11; cota carte, numar matricol)
R2 ← PROIECŢIE (STUDENT; numar matricol)
R3 ← R1 ÷ R2
R4 ← JONCŢIUNE (R3, student; numar matricol)
R5 ← PROIECŢIE (R4; nume)

Diviziunea relaţională nu este un operator fundamental. Funcţionalitatea sa poate fi realizată prin


combinarea operatorilor: produs cartezian, diferenţă şi proiecţie.
Se reiau în discuţie atât tabelele R1 şi R2 cât şi problema: care dintre valorile ai apar în tupluri, în
R1, cu toate valorile bj din R2?.
O soluţie a acestei probleme poate fi constituită din următorii paşi:

R11 ← PROIECŢIE (R1; A)


R12 ← R11 X R2.

Tabela R12 cuprinde toate tuplurile posibile (ai, bj)

R13 ← R12 – R1.

Interesează ce tupluri din R12 lipsesc în R1.


- Valorile ai din R13 nu apar în R1 în combinaţie cu toate valorile b j din R2. Se elimină dublurile prin
R14 ← PROIECŢIE (R13; A)
- Valorile ai din R14 sunt cele care nu prezintă tupluri obţinute prin combinaţii cu toate valorile b j.
Deoarece interesează doar cele care prezintă combinaţiile respective, rezultatul se obţine prin
diferenţă:
R ← R11 – R14

S-ar putea să vă placă și