Sunteți pe pagina 1din 4

Calcul relaţional

Am observat în cazul algebrei relaţionale interogările precizează modul cum se obţine relaţia
rezultat prin aplicarea succesivă a operatorilor algebrici. în cazul calculului relaţional
interogarea este o descriere a relaţiei rezultat, descriere ce stabileşte numărul tuplelor prin
precizarea unor proprietăţi comune tuturor acestor tuple. Aceste proprietăţi sunt indicate
printr-o formulă. Prin urmare calculul relaţional ne arată care este rezultatul interogării fără să
ne arate cum se obţine acest rezultat. De aceea limbajele derivate din calcul relaţional sunt
limbaje neprocedurale sau altfel spus limbaje declarative, spre deosedire de limbajele bazate
pe algebra relaţională unde limbajele sunt procedurale.
O formulă de calcul relaţional este o expresie prin care se specifică o relaţie, posibil infinită.
În această formulă apar o serie de variabile dintre care unele sunt variabile libere, altele sunt
variabile legate. Aceste variabile pot fi variabile de domeniu (ce corespund unui atribut al
relaţiei) sau variabile de tuplă determinând tipul de limbaj de calcul relaţional definit pe
domenii (CRD) sau definit pe tuple (CRT).
O formulă de calcul relaţional este alcătuită din atomi conectaţi prin intermediul operatorilor
logici. Atomii din formulele de calcul relaţional pot fi:
1. atomi literali de forma
R( X ) sau R( X 1 , X 2 ,..., X n ) , unde R este numele unei relaţii X este o constantă sau o tuplă
din relaţia R constituită, posibil, din mai multe valori, iar X 1 , X 2 ,..., X n sunt variabile sau
constante specificând domeniile unor atribute
2. comparaţii de forma XθY unde θ este un operator de comparaţie (=,<,>,>=,>=,!=) iar X şi
Y sunt variabile de domeniu sau variabile de tuplă (de forma X.a unde a este atributul) sau
constante. De exemplu, daca avem relaţia Note(nume_prof,nume_stud,nota)
- fie u o variabilă de tuplă putem scrie o comparaţie de forma u.nume_stud="Ionescu"
- fie Note(xp,xs,xt) cu xp,xs,xt variabile de domeniu atunci putem scrie xs="Ionescu"
Alături de operatorii de comparaţie se mai adaugă şi operatori unari, denumiţi cuantificatori şi
anume:
- cuantificatorul universal ce se notează ∀ . Are semnificaţia că formula prefixată cu
acest cuantificator aplicat unei variabile, fie aceasta (∀X ) , este validă pentru toate
valorile posibile ale variabilei X. De exemplu, formula
(∀X )(Student ( X ) ∧ X . An ≥ 1 ∧ X . An ≤ 5) este valabilă pentru orice student;
- cuantificatorul existenţial, notat ∃ şi are semnificaţia că formula prefixată cu acest
cuantificator aplicat unei variabile, fie aceasta (∃X ) , este validă pentru cel puţin o
valoare a variabilei X. De exemplu formula (∃X )( Note( X ) ∧ X .nota ≥ 5) este validă
deoarece există cel puţin un student promovat la o disciplină
Variabilele care apar în formule precedate de cuantificatori se numesc variabile legate. Toate
celelalte variabile se numesc variabile libere.
Pornind de la cele două tipuri de atomi definiţi anterior, o formulă F din calculul relaţional se
poate defini recursiv prin următoarele reguli:
a. orice atom este o formulă, toate variabilele menţionate într-un atom sunt variabile
libere
b. dacă F este o formulă, atunci (∀X ) F şi (∃X ) F sunt formule. Apariţiile variabilei
X care sunt libere în F sunt legate în (∀X ) F şi (∃X ) F . Celelalte variabile îşi
păstrează statutul de variabile libere sau legate în F.
c. dacă F1 şi F2 sunt formule atunci:
- F1 ∧ F2 - operatorul conjuncţie;
- F1 ∨ F2 - operatorul disjuncţie;
- ¬F1 - operatorul negaţie;
- (F1 ) ;
sunt formule.
Ordinea de evaluare a operatorilor, atunci când lipsesc parantezele sunt stabilite de
următoarele reguli:
operatorii unari ¬, ∃, ∀ au cea mai mare prioritate şi se evaluează de la stânga la dreapta când
apar consecutiv;
operatorul ∧ se situează pe următorul nivel de prioritate
operatorul ∨ se situează pe ultimul nivel de prioritate

Calculul relaţional al domeniilor


Orice formulă din calculul relaţional al domeniilor (CRD) este de forma:
R = {( X 1 , X 2 ,..., X n ) F ( X 1 , X 2 ,..., X n )}
şi defineşte o relaţie rezultat ca fiind mulţimea tuplelor de forma (a1 , a 2 ,..., a n ) astfel încât
prin substituirea variabilei X i prin constantele corespunzătoare ai formula F (a1 , a 2 ,..., a n )
devine adevărată. Formulele de calcul relaţional al domeniilor permit definirea unor relaţii
care ar putea fi infinite. De aceea, pentru evitarea unor astfel de situaţii, este necesară
restrângerea CRD la o submulţime a acestuia ce garantează obţinerea de relaţii finite. În acest
sens se defineşte formulele independente de domeniu.
Fiind dată o formulă F din calculul relaţional al domeniilor se defineşte DOM(F) ca fiind
reuniunea dintre mulţimea constantelor care apar în F şi mulţimea tuturor valorilor de atribute
care apar în relaţiile specificate drept parametrii în cadrul formulei F. Fie F ( X 1 , X 2 ,..., X n ) o
formulă în CRD şi D o mulţime de valori cu proprietatea că DOM ( F ) ⊆ D , relaţia
corespunzătoare formulei F ca fiind mulţimea tuplelor: (a1 , a 2 ,..., a n ) ∈ D × D × ... × D astfel
încât prin substituirea fiecărei variabile de domeniu X i prin valoarea ai corespunzătoare
formula F devine adevărată. Formula F este independentă de domeniu dacă relaţia
corespunzătoare acesteia în raport cu orice domeniu D cu proprietatea că DOM ( F ) ⊆ D nu
depinde de mulţimea de valori D.
Pentru o formulă independentă de domeniu, relaţia corespunzătoare pentru orice mulţime de
valori D, nu depinde de această mulţime şi este aceeaşi cu relaţia corespunzătoare lui F în
raport cu mulţimea DOM(F). Pentru evitarea ambiguităţilor este ecesar ca în formularea
interogărilor să fie folosit doar acele formule care sunt independente de domeniu.
Din nefericire, independenţa de domeniu este o problemă pentru care nu se poate formula un
algoritm general pentru a stabili că o formulă este sau nu independetă de domeniu. De aceea
se folosesc alte seturi de formule.

Formule sigure în calculul relaţional al domeniilor

Deoarece nu se poate stabili dacă o formulă este independentă de domeniu sau nu se foloseşte
o submulţime a formulelor independente de domeniu denumite formule sigure, definite astfel
încât să existe criterii de stabilire dacă o formulă se poate încadra în această categorie.
Mulţimea formulelor sigure trebuie să satisfacă proprietăţile:
- orice formulă sigură este independentă de domeniu
- există criterii de stabilire a apartenenţei la mulţimea formulelor sigure
- formulele sigure pot exprima oricărei interogări ce poate fi exprimate în algebra
relaţională.
Mulţimea formulelor sigure satisfac următoarele restricţii:
formula nu conţine cuantificatorul universal ( ∀ ); De regulă cuantificatorul universal se
înlocuieşte prin formula:
(∀X )F ≡ ¬(∃X )¬F
orice două formule F1 şi F2 conectate prin operatorul de disjuncţie ( ∨ ) trebuie să aibă
acelaşi set de variabile libere, adică sunt permise formule:
F1 ( X 1 , X 2 ,..., X n ) ∨ F2 ( X 1 , X 2 ,..., X n )
orice variabilă liberă dintr-o subformulă ce constă din conjuncţia de formule
( F1 ∧ F2 ∧ ... ∧ Fm ) trebuie să fie limitată. O variabilă liberă limitată se definesc astfel:
1. o variabilă liberă este limitată dacă apare ca variabilă liberă în cel puţin una din
subformulele Fi unde Fi nu este o comparaţie sau negaţie a altei formule;
2. dacă Fi este de forma X = a sau a = X unde a este o constantă atunci variabila X este
limitată;
3. dacă Fi este de forma X = Y sau Y = X şi Y este o variabilă limitată atunci şi X este
de asemenea o variabilă limitată
în orice conjunţie de formule trebuie să existe cel puţin o formulă pozitivă (care nu este
negaţia altei formule).
S-a demonstrat că orice formulă care satisface restricţiile formulelor sigure este independentă
de domeniu.
Remarcă. În literatura de specialitate apar mai multe propuneri de definire a unor subclase
independente de domeniu, care sunt mai largi decât clasa formulelor sigure. Astfel au fost
definite clasa formulelor evaluabile, a formulelor permise, a formulelor separabile. Definirea
acestor clase este mult mai complicată decât a formulelor sigure, iar modul de echivalare prin
expresii algebrice a unora din formulele aparţinând acestor clase este încă subiectul a
numeroase cercetări.
Formularea interogărilor în calculul relaţional al domeniilor se face folosind numai formule
sigure. De exemplu presupunem că avem relaţiile
Facultate(codf,Denumire, adresa)
Profesori(Nume,functie,disciplina)
Student(nume,situatie,an,sex)
Note(nume_prof,nume_stud,nota)
se pot formula următoarele interogări:
1. să se determine numele profesorilor cu care studiază studentul Ionescu
R = {x (∃np )(∃ns )(∃nt )( Note(np, ns, nt ) ∧ ns =" Ionescu"∧ x = np )}
Relaţia rezultat R este formată dintr-un singur domeniu ale carei valori sunt date de acele
valori ale variabilei de domeniu np definită pe domeniul atributului Nume_profesor din
relaţia Note şi pentru care valoarile variabilei de domeniu ns definită pe domeniul
atributului Nume_student din relaţia Note este Ionescu.
2. să se afişeze numele studenţilor disciplinele şi notele obţinute:

R = { ( x, y, z ) | (∃np)(∃ns )(∃nt )(∃n)(∃f )(∃d )( Note(np, ns, nt ) ∧ profesori (n, f , d )


∧ np = n ∧ x = ns ∧ y = d ∧ z = nt }
Calculul relaţional al tuplelor
Calculul relaţional al tuplelor (CRT) este o variantă de calcul relaţional în care variabilele din
cadrul formulelor reprezintă tuple ale unor relaţii. O interogare din calculculul relaţional al
tuplelor are forma:
{X F ( X )} şi defineşte o relaţie ce este mulţimea tuplelor t pentru care formula F(t) este
adevărată.
La fel ca şi la formulele de calcul relaţional al domeniilor, în calculul relaţional al tuplelor pot
apare relaţii infinite. Se defineşte în mod analog clasa formulelor sigure CRT care au aceleaşi
proprietăţi ca şi clasa formulelor sigure din CRD. Limbajele de interogare bazate pe CRT
folosesc doar formule CRT sigure. După cum se poate observa între CRT şi CRD nu există
deosebiri esenţiale ci numai de notaţie, variabilelor de tuplă din CRT le corespund variabile
de domeniu din CRD şi invers. Orice formulă sigură din CRT se poate translata într-o formulă
sigură din CRD şi invers.
Exemple de formulele de interogare,presupunând că avem aceleaşi relaţii ca la CRD :
1. să se determine numele profesorilor cu care studiază studentul Ionescu
R = {t (∃u )( Note(u ) ∧ u.Nume _ stud =" Ionescu"∧t.Nume _ prof = u.Nume _ prof )}
Relaţia rezultat R este formată mulţimea tuplelor t cu proprietatea că există cel puţin o
tuplă u în relaţia Note pentru care atributul Nume_stud=Ionescu iar atributul nume_prof al
tuplei u este egal cu atributul nume_prof al tuplei t. Tupla t are un singur atribut şi anume
Nume_prof;
2. să se afişeze numele studenţilor, disciplinele şi notele luate la aceste discipline:
R = {t | (∃u )(∃v )Note(u ) ∧ profesori (v) ∧ u.Nume _ prof = v.nume ∧ t.Nume = u.Nume _ stud
∧ t.Disciplina = v.Disciplina ∧ t.nota = u.nota ) }

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