Elemente de algebra relationala
Principiile algebrei relationale au fost stabilite de E.F. Codd in 1970, pentru a asigura o fundamentare matematica a bazelor de date relationale. In conceptia relationala o baza de date este formata dintr-o colectie de relatii (tabele, fisiere de date) asupra carora se aplica o colectie de operatori pentru a gestiona datele continute in tabele.
Un operator relational se aplica asupra unor tabele si va avea ca rezultat tot o tabela. In algebrei relationala nu este permis accesul direct asupra inregistrarilor dintr-o tabela, sau pozitionarea pe o anumita inregistrare.
Se definesc mai jos principalii termeni folositi in algebra relationala.
Constituant (camp, atribut, caracteristica) este informatia elementara (atomica) a unei relatii. Notam constituantii cu X1, X2, X3, ….Xn
Exemplu : CodP, Nume, Adresa, Salar, Data_nasterii
Domeniul (tipul) este ansamblul valorilor pe care le poate lua un constituant si se noteaza dom(Xi). Domeniul este un set de valori atomice si poate fi definit ca un tip abstract.
Mai multi constituanti pot avea acelasi domeniu : Tel_acasa, Tel_serv, Fax
N-upletul de constituanti este un ansamblu de constituanti (X1, X2, …, XN) ce se poate nota cu X si se poate considera un constituant compus.
N-upletul (de date) este un set de valori (a1, a2, …, an) unde aiI dom(Xi).
N-upletul este un articol dintr-un fisier (record), sau un rand dintr-un tabel (row).
O relatie N-ara R(X) se defineste prin trei elemente:
precizarea unui N-uplet de constituanti (X1, X2, …, XN);
definirea domeniului pentru fiecare constituant Xi;
definirea unui predicat logic care pentru orice N-uplet de date (a1, a2, …, an) unde aiI dom(Xi) pentru i=1..n da o propozitie adevarata sau falsa.
Notam aceasta relatie R(X1,X2,X3,….Xn) sau R(X).
Relatia R(X) este formata din ansamblul N-upletilor pentru care predicatul da propozitii adevarate.
Relatia STUD(Cods, Nume, Adresa, Data_n, Bursa) va cuprinde toti N-upletii (inregistrarile) pentru careconditiile (predicatul) de student sunt indeplinite (admis, neexmatriculat, netransferat, nu a absolvit,etc.). Nu orice combinatie de valori, care apartine domeniilor constituantilor ne da un n-uplet valid.
Notam cu //R(a1,a2,a3,an) // o evaluare a predicatului pentru un n-uplet.
Daca n-upletul apartine relatiei atunci:
//R(a1,a2,a3,an) // = DA
O relatie este o tabela de valori unde fiecare rand reprezinta un set al valorilor datelor din relatie. Valorile pot fi interpretate ca descriind o entitate (Persoana, Student, Masina) sau o legatura data (Note, Orar, Ruta). Numele tabelei si coloanelor servesc la interpretarea sensului valorilor din fiecare rand al tabelei.
Gradul unei relatii este dat de numarul atributelor ce formeaza relatia.
Modelul (schema) relatiei R este notat R(X1,X2,X3,….Xn) si este un un set de atribute (constituanti) R= {X1,X2,X3,….Xn}. Un atribut Xi este numele care indica un anumit domeniu Di = dom(Xi) intr-un model de relatie R.
Modelul de relatie:
STUD(Cods,Nume, Adresa, Data_n, Bursa)
este abstract si se refera la mai multe relatii concrete, care cuprind studentii unor universitati diferite.
O relatie concreta (instance) r a modelului de relatie R(X1,X2,X3,….Xn) notata r(R) este un set de n-upleti r = {t1,t2,t3,..tm), unde fiecare n-uplet este o lista ordonata de n valori:
t = (v1,v2,v3,.vn) unde fiecare valoare vi I dom(Xi) pentru i = 1n sau vi=nul.
O relatie r reflecta numai n-upletii valizi, care reprezinta o stare a lumii reale, ce se poate modifica in timp. Modelul relatiei R ramane stabil pana la modificarea atributelor sau predicatului.
Principalele caracteristici ale unei relatii sunt:
N-upletii din relatie nu sunt ordonati ca elementele unei multimi matematice. Relatia se memoreaza ca un fisier unde unui n-uplet ii corespunde o inregistrare cu un numar de ordine, rezultat arbitrar in momentul creierii. O relatie ca tabel poate fi afisata in orice ordine a randurilor. Relatia poate fi ordonata logic dupa orice atribut.
Ordinea valorilor in N-upleti este data de ordinea definirii atributelor in modelul relatiei. Toti n-upletii unui fisier (tabela) vor avea aceeasi ordine a valorilor. Ordinea valorilor din n-uplet se precizeaza intr-o tabela prin ordinea numelor atributelor data la descriere.
Valorile atributelor din N-upleti sunt atomice. Un atribut nu poate avea valori multiple. Sunt permise valorile nule care pot fi necunoscute (nu stim numarul de telefon al unei persoane) sau inexistente (persoana nu are telefon).
O relatie poate fi privita ca o specificare a unui tip compus. Definitia tipului este data de structura relatiei. N-upletii relatiei sunt realizari ale entitatii sau legaturii.
Atribute cheie in relatie
O relatie este definita ca un set de N-upleti (campuri) distincti (din acest punct de vedere corespunde tipului algebric multime). Nu pot exista doi n-upleti care au toate valorile atributelor identice. Uzual exista grupe de atribute pentru care valorile difera si nu exista doua valori identice in n-upleti diferiti.
Supercheia (SK) este un grup de atribute care identifica in mod unic N-upletii relatiei.
ti(SK) # tj(SK) pentru orice i,j unde i # j
Ex: Nume, Data_N, Adresa
Pot exista relatii care au o singura supercheie formata din toate atributele.
Cheie (K) intr-o relatiei R este o supercheie minima, care are proprietatea ca, inlocuind sau stergand orice atribut A din K cu A’ obtinem un set de atribute K’, care nu mai sunt supercheie in relatia R.. Multimea cheilor unei relatii formeaza cheile candidat din care trebuie aleasa o cheie primara.
Cheia primara (PK – primary key) este o cheie aleasa de administratorul bazei de date pentru a identifica inregistrarile. Se alege o cheie cu un numar minim de atribute, daca este posibil chiar un singur atribut. Se recomanda ca PK sa aiba si un sens functional (Cods, CNP=cod numeric personal). In modelul bazei de date cheile primare se subliniaza. Se defineste ca atribut prim orice atribut care face parte din cheia primara.
Cheie externa (FK – foreign key) este un grup de atribute care este cheie primara intr-o alta relatie si serveste la realizarea unor legaturi intre inregistrarile celor doua relatii.
Definitie: Un set de atribute FK din relatia R1 este cheie externa in R1 daca satisface conditiile:
Atributele din FK au acelasi domeniu cu atributele cheii primare din relatia R2. Cheia FK refera relatia R2.
O valoare a lui FK intr-un n-uplet ti din R1 sa gaseasca o valoare a cheii PK pentru un anumit n-uplet tj din R2 sau FK este nul.
ti(FK) = tj(PK) pentru orice i = 1..n
O cheie externa poate referi chiar si propria relatie (cod_sef, cod_tata, cod_mama). La adaugarea inregistrarilor trebuie verificate valorile cheilor externe in relatia referita, pentru a asigura coerenta bazei de date ( integritatea referintei).
Operatiile algebrei relationale
Algebra relationala cuprinde o colectie de operatori, care sunt aplicati pe relatii intregi obtinand o Relatie rezultat. Relatiile rezultate pot fi supuse la noi operatii. Operatiile realizeaza:
Selectia n-upletilor dintr-o relatie pe baza unor conditii:
DISP FOR Bursa > 0 .AND. Cods = ‘AC4’ - in XBase
SELECT * FROM Stud WHERE Bursa > 0 AND Cods LIKE ‘AC4%’; - in SQL
Proiectia selecteaza numai anumite coloane dintr-o relatie:
LIST Nume, Adresa, Data_n - in XBase
SELECT Nume, Adresa, Data_n FROM Stud; - in SQL
JOIN (reuniune) combina n-upletii din doua relatii pentru a raspunde la intrebari in BD:
SELECT ST.Nume, ST.Adresa, NT.Nota FROM Stud ST, Note NT
WHERE ST.Cods = NT.CodS AND Bursa > 0;
Conditia ST.Bursa > 0 este o conditie de selectie care se aplica unei singure tabele, iar conditia ST.CodS = NT.CodS este o conditie de JOIN intre doua campuri care au acelasi domeniu si sunt din doua tabele diferite.
Operatiile din teoria multimilor se pot realiza intre 2 relatii UNION compatibile (care au acelasi numar de atribute si de acelasi tip)
UNION, INTERSECT, MINUS si PRODUS CARTEZIAN
Exemplu de selectie a studentilor de la facultatea AC, mai putin cei din anul 1 folosind 2 comenzi de SELECT se realizeaza prin operatia de MINUS intre cele 2 multimi de inregistrari selectate.
SELECT * FROM Stud WHERE Cods LIKE ‘AC%’ MINUS
SELECT * FROM Stud WHERE Cods LIKE ‘AC1%’;
Selectia se noteaza cu scond(R) si se aplica pe o singura relatie, verificand fiecare
N-uplet daca indeplineste conditia de selectie si il extrage in relatia rezultat. Gradul relatiei rezultate (numar de atribute) este acelasi cu cel al relatiei initiale R pe care se aplica. Numarul de n-upleti rezultati (cardinalitatea) este mai mic, cel mult egal cu cel al relatiei initiale R.
Operatia de selectie este comutativa privind ordinea de evaluare a conditiilor:
scond1( scond2(R)) = scond2( scond1(R)
Se pot combina in cascada conditiile intr-un singur SELECT cu operatorul de relatie AND.
scond1( scond2(( scondn(R))) = scond1 AND cond3 AND.condn(R)
Proiectia se noteaza cu lista_atribute(R) selecteaza numai anumite coloane dintr-o relatie eliminandu-le pe celelalte. Relatia rezultat va avea ca atribute pe cele din lista de proiectie din relatia R, in ordinea din lista. Gradul relatiei rezultat este gradul listei de atribute. Daca lista nu contine nici un atribut cheie este posibil sa obtinem n-upleti identici si se elimina duplicatii. Daca se utilizeaza atribute cheie numarul de elemente este acelasi cu cel din relatia initiala. Proiectia nu este comutativa.