Baze de Date CA Suport Pentru Sisteme de Tip ERP

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

Sunteți pe pagina 1din 48

BAZE DE DATE

BAZE DE DATE CA SUPORT PENTRU SISTEME DE TIP ERP


O multitudine din sistemele de baze de date de astzi sunt bazate pe modelul relaional
propus de E.F. Codd n 1970 cu intenia de a pune la dispoziie elementele necesare pentru a
asigura independena datelor. Un model relaional se bazeaz pe dou concepte (figura 1): relaie
i tabel, care difer prin natura lor dar care au o puternic legtur prin aceea c:
- noiunea de relaie este formal, formalitate dat de proveniena sa din teoria matematic a
mulimilor, care a permis definirea unei teorii suport a modelului;
- noiunea de tabel care este simpl i intuitiv, conform provenienei sale din activitile
curente, oferind o nelegere natural inclusiv utilizatorilor finali.
Prezena simultan a celor dou noiuni a contribuit la marele succes al modelului relaional.
1. Domeniu, atribut, valoare
Un sistem relaional este un sistem n care:
datele sunt percepute de utilizatori ca tabele;
operatorii utilizai pentru manipulare (de exemplu, regsire) sunt operatori care genereaz
noi tabele pornind de la cele existente.
Cea mai mic unitate de date manipulabil n modelul relaional este valoarea
individual, adic valoarea considerat atomic prin faptul c este nedecompozabil. O valoare
este considerat nedecompozabil dac nici unul din algoritmii care o prelucreaz nu utilizeaz
pri ale sale cu un neles anume. De exemplu dac avem valoarea 05051987 care este o dat
de natere (zi, lun, an) atunci aceast valoare este o dat atomic dac nu avem nevoie, pe
parcursul utilizrii sale, numai de unul din elementele care o compun (de exemplu an) ci o
utilizm ca atare, ca un tot.
Figura 1. Relaia ANGAJAT
1
BAZE DE DATE RELAIONALE. IMPLEMENTAREA CONCEPTELOR N SQL
Definiia relaiei, prin teoria matematic a mulimilor pe care se bazeaz, face apel la
dou concepte de baz: domeniu i atribut. Un domeniu (D
i
) este definit ca mulimea obiectelor
de acelai tip. Semnificaia domeniului este urmtoarea: dac dou sau mai multe atribute
primesc valori din acelai domeniu atunci sunt admise i au sens operaiile de comparare (i alte
operaii ca jonciune, proiecie etc.) ntre aceste atribute (despre atribute putem spune c sunt
semnatic comparabile). Un atribut (A
i
) reprezint o interpretare anume a obiectelor domeniului.
Deoarece fiecare definire de atribut (A
i
) trebuie s conin o referire la domeniul corespondent,
la definirea bazei de date este necesar specificarea (ca parte component a definirii bazei de
date) tuturor domeniilor identificate n faza de analiz a sistemului.
De exemplu, n figura 1 domeniile sunt MRCI, NUME, SEX, DATE, SALARII,
FUNCII, LOCURI_DE_MUNC. Aceste domenii pot fi considerate domenii specifice ale
relaiei. La aceste domenii avem asocierile de atribute evideniate n figur. Dintre aceste
asocieri putem distinge atributele NR#, i SO i EF care iau valori din acelai domeniu
MRCI. Denumirile diferite ale atributelor ne dau semnificaia valorilor din doemniul MRCI
astfel:
- NR#, este marca (sau codul numeric personal - CNP) unui ANGAJAT;
- SO, n cazul n care n tabel (relaie) sunt nregistrate i datele soului (soiei) va conine
marca acestuia (acesteia);
- EF, marca efului fiecrui angajat.
Domeniile identificate n figura 1 pot fi generalizate prin tipurile de mulimi
matematice din care i iau valori astfel:
- ntregi:MRCI, SALARII, LOCURI_DE_MUNC, EF;
- iruri de caractere: NUME, SEX, FUNCIE;
- Date calendaristice: DATE.
n acest context fiecare domeniu este o mulime infinit, mulime care nu poate fi
stocat n practic pe calculator care are resurse finite. Din aceste considerente domeniul de
Figura 2 Relaia DJDP (Direcii Judeene de Drumuri i Poduri)
2
SISTEME INFORMATICE FINANCIAR-CONTABILE
definiie a atributelor poate fi considerat o submulime a domeniilor generalizante din care fac
parte. Specificarea practic a domeniilor generalizante este efectuat n practic prin asocierea
unui tip de dat fiecrui atribut sau prin definirea subdomeniilor. Definirea practic a
domeniilor specifice este efectuat prin asocierea la fiecare atribut a unor restricii sau
constrngeri cum ar fi apartenena la un interval de valori, list de valori posibile, date
calendaristice minime etc.
n figura 2 domeniile sunt COD_UNITI, MNEMONICE_JUDEE,
DENUMIRI_UNITI, ADRESE, TELEFOANE. La aceste domenii avem asocierile de
atribute evideniate n figur. Dintre aceste asocieri putem distinge atributele JD i JUD care au
aceeai interpretare semantic dar iau valori din domenii diferite.
Domeniile diferite pe care sunt definite atributele introduc restricii de integritate
diferite, la definire i utilizare, astfel:
- JD este codul de identificare a unui JUDET i este cuprins n intervalul [01,47];
- JUD este codul mnemonic al judeului care poate lua valori numai dac este unul dintre
elementele listei: {AB, AR, AG, B, BR, BV, ..., VN}.
n figura 3 este prezentat tabelul (relaia) Jurnal_Curent care conine nregistrarea
rulajelor (parial) contabile aferente lunii 10 a anului 1999 i n care coloanele definite au
semnificaia:
- PozDoc: poziia nregistrrii n documentul justificativ;
- Nota: numrul notei contabile n care se consemneaz nregistrarea;
- NrDoc: numrul/felul documentului intern;
- Zi, Luna, An: data nregistrrii (prinderii) n contabilitate a operaiei;
- ContDB: simbolul contului care se debiteaz cu valoarea operaiei contabile;
- ContCR: simbolul contului care se crediteaz cu valoarea operaiei contabile;
- Valoare: valoarea (suma) nregistrat;
Autorii
Figura 3. Relaia Jurnal_Curent
3
Simboluri
Conturi
BAZE DE DATE RELAIONALE. IMPLEMENTAREA CONCEPTELOR N SQL
- Obs: explicaii privind operaia;
- Proveniena: proveniena rulajului (subsistemul din care provine);
- Datint: data operrii (introducerii) la calculator a operaiei;
- NrDocExt: numrul documentului atribuit de ctre emitent;
- TipDoc: felul/tipul documentului;
- DataDoc: data emiterii documentului de ctre emitent.
n acest tabel atributele (coloanele) ContDB i ContCR sunt definite n acelai
domeniu denumit "Simboluri Conturi" domeniu format din multitudinea simbolurilor de conturi
sintetice sau analitice ale unei ntreprinderi, simboluri care trebuie s se regseasc n "Planul de
Conturi" al acesteia. Combinaia ContDB-ContCR definete formula contabil a nregistrrii.
Aceste atribute reprezint o interpretare semantic a domeniului, dat de poziia lor n formula
contabil, astfel:
- ContDB reprezint simbolul contului care se debiteaz n cadrul operaiei contabile;
- ContCR reprezint simbolul contului care se crediteaz n cadrul operaiei contabile.
2. Relaie, tuplu
O relaie R pe domeniile D
1
,D
2
,...,D
n
(nu neaprat distincte) const dintr-un cap de tabel
i un corp de tabel. Capul relaiei (tabelului) const dintr-o mulime fix de atribute (coloane)
A
1
,A
2
,...,A
n
, astfel nct un atribut (o coloan) A
i
corespunde exact unui singur domeniu D
i
, cu
i=1,2,...,n. Fiecrei relaii i se atribuie o <denumire_de_relaie>.
Definiie:
Fiind dat un numr n 1 de domenii D
1
,D
2
,...,D
n
(nu neaprat distincte) o relaie R
definit pe aceste domenii este o submulime a produsului cartezian al acestor domenii, adic:
R D
1
xD
2
x...xD
n
sau
Asocierea denumirii de relaie cu denumirile atributelor componente se numete schema
relaiei (sau schem de definire) notat n mod uzual ca R(A
1
,A
2
,...,A
n
) sau dac X este
mulimea de atribute a lui R, adic X={A
1
,A
2
,...,A
n
}, atunci relaia poate fi notat ca R(X). Dac
t este un tuplu pe X i A este un atribut al su, A X, atunci prin notaia t[A] sau t.A vom
indica valoarea atributului A din tuplut t (A poate fi un singur atribut sau o mulime de atribute)
.
De exemplu, n figura 3, vom nota cu t
1
primul su tuplu, marcat n figur cu , i n
conformitate cu notaiile anterioare vom avea t
1
[PozDoc]=298, t
1
[ContCr]=707 etc. n cele ce
urmeaz prin notaiile de tipul R(X) vom desemna schema de relaie a relaiei R pe mulimea
atributelor X.
Pentru exemplul din figura 1 schema relaiei cu denumirea ANGAJAT este:
ANGAJAT(NR#, SO, NUME_PRENUME, SEX, DATA_NATERII, SALARIU,
FUNCIE, LOC_MUNC, EF),
n parantez fiind indicat intensia (capul) relaiei. Relaia ANGAJAT este definit pe
produsul cartezian al domeniilor
MRCIxMRCIxNUMExSEXxDATExSALARIIxFUNCIIxLOCURI_DE_MUNCxMRCI
sau, generaliznd, pe produsul cartezian
NTREGIxNTREGIxIR_DE_CARACTERExIR_DE_CARACTERExDATExNTREGIxIR_DE_CARACTEREx
DATExNTREGIxNTREGI.
4
i
n
i
D R
1

SISTEME INFORMATICE FINANCIAR-CONTABILE
Pentru exemplul din figura 2 schema relaiei cu denumirea DJDP este:
DJDP(DRDP, JD, JUD#, DJDP, ADRESA, TELEFON).
Pentru exemplul din figura 3 schema relaiei Jurnal_Curent este:
Jurnal_Curent(PozDoc, Nota, NrDoc, Zi, Luna, An, ContDB, ContCR, Valoare, Obs,
Proveniena, Datint, NrDocExt, TipDoc, DataDoc).
Pentru orice relaie trebuie s facem distincie ntre intensia relaiei i extensia relaiei
(sau instana relaiei) noiuni care vor fi detaliate n cele ce urmeaz. Schema relaiei reprezint
intensia relaiei i dac facem paralel cu limbajele procedurale este similar cu definiiile tip
de date.
De exemplu schema relaiei (tabelei) pentru "Planul de Conturi" poate fi definit ca
Plan_de_Conturi(Simbol, Descriere, Func), cu:
- Simbol: simbolul contului;
- Descriere: denumirea contului;
- Func: funcionalitea contului.
Pentru "Balana curent" schema poate fi definit ca Balanta(An, Luna, Simbol,
DbIan, CrIan, DbPrec, CrPrec, DbLuna, CrLuna) cu:
- An: anul balanei;
- Luna: luna balanei;
- Simbol: simbolul contului;
- DbIan: sold debitor la nceput de an fiscal (Ianuarie);
- CrIan: sold creditor la nceput de an fiscal (Ianuarie);
- DbPrec: sume debitoare precedente (sume debitoare cumulate ale perioadelor precedente
adic ntre Ianuarie din anul An i luna curent Luna);
- CrPrec: sume creditoare precedente (sume creditoare cumulate ale perioadelor precedente
adic ntre Ianuarie din anul An i luna curent Luna);
- DbLuna: sume debitoare n luna balanei;
- CrLuna: sume creditoare n luna balanei.
Corpul relaiei (tabelei) const dintr-o mulime de tupluri (rnduri, nregistrri, linii) variabil
n timp (se pot aduga noi rnduri, se elimin sau modific cele existente). O instan a
relaiei (sau simplu o relaie) pe schema R(X) este o mulime r de tupluri pe X. Prin notaia
r(X) sau r vom desemna o instan a relaiei R pe mulimea de atribute X (mulimea tuplurilor
pe X la un moment dat). De exemplu pentru "Balana Curent" putem s adugm conturi noi
analitice (este posibil de fapt adugarea oricrui tip de cont) sau putem s eliminm n orice
moment acele conturi care au sumele 0 (zero) timp de doi ani la rnd. n timp ce schema
relaiei reprezint structura logic a acesteia instana relaiei (sau extensia sa) const din datele
stocate la un moment dat n tabel (relaie).
Rndurile (tuplurile) constau dintr-o mulime de perechi de tipul
(denumire_atribut:valoare), adic o mulime de forma {(A
i
:V
i
), i=1,2,...,n}. Pentru fiecare
atribut (coloan) A
i
din schema relaiei (capul de tabel) exist o astfel de pereche. Pentru fiecare
pereche (A
i
:V
i
) aflat n mulime, V
i
este o valoare din domeniul unic D
i
asociat cu atributul A
i
.
Altfel spus, un rnd (tuplu) t<v
1
,v
2
,...,v
n
> aparine relaiei r dac i numai dac v
1
DOM.A
1
,
v
2
DOM.A
2
,...,v
n
DOM.A
n
, unde prin DOM.A
i
am notat domeniul la care este asociat
atributul A
i
(deoarece domeniile nu sunt obligatoriu distincte aceast notaie este mai sugestiv).
Autorii
5
BAZE DE DATE RELAIONALE. IMPLEMENTAREA CONCEPTELOR N SQL
Deoarece relaia r este o mulime de tupluri vom utiliza notaia matematic tr pentru a
specifica faptul c tuplul t este din relaia r.
De exemplu, tuplul marcat n figura 2 este <03,03,AG,ARGE,PITETI,734327> i
ndeplinete condiia de apartenen a valorilor la domeniile de definire:
03DOM.DRDP (CODURI_JUDEE),
03DOM.JD (CODURI_JUDEE),
AGDOM.JUD (MNEMONICE_JUDEE), etc.
Numrul de atribute al unei relaii se numete gradul relaiei. De exemplu relaia
ANGAJAT din figura 1 are gradul 9, relaia DJDP din figura 2 are gradul 6 iar relaia
Jurnal_Curent are, conform schemei sale de relaie, gradul 15.
Numrul de rnduri (tupluri) al relaiei se numete cardinalitatea relaiei.
Cardinalitatea unei relaii r va fi desemnat prin |r|. De exemplu relaia ANGAJAT din figura 1
are cardinalitatea 7 n timp ce relaia Jurnal_Curent din figura 3 are cardinalitatea 19 (vezi
indicaia Records).
Corpul relaiei (tabelului) reprezint extensia relaiei.
Prin aceste definiii am furnizat cadrul formal al noiunilor de relaie, tuplu i atribut,
utilizate n modelul relaional.
Utilizatorii, datorit diversitii lor, percep i folosesc aceste noiuni n urmtoarele
accepiuni informale (exceptnd, eventual, utilizatorii speciali ca administratorul bazei de date -
ABD - i programatorii de sistem): relaia este un tabel, tuplul este o nregistrare sau un rnd al
tabelului, iar atributul este un cmp din nregistrare sau o coloan a tabelului. n principiu,
gradul relaiei este o mrime constant (adugarea de noi atribute la o schem de relaie se
execut foarte rar) pe cnd cardinalitatea este o mrime variabil n timp.
Deoarece corpul tabelului (relaiei) este o mulime relaia (tabelul) are urmtoarele
proprieti invariante n timp:
1. Nu sunt admise rnduri (tupluri) duplicate (identice);
2. Rndurile sunt neordonate;
3. Coloanele (atributele) sunt neordonate;
4. Toate valorile atributelor sunt atomice.
Aceste proprieti pot fi interpretate, n cadrul sistemului finaciar-contabil, astfel:
1. n "Balana de Verificare" sau "Planul de Conturi" nu trebuie s avem dou conturi cu
acelai simbol; n "Jurnal" nu trebuie s nregistrm de dou (sau mai multe) ori operaiile
(rulajele) aceluiai document;
2. Adugarea de noi conturi n "Planul de Conturi" sau n "Balana de Verificare" nu necesit
reorganizarea acesteia dei conturile trebuie s apar n liste n ordinea cresctoare a valorii
simbolurilor lor. Acestea vor fi adugate la sfritul tabelului iar la listare vor fi aranjate,
prin posibilitatea de reordonare pus la dispoziie de limbajul de manipulare, conform
cerinelor utilizatorului. Similar orice nregistrare n jurnal va fi efectuat n ordinea operrii
sale la calculator. Aceast proprietate ne asigur c nu putem s realizm intercalri sau
inserri permind astfel respectarea interdiciei prevzute de legea contabilitii;
6
SISTEME INFORMATICE FINANCIAR-CONTABILE
3. Coloanele din tabel pot fi aranjate conform oricror necesiti tehnice iar la interogarea
(consultarea) bazei de date acestea pot fi aranjate conform specificaiilor din lege sau ale
utilizatorului;
4. De exemplu data nregistrrii n contabilitate a rulajului este dat sub forma Zi, Luna, An
ceea ce ne permite efectuarea direct de listri aferente unei zi anume lucru cerut n mod
expres pentru "Registrul de Cas" i "Jurnal de Banc" prin legislaie.
Descrierea n SQL a intensiei relaiilor este realizat prin intermediul comenzii
CREATE TABLE a limbajului de definire. De exemplu crearea tabelei Plan_de_Conturi poate
fi exprimat n SQL astfel:
CREATE TABLE Plan_de_Conturi (Simbol TEXT(22) NOT NULL, Descriere
TEXT(60), Func TEXT(1))
3. Relaii i baza de date
Relaiile pot fi utilizate pentru a organiza datele relevante ale unei aplicaii. n general
nu este suficient o singur relaie pentru a realiza acest lucru ci o mulime de relaii ale cror
tupluri (rnduri) conin valori comune necesare stabilirii corespondenei ntre acestea, mulime
care formeaz o baz de date (figura 4). Schema bazei de date B const dintr-o mulime de
scheme de relaii cu diverse denumiri, adic B={R
1
(X
1
), R
2
(X
2
),,R
n
(X
n
)}. O instan a bazei
de date (sau baza de date database) pe schema B={R
1
(X
1
), R
2
(X
2
),,R
n
(X
n
)} este mulimea
extensiilor relaiilor b={r
1
,r
2
,,r
n
} unde fiecare r
i
, cu 1in, este o relaie pe schema
corespondent R
i
(X
i
). Conceptul de schem a bazei de date se refer la proiectul logic al bazei
de date n timp ce conceptul de instan a bazei de date se refer la datele din baza de date la un
moment dat.
Autorii
Figura 4. Exemplu de instan a bazei de date
7
BAZE DE DATE RELAIONALE. IMPLEMENTAREA CONCEPTELOR N SQL
Schema bazei de date, pe care o vom denumi SALARII, corespunztoare instanei din
figura 4 este SALARII(ANGAJAT(CNP, Sot, Nume, Prenume, Sex, Profesia, Data naterii,
Funcie, Telefon, ef, Salariu), PROFESII(Cod Profesie, Profesie), FUNCII(Cod Funcie,
Funcie)). Caracteristica esenial a unei baze de date relaionale este reprezentat de faptul c
referirile, adic coloanele comune care apar n mai multe tabele, dintre diversele relaii (tabele)
sunt reprezentate prin semnificaia valorilor din domeniu care apar n tuplu (rnd). De exemplu,
n relaia ANGAJAT valoarea atributului So din rndul trei a angajatei Ionescu Maria este
egal cu valoarea CNP a angajatului Ionescu Claudiu iar a acestuia cu cea a angajatei Ionescu
Maria definind astfel relaia de cstorie dintre cei doi angajai. Similar coloanele Funcie i
Profesia din tabela ANGAJAT iau valori din coloana Cod Funcie a tabelei Funcii, respectiv
coloana Cod Profesie a tabelei Profesii.
Structura modelului relaional se dovedete, prin prisma celor prezentate anterior, foarte
simpl i puternic. n acelai timp acesta impune un anumit grad de rigiditate: informaia
trebuie reprezentat prin tupluri de date adic ni se impune, n fiecare relaie, s reprezentm
numai tupluri care corespund schemei sale. Dac analizm relaia ANGAJAT din figura 4 aici
avem un atribut SO ale crui valori sunt luate din domeniul CNP i reprezint faptul c un
angajat este cstorit cu un alt angajat. Dar, pe de o parte nu toi angajaii sunt cstorii iar, pe
de alt parte chiar dac sunt cstorii nu este obligatoriu s avem toate cuplurile printre angajai
ceea ce ne duce la ideea c acest informaie nu este disponibil pentru toi angajaii. Domeniul
CNP din care ia valori atributul SO conine numai coduri numerice peronale, deci valori
concrete.
Pentru a putea reprezenta informaiile indisponibile conceptul de relaie a fost extins
pentru a include posibilitatea ca un tuplu s accepte pentru fiecare atribut fie o valoare dintr-un
domeniu fie o valoare special denumit valoare nul (null value). Valoarea nul (nu zero)
specific absena informaiei i reprezint o valoare adiional oricrui domeniu (nu este inclus
printre valorile domeniului) i este simbolizat cu NULL (sau cu Null) n cele ce urmeaz.
Pentru tratarea valorilor Null tabelele de adevr ale funciilor logice de baz i (And), Sau (Or)
i Nu (Not) sunt prezentate n tabela 1.
Tabela 1. Tabelele de adevr ale funciilor logice cu tratarea valorii Null
Not And A N F Or A N F
F A A A N F A A A A
A N N N N F N N N F
N F F F F F F F F F
Unde:
A Adevrat (True);
F Fals (False);
N Nul (cu sensul de Null, indisponibil - Unavailable, nedefinit Undefined).
Pe baza acestor tabele de adevr au fost definite dou noi forme de condiii atomice care
verific dac valoarea specificat este Null astfel:
- A Is Null este evaluat la Adevrat pe un tuplu t dac valoarea lui t pe atributul A este Null
(adic t[A]=Null) i la Fals n caz contrar;
- A Is Not Null este evaluat la Adevrat pe un tuplu t dac valoarea lui t pe atributul A
provine din domeniul lui A (adic t[A]Dom.A) i la Fals dac valoarea este Null.
4. Restricii de integritate
8
SISTEME INFORMATICE FINANCIAR-CONTABILE
Restriciile (constrngerile) de integritate reprezint proprieti care trebuie s fie
satisfcute de ctre toate instanele corecte ale bazei de date. O constrgere trebuie perceput ca
un predicat care are are valoarea Adevrat sau Fals pentru fiecare instan. Ele sunt definite n
general sub form de expresii logice (simple sau complexe) dar nu sunt excluse nici definirile
care implic calcule complexe exprimate pe mai multe coloane. n general unei scheme de baz
de date i se asociaz o colecie de constrngeri iar instanele bazei de date care le satisfac sunt
considerate corecte. n funcie de elementele bazei de date crora li se asociaz constrngerile
pot fi clasificate n:
- constrngeri intra-relaie dac respectarea lor implic numai o relaie (tabel) a bazei de
date. Acest gen de constrngeri pot fi clasificate astfel:
restricii la nivel de tuplu care sunt evaluate independent pentru fiecare tuplu i
sunt definite pe valorile fiecrui tuplu independent de altele;
restricii asociate valorilor sau restricii de domeniu date pentru a impune
restricii pe domeniul atributului;
restricii la nivel de tabel care se aplic pe valori care apare n mai multe tupluri
ale relaiei;
- constrngeri inter-relaie dac acestea implic mai mult de o relaie.
5. Chei
Deoarece corpul unei relaii este o mulime, iar prin definiie mulimile nu conin
elemente duplicate (linii sau coloane dublate), rezult faptul c nu avem, la orice moment, dou
sau mai multe rnduri (tupluri) identice. Acest lucru ne permite s tragem concluzia c exist un
atribut sau o combinaie de atribute ale crui (cror) valori identific n mod unic rndurile
(tuplurile). Aceast proprietate trebuie ndeplinit cel puin de combinaia atributelor care
compun ntreg rndul (tuplul). Evident nu este exclus nici posibilitatea existenei mai multor
atribute sau combinaii de atribute care s realizeze identificarea unic a fiecrui rnd (tuplu).
Fie R(X) o schem de relaie. Dac despre submulimea K de atribute din R(X) spunem c este
supercheie (superkey) pentru R(X) atunci definim de fapt o restricie pentru orice instan a sa
r(X) prin care specificm faptul c nu trebuie s existe dou tupluri distincte din r care s aib
aceeai valoare pe toate atributele din K, adic dac t
1
i t
2
sunt tupluri din r i t
1
t
2
atunci
t
1
[K] t
2
[K].
Definiie:
Dac r este o relaie cu atributele A
1
,A
2
,...,A
n
atunci mulimea de atribute
C=(A
i
,A
k
,...,A
m
) este candidat la cheie (candidate key) a lui R dac i numai dac satisface
urmtoarele dou proprieti independente de timp:
a). Unicitate care precizeaz c nu exist, n orice moment, dou rnduri (tupluri)
distincte din r care s aib aceeai valoare pentru C;
b). Minimalitate care precizeaz c nu putem elimina nici unul din atributele
A
i
,A
k
,...,A
m
ale lui C fr a pierde proprietatea de unicitate.
Not !. Indicii i,k,,m sunt definii n intervalul [1,n] iar prin acest succesiune se sugereaz
faptul c atributele care particip la formarea cheii pot fi plasate n orice poziie n schema de
relaie, ordinea lor i,k,,m fiind cea care asigur ordinea de parcurgere a lor.
Autorii
9
BAZE DE DATE RELAIONALE. IMPLEMENTAREA CONCEPTELOR N SQL
O definiie alternativ a conceptului de cheie folosete noiunea de supercheie:
- o mulime de atribute K=(A
i
,A
k
,...,A
m
) este supercheie pentru o relaie r dac r nu poate
conine dou tupluri t
1
i t
2
pentru care t
1
[C]=t
2
[C];
- o mulime de atribute K=(A
i
,A
k
,...,A
m
) ale unei relaii r este o cheie pentru pentru r dac
este o supercheie minimal (adic dac nu exist o alt supercheie K' a lui r care este
coninut ca submulime n K).
Cu aceast definiie putem concluziona c fiecare relaie are cel puin un candidat la
cheie deoarece cel puin combinaia tuturor atributelor rndului (tuplului) are proprietatea de
unicitate.
Pentru exemplul din figura 1 avem dou chei candidat NR# (care reprezint marca
angajatului) i cheia format din combinarea atributelor (NUME_PRENUME, SEX,
DATA_NATERII).
Pentru exemplul din figura 2 avem trei chei candidat DRDP, JD i JUD.
Pentru exemplul din figura 3 avem cheia candidat format din combinaia de atribute:
(PozDoc, Nota, NrDoc, Zi, Luna, An, ContDB, ContCR, NrDocExt, TipDoc, DataDoc).
Pentru fiecare relaie un candidat la cheie va fi desemnat pentru a fi cheia primar
(primary key). Pentru modelul relaional cheia primar este un element extrem de important
deoarece reprezint modul de adresare la nivel de rnd (tuplu).
innd cont de faptul c n general o cheie joac un rol extrem de important n sistemul
relaional ca model bazat pe date (valori) i de faptul c SGBD-urile comercializate cer
imperativ specificarea cheii primare pe care construiesc, pentru un acces rapid la date, structuri
auxiliare, denumite indeci, este necesar s se decid ce atribute vor forma cheia. Decizia
alegerii unuia sau altuia trebuie s in cont de urmtoarele criterii:
- atributele care pot avea valori nule nu pot face parte din cheie deoarece ele nu garantez
accesul la toate realizrile entitii corespondente;
- unul sau ct mai puine atribute este (sunt) preferabil(e) mai multor atribute (minimalitate)
deoarece ne asigur c indecii vor fi de dimensiune limitat i vor necesita mai puin spaiu
de memorie extern la crearea legturilor logice dintre diversele relaii (entiti) iar
operaiile de jonciune vor fi facilitate;
- din aceleai considerente un identificator intern cu mai puine atribute este preferabil unuia
extern care poate implica mai multe entiti;
- un identificator utilizat de mai multe operaii pentru accesarea realizrilor unei entiti este
preferabil altora deoarece n acest mod cererile bazate pe acetia vor putea fi efectuate
eficient i datorit faptului c SGBD construiete n mod automat indeci pe acesta.
Pentru exemplul din figura 1 atributul NR# (marca) a fost desemnat pentru a fi cheie
primar iar pentru cel din figura 2 JUD# (indicativ judet). Pentru exemplul din figura 3
singurul su candidat la cheie va fi desemnat drept cheie primar. n cazul n care aceasta nu
convine se poate introduce o coloan suplimentar de tip autoincrementabil (COUNTER,
AUTONUMBER) care poate forma cheia primar numai dac capacitatea sa de reprezentare
(de regul este implementat de SGBD-uri la capacitatea de 2
31
-1) este acoperitoare pentru
necesarul de rulaje ale unei luni.
10
SISTEME INFORMATICE FINANCIAR-CONTABILE
Pentru Balana i Plan_de_Conturi candidatul la cheie este reprezentat de atributul
Simbol i cheia primar devine acest atribut, care ndeplinete restriciile de unicitate i
minimalitate. Restricia de unicitate a simbolului de cont este definit expres de Legea
Contabilitii numrul 82/1991. De exemplu la crearea tabelei Plan_de_Conturi declaraia de
cheie primar se poate exprima n SQL astfel:
CREATE TABLE Plan_de_Conturi (Simbol TEXT(22) CONSTRAINT
cheie_plan_conturi PRIMARY KEY, Descriere TEXT(60), Functionalitate TEXT(1))
O baz de date relaional poate fi definit, n intensie, printr-o schem relaional care
const din una sau mai multe scheme de relaie. n extensie, baza de date relaional este
perceptibil ca o colecie de tabele, fiecare tabel fiind compus din rnduri (denumite i linii
sau nregistrri) i coloane (denumite i atribute sau cmpuri) conform modului ilustrat n
figura 1, 2 i 3. n aceste condiii schema relaional nu reflect, explicit, toate asocierile ntre
relaiile din baza de date. Anumite tipuri de asocieri sunt coninute numai implicit prin
propagarea cheii de la o schem de relaie la alta.
Pentru materializarea asocierilor dintre schemele de realie se utilizeaz noiunea de
cheie extern (foreign key), definit ca un atribut (cmp) sau combinaie de atribute (cmpuri)
dintr-o relaie (tabel) ale crei (cror) valori sunt definite pe aceleai domenii cu cele ale cheii
primare din alt tabel (sau acelai tabel). De exemplu, n figura 1 avem cheile externe SO i
EF, care i iau valori din domeniile MRCI din care ia valori cheia primar NR
Tabela Jurnal_Curent (figura 3) conine dou chei externe ContDB i ContCR
ambele putnd lua valori din domeniul format din valorile coloanei Simbol din tabela Balana.
Acest proprietate a simbolului de cont debitor (ContDB) i a celui de cont creditor (ContCR)
este dat de modul de definire a formulelor contabile: o formul simpl debiteaz un cont i
crediteaz, n acelai timp, un alt cont ambele conturi trebuind s existe n balana curent a
ntreprinderii (i de altfel n Planul su de conturi).
Pentru a face distincie ntre relaiile stocate n baza de date i cele obinute prin
aplicarea operatorilor relaionali primele tipuri de relaii se numesc relaii de baz iar cel de-al
doilea relaii derivate. De exemplu, pentru sistemul financiar-contabil tabelele Plan_de Conturi,
Balana i Jurnal_Curent reprezint tabele de baz n timp ce o tabel cu rulajele unei note
contabile anume, cum ar fi nota Casa, extras din Jurnal_Curent, reprezint o tabel derivat
utilizat temporar.
Definiie:
Fie R o realie de baz cu cheia primar C=(A
1
,A
2
,...,A
n
), n>0. Fie S o relaie de baz
(R i S nu neaprat distincte) i fie B
1
,B
2
,...,B
n
atribute din S care satisfac restriciile de
independen de timp. Pentru orice nregistrare s a lui S n care este ndeplinit una din
condiiile:
- s.B
1
,s.B
2
,...,s.B
n
sunt toate nule;
- exist o nregistrare r a lui R astfel nct r.A
1
=s.B
1
,r.A
2
=s.B
2
,...,r.A
n
=s.B
n
;
combinaia (B
1
,B
2
,...,B
n
) este o cheie extern (foreign key) n S care este identic cu cheia
primar (A
1
,A
2
,...,A
n
) din R.
Autorii
11
BAZE DE DATE RELAIONALE. IMPLEMENTAREA CONCEPTELOR N SQL
Not !. Prin construciile de forma r.A
i
am desemnat valoarea atributului A
i
din relaia
r.
De exemplu declararea asocierii unui cont din Balana curent cu contul din
Plan_de_Conturi poate fi realizat astfel:
CREATE TABLE Balanta(An SHORT, Luna BYTE, Simbol TEXT (22) CONSTRAINT
este_contul REFERENCES Plan_de_Conturi (Simbol), DbIan DOUBLE, CrIan
DOUBLE, DbPrec DOUBLE, CrPrec DOUBLE, DbLuna DOUBLE, CrLuna DOUBLE)
6. Restricii de integritate
Fiecare cheie primar i cheie extern din relaiile (tabelele) bazei de date trebuie s
satisfac urmtoarele restricii de integritate [DATE87]:
1). integritatea entitii (entity integrity);
Nici-un atribut care particip la formarea cheii primare a unei relaii de baz nu poate
primi valori nule
*)
;
2). integritatea referenial (referential integrity) [DATE81]:
Dac o relaie r
2
include o cheie extern C
e
pe cheia primar C
p
a relaiei r
1
(r
1
i r
2
nu neaprat distincte) atunci fiecare valoare a cheii C
e
din r
2
trebuie s fie egal
cu valoarea lui C
p
dintr-un tuplu al lui r
1
sau s fie nul. n acest context relaia r
2
este
o relaie care refer (fiu sau membru-"member"), iar relaia r
1
este o relaie referit
(tat sau posesor-"owner").
*)
Not!. Termenul nul, conform celor expuse n paragrafele anterioare, nu definete
valoarea zero (0) ci o valoare special considerat de sistem Null (cum ar fi zero binar).
Declaraia restriciilor de integritate, n SQL, este efectuat prin asocierea la definiia de
coloan a clauzei NOT NULL sau prin asocierea unor clauze CONSTRAINT fie la nivel de
coloan fie la nivel de tabel (pentru coloane multiple). Conform celor expuse n 4
constrngerile (restriciile) pot fi clasificate intra-relaie sau inter-relaii.
Restricii intra-relaie. Cele mai simple restricii intra-relaie sunt declaraiile de nenul (Not
Null), de unicitate (unique) i cheie primar (primary key). Acestea nu exclud prezena
restriciilor declarate cu clauze CONSTRAINT care sunt generale. Prezentarea lor este efectuat
aici deoarece ele au o semnificaie aparte:
- Not Null indic faptul c nu sunt admise valori nule n coloana creia i este asociat sau,
altfel spus, trebuie s specificm ntotdeauna o valoare pentru atribut;
- Unique este o restricie aplicat unui atribut (sau unei mulimi de atribue) prin care se
impune cerina c atributul (sau mulimea de) este (super)cheie. Prin aceast declaraie sunt
admise valori nule (dac nu se specific i Not Null) fr a viola restricia deoarece fiecare
valoare nul reprezint o valoare necunoscut dintr-un tuplu anume i este tratat ca i cum
ar diferi de celelalte valori nule;
- Primary key este extrem de important deorece prin ea se specific cheia primar. Aceast
restricie poate fi specificat o singur dat pentru o tabel. Nici-unul din atributele cheii
primare nu poate primi valori nule (conform restriciei integritatea entitii) i putem
considera c exist o declaraie implicit Not Null pe atributele care particip la formarea sa.
12
SISTEME INFORMATICE FINANCIAR-CONTABILE
De exemplu, dac ne referim la tabela Jurnal a crei cheie primar este format din
urmtoarea combinaie de atribute (PozDoc, Nota, NrDoc, Zi, Luna, An, ContDB,
ContCR, NrDocExt, TipDoc, DataDoc) atunci crearea tabelei Jurnal ar trebui s arate
astfel:
CREATE TABLE Jurnal(PozDoc COUNTER, Nota SHORT NOT NULL, NrDoc
TEXT(16) NOT NULL, Zi BYTE NOT NULL, Luna BYTE NOT NULL, An SHORT
NOT NULL, ContDB TEXT(22) NOT NULL, ContCR TEXT(22) NOT NULL, Valoare
DOUBLE, Obs TEXT(60), Proveniena TEXT(6), Datint DATETIME, NrDocExt
TEXT(16) NOT NULL, TipDoc TEXT(16) NOT NULL, DataDoc DATETIME NOT
NULL
CONSTRAINT cheie_jurnal Primary Key (PozDoc, Nota, NrDoc, Zi, Luna, An,
ContDB, ContCR, NrDocExt, TipDoc, DataDoc))
Restricii inter-relaii. Cele mai importante restricii inter-relaii sunt restriciile integritii
refereniale. O restricie referenial este asociat cheii externe prin care se realizeaz legturi
ntre valorile atributelor unei tabele i valorile atributelor unei alte tabele (cele dou tabele nu
trebuie s fie neaprat distincte). n conformitate cu acest restricie tabelele implicate n
asociere pot fi ncadrate n dou categorii, interne i externe, iar restricia specific faptul c
pentru orice rnd din tabela intern valoarea unui atribut (diferit de nul) din cheia extern
trebuie s se regsesc printre valorile atributului din rndurile care se afl n tabela extern.
Singura cerin pentru atributul din tabela intern este aceea de a avea minim o declaraie de
unicitate. Legtura n sine este specificat, n SQL, prin declaraii foreign key i references care
vor fi tratate n extenso n capitolul dedicat limbajului SQL.
Justificarea primei reguli de integritate este urmtoarea:
- relaiile (tabelele) corespund entitilor din lumea real;
- entitile din lumea real sunt distincte (ele sunt identificate n mod unic ntr-un
anume fel);
- cheia primar realizeaz funcia de identificare unic n cadrul modelului
relaional;
- pentru a-i realiza funcia cheia primar nu poate avea valoare nul.
n ceea ce privete cea de a doua regul de integritate justificarea este urmtoarea:
- dac un tuplu t
2
refer un tuplu t
1
, atunci tuplul t
1
trebuie s existe (de exemplu,
dac un rulaj refer conturi din balan atunci aceste conturi trebuie s existe);
- dac valoarea unei chei externe nu este nul atunci ea trebuie s se regseasc
printre valorile cheii primare din tabela referit.
7. Baz de date relaional o descriere formal
Formal un sistem relaional este compus din:
- o baz de date relaional;
- o colecie de operatori relaionali;
- dou reguli de integritate;
- o mulime (set) de asocieri.
Autorii
13
BAZE DE DATE RELAIONALE. IMPLEMENTAREA CONCEPTELOR N SQL
Definiie:
O baz de date relaional const dintr-o mulime de domenii i o mulime de relaii
peste care se aplic o mulime de asocieri.
Utiliznd notaia BNF putem descrie formal baza de date relaional astfel:
(1) <baz de date relaional>::=
<mulime de asocieri> (<mulime de domenii>, <mulime de relaii>)
(2) <mulime de asocieri>::=<asociere>|<asociere> <mulime de asocieri>
(3) <asocieri>::= <asociere atribute>|<asociere relaii>
(4) <asociere atribute> ::= <relaie>
Fiecare relaie, din mulimea de relaii, este un rezultat al asocierii atributelor la atributul
(sau grupul de atribute) desemnat cheie primar a relaiei. De fapt, atributele care nu particip la
formarea cheii primare, referite ca atribute noncheie, nu reprezint altceva dect caracterizani
ai cheii primare.
Prin asocierile dintre relaii (<asociere relaii>) se pun n eviden legturile de
interdependen/intercondiionare a fenomenelor sau obiectelor modelate.
Definiie:
O asociere ntre dou relaii r i s (nu neaprat distincte) se definete ntr-o direcie dat
(de la ...| la...) i ofer un mecanism de acces prin care pornind de la o realizare (un tuplu) t al
lui r avem acces la realizrile (tuplurile) t
1
, t
2
, ..., t
n
ale lui s care i sunt asociate. Deci asocierea
este o realie binar ntre dou mulimi (relaii) r i s, nu neaprat distincte.
Vom nota asocierea, sub form funcional, prin s
G
F
r n care F i G sunt funcii, n
general multivaloare i inverse una alteia. Asocierea este caraterizat de tipul fiecrei funcii.
Asocierea poate fi, n funcie de:
1) rezultatul evalurii:
- monovaloare: dac evaluarea sa produce o singur valoare;
- multivaloare: dac evaluarea sa produce o mulime de valori.
Pentru aceste funcii un element caracterizant important este reprezentat de
cardinalitatea minimal i maximal (numrul minim i respectiv maxim de valori produse).
2) completitudinea asocierii:
- parial: dac exist elemente (tupluri) n mulimea de plecare care nu au o
imagine n mulimea destinaie;
- total: dac toate elementele (tuplurile) mulimii de plecare au o imagine n
mulimea destinaie.
La o baz de date relaional [AVRAM93] local asocierile, n funcie de modul
perceperii lor, pot fi de tipul :
1. implicite, n cazul asocierilor binare ale atributelor la entitatea/relaia creia ii descrie
proprietile;
14
SISTEME INFORMATICE FINANCIAR-CONTABILE
2. explicite, n cazul n definirii relaiilor de asociere (ca relaii independente sau ca relaii
normale) prin mecanismul <cheie extern> - <cheie primar>;
3. transparente/virtuale, n cazul n care realizarea unei asocieri este determinat la
"moment" i n general urmeaz unui proces de transformare a datelor. Dup realizarea
asocierii i efectuarea operaiilor care o solicit, asocierea nu va avea materializare n baza
de date. Realizarea asocierii, la alt moment de timp dar cu pstrarea condiiilor iniiale,
presupune parcurgerea acelorai transformri ale datelor. Acest gen de asocieri au un
caracter dinamic imperativ ceea ce face ca ele s nu poat fi consemnate ca valori ale unor
atribute de tip <cheie extern>. Acest lucru nu nseamn c asocierile de tip <cheie
extern> nu au un dinamism propriu. Diferena const n faptul c asocierile de tip <cheie
extern> au un caracter relativ stabil, iar materializarea este realizat prin existena unei
valori pentru un atribut sau combinaie de atribute care definete <cheie extern>. Aceste
asocieri sunt materializabile numai prin tipul de legtur 1-1 sau 0-1.
Primele dou tipuri de asociere sunt materializate n relaii (asocieri reale) care pot fi de
oricare din tipurile identificate i pot avea existen real sau virtual.
Referitor la asocierile enunate se pot formula urmtorele observaii pentru cazul
organizrii datelor n baze de date distribuite:
- toate tipurile de asocieri ale unei baze de date locale pot
fi identificate i n baza de date global i deci implicit
pot face obiectul descompunerii;
- asocierile de tip virtual pot fi realizate la distan iar
descompunerea se refer la faptul c decompozabile sunt
numai relaiile ntre care apar;
- asocierile explicite care au asociat un index (o cale de
acces definit pe cheia extern i o modalitate de
specificare a restriciilor de integritate) impun restricia
ca acest index sa fie descompus
orizontal n raport cu cheia extern
(nu este admis descompunerea
vertical a cheii externe formate
din combinaie de atribute).
Indexul definit reprezint calea
prin care o cheie extern
multiatribut este vzut ca un
ntreg.
Specificnd la fiecare funcie F i G cardinalitatea maximal (n) (notat cu F(n),
respectiv G(n) vom avea urmtoarele tipuri de asocieri [TSICHRITZIS]:
- "unu_la_unu" (1-1): aceast asociere (one_to_one) se reprezint grafic (Bachman) ca n
figura 5. O asociere de tip 1-1 poate fi vzut i ca 0-1. De exemplu, dac ne referim la
asocierea dintre relaiile Plan_de_Conturi i Balana care este de tip 1-1 atunci putem avea
conturi n relaia Plan_de_Conturi care nu se regsesc n Balana. De exemplu, dac
presupunem c avem un client care nu mai desfoar timp de doi ani activitate cu noi iar
soldurile aferente analiticului alocat lui sunt 0 putem s-l eliminm din Balana dar s-l pstrm
n Plan_de_Conturi. Sau un alt exemplu, Plan_de_Conturi conine "Planul de Conturi General"
Autorii
Figura 6. Asociere de tip 1-1
Figura 5. Asociere 1-1
15
1 (0)
1
Plan_de_Conturi
Balana
are_soldurile
este_contul
BAZE DE DATE RELAIONALE. IMPLEMENTAREA CONCEPTELOR N SQL
n care se regsesc i conturi privind mprumuturile
de la bnci iar firma nu face nici-un mprumut i
deci ele nu apar n Balana.
Reprezentarea acestei asocieri dintre
Plan_de_Conturi i Balana este ilustrat n figura
6.
n tabela Plan_de_Conturi este definit
cheia primar Simbol prin declaraia Simbol
TEXT(22) CONSTRAINT cheie_plan_conturi
PRIMARY KEY iar n balan coloana Simbol este declarat cheie extern care refer cheia
primar din Plan_de_Conturi cu declaraia Simbol TEXT (22) CONSTRAINT este_contul
REFERENCES Plan_de_Conturi (Simbol).
- "unu_la_mai_muli" (1-n): aceast asociere (one_to_many) se reprezint grafic (Bachman) ca
n figura 7. O asociere de tip 1-n poate fi vzut i ca 0-n. De exemplu, dac ne referim la
asocierea dintre relaiile Balana i Jurnal vom avea dou asocieri de tip 1-n (figura 8) dat de
faptul c un cont din balan este debitat de una sau mai multe nregistrri din jurnal i creditat
de una sau mai multe nregistrri.
Un
cont din
balana
curent, de
exemplu al
unui client
care n luna
respectiv
nu
realizeaz
afaceri cu
firma, poate s nu aib rulaje asociate n jurnal.
Schimbnd ordinea de plecare (de la S la R, figura 7 ) asocierea poate fi privit i
interpretat ca "mai_muli_la_unu" (many_to_one).
n tabela Balanta este definit cheia primar Simbol prin declaraia Simbol TEXT(22)
CONSTRAINT cheie_balanta PRIMARY KEY iar n Jurnal coloana ContDb este declarat
cheie extern care refer cheia primar din Balanta cu declaraia ContDb TEXT (22)
CONSTRAINT debiteaza_pe REFERENCES Balanta (Simbol) iar coloana ContCr este
declarat cheie extern prin ContCr TEXT (22) CONSTRAINT crediteaza_pe
REFERENCES Balanta (Simbol).
Notatia "1" din asocierile descrise poate desemna "0" ("nici-un") sau "1" ("exact un")
element.
- "mai_muli_la_mai_muli" (n-m): aceast asociere (many_to_many) se reprezint grafic
(Bachman) ca n figura 9.
Figura 7. Asociere 1-n
Figura 8. Asocierile dintre Jurnal i Balana (curente)
16
1 (0)
n
Balana
Jurnal
este_creditat_de
crediteaz_pe
1 (0)
n
este_debitat_de
debiteaz_pe
SISTEME INFORMATICE FINANCIAR-CONTABILE
n general, n tipurile de SGBD clasice (inclusiv n Access), aceast asociere nu poate fi
reprezentat ca atare ci trebuia descompus n asocieri de tip (1-n). Modelul relaional introduce
posibilitatea descrierii directe asocierii (n-m), dar prin aplicarea normalizrii se obine de regul
descompunerea n asocieri (1-n). Aceast descompunere se obine introducnd o relaie
suplimentar, notat cu RxS, pentru a materializa asocierea conform modului ilustrat n figura
10.
La implementarea acestor tipuri de asocieri acestea pot fi:
- statice, caz n care se realizeaz prin mecanismul <cheie extern-cheie primar>;
- virtuale, caz n care se realizeaz la moment i sunt n general precedate de un calcul.
Revenind la descrierea n BNF a bazei de date relaionale avem:
(5) <mulime de domenii>::=<denumire domeniu><mulime valori domeniu>[<indicator de
ordine>]
(6) <denumire domeniu>::= <identificator>
(7) <mulime valori domeniu>::=<valoare domeniu>|<valoare domeniu><mulime valori
domeniu>
(8) <valoare domeniu>::=<valoare atomic> | <condiie apartenen la domeniu>
(9) <indicator ordine>::= DA | NU
Fiecrui domeniu i se atribuie o denumire distinct, <denumire domeniu> care
reprezint o generalizare a atributelor care i iau valori din domeniu.
Denumirea atribuit domeniului <denumire domeniu> este un <identificator> format
conform specificaiilor limbajului de definire a datelor (sau componentei care realizeaz
definirea datelor). n cazul n care aceast denumire nu este suficient de explicit este indicat
descrierea sa n dicionarul bazei de date (sub form de comentarii, sub form de linii de text n
relaii caracterizante din baza de date etc.). n cazul SGBD-urilor existente descrierea poate fi
fcut ca un alias asociat coloanei la interogare (clauza AS) sau n modul "Design" modificnd
proprietatea "Caption".
Prin <mulime valori domeniu> sunt desemnate toate valorile admisibile pentru acel
domeniu (<valorile atomice> care verific <condiia de apartenen la domeniu>). Aceste
valori care compun domeniul pot fi eventual ordonate (<indicator de ordine>::= DA). Dac se
cere ordonarea atunci aceast ordonare va fi efectuat conform specificaiilor unei relaii de
ordine ntre valori (<, >,<= etc.).
Autorii
Figura 10. Transformarea
asocierii m-n n asocieri 1-n
Figura 9. Asociere m-n
17
BAZE DE DATE RELAIONALE. IMPLEMENTAREA CONCEPTELOR N SQL
Prin condiiile de apartenen la domeniu am desemnat cel puin informaiile care
definesc natura i lungimea datelor (tipul, de exemplu, ntreg, real etc.; lungimea, de exemplu,
trei caractere, cinci ntregi i dou zecimale etc.) la care se pot aduga, eventual, alte elemente
care precizeaz diverse restricii.
(10) <relaie>::= <relaie denumit>|<relaie anonim>
(11) <relaie denumit>::= <relaie de baz>|<relaie virtual>
(12) <relaie anonim>::= <expresie relaional>
(13) <relaie virtual>::= <denumire de relaie> <expresie relaional>
(14) <relaie de baz>::= < denumire de relaie>[<mulime atribute>]
<cheie primar>[<chei alternative>][<chei externe>]<mulime tupluri>
(15) < denumire de relaie>::= <identificator>
(16) <mulime atribute>::= <atribut>|<atribut> <mulime atribute>
(17) <atribut>::= < denumire atribut> < denumire domeniu>[<restricii valori>]
(18) < denumire atribut>::= <identificator>
(19) <cheie primar>::= <cheie alternativ> <restricii cheie primar>
(20) <cheie alternativ>::= <candidat cheie>[<restricii cheie alternativ>]
(21) <candidat cheie>::= <mulime denumiri atribut>
(22) <cheie extern>::=<mulime denumiri atribut> <restricii cheie extern>
(23) <mulime tupluri>::= <tuplu>|<tuplu> <mulime tupluri>
(24) <tuplu>::= <mulime valori atribut>
(25) <mulime valori atribut>::= <valoare atribut> < denumire domeniu>[<restricii valori
atribut>]
Relaiile din baza de date pot avea un nume n cazul n care sunt <relaii de baz> sau
<relaii virtuale> sau nu dac sunt <relaii anonime>.
Diferena dintre o <relaie de baz> i o <relaie virtual> este dat de faptul c o
<relaie de baz> are extensia stocat n spaiul fizic asociat bazei de date relaionale (sub
forma perceptibil de tabel) pe cnd <relaiile virtuale> se obin ca urmare a aplicrii unei
<expresii relaionale> pe relaiile de baz sau alte relaii virtuale.
O <relaie virtual> (denumit i vedere sau viziune) este obinut la momentul
solicitrii utilizatorului i este disponibil, dup obinere, pentru aplicarea unor alte eventuale
<expresii relaionale> de ctre ali utilizatori.
O <relaie anonim> este un rezultat al aplicrii unei <expresii relaionale> pe
<relaiile de baz> i/sau <relaiile virtuale> i este disponibil, n general, pentru un singur
utilizator. <relaiile de baz> i <relaiile virtuale> sunt definite n <schema de relaii>
(schema bazei de date relaionale).
Relaiile de baz pot fi grupate formal n urmtoarele tipuri:
- nucleu;
- asociere;
- caracterizante;
- utilitare.
Relaiile de tip nucleu sunt entitile (tabelele) fundamentale ale microlumii de interes
(universul lumii reale modelate). Ele reprezint de fapt "despre ce este vorba n baza de date sau
ce poriune din realitate se modeleaz".
Relaiile de asociere sunt relaiile (tabelele) care permit materializarea asocierii dintre dou sau
mai multe relaii (entiti). Fiecare participant la asociere poate fi o relaie de tip nucleu,
asociere sau caracterizant.
18
SISTEME INFORMATICE FINANCIAR-CONTABILE
Relaiile caracterizante sunt entiti (tabele) al cror rol este de a califica, descrie sau
"caracteriza" alte entiti (de orice tip). Existena relaiei (entitii) caracterizante este
dependent de existena relaiei (entitii) pe care o caracterizeaz: "O entitate R este
dependent de entitatea S dac este imposibil s existe o realizare a lui R dac nu exist o
realizare corespondent a lui S". Relaiile de asociere i cele caracterizante nu au o existen
independent ci presupun existena altor relaii n baza de date.
n general acest mod de grupare pe aceste trei tipuri de relaiii este dependent de
aplicaie. Un tabel (o relaie) poate fi privit() de unii utilizatori ca asociere, de alii ca nucleu
etc. De exemplu, ntr-o baz de date care cuprinde date despre angajai i locuri de munc,
entitile care se refer la locul de munc sunt tratate de ctre utilizatorul "compartimentul
resurse umane" drept caracterizante n timp ce utilizatorul "compartimentul de organizare a
produciei i a muncii" le poate trata ca nucleu. n descrierea formal a relaiei de baz au fost
evideniate att intensia ct i extensia sa.
Relaiile utilitare sunt destinate stocrii unor informaii utilitare (cum ar fi descrierea
restriciilor de integritate, help-uri asociate sistemului, documentaie etc).
Pentru intensie au fost specificate clasele de atribute care o formeaz astfel:
<mulime atribute>: sunt atribute considerate "ordinare" prin faptul c nu particip la
formarea cheilor;
<cheie primar>: ca element unic de identificare i desemnare a rndurilor (nregistrrilor,
tuplurilor) reprezentnd calea principal de acces la rnd (tuplu);
<chei alternative>: pentru eventuala definire a unor ci de acces suplimentare la rnd
(tuplu) din considerente care privesc optimizarea timpilor de rspuns ai unor aplicaii:
<chei externe>: ca elemente de importan major n materializarea asocierilor dintre
rndurile (tuplurile) relaiilor. Aceste <chei externe> pot avea (i au n general) asociate
restricii care s asigure coerena logic a asocierilor.
La utilizarea fiecrei <relaii denumite> (definire, manipulare etc.) pentru <cheia
primar> se vor utiliza urmtoarele reguli [DATE86]:
1
o
. pentru fiecare atribut care particip la formarea cheii se va specifica faptul c nu sunt admise
valori nule (NOT NULL);
2
o
. se va crea un index care admite numai valori unice pe combinaia tuturor atributelor care
formeaz cheia primar (declaraia de cheie primar este, n majoritatea imlementrilor
modelului relaional, echivalent). Declaraia index-ului va fi fcut fie declarnd cmpurile
drept cheie primar cu clauza CONSTRAINT denumire_restricie PIMARY KEY sau cu
comanda CREATE UNIQUE INDEX denumire_index ON denumire_tabela
(denumire_coloana [ASC|DESC] [, ... ]);
3
o
. se va testa existena combinaiei de valori ntre intrrile acestui index la inserarea oricrui
tuplu (rnd) n tabel sau la modificarea valorii unei chei primare;
4
o
. specificaiile pentru definirea cheii primare i a restriciilor asociate vor fi trecute sub form
de comentariu n textul de definire sau ntr-o relaie caracterizant definit n acest scop.
Similar, pentru fiecare <cheie extern>, se vor utiliza urmtoarele reguli:
1
o
. pentru fiecare atribut care particip la formarea cheii se va specifica faptul c nu admite
valori nule dac i numai dac cheia extern nu admite valori nule (NOT NULL);
Autorii
19
BAZE DE DATE RELAIONALE. IMPLEMENTAREA CONCEPTELOR N SQL
2
o
. se analizeaz dac este oportun i imperioas crearea unui index (n acest caz probabil c va
admite valori duplicate) pe aceast cheie extern;
3
o
. se va utiliza mecanismul de autorizare al SGBD-ului pentru a interzice operaiile on-line
capabile s violeze restriciile aplicate acestor chei externe. Aceste operaii pot fi:
- tergere n tabela referit;
- modificare a cheii primare a tabelei referite;
- adugare n tabela care refer;
- modificare pe cheia extern n tabela care refer.
4
o
. Restriciile cheii externe vor fi incluse n specificaiile pentru programele de ntreinere a
bazei de date. Ideal este construirea unui singur program sau a unor primitive care s
manipuleze cheia extern i care s fie apelate parametric de ctre toi utilizatorii;
5
o
. specificaiile pentru cheia extern i restriciile asociate vor fi conservate sub form de
comentarii n textul de definire sau ntr-o relaie caracterizant definit n acest scop.
La aceste reguli vom aduga urmtoarele:
6
o
deoarece o cheie extern materializeaz o asociere, asocierea reprezentnd o proprietate
calitativ a modelului datelor, este indicat scrierea unor programe (eventual parametrizate) de
testare i verificare a coerenei logice care s semnalizeze orice violare a restriciilor. Aceste
programe vor fi rulate periodic n conformitate cu strategia impus de administratorul bazei de
date;
7
o
pentru cheile alternative pe care se presupune c vom crea indeci se vor utiliza aceleai
reguli ca la cheile externe.
Fiecare <atribut> are o <denumire atribut> care nu trebuie, neaprat, s fie identic cu
<denumire domeniu> a domeniului pe care este definit. Aceast <denumire atribut> reprezint
o interpretare semnatic a <domeniului> i poate avea (conform acestei interpretri semnatice)
asociat o restricie prin care se specific care valori din <mulime valori domeniu> sunt
considerate valide (deci i acceptate) pentru interpretarea semnatic dat.
Extensia unei relaii este o <mulime tupluri>. Aceasta <mulime tupluri> are o
cardinalitate care variaz n timp (se elimin/adaug tupluri).
20
SISTEME INFORMATICE FINANCIAR-CONTABILE
6. Algebra relaional
Partea manipulativ a modelului relaional const dintr-un set de operatori cunoscui sub
numele de algebra relaional mpreun cu un operator relaional de atribuire. Operatorul de
atribuire asigneaz (atribuie) o expresie arbitrar a algebrei unei alte relaii.
Algebra relaional a fost conceput de ctre E.F.CODD ca o colecie de operaii
formale asupra relaiilor (tabelelor) [CODD70, CODD72]. Fiecare operaie a algebrei
relaionale are una sau mai multe relaii ca operatori i produce ca rezultat o nou relaie.
Aceast relaie poate fi la rndul su subiectul unor viitoare operaii algebrice. Operanzii
oricrei operaii pot fi sau relaii simple sau expresii cu relaii. Codd a definit o mulime de
astfel de operaii i a artat c acestea sunt complet relaionale, n sensul c ele au cel puin
puterea de regsire a calcului relaional.
Algebra relaional utilizeaz dou grupe de operatori: operatori tradiionali pe mulimi
i operatori relaionali speciali. Aceste grupe de operatori permit efectuarea operaiilor
corespunztoare lor.
6.1. Operaii tradiionale pe mulimi
n categoria operaiilor tradiionale pe mulimi includem reuniunea, intersecia,
diferena i produsul cartezian.
Aceste operaii au fost modificate pentru a opera mai degrab pe relaii dect pe mulimi.
Pentru operaiile enumerate, cu excepia produsului cartezian, cele dou relaii operand trebuie
s fie compatibile cu reuniunea, adic, s fie de acelai grad i atributele lor s aparin acelorai
domenii (nu este absolut necesar ca atributele corespunztoare s aib aceeai denumire, acest
lucru fiind cerut de platforma SQL utilizat). n situaiile reale operaiile algebrei relaionale nu
sunt utilizate singular. De cele mai multe ori ele implic o combinaie de astfel de operaii. De
exemplu, operaia de reuniune, necesit dou selecii (identice ca structur a tabelelor rezultat)
ntre care se efectueaz efectiv reuniunea.
SGBD-urile actuale care implementeaz limbajul standard de manipulare a bazelor de
date SQL, n una din versiunile sale, nu pun la dispoziie n mod obligatoriu comenzi distincte
pentru realizarea operaiilor relationale, ci o singur fraz cu structura general:
SELECT ce_coloane_dorim_s_apar_n_rspuns
FROM din_ce_tabele
[WHERE ce_condiii_trebuiesc_ndeplinite_de_rnduri_pentru_a_fi_luate_n_considerare]
care poate fi exprimat astfel:
select r
1
.A
1
,...,r
1
.A
n
,r
2
.B
1
,...,r
2
.B
m
,E
1
(),E
2
(),E
n
(),...,r
n
.W
1
,...,r
n
.W
n
from r
1
,r
2
, ... ,r
n
[where <condiie jonciune> [<filtru>]]
[clauze opionale];
unde:
- prin A
i
, B
i
,,W
i
am desemnat atribute din schemele de relaie corespondente r
i
;
- prin E
i
() am desemnat expresii definite pe mai multe coloane din relaii r
1
,r
2
, ... ,r
n
sau orice
alte expresii coninnd referiri la funcii definite de SGBD sau utilizator, constante, expresii
aritmetice sau logice etc;
- prin r
1
,r
2
, ... ,r
n
specificm relaiile din care sunt citate coloane, direct sau n formula
expresiilor, n rspuns;
Autorii
21
BAZE DE DATE RELAIONALE. IMPLEMENTAREA CONCEPTELOR N SQL
- prin construciile de forma r
i
.A
i
am specificat faptul c atributul A
i
este unul din atributele
din schema de relaie a relaiei r
i
.
Reuniunea relaiilor. Reuniunea a dou relaii r
1
(X) i r
2
(X), cu aceeai schem de definire X,
reprezint mulimea tuturor rndurilor (tuplurilor) t aparinnd lui r
1
sau lui r
2
sau ambelor.
Rezultatul reuniunii este o nou relaie r
3
, cu r
3
(X)=r
1
(X)r
2
(X). Pentru a putea realiza
reuniunea relaiile r
1
(X) i r
2
(X) trebuie s ndeplineasc condiiile:
- s aib acelai grad;
- domeniul atributului i al relaiei r
1
(X) i al atributului i al relaiei r
2
(X) trebuie s fie
acelai.
Sub form grafic reuniunea poate fi
sugerat ca n una din figurile 11 a) sau b).
n figura 11 b) relaia rezultat r
3
este
reprezentat grafic ca partea din relaiile de
origine r
1
i r
2
care au aceeai schem de
definire.
Pentru exemplificare considerm
relaiile R
1
i R
2
cu schemele de definire
{ } C B A Y X , , cu extensiile

,
_

1 2 1
1 1 1
1
c b a
c b a
r
, ( ) 1 2 2
2
c b a r . Aplicnd operatorul de
reuniune a celor dou relaii va rezulta o nou relaie r
3
cu aceeai schem de definire Z= {A, B,
C} cu

,
_


1 2 2
1 2 1
1 1 1
2 1 3
c b a
c b a
c b a
r r r ceea ce poate fi exprimat n SQL astfel:
SELECT r
1
.* FROM r
1
UNION
SELECT r
2
.* FROM r
2
unde prin * s-au desemnat toate atributele schemei de definire a relaiei specificate.
Exemple:
1. Reuniunea datelor din balana curent (Balanta) cu datele aferente balanelor arhivate n
vederea analizei evoluiei conturilor, adic BalantaIstoric_Balante, ceea ce poate fi
exprimat n SQL astfel:
Select Balanta.* From Balanta
UNION
Select Istoric_Balante.* From Istoric_Balante;
Not. Prin construcia Balanta.* am desemnat toate coloanele din tabela balana, Balanta.
nefiind altceva dect specificaia prin care se spune de ce tabel aparin coloanele respective.
a) b)
Figura 11. Reuniunea relaiilor
22
SISTEME INFORMATICE FINANCIAR-CONTABILE
2. Reuniunea datelor din jurnalul curent cu cele din jurnalul arhivat n vederea vizualizrii
fiei unui cont (n cerere nu se specific acum filtrul de selecie):
Select Jurnal.* From Jurnal
Union
Select Istoric_Jurnal.* From Istoric_Jurnal;
Intersecia relaiilor. Intersecia relaiilor r
1
(X) i r
2
(X) este mulimea tuturor rndurilor
(tuplurilor) ce aparin att lui r
1
ct i lui r
2
.
Acest tip de operaie
permite gruparea ntr-o alt relaie
r
3
a tuturor elementelor comune
celor dou relaii r
1
i r
2
, ceea ce
grafic este sugerat n figura 12 a)
sau b).
Fie

,
_

1 2 2
1 2 1
1 1 1
1
c b a
c b a
c b a
r
i ( ) 1 2 2
2
c b a r , intersecia relaiilor r
1
cu r
2
apare astfel:
r
3
=r
1
r
2
adic
( ) 1 2 2
3
c b a r
Exemplu:
Lista drumurilor internaionale care se regsesc descrise n drumuri naionale conform
definiiei din subschema bazei de date din figura 13 poate fi obinut cu fraza:
Autorii
a) b)
Figura 12. Intersecia relaiilor
Figura 13. Exemplu de Subschema
23
BAZE DE DATE RELAIONALE. IMPLEMENTAREA CONCEPTELOR N SQL
SELECT r1.dr, r1.drum, r1.kmi, r1.mi, r1.kms, r1.ms FROM drumint r1
INTERSECT
SELECT r2.dr, r2.drum, r2.kmi, r2.mi, r2.kms, r2.ms FROM drumnat r2;
Diferena a dou relaii. Diferena dintre dou relaii r
1
i r
2
cu aceeai schem de definire
X
1
=X
2
, reprezint mulimea tuturor rndurilor (tuplurilor) ce aparin lui r
1
, dar nu aparin lui
r
2
. Relaia rezultat va avea aceeai schem de definire X
3
=X
1
=X
2
.
Reprezentarea grafic a diferenei poate fi sugerat ca n figura 14 a) sau b).
Fie

,
_

1 2 2
1 2 1
1 1 1
1
c b a
c b a
c b a
r
i
( ) 1 2 2
2
c b a r
, diferena dintre r
1
i r
2
este:

,
_

1 2 1
1 1 1
3
c b a
c b a
r
Exemplu:
Pentru subschema din figura 8 lista poriunilor de drum care nu au drenuri:
SELECT i.dr, i.drum, i.km, i.mi, i.kms, i.ms FROM drumuri i
MINUS
SELECT d.dr, d.drum, d.km, d.mi, d.kms, d.ms FROM drenuri d
Redenumirea coloanelor (atributelor). Aa cum am enunat n paragrafele anterioare
operatorii de reuniune, intersecie i diferen nu pot fi aplicai dect asupra relaiilor
compatibile cu reuniunea, adic tabele cu acelai numr de atribute, cu atributele corespondente
definite pe aceleai domenii, denumite la fel i date n aceeai ordine. Dac atributele
indeplinesc celelate condiii exceptnd ordinea (se afl n poziii diferite) acest caz poate fi
rezolvat simplu prin specificarea lor n frazele SQL n aceeai ordine. n cazul n care atributele
corespondente au denumiri diferite dar ndeplinesc celelalte criterii compatibilizarea lor cu
reuniunea poate fi realizat precednd operaia respectiv cu o operaie de redenumire a lor. De
exemplu dac dorim s vedem prin ce conturi s-au consemnat operaiunile firmei n luna
curent ar trebui s utilizm relaia Jurnal_Curent i s efectum o reuniune a coloanelor
ContDB i ContCR. Pentru a rezolva acest cerere vom utiliza un operator de redenumire
(introdus n SQL prin clauza AS) a crui aplicare va precede realizarea efectiv a operaiei de
reuniune, astfel:
Select Distinct ContDB AS Simbol From Jurnal_Curent
UNION
Select Distinct ContCR AS Simbol From Jurnal_Curent;
Operatorul de redenumire, pe care l vom nota cu , poate fi definit astfel:
Fie r(X) o relaie definit pe mulimea de atribute X i Y o alt mulime de atribute cu aceeai
cardinalitate cu X. Fie A
1
,A
2
,...,A
k
o ordonare a atributelor din X i B
1
,B
2
,...,B
k
o ordonare a

a) b)
Figura 14. Diferena relaiilor
24
SISTEME INFORMATICE FINANCIAR-CONTABILE
atributelor din Y care asigur faptul c A
i
i B
i
(i=1,2,,k) sunt definite pe acelai domeniu. n
aceste condiii redenumirea, notat
prin
conine un tuplu t' pentru fiecare tuplu t din r, definit astfel: t' este un tuplu din Y i t'[B
i
]= t
[A
i
] pentru i=1,2,,k. Aceast definiie confirm faptul c schimbrile care au loc sunt
schimbri ale denumirii atributelor, valorile acestora rmnnd nealterate i asociindu-se
noilor atribute.
Exemplu:
Dorim s reprezentm relaiile paterne i materne ale unui arbore genealogic prin
relaiile:
Dac dorim s obinem o relaie care conine prinii i copii acesta ar fi o reunuiune a
celor dou relaii definite anterior i instinctiv am avea pentru ea coloanele (Printe,Copil).
Coloana Printe este denumit n una din relaii Tat iar n cealalt Mam fcnd astfel
imposibil reuniunea prin faptul c nu au acelai nume. Aplicarea operatorului de redenumire
va face posibil reuniunea lor conform modului ilustrat n figura 15.
Aceast operaie poate fi
descris n SQL astfel:
Select Tat As Printe,
Patern.Copil From Patern
Union
Select Mam As Printe,
Matern.Copil From Matern
Autorii
Patern
Tat Copil
Adam Cain
Adam Abel
Abraham Isac
Abraham Ismael
Matern
Mam Copil
Eva Cain
Eva Set
Sara Isac
Hagar Ismael
Printe Copil
Adam Cain
Adam Abel
Abraham Isac
Abraham Ismael
Eva Cain
Eva Set
Sara Isac
Hagar Ismael
Figura 15. Utilizarea operatorului de redenumire
25
) (
2 1 ,..., ,
,..., , A
2 1
r
k
k
B B B
A A
) ( ) ( Matern Patern
Mam te in Par Tat te in Par

BAZE DE DATE RELAIONALE. IMPLEMENTAREA CONCEPTELOR N SQL
Produsul cartezian a dou relaii. Produsul cartezian a dou tabele (relaii) r
1
(X
1
) i r
2
(X
2
),
notat prin r
1
xr
2
, reprezint mulimea rndurilor (tuplurilor) t, astfel nct un rnd (tuplu) t este
concatenarea unui rnd (tuplu) t
1
r
1
cu un rnd (tuplu) t
2
r
2
, adic t[r
1
]=t
1
[r
1
] i t[r
2
]=t
2
[r
2
].
Schema relaiei rezultat X
3
este reprezentat de concatenarea schemelor relaiilor implicate,
adic X
3
= X
1
X
2
, n condiiile n care intersecia schemelor este vid X
1
X
2
=. Dac
intersecia celor dou scheme operand nu este vid atunci schema rezultatului va conine
coloanele comune luate o singur dat i toate coloanele diferite care apar n relaiile operand.
Implementarea practic a SGBD-urilor relaionale moderne realizeaz concatenarea
schemelor relaiilor operand asigurnd unicitatea denumirilor de coloane prin calificarea
acestora cu numele relaiei din care fac parte astfel nct restricia de disjunctivitate a
schemelor s nu mai aib importan iar schema rezultatului s fie reprezentat de reuniunea
schemelor operanzilor.
S considerm relaiile r
1
cu schema de definire X={A} i r
2
cu schema de definire
Y={B}. Se poate obine o nou relaie r
3
ca produs al celor dou, cu condiia ca: XY=.
Astfel relaia r
3
= r
1
x r
2
= {(a
i
, b
i
) | a
i
r
1
i b
i
r
2
} cu schema Z dat de reuniunea schemelor
de relaie r
1
i r
2
, adic Z=XY. n exemplul din figura 16 b) elementele relaiei rezultat sunt
mulimea perechilor [(a,b), (x,y,z)], iar schema de definire pentru r
3
va fi dat de reuniune
schemelor relaiilor r
1
i r
2
, adic Z={A, B}.
n general, aceasta operaie se utilizeaz destul de rar singular. Ea este o operaie de
pregtire a datelor n vederea realizrii operaiilor speciale ale algebrei relaionale. Utilizarea sa
singular este uzual n cazuri similare urmtoarelor exemple.
Reprezentarea grafic a produsului cartezian a dou relaii r
1
i r
2
este sugerat n figura
16 a) sau b).
Exemple:
1. Considerm dou relaii cu denumirile de MATERIALE (alias M) i FURNIZORI (alias
F), avnd schemele de definire:
M(CODM, DEMAT, UM, PRE_LIVR) i
F(CODF, DENFURNIZOR, LOCALITATEA) care au urmtoarele instane:
Tabela 2. MATERIALE
CODM DENMAT UM PRET_LIVR
1111 CABLU COAXIAL Ml 10
1112 CABLU ELECTRIC Ml 15
1
1
1
1
1
1
1
1
1
]
1

1
1
]
1

1
]
1

z b
y b
x b
z a
y a
x a
z
y
x
b
a
b)



a)
Figura 16. Produsul cartezian al
relaiilor
26
PRODUCT
R
1
R
2
x
R
3
SISTEME INFORMATICE FINANCIAR-CONTABILE
Tabela 3. FURNIZORI
CODF DENFURNIZOR LOCALITATEA
100 COMPUTERLAND BUCURESTI
101 LASER CSI CONSTANTA
Se observ c MF = , ceea ce nseamn c are sens efectuarea produsului dintre cele
dou relaii MxF, obinndu-se o nou relaie cu denumirea MATERIALE-FURNIZORI (tabela
4):
Tabela 4. MATERIALE-FURNIZORI
CODM DENMAT UM PRET_LIVR CODF DENFURNIZOR LOCALITATEA
1111 CABLU COAXIAL Ml 10 100 COMPUTERLAND BUCURSTI
1111 CABLU COAXIAL Ml 10 101 CSI CONSTANTA
1112 CABLU ELECTRIC Ml 15 100 COMPUTERLAND BUCURSTI
1112 CABLU ELECTRIC Ml 15 101 CSI CONSTANTA
Deci, semnificaia practic a produsului cartezian corespunde generrii unei tabele
(relaii) din dou tabele (relaii) prin combinarea fiecrui rnd (tuplu) din prima relaie cu
fiecare rnd (tuplu) al celei de a doua tabele (relaii).
Produsul cartezian al cele doua relaii se exprim n SQL astfel:
SELECT * FROM MATERIALE, FURNIZORI;
2. O fabric productoare de automobile produce toate automobilele sale ntr-o gam
unitar de culori. Dac dorim s meninem o eviden a acestora sub forma (AUTO1):
AUTO1
Marca Tip_auto Cilindree Culoare
Dacia SuperNova Berlin 1400 Alb
Dacia SuperNova Berlin 1400 Rou
Dacia SuperNova Berlin 1400 Verde
Dacia 1310 Break 1300 Rou
Dacia 1310 Break 1300 Verde
Dacia 1310 Break 1300 Alb
atunci valorile atributelor Marca, Tip_Auto, Cilindree se vor duplica de attea ori cte culori
avem.
Pentru a evita aceast situaie n baza de date vor fi meninute dou tabele:
AUTO CULOARE
Marca Tip_auto Cilindree Culoare
Dacia SuperNova Berlin 1400 Alb
Dacia 1310 Brek 1300 Rou
Verde
Autorii
27
BAZE DE DATE RELAIONALE. IMPLEMENTAREA CONCEPTELOR N SQL
Obinerea unei liste cu toate tipurile de automobile i culorile n care se produc, poate fi
realizat prin produsul cartezian dintre:
AUTO x CULOARE
ceea ce permite obinerea relaiei iniiale AUTO1 printr-o fraz de genul:
SELECT AUTO.*, CULOARE.* FROM AUTO, CULOARE;
6.2. Operaii relaionale speciale
n aceast categorie de operaii vom include selecia, proiecia, jonciunea (join) i
diviziunea.
Operaia de selecie. Operatorul algebric de selecie produce o subrelaie r' (subset,
submulime) "orizontal" a unei relaii r date, supuse operaiei de selecie. Subrelaia obinut
va conine multitudinea rndurilor relaiei supuse seleciei care satisfac un predicat P
specificat. Relaia rezultat va avea aceeai schem de definire ca i relaia operand.
Fie o relaie r cu schema X, A un atribut aparinnd lui X, a un element al atributului A
i t multitudinea rndurilor (tuplurilor) ce satisfac o anumit condiie. Operaia de selecie poate
fi exprimat astfel:
r' (X) = {tr | t[A] = a}.
Reprezentarea grafic a operaiei de selecie este redat n figura 17.
Predicatul P poate fi o expresie logic care poate combina condiii simple cu ajutorul
conectivelor logice AND (), OR() i NOT().
Operaia de selecie poate fi notat astfel ) (r
F
, unde F este funcia (expresia) care
descrie predicatul iar r este relaia. Mai precis, fiind dat o relaie r(X), o formul propoziional
(expresia predicatului) F pe X este o formul obinut combinnd condiii atomice de tipul AB
sau Ac cu ajutorul conectivelor (I - And), (SAU - Or) i (Nu Not), unde:
- este un operator de relaie (=, >, <, <=, >=,<>, Like, Between etc);
- A i B sunt atribute din X care sunt compatibile (adic comparaiile au sens i neles pe
valorile domeniilor lor);
- c este o constant compatibil cu domeniul lui A.
Fiind dat o formul F i un tuplu t, formula este evaluat la o valoare logic (boolean
sau de adevr) astfel:
- AB este evaluat la Adevrat pe tr(X) dac i numai dac t[A] este n relaia cu t[B]
(de exemplu A=B este adevrat pe t dac i numai dac t[A]=t[B]);
- Ac este evaluat la Adevrat pe t dac i numai dac t[A] este n relaia cu c;
- F
1
F
2
, F
1
F
2
, F
1
au un neles uzual;
- Expresia F poate conine subexpresii iar ordinea de evaluare este dat n mod natural de
tipul de operatori utilizai i precedena acestora. Prioritatea de evaluare poate fi schimbat
expres de utilizarea parantezelor.
Cu aceste precizri definiia seleciei este:
Selecia ) (r
F
produce o relaie cu aceleai atribute ca r i care conine numai acele
tupluri din r pentru care F este evaluat la Adevrat.
28
SISTEME INFORMATICE FINANCIAR-CONTABILE
n figura 17 b) se sugereaz faptul
c din multitudinea rndurilor tabelei
se extrag numai acelea haurate.
Numrul de tupluri din relaia
rezultat (cardinalitatea tabelei
rezultat) este mai mic dect (sau cel
mult egal cu) cel al relaiei operand.
Exemplu:
1. Presupunem o relaie MATERIALE cu schema de definire
X={CODM,DENMAT,UM,PU,STOC_EXISTENT,STOC_NORMAT}
i valorile asociate conform tabelei 5.
Tabela 5 MATERIALE
CODM DENMAT UM PU STOC_
EXISTENT
STOC_
NORMAT
1111 CABLU COAXIAL Kg 10 12000 11000
1113 CABLU ELECTRIC Kg 15 15000 18000
1115 CONECTOR MAMA BUC 50 500 300
1116 CAPSE BUC 1.5 12 11
1120 CONECTOR TATA BUC 1 80 80
.... ...............................
Presupunem c dorim s selectm toate materialele ale cror coduri sunt mai mici dect
1116 i au stocul existent mai mare dect stocul normat, adic:
n urma operaiei de selecie va rezulta subrelaia redat n tabela 6.
Tabela 6. MATERIALE_SELECTATE
CODM DENMAT UM PU STOC_
EXISTENT
STOC_
NORMAT
1111 CABLU COAXIAL Kg 10 12000 11000
1115 CONECTOR MAMA BUC 50 500 300
Exemple:
1) Se solicit listarea tuturor drumurilor judeene din judeul Arge (figura 13). n acest
caz tabela implicat, la nivel instituiei CESTRIN-AND, este DNJUD, iar condiia (predicatul)
de selecie este JUD = "AG". Prin acest predicat vor fi selectate din tabel numai acele rnduri
care conin n coloana JUD valoarea "AG", adic ) (
" "
DNJUD
AG JUD
ceea ce se exprim n
SQL astfel:
Autorii

a) b)
Figura 17. Operaia de Selecie
29
) (
) _ _ ( ) 1116 (
MATERIALE
NORMAT STOC EXISTENT STOC CODM > >

BAZE DE DATE RELAIONALE. IMPLEMENTAREA CONCEPTELOR N SQL


SELECT * FROM DNJUD WHERE JUD='AG';
2) Se solicita listarea tuturor autostrazilor din judeul Arge (figura 13). Este implicat
tabela DNJUD, iar predicatul de selecie implic coloanele JUD (judeul) i DR (categorie
drum) astfel: JUD = "AG" i DR = "A", adic ) (
" " " "
DNJUD
A DR AG JUD
ceea ce poate fi
exprimat n SQL astfel:
SELECT * FROM DNJUD WHERE JUD='AG' AND DR='A ';
3) Se solicit extragerea din jurnal a tuturor operaiilor prin Casa n Lei. Este implicat
tabela Jurnal iar condiia de selecie este ca fie ContDb fie ContCr s fie egale cu 5311, adic
) (
" 5311 " " 5311 "
Jurnal
ContCr ContDb
ceea ce se exprim n SQL prin:
Select * From Jurnal Where ContDb="5311" Or ContCr="5311";
4) Se solicit extragerea din balan a conturilor din clasa de cheltuieli (6). Va fi implicat
tabela Balanta iar condiia de selecie este dat de prezena, pe prima poziie din simbol, a
codului clasei (6). Aceast cerere poate fi exprimat prin
) (
' 6 ' ) 1 , 1 ), ( (
Balana
Simbol Trim Substr

,
unde Trim() este o funcie care elimin eventualele spaii din faa valorii pentru Simbol iar
Substr(c,i,l) extrage din irul de caractere c subirul din poziia i pe lungime l. Aceast cerere
poate fi exprimat n SQL astfel:
Select * From Balanta Where Simbol Like "6*";
unde expresia format cu operatorul Like, Simbol Like 6* este echivalent cu
Substr(Trim(Simbol),1,1).
Operaia de proiecie. Proiecia unei relaii r cu schema X=(A
1
,A
2
,....,A
n
) pe atributele
A
1
,A
2
,.....,A
m
(unde m<n) produce o relaie r' cu schema X'=(A
1
,A
2
,...,A
m
), obinut prin
selectarea atributelor specificate i eliminarea tuplurilor duplicate.
Pentru operaia de proiecie sunt consacrate urmtoarele notaii:

Y
(r),

A1,A2,......Am
R[A
1
,A
2
,...A
m
]
PROJECT (r/A
1
,A
2
,........A
m
).
n figura 12 este redat reprezentarea grafic a operaiei de proiecie.
O definiie alternativ pentru proiecie este urmtoarea: fiind dat o relaie r(X) i o
mulime YX atunci proiecia lui r pe Y, indicat prin
Y
(r), este mulimea tuplurilor din Y
obinute din tuplurile lui r considernd numai valorile pe atributele Y, adic
Y
(r)={t[Y] |
t r}. Proiecia relaiei
Y
(r) conine acelai numr de tupluri ca i r (are aceeai cardinalitate)
dac i numai dac Y este o supercheie pentru r.
n figura 18 b) se
sugereaz faptul c din
multitudinea coloanelor tabelei

a) b)
Figura 18. Operaia de Proiecie
30
SISTEME INFORMATICE FINANCIAR-CONTABILE
se extrag numai acelea haurate, proiecia producnd o descompunere vertical a tabelei de
origine.
Exemple:
1) Considernd relaia MATERIALE_CONTRACTATE cu valori asociate conform
tabelei 7.
Tabela 7. MATERIALE_CONTRACTATE
NRC# CODM# PU CANT_CONTR
100 1111 10 10000
101 1112 15 20000
110 1111 10 30000
115 1113 20 10000
120 1112 15 5000
Prin aplicarea operatorului de proiecie asupra atributului CODM# aparinnd relaiei
MATERIALE_CONTRACTATE, deci

CODM
(MATERIALE_CONTRACTATE) se obine:
CODM#
-----------
1111
1112
1113
Se observ c s-a obinut lista materialelor contractate, din care dublurile au fost
excluse. Acest operaie poate fi descris n SQL astfel:
Select Distinct CODM From MATERIALE_CONTRACTATE;
2) Se cere indicativul drumului public i lungimea pentru drumurile care leag localitile
BUCURESTI-PITESTI (vezi schema din figura 13).
La rezolvarea acestei cereri se va utiliza tabela DRUMURI din care vor fi selectate
atributele (coloanele) DRUM i LUNGIME la care se aplic condiia (predicatul) de selecie
(INCEPUT="BUCURESTI" i Sfrit="PITESTI") sau (INCEPUT="PITESTI" i
Sfrit="BUCURESTI"). Partea marcat n condiie, permite definirea oricruia din sensurile
unui DRUM:
SELECT DISTINCT DRUM, LUNGIME FROM DRUMURI WHERE
(UPPER(INCEPUT)='BUCURESTI' AND UPPER(Sfrit)='PITESTI') OR
(UPPER(SfritT)='BUCURESTI' AND UPPER(INCEPUT)='PITESTI')
3) Selecia din Jurnal a formulelor Contabile i sumelor aferente poate fi obinut cu fraza:
SELECT Jurnal.ContDB As [Cont Debitor], Jurnal.ContCR As [Cont Creditor],
Jurnal.Valoare FROM Jurnal;
a crei execuie produce un tabel de tipul:
Cont Debitor Cont Creditor Valoare
Autorii
31
BAZE DE DATE RELAIONALE. IMPLEMENTAREA CONCEPTELOR N SQL
321 5311 1606267
4013 5311 1615500
421 5311 1831458
5311 581 9130000
6012 5311 3903152
6018 5311 1473567
604 5311 1018852
607 371 992061780
707 121 1168997903
766 121 50101

Operaia de jonciune. Operaia de jonciune (JOIN) este una din cele mai importante operaii
ale algebrei relaionale. Aceasta ne permite s stabilim conexiuni ntre datele coninute n
diverse relaii, s comparm valorile coninute n ele i astfel s utilizm caracteristicile
fundamentale ale modelului reieite din bazarea sa pe valori. Operaia de jonciune este o
derivaie a produsului cartezian (n anumite situaii este redundant cu acesta). n general
realizarea produsului cartezian este o operaie laborioas i costisitoare. Operaia de jonciune
presupune utilizarea unui calificator care s permit compararea valorilor diferitelor (sau
acelorai) atribute din dou relaii (sau dintr-o singur relaie).
Operaia de jonciune are sens i i gsete o larg aplicabilitate n situaia n care
intersecia schemelor relaiilor este diferit de zero (adic au cel puin un atribut comun
aparinnd aceluiai domeniu, fr s fie obligatoriu ca denumirea acestora s fie identic), ceea
ce poate fi exprimat astfel:
r
1
r
2
pentru X
1
X
2
#.
Notaiile consacrate pentru operaia de jonciune sunt:
- r
1
r
2
;
- JOIN (r
1
,r
2
/);
- r
1
x r
2
[]
unde este un calificator multi-atribut care permite compararea atributelor relaiei r
1
cu
atributele relaiei r
2
. Operatorii de comparaie atribuii lui pot fi: <, =, >, , i .
A treia notaie sugereaz faptul c operaia de jonciune este un produs cartezian asupra
cruia se aplic o restricie .
Reprezentarea grafic a operaiei de jonciune este similar celei a produsului cartezian.
n general, jonciunea combin dou sau mai multe relaii, nu neaprat distincte, pe toate
atributele comune lor. Deci, se poate spune c operaia de jonciune a dou relaii r
1
i r
2
, care au
cte un atribut aparinnd aceluiai domeniu, produce o nou relaie r
3
ale crei rnduri (tupluri)
se formeaz prin concatenarea rndurilor (tuplurilor) celor dou relaii care satisfac restricia
asupra valorilor asociate atributelor ce se compar, urmat de eliminarea unuia dintre atributele
comune. Atributele pe care se face jonciune se numesc "atribute de jonciune".
n activitatea practic pot apare mai multe cazuri particulare de jonciune pe care le vom
evidenia n cele ce urmez.
Jonciunea natural. Jonciunea natural (natural join), notat cu simbolul , este jonciunea
bazat pe egalitatea atributelor de jonciune ale relaiilor implicate. Dac relaiile r
1
(X
1
) i r
2
(X
2
)
au egale atributele A
i
X
1
i respectiv B
j
X
2
atunci jonciunea natural este jonciunea dup
calificarea A
i
=B
j
iar rezultatul jonciunii este o relaie r
3
cu schema definit pe reuniunea
mulimilor de atribute ale operanzilor dar cu atributele comune luate o singur dat, adic pe
32
SISTEME INFORMATICE FINANCIAR-CONTABILE
mulimea (X
1
X
2
)-(X
1
X
2
). Atributele comune n relaiile operand le vom nota cu X
1,2
i sunt
reprezentate de intersecia schemelor X
1
cu X
2
, adic X
1,2
=(X
1
X
2
) iar t
1
[X
1,2
]=t
2
[X
1,2
]. Cu
aceste precizri jonciunea natural r
1
r
2
a lui r
1
(X
1
) cu r
2
(X
2
) este o relaie definit pe (X
1
X
2
)
astfel:
r
1
r
2
={t(X
1
X
2
) | t
1
r
1
i t
2
r
2
cu t[X
1
]=t
1
i t[X
2
]=t
2
} sau, mai concis
r
1
r
2
={t(X
1
X
2
) | t[X
1
]r
1
i t[X
2
]r
2
}
Dac pentru fiecare tuplu t
1
din X
1
exist un tuplu t n r
1
r
2
astfel nct t[X
1
]=t
1
i
similar pentru fiecare tuplu t
2
din X
2
exist un tuplu t n r
1
r
2
astfel nct t[X
2
]=t
2
vom spune c
jonciunea este jonciune complet (adic fiecare tuplu din operanzi contribuie la formarea acel
puin un tuplu n rezultat). Dac exist tupluri n r
1
sau r
2
care nu contribuie la rezultatul r
1
r
2
vom spune c avem tupluri balansate (dangling tuples) n relaiile joncionate. Numrul de
tupluri ale jonciunii r
1
r
2
va fi cuprins ntre 0 i produsul cardinalitilor |r
1
|x|r
2
| relaiilor
operand cu urmtoarele precizri:
- dac jonciunea lui r
1
cu r
2
este complet atunci numrul su de tupluri va fi cel puin egal
cu Max(|r
1
|,|r
2
|);
- dac X
1
X
2
conine o cheie a lui r
2
jonciunea lui r
1
cu r
2
conine cel mult |r
1
| tupluri;
- dac X
1
X
2
este o cheie primar a lui r
2
atunci vom avea o restricie referenial ntre
X
1
X
2
n r
1
i acest cheie a lui r
2
iar jonciunea conine exact |r
1
| tupluri.
Operatorul de jonciune natural este:
- comutativ, adic r
1
r
2
este ntotdeauna egal cu r
2
r
1
;
- distributiv, adic r
1
(r
2
r
3
)= (r
1
r
2
)r
3
.
Dac X
1
#X
2
atunci rezultatul jonciunii este definit ntotdeauna pe reuniunea X
1
X
2
i conine ca
tupluri produsul cartezian al r
1
cu r
2
, adic r
1
xr
2
. Acest produs cartezian poate produce tupluri
nesemnificative n rezultat. Pentru a elimina acest inconvenient a fost introdus un operator de
jonciune derivat, denumit tetha-join (jonciune teta), definit ca produs cartezian urmat de
selecie, astfel: r
1

F
r
2
=
F
(r
1
r
2
). Dac condiia F este o conjuncie de expresii atomice
formate cu operatorul de egalitate atunci operatorul de jonciune este denumit equi-join.
Exemple:
1) Din relaia descris n tabela 5 (MATERIALE) i relaia descris n tabela 7
(MATERIALE_CONTRACTATE) dorim s extragem cantitile contractate din fiecare
material astfel pentru a obine o tabel cu schema <codm, denmat, um, pu, cant_contr>:
SELECT m.codm, m.denmat, m.um, m.pu, c.cant_contr
FROM materiale m, materiale_contractate c
WHERE m.codm=c.codm;
unde m i c sunt aliasuri ale tabelelor dup care apar.
2) Considerm relaiile r
1
i r
2
cu schemele X
1
= {A,B,C} i respectiv X
2
={B,C,D}. n
urma operaiei de jonciune natural a lui r
1
cu r
2
va rezulta r
3
cu X
3
={A,B,C,D} redat n figura
19.
r
1
A B C
r
3
= r
1
r
2
a1 b1 c1
a2 b2 c2 A B C D
a3 b1 c2 a1 b1 c1 d1
Autorii
33
BAZE DE DATE RELAIONALE. IMPLEMENTAREA CONCEPTELOR N SQL
a4 b2 c3 a1 b1 c1 d2
r
2
a2 b1 c1 d1
B C D a2 b1 c1 d2
b1 c1 d1 a4 b2 c3 d3
b1 c1 d2
b2 c3 d3
Figura 19. Jonciunea natural a lui R1 cu R2 pe coloanele B i C
3) Se dorete listarea tuturor drumurilor naionale pe judee, din subschema prezentat n
figura 13, astfel:
DJDP ADRESA DRUM KMI MI KMS MS Lungime
Coloanele (atributele) DJDP i ADRESA apar n tabela (relaia) DJDP (Direcii
Judeene de Drumuri i Poduri) iar restul coloanelor (DRUM, KMI, MI, KMS, MS,
LUNGIME) apar n tabela DNJUD (Reea Drumuri Naionale pe Judee). Pentru a rspunde la
aceast cerere se va efectua o jonciune natural ntre tabelele DJDP i DNJUD pe atributul
JUD.
Predicatul jonciunii este:
DJDP.JUD = DNJUD.JUD
n situaia n care operatorul de comparaie este > avem de a face cu "jonciune mai
mare dect...". n mod asemntor jonciunea mai poate avea i alte denumiri n funcie de
operatorul de comparaie luat n considerare.
Autojonciunea. Autojonciunea relaiei r dup atributul A
i
este jonciunea relaiei r cu ea nsi
dup predicatul A
i
=A
j
, ceea ce se poate exprima astfel: JOIN(r,r/A
i
=A
j
).
Exemplu:
Se dorete listarea drumurilor pe judeele pe care le parcurg cu poriunile de drum
aferente pentru toate drumurile naionale (subschema din figura 13). Tronsoanele de drum vor
fi listate n ordinea natural de continuitate. Pentru rezolvarea acestei cereri va fi implicat
tabela DNJUD creia i se va aplica o autojonciune pe coloana DRUM. Deoarece operaia de
jonciune implic dou relaii (tabele) la intrare vom conveni faptul c tabelei implicate DNJUD
i se vor atribui dou supranume (alias): DNJUD alias R
1
i DNJUD alias R
2
. Coloanele
selectate vor fi: <JUD, DRUM, KMI, MI, KMS, MS>. n acest caz predicatul va arta astfel:
R
1
.DRUM = R
2
.DRUM mpreun cu relaia de ordine dintre rndurile (tuplurile) rezultate:
R
2
.KMI Ascendent, R
2
.MI Ascendent, R
2
.KMS Ascendent, R
2
.MS Ascendent. Deoarece
asocierea implicat n aceast cerere este definit recursiv (DNJUD la DNJUD prin DRUM) va
trebui s introducem n cerere i condiia ca rezultatul s fie format din tupluri distincte
(DISTINCT).
Exemplu:
Dorim s obinem din relaia Angajat, lista cu Nume Angajat, Prenume Angajat, Nume
So(ie), Prenume So(ie) ceea ce implic o autojonciune a relaiei Angajat cu ea nsi. Relaia
Angajat este:
34
SISTEME INFORMATICE FINANCIAR-CONTABILE
Angajat
CNP Sot Nume Prenume
1500223010017 Ion Ion
1520110402345 2531017337581 Ionescu Claudiu
2531017337581 1520110402345 Ionescu Maria
iar cererea SQL care realizeaz autojonciunea poate arta astfel:
SELECT Angajat.Nume, Angajat.Prenume, Angajat_1.Nume, Angajat_1.Prenume
FROM Angajat INNER JOIN Angajat AS Angajat_1 ON Angajat.CNP = Angajat_1.Sot;
iar rezultatul este:
Angajat.Nume Angajat.Prenume Angajat_1.Nume Angajat_1.Prenume
Ionescu Claudiu Ionescu Maria
Ionescu Maria Ionescu Claudiu
Pentru relaia Angajat SGBD-ul utilizat a creat un alias (Angajati AS Angajati_1) pentru a
putea utiliza numele su la calificarea atributelor (de jonciune, de regul, dar nu are importan
dac se calific i alte tipuri).
Jonciune extern (outer join). n rezultatul tipurilor de jonciune prezentate pn acum
apreau numai rndurile care se obineau din jonciunea rndurilor celor dou relaii operand
(conform condiiei de jonciune). Rndurile dintr-o relaie operand fr corespondent n cealalt
relaie operand nu apreau n rezultatul jonciunii. Exist totui numeroase cazuri n care este
util s apar n rezultatul jonciunii i astfel de rnduri dintr-o relaie operand fr corespondent
de jonciune n cealalt relaie operand. Jonciunea care ofer aceast posibilitate a fost numit
jonciunea extern [DATE86]. Operatorul de jonciune extern are trei variante. Pentru definirea
acestor variante vom considera dou relaii r
1
i r
2
pe care se aplic operandul de jonciune.
Pentru exemplificare vom considera dou relaii astfel:
r1 Nume Loc_de_Munc r2 Loc_de_Munc ef
Anton Vnzri Producie Adam
Barbu Producie Achiziie Radu
Costea Achiziie
Cu aceste precizri operatorul de jonciune extern este definit astfel:
- r
1

LEFT
r
2
care include n rezultat toate tuplurile din relaia r
1
i numai acele tupluri din r
2
care au corespondent n r
1
, conform modului ilustrat n relaia:
r
1

LEFT
r
2
Nume Loc_de_Munc ef
Anton Vnzri Null
Barbu Producie Adam
Costea Achiziie Adam
- r
1

RIGHT
r
2
care include n rezultat toate tuplurile din relaia r
2
i numai acele tupluri din r
1
care au corespondent n r
2
, conform modului ilustrat n relaia:
r
1

RIGHT
r
2
Nume Loc_de_Munc ef
Barbu Producie Adam
Costea Producie Adam
Null Achiziie Radu
Autorii
35
BAZE DE DATE RELAIONALE. IMPLEMENTAREA CONCEPTELOR N SQL
- r
1

FULL
r
2
care include n rezultat toate tuplurile din relaia r
1
i r
2
care au corespondent i
tuplurile din ambele care nu au corespondent, conform modului ilustrat n relaia:
r
1

FULL
r
2
Nume Loc_de_Munc ef
Anton Vnzri Null
Barbu Producie Adam
Costea Producie Adam
Null Achiziie Radu
Exemple:
1) n rezultatul (obinut prin jonciune) care ofer date despre clienii i produsele
comandate de acetia se dorete s apar i date despre produsele fabricate dar care nu au fost
nc solicitate de nici un client. Produsul fabricat dar necomercializat nc nu are corespondent
n relaia beneficiari.
Fie relaiile BENEFICIARI i PRODUSE din figura 20.
BENEFICIARI
COD DENUMIRE ADRESA COD_PRODUS
101 CESTRIN SOVEJA 115 40542
102 ASE CSIE DOROBANTI 40521
PRODUSE
COD_PRODUS DENP CARACTERISTICI
40521 Coprocesor 66 MHz
40542 486;DX2 66 Mhz; 4Mb
41736 Statie lucru IBM Compatibil
Figura 20. Relaiile BENEFICIARI i PRODUSE
Rezultatul solicitat mai sus se obine prin jonciunea extern a celor dou relaii pe
atributul COD_PRODUS i arat astfel:
COD DENUMIRE ADRESA COD_PRODUS DENP CARACTERISTICI
101 CESTRIN Soveja 115 40542 Coprocesor 66 MHz
102 ASE DOROBANI 40521 AT486;DX2 66 MHz; 4 Mb
41736 Staie lucru IBM compatibil
Se observ faptul c pentru produsul "Staie lucru" nu exist n rspuns valori n
coloanele corespunztoare relaiei BENEFICIARI.
2) Obinerea liniilor necesare pentru balana curent utilizeaz subschema bazei de date
ilustrat n figura 21 pentru care condiia de jonciune specific includerea n rezultat a tuturor
rndurilor din Balanta i numai a acelor rnduri din tabela Plan_de_Conturi pentru care valoarea
din coloana Simbol este egal cu o valoare Simbol din Balanta.
Fraza SQL care realizeaz jonciunea este:
SELECT DISTINCT Balanta.[An Balanta], Balanta.[Luna Balanta], Balanta.Simbol,
Plan_de_Conturi.Descriere, Plan_de_Conturi.DescrExt, Format(Balanta.[DbIan], "#,#00.00")
AS DbIan, Format(Balanta.[CrIan],"#,#00.00") AS CrIan, Format(Balanta.[DbPrec],"#,#00.00")
AS DbPrec, Format(Balanta.[CrPrec], "#,#00.00") AS CrPrec, Balanta.DbLuna,
36
SISTEME INFORMATICE FINANCIAR-CONTABILE
Balanta.CrLuna, (Balanta.DbIan+ Balanta.DbPrec+ Balanta.DbLuna) AS DbTotal,
(Balanta.CrIan+Balanta.CrPrec +Balanta.CrLuna) AS CrTotal,
(IIf((Balanta.DbIan+Balanta.DbPrec+ Balanta.DbLuna)>Balanta.CrIan+ Balanta.CrPrec+
Balanta.CrLuna), (Balanta.DbIan+Balanta.DbPrec+Balanta.DbLuna)-(Balanta.CrIan+
Balanta.CrPrec+Balanta.CrLuna),0)) AS SoldDB, (IIf((Balanta.DbIan+
Balanta.DbPrec+Balanta.DbLuna)<(Balanta.CrIan+Balanta.CrPrec+ Balanta.CrLuna),
(Balanta.CrIan+Balanta.CrPrec+Balanta.CrLuna)-(Balanta.DbIan+Balanta.DbPrec+
Balanta.DbLuna),0)) AS SoldCR
FROM Plan_de_Conturi RIGHT JOIN Balanta ON Plan_de_Conturi.Simbol = Balanta.Simbol
ORDER BY Balanta.Simbol;
3) Centralizarea balanei curente utilizeaz schema din figura 22
n aceast subschem tabelele TotalCR i TotalDB sunt cereri formulate ca n figura 23 iar
Balanta i Plan_de_Conturi sunt tabele de baz ale bazei de date financiar-contabile.
Expresia frazei de calcul este:
Autorii
Figura 21. Subschema pentru operaia de
evaluare a balanei
Figura 22. Subschema utilizat la calculul balanei
37
BAZE DE DATE RELAIONALE. IMPLEMENTAREA CONCEPTELOR N SQL
SELECT DISTINCT Balanta.[An Balanta], Balanta.[Luna Balanta], Balanta.Simbol,
Plan_de_Conturi.Descriere, Plan_de_Conturi.DescrExt, Format(Balanta.DbIan, "#,#00.00") AS
DbIan, Format(Balanta.CrIan,"#,#00.00") AS CrIan, Format(Balanta.DbPrec, "#,#00.00") AS
DbPrec, Format(Balanta.CrPrec, "#,#00.00") AS CrPrec, TotalDB.DbLuna, TotalCR.CrLuna,
(Balanta.DbIan+ Balanta.DbPrec+ Balanta.DbLuna) AS DbTotal, (Balanta.CrIan+
Balanta.CrPrec+ Balanta.CrLuna) AS CrTotal, (IIf((Balanta.DbIan+ Balanta.DbPrec+
Balanta.DbLuna)>(Balanta.CrIan+Balanta.CrPrec+Balanta.CrLuna),
(Balanta.DbIan+Balanta.DbPrec+Balanta.DbLuna)-(Balanta.CrIan+Balanta.CrPrec+
Balanta.CrLuna),0)) AS SoldDB, (IIf((Balanta.DbIan+ Balanta.DbPrec+ Balanta.DbLuna)<
(Balanta.CrIan+ Balanta.CrPrec+ Balanta.CrLuna),
(Balanta.CrIan+Balanta.CrPrec+Balanta.CrLuna)-(Balanta.DbIan+Balanta.DbPrec+
Balanta.DbLuna),0)) AS SoldCR
FROM ((Plan_de_Conturi RIGHT JOIN Balanta ON Plan_de_Conturi.Simbol = Balanta.Simbol)
LEFT JOIN TotalCR ON Balanta.Simbol = TotalCR.Simbol) LEFT JOIN TotalDB ON
Balanta.Simbol = TotalDB.Simbol
ORDER BY Balanta.Simbol;
Operaia de mprire. Aceast operaie realizeaz mprirea unei relaii demprit r
1
, de grad
m+n, la o relaie mpritor r
2
, de grad n i produce o relaie rezultat de grad m. Atributele m+i
ale lui r
1
i atributele i ale lui r
2
, pentru 1<=i<=n, trebuie s fie definite pe aceleai domenii. S
considerm primele m atribute ale lui r
1
ca un atribut compus X, i ultimele n ca un alt atribut
compus Y. Rezult c relaia r
1
poate fi gndit ca o mulime de perechi de valori <x,y>. Similar
relaia r
2
poate fi gndit ca o mulime de valori <y>. Rezultatul mpririi lui r
1
prin r
2
l
reprezint mulimea valorilor <x> pentru care perechea <x,y> apare n r
1
pentru toate valorile
<y> care apar n r
2
. Atributele rezultatului au aceleai denumiri ca primele m atribute ale relaiei
r
1
.
Notaiile consacrate pentru operaia de mprire sunt:
- r
1
r
2
;
- DIVISION (r
1
,r
2
)
n figura 24 a) i b) este redat reprezentarea grafic a operaiei de mprire. n plus
figura 24 b) ofer un exemplu de aplicare.
SELECT Balanta.Simbol, Sum(Jurnal.Valoare) AS CrLuna
FROM Balanta, Jurnal
WHERE (((Jurnal.ContCR) Like (Trim([Balanta].[Simbol]) & "*")))
GROUP BY Balanta.Simbol;
SELECT Balanta.Simbol, Sum(Jurnal.Valoare) AS CrLuna
FROM Balanta, Jurnal
WHERE (((Jurnal.ContCR) Like (Trim([Balanta].[Simbol]) & "*")))
GROUP BY Balanta.Simbol;
Figura 23. Cererile TotalCR i TotalDB



a)
Figura 24. Diviziunea relaiilor
DIVIDE a
r3
a x x
a y y
a z r2
b x
c y
r1 b)
38
R
1
R
2

R
3
SISTEME INFORMATICE FINANCIAR-CONTABILE
n figura 24 b) din relaia r
1
se ia fiecare valoare distinct, pe care o vom denumi q, a
primei coloane i se constituie mulimea de valori format din valorile asociate din cea de a doua
coloan. Dac acest mulime format este egal sau include mulimea valorilor din relaia r
2
atunci valoarea q la care s-a asociat apare n rezultat. Operaia de mprire trebuie s respecte
condiia ca produsul cartezian al relaiei rezultat r
3
cu relaia mpritor r
2
s produc numai
tupluri din relaia demprit r
1
, adic r
3
xr
2
r
1
.
6.3. Construirea expresiilor n algebra relaional
Algebra relaional este un limbaj procedural bazat pe concepte algebrice care const
dintr-o colecie de operatori definii pe relaii i care produce ca rezultat relaii. Proceduralitatea
sa este dat de faptul c atunci cnd scriem expresii ale algebrei relaionale nu facem altceva
dect s dm o secven de operaii care vor genera rspunsul cererii noastre. O expresie general
n algebra relaional este construit din subexpresii. Dac E
1
i E
2
sunt expresii ale algebrei
relaionale atunci expresiile:
- E
1
E
2
; E
1
-E
2
; E
1
xE
2
;
- ) (
1
E
P
, unde P este un predicat pe E
1
;
-
S
(E
1
), unde S este o list constnd din unele atribute din E
1

sunt expresii ale algebrei relaionale i formeaz operaiile fundamentale ale algebrei
relaionale. Ele sunt suficiente pentru a exprima orice cerere a algebrei relaionale.
Pentru exemplificri considerm baza de date Personal cu schema:
Angajat(CNP, Nume, Vrsta, Salariu, Cod_Loc)
Loc_de_Munc(Cod, Denumire, ef)
cu extensiile relaiilor prezentate n figura 25.
Not. Coloanelor Cod_Loc din Angajat i Cod din Loc_de_Munc li s-au dat
denumiri diferite pentru a nu mai fi necesar calificarea n exemplificri. n situaii
reale este preferabil utilizarea aceleiai denumiri pentru coloanele de jonciune.
Autorii
Angajat
CNP Nume Vrsta Salariu Cod_Loc
148 Ion RADU 54 20 101
149 Nicu STEFAN 53 20 101
150 Adi ADAM 52 35 102
151 Ion PREDA 51 40 101
250 Mara CUCU 52 30 103
253 Dana PREDA 49 15 102
267 Lia STEFAN 35 20 103
280 Mia BRAN 22 15 102
Loc_de_Munc
Cod Denumire Sef
101 Productie 150
102 Vnzri 251
103 Aprovizionare 151
Figura 25. Extensia relaiilor bazei de date Personal
39
BAZE DE DATE RELAIONALE. IMPLEMENTAREA CONCEPTELOR N SQL
Exemple:
- intersecia relaiilor r
1
cu r
2
poate fi nlocuit cu operaii de diferen astfel:
r
1
r
2
= r
1
- (r
1
- r
2
);
- jonciunea cu predicat (tetha-join) a relaiilor r
1
cu r
2
dup predicatul poate fi nlocuit cu
o selecie, astfel:
r
1

r
2
=

(r
1
xr
2
);
- jonciunea natural a relaiilor r
1
(X
1
) i r
2
(X
2
), r
1
r
2
, este o relaie pe schema X
1
X
2
i este
proiecia pe X
1
X
2
a unei jonciuni cu predicat care necesit expresii de forma r
1
.A=r
2
.A
pentru fiecare atribut AX
1
X
2
. Dac X
1
X
2
={A
1
,A
2
,...,A
n
} atunci
) (
2 . . .... . . 1 2 1
2 1 1 2 1 1 2 1
r r r r
n n
A r A r A r A r X X

;
- diviziunea a dou relaii, r
1
(X
1
) i r
2
(X
2
), cu X
1
X
2
este o relaie pe schema X
1
-X
2
. Un tuplu
t aparine relaiei r
1
r
2
dac pentru fiecare tuplu t
2
din r
2
exist un tuplu t
1
n r
1
care satisface
urmtoarele dou condiii:
t
1
[X
2
]=t
2
[X
2
]
t
1
[X
1
-X
2
]=t[X
1
-X
2
].
Operaia de mprire poate fi exprimat n termenii celor cinci operaii fundamentale astfel:
) ) ) ( (( ) (
1 2 1 1 2 1
2 1 2 1 2 1
r r r r r r
X X X X X X



expresia
avnd rolul de a elimina acele tupluri care nu ndeplinesc condiia X
1
X
2
=.

6.4. Echivalena expresiilor n algebra relaional
Ca orice limbaj formal algebra relaional permite formularea expresiilor echivalente.
Vom nota echivalena prin . Vom defini echivalena referindu-ne la expresiile definite pe
schemele bazelor de date.
Definiie:
Dou expresii pe o schem de baz de date, E
1
i E
2
, sunt echivalente pe o relaie R,
ceea ce notm cu E
1

R
E
2
, dac E
1
(r)=E
2
(r) pentru fiecare instan r a relaiei R. Dou expresii
pe o schem de baz de date, E
1
i E
2
, sunt absolut echivalente, adic E
1
E
2
dac E
1

R
E
2
pentru fiecare schem de relaie R.
Echivalena expresiilor n algebra relaional este extrem de important la optimizarea
cererilor exprimate n SQL prin aceea c ele sunt translatate n expresii ale algebrei relaionale,
expresii pentru care se evalueaz costul satisfacerii cererii (cost exprimat n termenii
dimensiunii rezultatelor intermediare i finale). Dac exist mai multe expresii diferite
echivalente cererii atunci se va alegea acea expresie care cost cel mai puin. Pentru a obine
expresiile echivalente se utilizeaz transformri echivalente, adic operaii prin care se
substituie o expresie echivalent cu o alta.
De exemplu, forma general a frazei SQL:
40
) ) ) ( ((
1 2 1
2 1 2 1
r r r
X X X X


SISTEME INFORMATICE FINANCIAR-CONTABILE
Select A
1
,A
2
,...,A
n
From r
1
,r
2
,...,r
m
[Where P] n care:
- A
1
,A
2
,...,A
n
reprezint atributele care dorim s apar n rezultat;
- r
1
,r
2
,...,r
m
reprezint relaiile implicate;
- P este predicatul sau condiia pe care trebuie s o ndeplineasc tuplurile care vor contribui
la calculul rezultatului;
este echivalent cu urmtoarea expresie a algebrei relaionale:
)) ... ( (
2 1 ,...,
1
m P A A
r r r
n

Dac clauza Where ... lipsete (posibilitate indicat prin [...]) atunci predicatul P este considerat
Adevrat.
n cele ce urmeaz vom prezenta cteva exemple de transformri echivalente:
1
o
. Atomizarea seleciilor: o selecie construit pe baza unui predicat conjunctiv, de exemplu
F
1
F
2
, poate fi substituit cu o cascad de selecii, astfel:
)) ( ( ) (
2 1 2 1
E E
F F F F

, unde E este orice expresie. Conform modului de definire aceast


transformare permite aplicarea transformrilor subsecvente care opereaz pe selecii cu condiii
atomice;
2
o
. Proiecii n cascad: o proiecie poate fi transformat ntr-o cascad de proiecii care
"elimin" atribute n diverse faze:
)) ( ( ) ( E E
XY X X
dac E este definit pe o mulime de atribute n care sunt incluse
atributele X i Y;
3
o
. Anticiparea seleciei cu respectarea jonciunii:
) ( ) (
2 1 2 1
E E E E
F F
dac expresia F refer numai atribute din expresia E
2
;
4
o
. Anticiparea proieciei cu respectarea jonciunii:
Fie expresiile E
1
i E
2
definite pe X
1
i respectiv, X
2
. Dac Y
2
X
2
i Y
2
X
1
X
2
(adic atributele
X
2
- Y
2
nu sunt implicate n jonciune) atunci are loc echivalena:
) ( ) (
2 1 2 1
2 2 1
E E E E
Y Y X

.
Combinnd aceast expresie cu proiecia n cascad obinem urmtoarea expresie echivalent:
)) ( ) ( ( ) (
2 1 2 1
2 1
E E E E
Y F Y Y F Y

. Vom desemna prin X
1
i X
2
atributele lui E
1
,
respectiv, E
2
i cu J
1
i J
2
submulimea de atribute care apar n condiia F. n aceste condiii
vom defini pe Y
1
i Y
2
astfel:
Y
1
=(X
1
Y)J
1
Y
2
=(X
2
Y)J
2
Pe baza acestei echivalene putem s eliminm din fiecare relaie toate atributele care nu apar n
rezultatul final i nu sunt implicate n jonciune.
5
o
. Combinarea seleciei i produsului cartezian pentru a forma un tetha-join:
2 1 2 1
) ( E E E E
F F

6
o
. Distributivitatea seleciei fa de reuniune:
Autorii
41
BAZE DE DATE RELAIONALE. IMPLEMENTAREA CONCEPTELOR N SQL
) ( ) ( ) (
2 1 2 1
E E E E
F F F

7
o
. Distributivitatea seleciei fa de diferen:
) ( ) ( ) (
2 1 2 1
E E E E
F F F

8
o
. Distributivitatea proieciei fa de reuniune:
) ( ) ( ) (
2 1 2 1
E E E E
X X X

Similar acestor transformri condiiile (predicatele) compuse pot fi transformate n
condiii atomice conform exemplelor urmtoare:
1. O selecie pe predicatul F
1
F
2
pe relaia R este echivalent cu o reuniune de selecii pe F
1
i
respectiv F
2
pe relaia R:
) ( ) ( ) (
2 1 2 1
R R R
F F F F

;
Exemplu:
Pe relaia Angajat cu extensia prezentat n figura 25 se dorete lista cu CNP, Nume, Vrsta
care au fie salariu mai mare de 25 milioane fie locul de munc 101. Acest cerere poate fi
exprimat n SQL ca:
a) selecie cu expresie predicativ format cu conectiva Or
SELECT Angajat.CNP, Angajat.Nume, Angajat.Vrsta
FROM Angajat
WHERE (([Angajat]![Salariu]>20 Or [Angajat]![Cod_Loc]=101));
b) ca reuniune de selecii
SELECT Angajat.CNP, Angajat.Nume, Angajat.Vrsta
FROM Angajat
WHERE (([Angajat]![Salariu]>20))
UNION
SELECT Angajat.CNP, Angajat.Nume, Angajat.Vrsta
FROM Angajat
WHERE (([Angajat]![Cod_Loc]=101));
ambele exprimri producnd acelai rezultat:
CNP Nume Vrsta
151 Ion PREDA 51
150 Adi ADAM 52
149 Nicu STEFAN 53
148 Ion RADU 54
250 Mara CUCU 52
2. O selecie pe predicatul F
1
F
2
pe relaia R este echivalent cu o intersecie de selecii pe F
1
i respectiv F
2
pe relaia R:
) ( ) ( ) (
2 1 2 1
R R R
F F F F

;
3. O selecie pe predicatul F
1
F
2
pe relaia R este echivalent cu o diferen de selecii pe F
1
i respectiv F
2
pe relaia R:
) ( ) ( ) (
2 1 2 1
R R R
F F F F


.
42
SISTEME INFORMATICE FINANCIAR-CONTABILE
Exemple:
Considerm schema bazei de date
Angajat(CNP, Nume, Vrsta, Salariu, Cod_Loc)
Loc_de_Munc(Cod, Denumire, ef)
Cu extensiile relaiilor din figura 25.
a) Dorim s obinem lista CNP, Nume, Vrsta cu angajaii care au salariul mai mare de
25 milioane. Acest cerere este formulat n termenii algebrei relaionale ca o
proiecie pe CNP, Nume, Vrsta din selecia din relaia Angajat dup predicatul
Salariu>25, adic
CNP,Nume,Vrsta
(
Salariu>25
(Angajat)), exprimat n SQL astfel:
SELECT Angajat.CNP, Angajat.Nume, Angajat.Vrsta
FROM Angajat
WHERE ((([Angajat]![Salariu])>25));
i produce ieirea:
CNP Nume Vrsta
151 Ion PREDA 51
150 Adi ADAM 52
250 Mara CUCU 52
b) S se listeze numele angajailor i denumirea locului de munc cu angajaii care au
salariul mai mare de 25 milioane:

Nume,Denumire
(Loc_de_MuncCod_Loc=Cod (
Salariu>25
(Angajat)));
Cererea SQL poate fi formulat astfel:
SELECT Angajat.Nume, Loc_de_Munc.Denumire
FROM Loc_de_Munc
INNER JOIN Angajat ON Loc_de_Munc.Cod = Angajat.Cod_Loc
WHERE ((([Angajat]![Salariu])>25));
i produce rezultatul:
Nume Denumire
Ion PREDA Productie
Adi ADAM Vnzri
Mara CUCU Aprovizionare
7. Calculul relaional
Termenul calcul relaional se refer la o familie de limbaje de interogare (cereri) bazate
pe calculul predicatelor de ordinul nti. Fa de algebra relaional care este un limbaj
procedural limbajele bazate pe calculul relaional sunt declarative adic specificarea cererii este
efectuat n termenii proprietilor rezultatului. Exist o multitudine de versiuni ale calculului
relaional dintre care vom prezenta, n cele ce urmeaz, calculul relaional orientat pe domeniu i
calculul relaional orientat pe tuplu cu declararea limitelor (intervalelor) variabilelor libere. n
cadrul calculului relaional simbolurile de predicate corespund relaiilor din baza de date.
Pentru a efectua o comparie ntre calculul relaional i algebra relaional vom defini, n
cele ce urmeaz, noiunea de independen de domeniu i noiunea de echivalen.
Autorii
43
BAZE DE DATE RELAIONALE. IMPLEMENTAREA CONCEPTELOR N SQL
O expresie a unui limbaj de cereri (interogare) este independent de domeniu dac
rezultatul su, pe orice instan corect a bazei de date, nu se schimb dac schimbm domeniile
pe baza crora este evaluat expresia. Un limbaj este independent de domeniu dac toate
expresiile sale sunt independente de domeniu. Cu aceste precizri algebra relaional este un
limbaj independent de domeniu n timp ce calculul relaional nu este.
Dou limbaje de cereri sunt echivalente atunci cnd pentru orice expresie n unul din ele
exist o expresie echivalent n cellalt i reciproc. n concordan cu acest definiie algebra
relaional i calculul relaional pe domeniu nu sunt echivalente deoarece prima este
independent de domeniu n timp ce calculul relaional este dependent de domeniu.
7.1. Calculul relaional orientat pe domeniu
Expresiile calculului relaional orientat pe domeniu au forma {A
1
:x
1
,...,A
k
:x
k
| f }, unde:
- A
1
,...,A
k
sunt atribute distincte care nu trebuie s apar n neaprat n schema bazei de date pe
care se definete interogarea (pot fi constante, apeluri de funcii etc.);
- x
1
,...,x
k
sunt variabile;
- f este o formul care respect urmtoarele reguli:
este de una din urmtoarele forme atomice:
R(A
1
:x
1
,...,A
p
:x
p
), unde R(A
1
,...,A
p
) este o schem relaional i x
1
,...,x
p
sunt
variabile;
x y sau x c, cu x i y variabile iar c constant i un operator de comparare
(=, <, <=, >, >=, <>).
dac f
1
i f
2
sunt formule atunci f
1
f
2
, f
1
f
2
i f
1
sunt formule;
dac f este o formul i x o variabil atunci x(f) i x(f) sunt formule (: exist
- EXISTS i : oricare ar fi - ANY).
Lista de perechi A
1
:x
1
,...,A
k
:x
k
este denumit "list int" deoarece definete structura
rezultatului construit din relaia pe A
1
,...,A
k
care conine tupluri ale cror valori substituite pentru
x
1
,...,x
p
evalueaz formula la Adevrat.
Evaluarea formulei la Adevrat urmeaz regulile:
o formul atomic R(A
1
:x
1
,...,A
p
:x
p
) este evaluat la Adevrat pentru valorile x
1
,...,x
p
care formez un tuplu n R;
o formul atomic x y sau x c este evaluat la adevrat dac x este n relaia
cu y, respectiv c;
conectivele , i au nelesul general de operatori logici i se evalueaz n
conformitate cu acest neles;
o formul construit cu cuantificatorii:
x(f) este Adevrat dac exist cel puin o valoare pentru x care o face adevrat
pe f;
x(f) este Adevrat dac f este adevrat pentru orice valoare a lui x.
Exemplu:
Considerm schema din figura 25
Angajat(CNP, Nume, Vrsta, Salariu, Cod_Loc)
Loc_de_Munc(Cod_Loc, Denumire, ef)
44
SISTEME INFORMATICE FINANCIAR-CONTABILE
i dorim s obinem lista cu angajaii care au salariul mai mare de 25 milioane. Acest
cerere este formulat n termenii algebrei relaionale ca o selecie din relaia Angajat
dup predicatul Salariu>25, adic
Salariu>25
(Angajat).
Acest expresie poate fi formulat n termenii calculului relaional astfel:
{CNP:m, Nume:n, Vrsta:v, Salariu:s, Cod_Loc:l | Angajat(CNP:m, Nume:n,
Vrsta:v, Salariu:s, Cod_Loc:l) s>25}
n acest exprimare condiia:
- Angajat(CNP:m, Nume:n, Vrsta:v, Salariu:s, Cod_Loc:l) specific faptul c
valorile m,n,v,s,l trebuie s fie tuplu n relaia Angajat;
- s>25 specific faptul c n rspuns vor fi incluse numai acele tupluri pentru care
valoarea variabilei s este mai mare ca 25.
Dac vom considera numai partea de calcul relaional n care expresiile sunt
independente de domeniu vom avea urmtoarele echivalene cu algebra relaional:
- pentru fiecare expresie a calculului relaional care este independent de domeniu exist o
expresie a algebrei relaionale echivalent acesteia;
- pentru fiecare expresie a algebrei relaionale exist o expresie a calculului relaional
echivalent acesteia.
SGBD-urile actuale implementeaz un limbaj uzual bazat n parte pe calculul relaional
orientat pe domeniu cunoscut sub numele de QBE (Query_by_Example). Acesta utilizeaz o
interfa grafic cu utilizatorul prin care acesta este eliberat de sarcina specificrii detaliilor.
Pentru cererile exprimate n QBE exist posibilitatea vizualizrii automate a expresiilor
echivalente exprimate n algebra relaional (sub form de fraze SQL).
7.2. Calculul relaional orientat pe tuplu cu declararea rangului (intervalelor de
variaie a) variabilelor libere
O expresie n calculul relaional orientat pe tuplu cu declararea rangului variabilelor
libere are forma general:
{T | L | f }, unde
- L este lista rangului (intervalelor) care enumereaz variabilele libere ale formulei f cu
intervalul respectiv de variaie. L este o list de tipul x(R), cu x o variabil i R o denumire de
relaie; dac x(R) este n lista rangului atunci n momentul evalurii expresiei valorile
posibile ale lui x sunt exact tupluri din relaia R;
- T este lista int compus din elemente de tipul Y:x.Z (sau mai simplu, prin reducere, de tip
x.Z), unde x este variabil iar Y i Z sunt secvene de atribute (de lungime egal); atributele
din Z trebuie s apar n schema relaiei care determin rangul lui x. n cazul n care rangul
lui x este relaia pe atributele X atunci X:x.X poate fi abreviat cu x.* i putem s-l scriem n
expresii ca atare;
- f este o formul cu:
atomi de tipul x.A c sau x
1
.A
1
x
2
.A
2
care compar, n concordan, valorile lui
x pe atributul A cu constanta c i valorile lui x
1
pe atributul A
1
cu valorile lui x
2
pe
atributul A
2
;
conective de tip logic ,i ;
cuantificatori, care asociaz rangul variabilelor, respectiv:
Autorii
45
BAZE DE DATE RELAIONALE. IMPLEMENTAREA CONCEPTELOR N SQL
x(R)(f) care nseamn "exist un tuplu x n relaia R care satisface formula f";
x(R)(f) care nseamn "fiecare tuplu x din R satisface formula f".
Declarrile de ranguri n lista de ranguri i cuantificri au un rol important: la
introducerea unei variabile x o declaraie de rang R(x) specific faptul c x poate s ia valori
numai dintre tuplurile relaiei R cu care este asociat. Din acest motiv acest limbaj nu necesit
condiii atomice ca cele cerute de calculul relaional orientat pe domeniu.
Ca i n algebra relaional n calculul relaional orientat pe tuplu este posibil definirea
expresiilor echivalente dintre care prezentm urmtoarele:
1. f
1
f
2
(f
1
f
2
);
2. f
1
f
2
(f
1
f
2
);
3. t(f(t)) t(f(t)), unde t(f(t)) este interpretat ca tuplu t pentru care formula (predicatul)
f este evaluat la Adevrat.
Exemple:
Considerm schema bazei de date:
Angajat(CNP, Nume, Vrsta, Salariu, Cod_Loc)
Loc_de_Munc(Cod, Denumire, ef)
cu extensiile relaiilor din figura 25.
1). Lista angajailor care au salariul mai mare de 25 milioane se exprim astfel:
2). Lista
angajailor cu structura CNP, Nume, Vrsta i cu salariul mai mare de 25 milioane se obine
printr-o expresie de forma:
{a.( CNP, Nume, Vrsta) | a(Angajat) | a.Salariu>25 }
3). Lista cu numele angajailor care au salariul mai mare de 25 milioane i denumirea locului de
munc se obine printr-o definiie de forma:
{a.Nume, l.Denumire | a(Angajat), l(Loc_de_Munc) | a.Cod_Loc=l.Coda.Salariu>25 }
Dei exprimarea pare uoar dezavantajul calculului relaional orientat pe tuplu cu
declararea rangului nu permite exprimarea aricrei cereri (n particular nu permite, de exemplu,
exprimarea operatorului de reuniune) aa cum o permite algebra relaional (sau calculul
relaional orientat pe domeniu.
Implementarea practic a calculului orientat pe tuplu este efectuat n SGBD-urile
actuale n dou moduri:
{ a.* | a(Angajat) | a.Salariu>25}
46
Lista int format
din toate atributele
relaiei
Rangul este reprezentat
de toate tuplurile relaiei
Angajat
Formula de selecie a
tuplurilor
SISTEME INFORMATICE FINANCIAR-CONTABILE
- prin acces la cereri SQL din limbaje procedurale pentru prelucrri tipice n care prin SQL se
obine o relaie pe care se efectueaz prelucrrile dorite, la modul tuplu cu tuplu, prin
instruciunile procedurale ale limbajului gazd;
- prin definirea de cursori i a unor instruciuni, pe aceti cursori, care permit accesul i
prelucrarea tuplu cu tuplu (metod implementat, de exemplu, n Oracle prin PL/SQL).
8. Vederi (viziuni)
Conform afirmaiilor din paragrafele anterioare ntr-o baz de date pot exista dou
categorii majore de relaii i anume:
- relaii de baz, al cror coninut este memorat n spaiul fizic alocat bazei de date;
- relaii derivate, al cror coninut este derivat din cel al altor relaii (de baz sau derivate).
Relaiile derivate pot fi clasificate n dou tipuri de baz:
- vederi materializate reprezentate de acele relaii derivate al cror coninut este stocat n baza
de date (temporar sau nu);
- relaii virtuale, denumite vederi (views) sau viziuni n cele ce urmeaz, care sunt definite prin
funcii (expresii n limbajul de cereri) ale cror date sunt nestocate n baza de date dar care se
comport i pot fi utilizate ca i cum ar fi relaii de baz.
Vederile materializate au avantajul faptului c sunt disponibile imediat pentru cereri i
dezavantajul c ocup spaiu fizic cu toate dezavantajele legate de gestiunea i tratarea operaiilor
efectuate asupra acestuia. Relaiile virtuale sunt extrem de uzuale deoarece sunt tratate ca i cum
ar fi materializate fr ns a pune probleme privind actualizarea, inserarea, tergerea etc sau de
orice alt natur generat de meninerea datelor stocate asociate lor. De regul, definirile
vederilor sunt stocate n spaiul fizic al bazei de date.
Exemplu:
Fie o baz de date pe relaiile:
R
1
(A,B,C), R
2
(D,E,F) i R
3
(G,H) care conine o vedere definit de un produs cartezian
(jonciune fr predicat) urmat de selecie:

Pe acest schem, cererea este executat prin nlocuirea lui R cu
definiia sa, astfel
Dintre avantajele utilizrii vederilor enumerm:
utilizatorii interesai numai de o parte a bazei de date pot fi scutii de celelalte detalii
irelevante pentru ei;
expresiile complexe pot fi definite utiliznd vederi (mai ales n cazul utilizrii repetate a unor
subexpresii). n acest sens o vedere sau viziune poate fi perceput ca o funcie sau procedur
din limbajele de programare: odat definit va fi invocat prin specificarea numelui su n
locurile cerute de sintaxa expresiilor relaionale n care este utilizat;
Autorii
47
) (
2 1
R R R
D A

>

) (
3
R R
G B

) ) ( (
2 3 1
R R R
D A G B

>

BAZE DE DATE RELAIONALE. IMPLEMENTAREA CONCEPTELOR N SQL
fiecrei vederi i se poate asocia o schem de autorizare a accesului prin aceasta putnd defini
protecii private ale bazei de date. Prin acest gen de definiri SGBD-urile actuale pun la
dispoziia utilizatorului o schem privat a bazei de date, denumit la cel mai nalt nivel prin
numele utilizatorului, schem n care sunt incluse numai vederile i relaiile la care are acces;
la eventualele restructurri ale bazei de date vechile sale relaii, cerute de aplicaiile existente
cu o anume structur, pot fi nlocuite cu vederi care pun la dispoziie acele relaii care nu mai
apar dup restructurare sau relaiile cu acele scheme cerute de aplicaii. De exemplu dac o
schem de relaie R(A,B,C) este nlocuit cu alte dou relaii R
1
(A,B) i R
2
(B,C) (lucru care
se ntmpl, de exemplu, la normalizare) atunci putem defini o vedere R=R
1
R
2
prin care
lsm neschimbate aplicaiile care utilizau R integral.
48

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