Implementarea operatorilor relationali in SGBD-ul Visual Fox Pro
Modelul relational ofera doua tipuri de operatori pe relatii si anume algebra relationala si calculul relational. La randul sau calculul relational este de doua tipuri: calcul relational orientat pe tuplu si calcul relational orientat pe domeniu.
Algebra relationala a fost introdusa de E. F. Codd ca o colectie de operatii pe relatii, fiecare operatie avand drept operanzi una sau mai multe relatii si producand ca rezultat o alta relatie.
In general operatiile algebrei relationale pot fi grupate in operatii traditionale pe multimi (reuniunea, intersectia, diferenta, produsul cartezian) si operatii relationale speciale (selectia, proiectia, jonctiunea)
Algebra relationala
Reuniunea - reprezinta o operatie a algebrei relationale definita pe doua relatii R1 si R2 ambele cu o aceeasi schema, operatie care consta din construirea unei noi relatii R3, cu schema identica cu R1 si R2 si avand drept extensie tuplurile din R1 si R2, luate impreuna o singura data.
Notatiile uzuale pentru reuniune sunt:
R1 R2
OR(R1,R2)
APPEND(R1,R2)
Reprezentarea grafica a reuniunii este:
R3
R1 R2
Exemplu:Presupunem ca posedam o baza de date ce o numim Fructe care contine doua tabele F1 si F2. In tabela F1 avem campul Verzi si in tabela F2 avem campul Albastre
kk
In urma executarii unui UNION vom obtine un VIEW fructele existente in ambele tabele, mai putin inregistrarile duplicate:
OPEN DATABASE Fructe ;
CREATE SQL VIEW Legume AS ;
SELECT Verzi FROM Fructe!F1 ;
UNION
SELECT Albastre FROM Fructe!F2 ;
Vom Obtine: Gutui, Lamai, Struguri, Pepeni, Mere, Ananas, Banane, Smochine
Diferenta -reprezinta o operatie din algebra relationala definita prin doua relatii R1 si R2, ambele cu o aceeasi schema, operatia constand din construirea unei noi relatii R3, cu schema identica cu a operanzilor si cu extensia formata din acele tupluri ale relatiei R1 care nu se regasesc si in R. Notatiile uzuale pentru operatia de diferenta sunt:
R1-R2
REMOVE(R1,R2)
MINUS(R1,R2)
Reprezentarea grafica a acestei operatii este:
R3
R1 R2
Exemplu de utilizare:
OPEN DATABASE Fructe ;
CREATE SQL VIEW Legume AS ;
SELECT Verzi FROM Fructe!F1 ;
MINUS
SELECT Albastre FROM Fructe!F2 ;
Obtinem un VIEW cu: Gutui, Struguri, Pepeni. Vom obtine elementele ce exista in Verzi si nu exista in Albastre
Produs cartezian - reprezinta o operatie a algebrei relationale definita pe doua relatii R1 si R2, operatie care consta din construirea unei noi relatii R3, a carei schema se obtine prin concatenarea schemelor relatiilor R1 si R2 si a carei extensie cuprinde toate combinatiile tuplurilor din R1 cu cele din R2.
Notatiile uzuale pentru desemnarea operatiei sunt:
R1 R2
PRODUCT(R1,R2)
TIMES(R1,R2)
Reprezentarea grafica a produsului cartezian este:
R3
R1 R2
Exemplu de utilizare:
OPEN DATABASE Fructe ;
CREATE SQL VIEW Legume AS ;
SELECT Verzi ;
FROM Fructe!F1, Fructe!F2 ;
Obtinem un VIEW cu produsul cartezian al inregistrarilor din cele doua tabele
Proiectia reprezinta o operatie din algebra liniara definita asupra unei relatii R, operatie care consta din construirea unei noi relatii P, in care se regasesc numai acele atribute din R specificate explicit in cadrul operatiei. Suprimarea unor atribute din R inseamna efectuarea unor taieturi verticale asupra lui R, care pot avea ca efect aparitia unor tupluri duplicate ce se cer a fi eliminate. Se poate realiza prin comanda COPY STRUCTURE cu sintaxa
COPY STRUCTURE TO TableName
[FIELDS FieldList]
[[WITH] CDX | [WITH]
PRODUCTION] (permite crearea de indexi)
[DATABASE cDatabaseName [NAME cTableName]]
Notatiile uzuale pentru operatia de proiectie sunt:
PAj ,Aj,.,A m
R(A j ,A j,.,A m)
PROJECT(R,Aj,A j,.,A m)
Reprezentarea grafica a proiectiei este:
P
R
Exemplude utilizare:
-daca de exemplu avem aceleasi doua atribute (Verzi si Albastre) intr-un singur tabel TAB in baza de date Scump ;
executam secventa de instructiuni:
OPEN DATABASE scump ;
CREATE SQL VIEW Legume AS ;
SELECT Verzi FROM scump!TAB ;
Vom obtine doar marfurile din Verzi.
Selectia -reprezinta o operatie din algebra relationala definita asupra unei relatii R, operatie care consta din construirea unei relatii S, a carei scschema este identica cu cea a relatiei R si a carei extensie este constituita din acele tupluri din R care satisfac o conditie mentionata explicit in cadrul operatiei. Intrucat cel mai adesea, nu toate tuplurile din R satisfac, aceasta conditie, selectia inseamna efectuarea unor taieturi orizontale asupra relatiei R, adica eliminarea de tupluri.
Notatiile folosite in mod uzual in cadrul operatiei de selectie sunt:
sconditie(R)
R[conditie]
RESTRICT(R,conditie)
Reprezentarea grafica a operatiei de selectie este:
S
R
Exemplu de utilizare:
-daca avem inclus in baza de date data, pe langa numele fructelor si cantitatile disponibile in unitati specifice (inregistrate intr-o coloana separata CANTiTATE)
-se executa secventa de instructiuni:
OPEN DATABASE Fructe ;
CREATE SQL VIEW Legume AS ;
SELECT verzi FROM Fructe!F1
WHERE cantitare > 20
Vom obtine tuplurile din Verzi care exista in cantitati disponibile >20 unitati specifice
Jonctiunea (Joinul) - reprezinta o operatie din algebra relationala definita pe doua relatii R1 si R2, operatie care consta din construirea unei noi relatii R3, prin concatenarea unor tupluri din R1 cu tupluri din R2. Se concateneaza acele tupluri din R1 si R2 care satisfac o anumita conditie, specificata explicit in cadrul operatiei. Extensia relatiei R3 va contine deci combinatiile acelor tupluri care satisfac conditia de concatenare.
Notatiile uzuale pentru desemnarea operatiei de jonctiune sunt:
R1 conditie R2
JOIN(R1,R2, conditie)
Reprezentarea grafica a acestei operatii este:
R3
R1 R2
Conditia de concatenare este de forma:
Atribut din R1 operator de comparatie atribut din R2 |
In functie de operatorul de comparatie din cadrul operatiei de concatenare, joinul este de mai multe feluri:
Equijoinul reprezinta jonctiunea dirijata de o conditie de forma:
Atribut din R1 = Atribut din R2 |
Operatia de jonctiune se poate exprima cu ajutorul operatiilor de produs cartezian si selectie:
JOIN(R1,R2,conditie)=RESTRICT(PRODUCT(R1,R2),conditie)
Jonctiunea naturala este o operatie definita pe doua relatii R1 si R2, prin care este construita o noua relatie R3, a carei schema este obtinuta prin reuniunea atributelor din relatiile R1 si R2 si a carei extensie contine tuplurile obtinute prin concatenarea tuplurilor din R1 cu tuplurile din R2 care prezinta aceleasi valori pentru atributele cu aceleasi nume
Jonctiunea externa este operatia prin care din doua relatii R1 si R2se obtine o noua relatie R3, prin jonctionarea relatiilor R1 si R2 la care se adauga tuplurile din R1 si R2 care nu au participat la join
Notatiile uzuale:
EXT-JOIN(R1,R2)
Semijonctiunea reprezinta o operatie definita pe doua relatii R1 si R2, operatie care consta din construirea unei noi relatii R3, a carei xtensie contine tuplurile din R1 care participa la jonctiunea celor doua relatii.
Notatiile uzuale:
SEMIJOIN(R1,R2)
SELECT fieldname FROM tablename
INNER JOIN tablename2 ON
Jonctiunea si selectia se pot realiza folosind comanda SELECT-SQL cu sintaxa urmatoare:
SELECT [ALL | DISTINCT] [TOP nExpr [PERCENT]] -permite selectarea īnregistrarilor din rezultat (selectie)
FROM [FORCE] permite selectarea tabelelor si
bazei de date din care se preiau datele
[DatabaseName!]Table [[AS] Local_Alias]
[[INNER | LEFT [OUTER] | RIGHT [OUTER] | FULL [OUTER] JOIN- specifica tipul de jonctiune(interna,semijomctiune,externa)
[ON JoinCondition .] - specifica conditia pentru join
[INTO Destination] -specifica locul de depunere a rezultatului operatiei,īn acest caz DBF TABLE nume tabel
[WHERE JoinCondition [AND JoinCondition ...] -permite selectarea doar a anumitor īnregistrari
[AND | OR FilterCondition [AND | OR FilterCondition ...]]] -
tableman.fieldname=tablename.fieldname
Intersectia -reprezinta o operatie a algebrei relationale definita pe doua relatii R1 si R2, ambele cu aceeasi schema, operatie care consta din construirea unei noi relatii R3, cu schema identica cu a operanzilor si cu extensia formata din tuplurile comune lui R1 si R2.
Notatiile uzuale pentru desemnarea operatiei de intersectie sunt:
R1 R2
INTERSECT(R1,R2)
AND(R1,R2)
R3
R1 R2
Operatia de intersectie se poate exprima prin intermediul operatiei de diferenta:
R1 R2=R1-(R1-R2)
R1 R2=R2-(R2-R1)
Diviziunea -reprezinta o operatie a algebrei relationale definita asupra unei relatii R cu schema: R(A1:D1,.,Ap:Dk, Ap+1:D1,.,An:Dm ), operatie care consta din construirea, cu ajutorul unei relatii r(Ap+1:D1,.,An:Dm ) a relatiei Q(A1:D1,.,Ap:Dk). Tuplurile relatiei r concatenate cu cele ale relatiei r permit obtinerea tuplurilor relatiei R.
Notatiile utilizate pentru desemnarea operatiei de diviziune sunt:
R r
DIVIZION(R,r)
Reprezentarea grafica a operatiei de diviziune este:
R3
R1 R2
Concatenarea -reprezinta o operatie aditionala din algebra relationala, care permite determinarea complementului unei relatii. Complementul unei relatii reprezinta ansamblul tuplurilor din produsul cartezian al domeniilor asociate atributelor relatiei, care nu figureaza in extensia relatiei considerate.
Notatiile uzuale pentru aceasta operatie sunt:
R
NOT(R)
COMP(R)
Splitarea(spargerea) -reprezinta o operatie aditionala din algebra relationala definita pe o relatie R, operatie care pe baza unei conditii definite asupra atributelor din R permite construirea a doua relatii R1 si R2, cu o aceeasi schema cu R. Extensia lui R1 contine tuplurile care verifica conditia, iar cea a lui R2 pe cele care nu verifica conditia.
Inchiderea tranzitiva -reprezinta o operatie aditionala din algebra relationala prin care se pot adauga tupluri la o relatie. Presupune executarea in mod repetat a secventei de operatii: jonctiune-proiectie-reuniune. Este o operatie definita asupra unei relatii R, a carei schema contine doua atribute A1 si A2 cu acelasi domeniu asociat, operatie care consta din adaugarea la relatia R a tuplurilor care se obtin succesiv prin tranzitivitate, in sensul ca daca exista in R tuplurile <a,b> si <b,c>, se va adauga <a,c>.
Notatiile uzuale :
t(R)
R+
CLOSE(R)
Calcul relational
Calculul relational orientat pe tuplu
operatori:
-conectivele (conectorii):
*conjunctia, notata uzual cu
*disjunctia, notata cu
*negatia, notata cu
-cuantificatori:
*cuantificatorul existential (
*cuantificatorul universal ("
In cadrul calculului relational orientat pe tuplu sunt utilizati urmatorii
Calculul relational orientat pe domeniu
Calculul relational orientat pe domeniu utilizeaza in constructiile sale aceeasi operatori ca si calculul relational orientat pe tuplu, dar variabilele care apar in aceste constructii sunt variabile domeniu, adica variabile definite asupra domeniilor.
Bibliografie:
1. "Baze de date", Ion LUNGU; editura ALL 1995
"Sisteme de Gestiune a Bazelor de Date. FoxPro", Gheorghe Popa
editura Cison 1996
2."SQL fara profesor in 14 zile", Jeff Perkins
3. Visual Studio 6.0, MSDN
Implementarea Operatorilor Relationali in Visual Fox
Student: Rednic Carmen-Isabela
An: II
Grupa: 1037
Seria D
ASE BUCURESTI, 2000
|