Sunteți pe pagina 1din 10

CAPITOLUL 4.

ALGEBRA RELAŢIONALĂ

4.1. Caracterizare generală a limbajelor de interogare

Bazele de date relaţionale au ca principal obiectiv acoperirea nevoilor informaţionale ale conducerii
firmei la toate nivelurile ierarhice. Până la consacrarea definitivă a sistemelor de gestiune a bazelor de
date relaţionale (SGBDR), extragerea informaţiilor dorite din baza de date se realiza, în principal, prin
aplicaţii dezvoltate exclusiv prin intermediul limbajelor procedurale, în care se precizau atât datele dorite
cât şi metodele de căutare şi de extragere a acestora. Generalizarea SGBDR-urilor este strâns legată de
elaborarea şi implementarea unor limbaje performante pentru manipularea bazelor de date – limbajele de
interogare.
Limbajele relaţionale sunt limbaje neprocedurale, în sensul că utilizatorul defineşte doar datele ce
trebuie extrase din baza de date, sarcina căutării şi extragerii fiind în sarcina exclusivă a SGBD-ului.
Limbajele de manipulare a datelor, plecând de la cele două modalităţi de definire a unei relaţii (ca
predicat aplicat asupra unor domenii şi ca ansamblu de tupluri), sunt grupate în două mari categorii:
• limbaje predicative – bazate pe teoria predicatelor;
• limbaje asambliste – bazate pe teoria ansamblurilor (a tuplurilor).
La rândul lor limbajele predicative sunt împărţite în:
• limbaje care au la bază calculul relaţional asupra tuplurilor;
• limbaje în care calculul relaţional se aplică doar asupra domeniilor.
Pentru limbajele de manipulare a datelor bazate pe calculul predicatelor, elementul definitoriu îl
constituie noţiunea de variabilă, noţiune ce poate fi asociată atât tuplurilor, cât şi domeniilor.
O altă clasificare este cea care realizează o delimitare între limbajele non-grafice şi cele grafice.
Prima categorie permite realizarea unei consultări prin dispunerea succesivă a operatorilor, atributelor şi
relaţiilor, în timp ce a doua categorie permite redactarea consultării în mod interactiv, prin afişarea pe
ecran a unui sistem de meniuri şi elemente de dialog din care opţiunile pot fi selectate şi modificate uşor
cu ajutorul mouse-ului
Există o serie de caracteristici comune tuturor limbajelor de interogare:
• rezultatul consultării este o nouă relaţie ce poate servi, în continuare, ca argument într-o nouă
consultare;
• operatoriile relaţionali se aplică relaţiilor considerate în totalitatea lor, adică tuturor tuplurilor care
alcătuiesc relaţiile respective;
• logica operatorilor se bazează pe valorile atributelor, aceasta constituind singurul mod de acces la
baza de date. Accesul total independent de limbaj este asigurat prin compararea valorilor atributelor
definite pe domenii compatibile.
Pentru a se realiza o consultare într-un limbaj relaţional, înainte de toate trebuie parcursă o fază de
analiză, pentru determinarea rezultatului, a legăturilor dintre tabele precum şi a eventualelor restricţii ce
trebuie respectate.
Algebra relaţională cuprinde două tipuri de operatori: asamblişti (REUNIUNE, INTERSECŢIE,
DIFERENŢĂ, PRODUS CARTEZIAN) şi relaţionali (SELECŢIE, PROIECŢIE, JONCŢIUNE,
DIVIZIUNE).
Într-o altă clasificare se face diferenţa între operatorii fundamentali, ireductibili (reuniunea, diferenţa,
produsul cartezian, selecţia şi proiecţia) şi operatorii derivaţi, a căror funcţionalitate poate fi realizată prin
combinarea operatorilor fundamentali (intersecţia, joncţiunea şi diviziunea).
Pe parcursul acestui capitol se vor folosi notaţiile:
• t – un tuplu al unei relaţii (o linie a unei tabele) şi
• t(A), un subtuplu al relaţiei R, relativ la atributul A (valoarea atributului A în linia t).
Ca şi calculul relaţional, algebra relaţională, serveşte ca punct de referinţă în caracterizarea unui
limbaj ca fiind complet sau incomplet, din punct de vedere relaţional. Dacă un limbaj permite exprimarea
tuturor operatorilor amintiţi anterior şi oferă cel puţin facilităţii algebrei relaţionale, se poate spune despre
respectivul limbaj că este un limbaj complet relaţional.

4.2. Operatorii asamblişti

Trei dintre operatorii asamblişti reuniune („”), intersecţie („”) şi diferenţă (–) pot opera numai cu
două relaţii unicompatibile.
Ce înţelegem prin relaţii unicompatibile?
Fie R1 (A1, A2, ….., An) şi R2 (B1, B2,….., Bm) două relaţii. Spunem despre R1 şi R2 că sunt
unicompatibile dacă:
1. n=m
2.  i  {1, 2, …., n}, Ai şi Bi sunt de acelaşi tip sintactic.
Relaţiile R1 şi R2 de mai jos sunt unicompatibile deoarece:
1. ambele au acelaşi număr de atribute (trei);
2. atributele C1, C2, C3 din R1 (R1.C1, R1.C2, R1.C3) corespund sintactic atributelor C3, C4 şi C5
(R2.C3, R2.C4, R2.C5).

R1 R2
C1 C2 C3 C3 C4 C5
100 AAA 500 500 BBB 300
200 AAB 750 300 BAA 250
400 ABA 250 400 BBA 300
500 BBB 700 700 AAA 500
900 ABB 400 900 ABB 400

4.2.1. Reuniunea

Reuniunea a două relaţii R1 şi R2, notată R3  R1  R2, este definită astfel:

R1  R2 = {tuplu t | t  R1 sau t  R2}.

Conţinutul tabelei-reuniune R3 este prezentat mai jos. Primele cinci tupluri din această tabelă sunt
preluate din R1, iar ultimele trei din R2. R3 conţine opt tupluri deoarece două din tupluri sunt comune
tabelelor R1 şi R2. Algebra relaţională elimină automat duplicatele (tuplurile identice), în felul acesta
asigurându-se restricţia de unicitate după fiecare operaţie.
Reuniunea este comutativă. Singura problemă neclară ar fi legată de numele atributelor în relaţia
rezultat, însă se poate institui regula conform căreia numele atributelor relaţiei-reuniune să fie numele
atributelor primei relaţii participante la operaţie.

R3
C1 C2 C3
100 AAA 500
200 AAB 750
400 ABA 250
500 BBB 700
900 ABB 400
300 BAA 250
400 BBA 300
700 AAA 500

4.2.2. Intersecţia

Intersecţia a două relaţii R1 şi R2, notată R4  R1  R2, este definită astfel:

R1  R2 = {tuplu t | t  R1 şi t  R2}.

Conţinutul tabelei-intersecţie este prezentat mai jos. Deoarece doar două tupluri sunt absolut identice
şi în R1 şi în R2, tabela rezultat va fi alcătuită doar din două linii.
Ca şi reuniunea, intersecţia este comutativă, iar numele atributelor relaţiei intersecţie sunt extrase din
prima relaţia participantă la operaţie.

R4
C1 C2 C3
500 BBB 700
900 ABB 400

4.2.3. Diferenţa

Diferenţa a două relaţii R1 şi R2, notată R5  R1 – R2, este definită astfel:

R1 – R2 = {tuplu t | t  R1 şi t  R2}.

Conţinutul tabelei-diferenţă conţine doar tuplurile din R1 care nu se regăsesc în R2. Aşadar, din
rezultat sunt eliminate ultimele două tupluri din R1, deoarece valorile acestora se regăsesc şi în R2
(primul şi ultimul tuplu din R2).
Spre deosebire de reuniune şi intersecţie, diferenţa nu este comutativă. Atributele relaţiei-diferenţă
sunt cele ale primei relaţii, iar tuplurile care sunt extrase din relaţia-descăzut nu se regăsesc în relaţia
scăzător. Pe lângă asta, nu există restricţii privind cardinalitatea (numărul tuplurilor) celor două relaţii în
sensul că nu este obligatoriu ca relaţia descăzut să conţină mai multe tupluri decât cea scăzător.

R5
C1 C2 C3
100 AAA 500
200 AAB 750
400 ABA 250

4.2.4. Produsul cartezian


Produsul cartezian dintre două relaţii R1 şi R2, notat R6  R1  R2, este ansamblul tuturor
tuplurilor obţinute prin concatenarea fiecărei liniile din tabela R1 cu toate liniile din tabela R2. Este
definit astfel:

R1  R2 = {(t1, t2) | t1  R1 şi t2  R2}.

Spre deosebire de celelalte trei operaţiuni precedente, produsul cartezian nu face apel la noţiunea de
relaţii unicompatibile, iar relaţia rezultat cumulează atributele celor două relaţii argument.
Mai jos este prezentat rezultatul produsului cartezian al tabelelor R1 şi R2.

R6
C1 C2 R1.C3 R2.C3 C4 C5
10 AAA 500 500 BBB 300
0 AAA 500 300 BAA 250
10 AAA 500 400 BBA 300
0 AAA 500 700 AA 500
10 AAA 500 300 A 400
0 ABB
10
0
10
0
20 AAB 750 500 BBB 300
0 AAB 750 300 BAA 250
20 AAB 750 400 BBA 300
0 AAB 750 700 AA 500
20 AAB 750 900 A 400
0 ABB
20
0
20
0
40 ABA 250 500 BBB 300
0 ABA 250 300 BAA 250
40 ABA 250 400 BBA 300
0 ABA 250 700 AA 500
40 ABA 250 900 A 400
0 ABB
40
0
40
0
50 BBB 700 500 BBB 300
0 BBB 700 300 BAA 250
50 BBB 700 400 BBA 300
0 BBB 700 700 AA 500
50 BBB 700 900 A 400
0 ABB
50
0
C1 C2 R1.C3 R2.C3 C4 C5
50
0
90 ABB 40 500 BBB 300
0 ABB 40 300 BAA 250
90 ABB 40 400 BBA 300
0 ABB 40 700 AA 400
90 ABB 40 900 A 500
0 ABB
90
0
90
0

Tabela-rezultat R6 are o structură nouă cu şase atribute (trei preluate din R1 şi trei din R2). Deoarece
există un atribut cu nume comun C3, pentru a deosebi cele două apariţii, acestea sunt prefixate, în antetul
tabelei, cu numele relaţiei din care provine atributul respectiv (R1.C3 şi R2. C3).
Prima linie din R6 este obţinută prin unirea primului tuplu din R1 cu primul tuplu din R2, a doua din
primul tuplu din R1 cu al doilea din R2 ş.a.m.d. Cum R1 are 5 tupluri şi R2 tot 5, tabela-rezultat a
produsului cartezian va avea 5 * 5 = 25 tupluri.
Nu prea există situaţii care să reclame folosirea directă şi exclusivă a produsului cartezian. Cel mai
important merit al acestuia în algebra relaţională este că permite alipirea a două relaţii, fundamentând
astfel operatorul cheie care este joncţiunea.
4.3. Operatorii relaţionali

Dacă cei patru operatori prezentaţi în paragraful anterior sunt generali, cei din paragraful de faţă sunt
specifici algebrei relaţionale.
Sunt grupaţi în două categorii:
- operatori unari de restricţie, care permit decupajul unei relaţii, pe orizontală SELECŢIA şi pe
verticală PROIECŢIA;
- operatori binari de extensie: JONCŢIUNEA şi DIVIZIUNEA.

4.3.1. Selecţia

Selecţia triază dintr-o tabelă numai tuplurile care satisfac condiţia specificată printr-un predicat
(condiţie).
Se notează

R1 ← SELECŢIE {R; expresie_logică}

unde:
- R este relaţia R (A1, A2, ..., An) asupra căreia se aplică selecţia (Ai sunt atributele sale);
- R1 este noua tabelă obţinută în urma selecţiei, care va avea aceeaşi schemă relaţională cu R 
R1(A1, A2, ..., An)
- expresie_logică este compusă din operanzi care sunt nume de atribute sau constante, operatori de
comparaţie aritmetică (>, , <, , =, ) şi operatori logici (ŞI, SAU, NU).

OBSERVAŢIE: Relaţiile R1 şi R2 folosite pentru exemplificare pe parcursul acestui subcapitol,


sunt cele din subcapitolul anterior. Toate celelalte relaţii folosite aici, precum şi în capitolul următor
(Limbajul de interogare SQL) sunt prezentate în Anexa 1.

Exemplu:
Care sunt liniile din R1 pentru care valorile atributului C1 sunt mai mici de 500?

R ← SELECŢIE (R1; C1 > 500)

Exemplu:
Care sunt liniile din R1 pentru care valorile atributului C3 sunt cuprinse în intervalul 250 – 350?

R ← SELECŢIE (R1; C3 > = 250 AND C3 < = 350)

Exemplu:
Care sunt liniile din R1 pentru care valorile atributelor C1 şi C3 sunt mai mari decât 300?

R ← SELECŢIE (R1; C1 > 300 AND C3 > 300)

Exemplu:
Care sunt studenţii Facultăţii de Ştiinţe Economice?

Pentru a afla această informaţie, mai întâi trebuie să identificăm în baza de date, tabela (sau după caz,
tabelele) din care se extrage rezultatul. În cazul de faţă, tabela este STUDENT. Apoi se stabilesc
atributele din tabelă, asupra cărora se va aplica predicatul (atributul) de selecţie. Se obţine în felul acesta
soluţia:

R ← SELECŢIE (STUDENT, facultate = „Stiinte Economice”)

Observaţie: Toate valorile care aparţin tipului de dată Caracter (Text) vor fi trecute folosint ghilimele
„”.

Exemplu:
Care sunt studenţii Facultăţii de Ştiinţe Economice, specializarea Contabilitate şi Informatică de
Gestiune?

Tabela în care va opera operatorul de selecţie este STUDENT. Predicatul de selecţie va opera asupra
atributelor facultate şi sectia. Aceasta este o condiţie compusă şi ca atare se va folosi unul din operatorii
logici, descrişi la capitolul despre algebra booleană, respectiv AND, OR sau NOT. În cazul de faţă vom
folosi operatorul logic AND.

R ← SELECŢIE (STUDENT, facultate = „Stiinte Economice” AND sectia = „CIG”)

Exemplu:
Ce burse au fost încasate în luna martie 2017?

Tabela în care va opera de această dată operatorul de selecţie este tabela BURSA, iar atributul folosit
este data_incasarii.

R ← SELECŢIE (BURSA; data_incasarii >= 01/03/2017


AND data_incasarii <= 31/02/2015

Exemplu:
Care sunt căminele aflate pe strada “Aleea Sinaia, nr. 13”?

Tabela în care va opera de această dată operatorul de selecţie este tabela STUDCAMIN, iar atributul
folosit este strada.

R ← SELECŢIE (STUDCAMIN; strada=”“Aleea Sinaia, nr. 13””)

Exemplu:
Care sunt localităţile din judeţul Dâmboviţa?

Tabela în care va opera de această dată operatorul de selecţie este tabela LOCALITATE, iar atributul
folosit este judet (poate fi folosit şi atributul cod judet).

R ← SELECŢIE (LOCALITATE; judet=”Dambovita”)

Exemplu:
Care sunt localităţile din regiunea Muntenia?

Tabela în care va opera operatorul de selecţie este aceeaşi, respectiv tabela LOCALITATE, iar
atributul folosit este regiune.
R ← SELECŢIE (LOCALITATE; regiune=”Muntenia”)

Exemplu:
Care sunt cărţile apărute în domeniul Contabilitate?

Tabela în care va opera de această dată operatorul de selecţie este tabela CARTE, iar atributul folosit
domeniu.

R ← SELECŢIE (CARTE; domeniu=”Contabilitate”)

Exemplu:
Care sunt cărţile apărute la editura ProUniversitaria în anul 2016?

Tabela în care va opera operatorul de selecţie este aceeaşi, respectiv tabela CARTE, iar atributele
folosite (exemplul de faţă presupune folosirea a două atribute şi a unui operator logic) sunt editura şi an
apariţie.

R ← SELECŢIE (CARTE; editura=”ProUniversitaria” and an aparitie =


2016)

Exemplu:
Care sunt cărţile apărute în perioda 2000-2010?

Tabela în care va opera operatorul de selecţie este aceeaşi, respectiv tabela CARTE, iar atributul
folosite este an aparitie. Perioada 2000-2010, pe axa timpului, reprezintă un interval iar acest fapt ne
determină să folosim operatorii aritmeticii de comparaţie pentru a specifica limitele acestui interval,
respectiv >= limita inferioară şi <= limita superioară.

R ← SELECŢIE (CARTE; an aparitie >= 2000 AND an aparitie <=2010)

Exemplu:
Care sunt autorii de naţionalitate străină?

Tabela în care va opera de această dată operatorul de selecţie este tabela AUTOR, iar atributul folosit
nationalitate.

R ← SELECŢIE (AUTOR; nationalitate≠”roman”)

Observaţie: Din dorinţa de a se rezolva rapid această cerinţă este posibil să apără câteodată o formulare
nefericită, care nu trebuie avută în vedere ca fiind corectă, respectiv:

R ← SELECŢIE (AUTOR; nationalitate=”străină”)

4.3.2. Proiecţia

Proiecţia permite selectarea într-o tabelă rezultat doar a atributelor dorite spre deosebire de selecţie
care extrage anumite linii dintr-o tabelă pe baza condiţiei îndeplinite de valorile unora dintre atribute. Cu
alte cuvinte se realizează „decuparea” pe verticală a unei relaţii.
Proiecţia relaţiei R(A1, A2, …, An) este o relaţie care se obţine după parcurgerea a doi paşi:
• eliminarea din Ai a acelor atribute care nu sunt specificate
• suprimarea tuplurilor identice (dublurile).
Se notează:

R1 ← PROIECŢIE {R; Aj, Ak, …, Ax}

Spre deosebire de R, schema relaţiei R1 este alcătuiră numai din atributele indicate: R1 (Aj, Ak, ...,
Ax). Dacă după extragerea coloanelor nu există tupluri identice, R1 va avea acelaşi număr de linii ca şi
relaţia R. În caz contrar, numărul lor va fi mai mic, în funcţie de numărul dublurilor.

Exemplu:
Care sunt valorile atributului C3 în relaţia R1?

R ← PROIECŢIE (R1; C3)

R
C3
500
750
250
700
400

Exemplu:
Care sunt valorile combinaţiei atributelor C1 şi C3 în relaţia R1?

R ← PROIECŢIE (R1; C1, C3)

R
C1 C3
100 500
200 750
400 250
500 700
900 400

Exemplu:
Care sunt facultăţile preluate în baza de date?

Tabela în care sunt preluate facultăţile este STUDENT. Singura coloană care ne interesează în acest
caz este facultate.

R ← PROIECŢIE (STUDENT; facultate)

Exemplu:
Să se identifice cota, titlul, domeniul şi numărul de exemplare al fiecărei cărţi.

Tabela care interesează este CARTE, iar din aceasta se decupează patru coloane: cota carte, titlu,
domeniu şi numar exemplare.
R ← PROIECŢIE (CARTE; cota carte, titlu, domeniu, numar exemplare)

Exemplu:
Care data încasării şi tipul bursei încasate?

Tabela care interesează este BURSA, iar din aceasta se decupează doua coloane: data incasarii şi tip
bursa.

R ← PROIECŢIE (BURSA; data incasarii, tip bursa)

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