Professional Documents
Culture Documents
1. SGBD INGRES
2. SGBD SYSTEM R
3. SGBD ORACLE
* 4. SGBD dBASE
5. SGBD DBTG
6. SGBD IMS
7. Alte SGDB-uri
7.1. DATACOM/DB - tip liste inversate
* 7.2. TOTAL - tip retea
7.3. IDMS - tip retea
7.4. ADABAS - tip hibrid
* 7.5. System 2000 - tip ierarhic
7.6. DB2 - tip relational
* 7.7. DaTaSyS - tip relational
7.8. NOMAD - tip relational
* 7.9. RELGRAF - tip relational
1. Fisiere
2. Tipuri de organizare a fisierelor
2.1. Fisiere secventiale
2.2. Fisiere cu dispersie
2.3. Fisiere cu index rar
2.4. Fisiere cu index dens
2.5. Fisiere cu structura de B-arbore
* 2.6. Inplementarea modelului logic
3. Metode de cautare in fisiere
3.1. Fisiere cu indexi secundari
3.2. Indicarea partiala a chei de cautare
3.3. Cazuri speciale de cautare
* 3.4. Interpretarea vederilor
4. Inregistrari de lungime variabila
4.1. Metoda spatiului rezervat
4.2. Metoda inlantuirii
4.3. Metoda mixta
* 4.4. Transformarea modelului virtual in model real
* 4.5. Implementarea modelelor de baze de date in cazul unor entitati
si relatii de lungime variabila
1. Directii de cercetare
2. Calculatoare de baze de date
3. Interfete
3.1. Interfete pentru acces la date
3.2. Interfete pentru prezentari de date
3.3. Generatoarele de aplicatii
3.4. Facilitati de administrare
3.5. Dictionare
4. Baze de date orientate obiect
4.1. Sistemul VISION
4.2. Limbajul OPAL
5. Baze de cunostinte
* 6. Exemple
CAPITOLUL I
CURSUL 1
Limbajele LDD si LC sunt de cele mai multe ori extinderi ale unor limbaje de
programare numite limbaje gazda. Compilarea succesiunilor de comenzi pentru
descrierea datelor sau pentru operarea cu date se reduce in acest caz la o precompilare
adica transformarea acestor comenzi intr-o succesiune de instructiuni ale limbajului
gazda care prin executare sa dea efectul dorit. O alta modalitate de operare este aceea
a transformarii comenzilor in lansari de programe executabile.
O structura posibila pentru SGBD este data in figura 1.1. In aceasta figura
procesorul de cereri prelucreaza cererile utilizatorilor presentate la terminal sau sub
forma de programe de aplicatii scrise in LC transformandu-le in comenzi executabile
de catre gestionarul bazei de date; compilatorul LDD interpreteaza transforma
descrierile utilizatorului in comenzi pentru initierea sau modificarea unei baze de
date; gestionarul bazei de date transforma comenzile de cereri si descrieri de baze de
date in operatii executabile de catre sistemul de gestiune a fisierelor care opereaza
asupra datelor aflate in diferite fisiere.
Figura 1.1.
- Standardizarea informatiilor.
- Asigurarea securitatii bazelor de date in sensul acordarii si urmaririi modului
de acces al utilizatorilor la diferite parti componente ale bazelor de date.
- Programatorii de aplicatii care pot scrie programe in LC, acestea fiind apoi
compilate si memorate in fisiere putand fi lansate in executie de utilizatori prin
invocarea numelui asociat lor.
CURSUL 2
Fiecare dintre cele trei nivele contine subnivele. De exemplu utilizatorii pot fi
utilizatori obisnuiti, fara cunostinte de programare sau programatori de aplicatii,
organizarea vederilor corespunzatoare lor fiind diferita. La fel nivelul fizic poate sa
contina un subnivel logic in care conteaza semnificatia diferitelor campuri din
inregistrarile fisierelor si structurile de date asociate si un subnivel fizic in care
esential este numai modul de organizare si gestionare a blocurilor pe memoria
externa.
3. Scheme externe
Informatiile ce apar in scheme externe pot fi luate ca atare din nivelele logic si
fizic sau pot fi deduse din aceste informatii pe baza unor calcule. De exemplu pentru
o persoana poate sa apara intr-o vedere atributul varsta dar la nivel logic si fizic
atributul varsta nu este indicat din cauza permanentei modificari a continutului lui. In
acest caz se foloseste la nivel logic un atribut data_nasterii care prin scadere din data
curenta permite aflarea varstei persoanei respective. Alte informatii ce pot sa apara in
vederi si care de obicei nu sunt prevazute in schemele conceptuale privesc numarul de
elemente dintr-o multime, media valorilor unei multimi de elemente numerice si alte
informatii asemanatoare.
- relatie unu-la-unu (notata 1:1) in cazul in care fiecarui element din prima
entitate ii corespunde cel mult un element din a doua entitate si reciproc.
In practica cele mai des intalnite sunt ultimile doua tipuri de relatii dar la
implementarea bazelor de date de cele mai multe ori ultimul tip se reduce la relatii de
tipul 1:N dupa cum vom vedea in continuare.
4. Scheme conceptuale
5. Scheme interne
Proiectarea unei baze de date priveste in primul rand nivelul logic si mai putin
cel fizic. Proiectarea se poate face plecand de la modelul relational care permite o
tehnologie de proiectare si apoi se poate transforma rezultatul proiectarii in oricare
dintre modele prin adaptarile corespunzatoare.
CURSUL 3
Poate cea mai importanta parte din procesul construirii unei baze de date il
constituie studiul sistemului ce urmeaza sa fie reflectat in baza de date. Stabilirea
informatiilor relevante pentru sistem si a relatiilor dintre ele este de cea mai mare
importanta pentru etapele urmatoare.
Pentru a construi o baza de date corespunzatoare unui sistem real dat se face
mai intai o apreciere generala a sistemului. In aceasta apreciere se includ informatii
privind structura sistemului, elementele esentiale ale sistemului care sunt cuprinse
intr-o schita preliminara. Schita cuprinde printre alte informatii si modul in care
sistemul este vazut de diferitele persoane implicate in sistemul respectiv. Se creaza un
model informational in care sunt cuprinse principalele functiuni si fluxul de
informatii din sistem. Sistemul trebuie privit unitar si nu ca o alaturare a
componentelor sale. In baza de date multe parti sunt folosite in comun de diferitele
componente ale sistemului.
2. Vederile utilizatorilor
Fiecare aplicatie presupune utilizarea unei parti din baza de date, folosind
informatiile intr-un mod determinat. Aceasta parte de informatie se numeste vedere.
O baza de date poate sa aiba una sau mai multe vederi. La fiecare vedere corespunde
un grup de utilizatori. Pentru un grup particular se definesc tipurile de cereri de
informatii si modul de determinare a datelor din baza de date care formeaza
raspunsuri la aceste cereri.
Extinderea se poate face fie prin adaugarea de noi atribute la relatiile existente
in baza de date fie prin adaugarea unor relatii noi. Restructurarea presupune
rearanjarea diferitelor atribute in noi relatii.
Exemplul 2.1. Un prim model pentru o vedere a unei facultati avand drept
utilizatori membrii Colectivului de Conducere este cel din fig. 2.1.
___________________
| |
| STUDENTI |
|_________________|
/ \
/ \
/ \
__________________ _________________ ________________
| | | CADRE | | PERSONAL |
| CURSURI |-------------| DIDACTICE |-------| AJUTATOR |
|________________| |_______________| |______________|
Figura 2.1.
CURSUL 4
De obicei relatiile sunt reprezentate sub forma unor tabele in care fiecare rind
reprezinta un tuplu si fiecare coloana reprezinta valorile tuplurilor dintr-un domeniu
dat al produsului cartezian.
Din punct de vedere al bazelor de date cea de-a doua definitie este de preferat
deoarece permite prelucrarea informatiilor corespunzatoare unui atribut fara a
cunoaste pozitia acelui atribut in relatie, aceasta permitand o mai mare independenta
de reprezentare a datelor.
Pe langa cele cinci operatii de baza mai pot fi utilizate si alte operatii numite
operatii derivate ce se pot exprima in functie de operatiile de baza. Utilizarea acestor
operatii permit o mai simpla exprimare a cererilor si uneori, daca sunt bine
implementate se poate obtine si un raspuns mai rapid. Cele mai des utilizate operatii
derivate sunt urmatoarele:
Cu operatorii din algebra relationala se pot defini noi relatii ce pot fi utilizate
pentru: regasirea unor informatii din baza de date, definirea unor reactualizari
(inserare, stergere sau modificare) in baza de date, definirea unor date virtuale
(vederi), definirea unor rezultate intermediare, definirea unor drepturi de acces la
date, definirea unor cerinte de stabilitate in cazul accesului concurent la date,
definirea constrangerilor de integritate si altele.
Se poate obtine o eficienta mai buna daca uneori se combina mai multi
operatori ce pot sa apara intr-o succesiune data in diferitele cereri. Un exemplu ar fi
expresia selectie-uniune-proiectie care poate sa apara relativ frecvent in cereri prin
selectarea unor tupluri ale unei relatii, combinarea acestora cu tuplurile altei relatii
prin uniune si alegerea unor campuri din relatia obtinuta. Astfel de succesiuni se pot
implementa fara a mai fi nevoie de unele relatii intermediare sau cu micsorarea
numarului de campuri si de tupluri ceea ce presupune spatiu mai putin ocupat si timp
de calcul mai mic.
- Catul generalizat al relatiilor R(X,Y) si S(Y,Z) unde Y este lista atributelor comune
celor doua relatii, notat R DIVIDEBY S, este o relatie T(X,Z) ce contine toate
tuplurile de forma (x,z) asfel incat pentru orice y cu (y,z) din S rezulta ca (x,y) este
un tuplu din R. Se obseva ca daca Z este multimea vida se obtine catul dintre R si S,
daca X este multimea vida se obtine catul dintre S si R si daca Y este multimea vida
se obtine produsul cartezian al celor doua relatii.
- Uniunea externa (outer join) contine tuplurile uniunii naturale la care se adauga cate
un tuplu pentru acele tupluri dintr-o relatie care nu au corespondent in cealalta relatie.
Tuplurile adaugate astfel au valoarea null pentru toate atributele ce nu apar in relatia
din care provin.
CURSUL 5
2. Daca /v1 si /v2 sunt formule, atunci /v1 A /v2, /v1 V /v2 si ! /v1
sunt formule corespunzatoare respectiv propozitiilor "/v1 si /v2 sunt
adevarate", "/v1 sau /v2 sau ambele sunt adevarate" si "/v1 nu este
adevarata". Calitatea fiecarei ocurente de a fi libera sau legata in
/v1 si /v2 ramane aceeasi si in formulele rezulta prin combinarea cu
operatorii A, V si !.
Teorema 3.1. Daca E este o expresie din algebra relationala, atunci exista o
expresie sigura in calculul relational pe tupluri echivalenta cu E.
Demonstratie. Vom aplica metoda inductiei complete dupa numarul
ocurentelor operatorilor din expresia E.
Deoarece orice expresie din algebra relationala se poate obtine inductiv prin
aplicarea de un numar finit de ori a celor cinci operatii de baza rezulta ca proprietatea
din enuntul teoremei este adevarata.
Aplicand algoritmul de transformare a unei expresii din algebra relationala
intr-o expresie sigura din calculul relational pe tupluri rezultat din demonstratia
teoremei precedente nu se ajunge mereu la cea mai simpla expresie.
Exemplul 3.5. Expresia finala din exemplul 3.4 pentru compunerea a doua
relatii binare poate fi transformata prin procedeul descris obtinand:
Daca /w are zero operatori atunci /w este un atom care poate fi de una din
formele x1 0 x2, x1 0 a sau R(xi1,xi2,...,xik) unde 0 este un operator de comparatie
aritmetica si a este o constanta. Pentru x1 0 x2 expresia echivalenta este /S 1 0 2 (E X
E), pentru x1 0 a expresia echivalenta este /S 1 0 'a' (E) si pentru R(xi1,xi2,...,xik) se
construieste expresia /Pj1,j2,...,jm(/S F(R)) unde F este o formula ce contine termeni
u=v daca xiu si xiv reprezinta aceeasi variabila si u<v legati cu operatorul A iar
indicii j1,j2,...,jm sunt alesi in asa fel incat x1=xij1, x2=xij2, ..., xm=xijm, deci dau
una din pozitiile pe care se afla in R variabilele domeniu x1,x2,...,xm.
Pentru a gasi expresia echivalenta din algebra relationala procedam in felul urmator.
Notam E = /P1(R) U /P2(R) U /P1(S) U /P2(S). Eliminam operatorii A si /V prin
metoda din lema 3.2 si obtinem
E1 = /P 1,3,2(S X E) U /P 3,1,2(S X E)
Operatorul N! este util atat pentru simplificarea scrierii unor cereri prin
numirea unor subexpresii din expresiile mai complicate cat si prin posibilitatea
construirii unor vederi.
R + (S % A,C->B)
(R % A,B->C) - S
si, in sfarsit, produsul cartezian al celor doua relatii cu rezultatul avand atributele
A,B,D,C se poate face cu expresia
R * (S % A->D,C)
Din cele prezentate anterior se vede ca oricare din cele cinci operatii de baza
din algebra relationala se pot reprezenta in ISBL de unde rezulta ca acesta este un
limbaj complet.
CUMPARATORI(NUME,ADRESA,CONT)
COMENZI(NR_COM,NUME,MARFA,CANTITATE)
MAGAZINE(NUMEMAG,ADRESAMAG,MARFA,PRET)
CM = N!COMENZI * N!MAGAZINE
LIST CM : NUME = "Popescu Dan" % NUMEMAG,MARFA,PRET
Pentru o cerere de tipul "Listeaza toate magazinele care vand toate marfurile
comandate de Popescu Dan" se poate obtine raspunsul prin urmatoarea succesiune de
expresii:
M = N!MAGAZINE % NUMEMAG
B = N!MAGAZINE % MARFA
C = N!COMENZI : NUME = "Popescu Dan" % MARFA
NB = (N!M * N!B) - (N!MAGAZINE % NUMEMAG,MARFA)
NBC = N!NB.(N!M *N!C)
LIST M - (NBC % NUMEMAG)
r @c R, s @c S
/A1,A2,...,An R
r @c R : F'
unde F' se obtine din F prin inlocuirea lui A sau a numarului de componenta
corespunzator lui A prin r/A. Se pot face atribuiri de forma
R/A1,A2,...,An <- <expresie>
/A1,A2,...,An R /B1,B2,...,Bm(@01b1,@02b2,...,@0mbm)
unde R este numele unei relatii, A1,...,An si B1,...,Bm sunt atribute ale lui R, @0i
reprezinta un operator de comparatie aritmetica (=,@=/,<,@<=,> sau @>=) care
poate fi omis si in acest caz se ia prin lipsa =, iar bi este o constanta. Aplicatia
precedenta corespunde expresiei din algebra relationala:
@P/A1,A2,...,An(@S/B1@01b1@A...@ABm@0mbm(R))
Exemplul 3.8. Prima cerere din exemplul 3.7 se poate exprima sub forma
In SQUARE sunt permise variabile tuplu numite variabile libere, ele putand sa
aiba ca indici o lista de nume de atribute ce dau componentele ce se considera pentru
tuplul respectiv. Daca nu apare aceasta lista se considera toate atributele relatiei
parcursa de variabila tuplu. Astfel o expresie de forma
{u | (@Et1)...(@Etk)(R1(t1)@A...@ARk(tk)@A@w@A@v)}
unde @w contine egalitati de forma u[j]=ti[m] cu m si i alese in asa fel incat j=|@a1|
+|@a2|+...+|@ai-1|+m si m@<=|@ai| si formula @v contine aplicatii, operatorii
algebrici U,@O,-, operatori Booleeni, operatii aritmetice si comparatii aritmetice si
de multimi (=,@=/,@C=,etc.). Expresia prezentata pentru produsul cartezian este un
caz particular de acest tip de expresie in care formula @v fiind omisa se presupune tot
timpul adevarata si deci luandu-se toate combinatiile de tupluri din relatia R cu toate
combinatiile de tupluri din relatia S se obtine produsul cartezian.
Exemplul 3.9. Prima cerere din exemplul 3.7 se mai poate scrie
iar cea de-a treia cerere din acelasi exemplu se poate scrie
@|v R/A1,A2,...,An(a1,a2,...,an)
unde A1,A2,...,An este lista atributelor lui R ce primesc valori in tuplu respectiv
a1,a2,...,an, restul atributelor ramanand nedefinite (valoarea null). Mai general,
operatia de inserare se poate scrie sub forma
@|v R/A1,A2,...,An(<expresie>)
unde valoarea <expresie> este o relatie n-ara S urmand sa se faca o inserare de tuplu
in R corespunzatoare fiecarui tuplu din S.
@|^ R/A1,A2,...,An(<expresie>)
unde <expresie> este ca mai sus si efectul este eliminarea din relatia R a tuturor
tuplurilor t pentru care exista un tuplu u in S care are aceleasi valori pentru atributele
A1,A2,...,An ca si t.
unde A-uri si B-uri sunt atribute ale lui R, B-uri putand fi precedati de operatorii
aritmetici +,-,X sau /, a-uri si b-uri sunt constante iar efectul este urmatorul: se cauta
in R acele tupluri pentru care valorile corespunzatoare atributelor A1,A2,...,An sunt
respectiv a1,a2,...,am si pentru aceste tupluri se inlocuiesc valorile fiecarui Bi cu bi
daca Bi nu este precedat de un operator sau cu valoarea rezultata din operatia
efectuata intre fosta valoare a lui Bi si bi daca Bi este precedat de un operator
aritmetic.
Exemplul 3.10. Pentru baza de date din exemplul 3.7 putem sa inseram un nou
cumparator prin instructiunea
Exemplul 3.11. Pentru baza de date din exemplul 3.7 aflarea magazinelor care
vand cel mai ieftin portocalele se face prin
QUEL este un limbaj de cereri pentru INGRES care este un sistem de gestiune
a bazelor de date dezvoltat la Universitatea din California, Berkeley si merge sub
sistem de operare UNIX. Acest limbaj poate fi utilizat independent sau inclus in
limbajul de programare C si in acest caz instructiunile lui sunt precedate de ## si sunt
prelucrate prin preprocesare.
{u\(r) | (@Et1)...(@Etk)(R1(t1)@A...@ARk(tk)
@Au[1]=ti1[j1]@A...@Au[r]=tir[jr]@A @v)}
range of t1 is R1
.
.
.
range of tk is Rk
retrieve (ti1.A1,...,tir.Ar)
where @v'
in care Am este al jm-lea atribut al relatiei Rim pentru m=1,2,...,k si @v' se obtine din
@v printr-o translatare dupa urmatoarele reguli:
- se inlocuiesc in @v referintele lui u[m] cu tim[jm]
- se inlocuiesc apoi referintele lui tm[n] prin tm.B unde B este al
n-lea atribut al relatiei Rm pentru toti n si m
- se inlocuiesc @<= cu <=, @>= cu >= si @=/ cu !=
- se inlocuiesc @A,V si @! cu and, or si respectiv not.
[ nume-variabila = ] expresie
Exemplul 3.13. Prima cerere din exemplul 3.8 se poate exprima prin
range of t is CUMPARATORI
retrive (t.NUME)
where t.CONT < 0
range of t is COMENZI
range of s is MAGAZINE
retrieve (s.NUMEMAG,s.MARFA,s.PRET)
where t.NUME = "Popescu Dan" and t.MARFA = s.MARFA
range of t is R
delete t
where @v(t)
care sterge din R toate tulurile t care fac adevarata formula @v.
Se pot adauga tupluri la o relatie cu o succesiune de forma
range of t1 is R1
.
.
.
range of tk is Rk
append to S(A1=w1,...,An=wn)
where @v(t1,...,tk)
care adauga relatiei S cate un tuplu pentru fiecare combinatie t1,...,tk ce face @v
adevarata, tuplul respectiv avand drept valori rezultatul evaluarilor expresiilor
w1,...,wn in care intervin componente ale tuplurilor si constante eventual legate prin
operatii aritmetice, pentru atributele A1,...,An, restul atributelor fiind nedefinite
(valoarea null).
range of t is R
replace t ( lista-rezultate )
[ where conditie ]
range of t in CUMPARATORI
append to COMENZI(NR_COM=urmcom+
+,NUME=t.NUME,MARFA="paine",CANTITATE=3)
where t.CONT > 0
range of t is MAGAZINE
retrieve into MAG(NUME=t.NUMEMAG,ADRESA=t.ADRESAMAG)
sort MAG
print MAG
range of r is R
append to T(C1=r.A1,...,Cn=r.An)
range of s is S
append to T(C1=s.B1,...,Cn=s.Bn)
range of r is R
append to T(C1=r.A1,...,Cn=r.An)
range of s is S
range of t is T
delete t
where s.B1=t.C1 and ... and s.Bn=t.Cn
range of r is R
range of s is S
append to T(C1=r.A1,...,Cn=r.An,Cn+1=s.B1,...,Cn+m=s.Bm)
range of r is R
append to T(C1=r.A1,...,Ck=r.Ak)
sort T
range of r is R
append to T(C1=r.A1,...,Cn=r.An)
where F'
Exemplul 3.16. A treia cerere din exemplul 3.8 se poate scrie in QUEL
range of m is MAGAZINE
range of n is MAGAZINE
retrieve into MAG(MG=m.NUMEMAG,MR=n.MARFA)
range of t is MAG
delete t
where t.MG=m.NUMEMAG and t.MR=m.MARFA
range of r is comenzi
retrive into COM(MG=t.MG,MR=t.MR)
where r.NUME="Popescu Dan" and r.MARFA=t.MR
retrieve into MAGA(MG=m.NUMEMAG)
range of u is MAGA
range of j is COM
delete u
where u.MG=j.MG
sort MAGA
print MAGA
In limbajul QUEL se pot folosi functiile agregate count, avg, sum, min sau
max ele aplicandu-se expresiilor ce contin relatii unare, constante si operatori
aritmetici. Functiile agregat countu, avgu si sumu elimina duplicatele. Referirea
functiilor agregat se face prin
Se pot partitiona tuplurile unei relatii in raport de valorile uneia sau mai
multor expresii calculate si aplicand functiile agregat pentru fiecare grup de tupluri
pentru care s-au obtinut aceleasi valori prin calculele facute cu o expresie de forma
agregat(E by F1,F2,...,Fk)
unde E si F1,F2,...,Fk sunt expresii cu operanzi constante sau termeni t.A unde t este
o variabila tuplu si A un atribut. Aceasta expresie produce gruparea inregistrarilor
relatiei R parcursa de t in clase care dau aceleasi valori pentru expresiile F1,F2,...,Fk
si pentru fiecare clasa in parte se calculeaza functia agregat pentru valorile expresiei E
pentru fiecare din tuplurile clasei respective.
range of m is MAGAZINE
retrieve into MAG(MARFA=m.MARFA,PM=avg(m.PRET by m.MARFA))
sort MAG
print MAG
Un schelet de relatie este ca cel din fig.3.1 format numai din linii sub forma
unui tabel, fara sa aiba inscris nimic in el si se obtine de obicei prin apasarea unei
taste.
_____________________________________________________________________
________
nume relatie | atribut | atribut | atribut |
_______________|__________________|___________________|
______________________|
[comenzi | [mentiune | [mentiune | [mentiune |
penturu | caracterizare | caracterizare | caracterizare |
tupluri] | atribut] | atribut] | atribut] |
| | | |
Figura 3.1.
Afisarea unei relatii existente in baza de date se face scriind intr-un schelet de
relatie pe prima linie si in prima coloana numele relatiei respective urmata de
operatorul P. primindu-se ca raspuns pe prima linie atributele corespunzatoare relatiei
respective. Apoi in dreptul atributelor se pot pune constante care sunt siruri de
caractere sau variabile care sunt siruri de caractere precedate de semnul '_'. Pentru
variabile se folosesc de obicei drept nume un tip de valoare pe care ar putea sa il ia
variabila respectiva (de aici vine si numele limbajului - cerere prin exemplu).
Domeniul unei variabile este constituit din toate domeniile atributelor in care acea
variabila apare in toate relatiile de pe ecran.
Exemplul 3.18. A doua cerere din exemplul 3.8 se poate exprima in QBE
dupa cum se arata in fig.3.2. Mai intai s-au adus pe ecran cele doua relatii folosite
punand in doua schelete pe primul loc COMENZI P. si respectiv MAGAZINE P.
dupa care se complecteaza cate o linie in fiecare relatie dupa cum se vede in figura.
Variabila _portocale este folosita aici pentru a pune in corespondenta o marfa ceruta
de Popescu Dan cu marfa vanduta de un magazin. Daca cele doua valori coincid, se
selecteaza din relatia MAGAZINE tuplul asociat si se tiparesc din el valorile
corespunzatoare pentru numele magazinului, marfa si pretul de vanzare al marfii
respective in acel magazin. Tiparirea si a adresei magazinului se poate face fie
introducand un P. in dreptul lui ADRESAMAG, fie punand un P. in dreptul lui
MAGAZINE si nu se mai mentioneaza P. in alta coloana.
_____________________________________________________________________
________
COMENZI | NR_COM | NUME | MARFA | CANTITATE |
______________|_____________|_________________|______________|
_______________|
| | Popescu Dan | _portocale | |
| | | | |
_____________________________________________________________________
________
MAGAZINE | NUMEMAG | ADRESAMAG | MARFA | PRET |
______________|_____________|_________________|______________|
_______________|
| P. | | P._portocale | P. |
| | | | |
Figura 3.2.
{a1a2...an | (@Eb1)(@Eb2)...(@Ebm)(R1(c11,...,c1k1)@A...@ARp(cp1,...,cpkp))}
unde fiecare cij este un al sau un bl sau o constanta si fiecare variabila de domeniu al
si bl apare cel putin o data ca un cij se poate exprima in QBE dupa cum urmeaza. Se
afiseaza scheletele relatiilor R1,...,Rp (nu neaparat distincte) si se creaza nume de
variabile pentru fiecare din ai si bj (de obicei numele exprima valori posibile pentru
variabila respectiva precedarte de '_'). Apoi, pentru fiecare termen Ri(ci1,...,ciki) se
creaza un tuplu ce contine pe pozitia j pe cij daca aceasta este o constanta si respectiv
variabila asociata daca cij este un al sau un bl. Campurile ce contin variabile ce nu
mai apar in alta parte pot fi lasate libere. Daca toate atributele al apar intr-un tuplu al
unei relatii se prefixeaza acele variabile cu P., altfel se construieste o relatie
suplimentara (fara nume) cu un tuplu ce contine comanda P. in prima coloana si
numele asociate variabilelor a1,...,an in celelalte coloane.
{a1a2a3a4 | (@Eb1)(@Eb2)
(CUMPARATORI(a1b1a4)@ACOMENZI(b2a1a2a3))}
_____________________________________________________________________
_________
CUMPARATORI | NUME | ADRESA | CONT |
________________|___________________|_________________________|
_______________|
| _Popescu | | _999 |
| | | |
_____________________________________________________________________
_________
COMENZI | NR_COM | NUME | MARFA | CANTITATE |
________________|____________|________________|_______________|
_______________|
| | _Popescu | _portocale | _88 |
| | | | |
_____________________________________________________________________
_________
| | | | |
________________|____________|________________|_______________|
_______________|
P. | _Popescu | _portocale | _88 | _999 |
| | | | |
Figura 3.3.
_____________________________________________________________________
_________
COMENZI | NR_COM | NUME | MARFA | CANTITATE |
________________|____________|________________|_______________|
_______________|
| | Popescu Dan | portocale | _x |
P. | | | portocale | > _x |
| | | | |
Figura 3.4.
Pentru diferite campuri se pot defini si combinatii formate din parti constante
si parti variabile ce corespund subsirurilor ce nu sunt continute in partea constanta.
De exemplu Calea Unirii _99 poate constitui o adresa, selectandu-se tuplurile cu
adresa in Calea Unirii indiferent de nunar, acest numar devine valoarea curenta a
variabilei _99 si poate fi utilizat in alta parte unde apare din nou aceasta variabila.
Se poate nega un tuplu punand in prima coloana a lui semnul @!. Negarea
unui tuplu inseamna selectarea acelor tupluri din relatie pentru care nu sunt verificate
conditiile tuplului negat.
Exemplul 3.21. Pentru a tiparii pentru fiecare marfa care sunt comenzile cu
cele mai mari cantitati cerute se poate scrie cererea din figura 3.5.
_____________________________________________________________________
________
COMENZI | NR_COM | NUME | MARFA | CANTITATE |
________________|____________|________________|_______________|
______________|
| | | _portocale | _x |
P. | | | _portocale | > _x |
| | | | |
Figura 3.5.
In QBE se pot folosi operatorii agregati CNT., SUM., AVG., MIN. si MAX.
Se mai pot folosii operatorii ALL. pentru pastrarea duplicatelor unei relatii si UN.
pentru eliminarea duplicatelor. Multe operatii din QBE elimina automat duplicatele.
_____________________________________________________________________
________
MAGAZINE | NUMEMAG | ADRESAMAG | MARFA | PRET |
___________|_________________|__________________|________________|
___________|
| P.CNT.UN.ALL._x | | | |
| | | | |
Figura 3.6.
_____________________________________________________________________
_________
MAGAZINE | NUMEMAG | ADRESAMAG | MARFA | PRET |
___________|_________________|__________________|________________|
____________|
I. | Unirea | _adresa | portocale | 2000 |
| Unirea | _adresa | | |
| | | | |
Figura 3.7.
_____________________________________________________________________
_________
MAGAZINE | NUMEMAG | ADRESAMAG | MARFA | PRET |
___________|_________________|__________________|________________|
____________|
U. | Unirea | | _portocale | _x * 1.1 |
| Unirea | | _portocale | _x |
| | | | |
Figura 3.8.
Exemplul 3.24. Listarea magazinelor care vand portocalele cu pret mai mare
decat se vand merele in Piata Chibrit dar mai ieftin decat dublul pretului perelor din
Piata Norilor se poate face prin cererea din fig.3.9.
_____________________________________________________________________
________
MAGAZINE | NUMEMAG | ADRESAMAG | MARFA | PRET |
____________|________________|__________________|________________|
___________|
| P. | | portocale | _pretpo |
| Piata Chibrit | | mere | _pretme |
| Piata Norilor | | pere | _pretpe |
| | | | |
_______________________________
| CONDITIONS |
|_______________________________|
| _pretpo > _pretme |
| _pretpo < _pretpe * 2 |
| |
Figura 3.9.
_____________________________________________________________________
________
I.MAGAZINE I. | NUMEMAG | ADRESAMAG | MARFA | PRET |
_______________|_______________|_________________|______________|
____________|
KEY I. | Y | N | Y | N |
TYPE I. | CHAR | CHAR | CHAR | FLOAT |
DOMAIN I. | NUME | ADRESE | MARFURI | BANI |
INVERSION I. | N | N | Y | N |
| | | | |
Figura 3.10.
_____________________________________________________________________
________
R | | | | |
______________|_____________|______________|___________________|
_____________|
| _a1 | _a2 | ... | _an |
| | | | |
_____________________________________________________________________
________
S | | | | |
______________|_____________|______________|___________________|
_____________|
| _b1 | _b2 | ... | _bn |
| | | | |
_____________________________________________________________________
________
T | | | | |
______________|_____________|______________|___________________|
_____________|
I. | _a1 | _a2 | ... | _an |
I. | _b1 | _b2 | ... | _bn |
| | | | |
Figura 3.11.
Daca prin transfeormarile indicate din formula F se obtine formula F', atunci selectia
se poate exprima ca in fig.3.12.
_____________________________________________________________________
________
R | A1 | A2 | ... | An |
_______________|______________|_____________|______________|
_________________|
| _a1 | _a2 | ... | _an |
| | | | |
_______________________
| CONDITIONS |
|_______________________|
| F' |
| |
_____________________________________________________________________
________
T | | | | |
_______________|______________|_____________|______________|
_________________|
I. | _a1 | _a2 | ... | _an |
| | | | |
Figura 3.12.
In QBE se pot crea vederi care se definesc dupa regulile obisnuite de definire
a relatiilor doar ca numele relatiei ce defineste vederea este precedat la definire de
cuvantul VIEW. O vedere V se evalueaza de fiecare data cand este folosita intr-o alta
cerere cu continutul actual al relatiilor ce apar in vedere.
Exemplul 3.26. Se poate alcatui o vedere pentru a calcula nota de plata a unei
persoane cu preturile minime percepute de vanzatori pentru marfurile comandate cum
se arata in fig.3.13. Evaluarea se face in momentul unei cereri de tipul celei din
fig.3.14 cand se indica persoana pentru care se aplica nota de plata.
_____________________________________________________________________
______
I.VIEW NOTA-DE-PLATA I. | NUME | MARFA | SUMA |
________________________|____________________|______________|
______________|
I. | _Ionescu | _portocale |_q*MIN.ALL._P |
| | | |
_____________________________________________________________________
______
COMENZI | NR_COM | NUME | MARFA | CANTITATE |
_______________|______________|______________|______________|
______________|
| | _Ionescu | _portocale | _q |
| | | | |
_____________________________________________________________________
______
MAGAZINE | NUMEMAG | ADRESAMAG | MARFA | PRET |
_______________|______________|______________|______________|
______________|
| | | _portocale | _p |
| | | | |
Figura 3.13.
_____________________________________________________________________
______
NOTA-DE-PLATA | NUME | MARFA | SUMA |
_________________________|___________________|______________|
______________|
P. | Popescu Dan | _portocale | _999 |
| | | |
Figura 3.14.
GATA
1.3. Descrierea bazelor de date de tip relational
2. SQL
Limbajul SQL (Structured Query Language) este unul din limbajele
relationale de cereri care formeaza nucleul multor sisteme de gestiune a bazelor de
date si de aceea il prezentam mai pe larg decat celelalte limbaje. Se poate spune ca
SQL este o perfectionare a limbajului SQUARE (vezi 3.1.2.2), eliminand utilizarea
indicilor ce preced sau succed numele unei relatii prin utilizarea unor cuvinte cheie.
In mai 1986 a fost recunoscuta de ANSI standardizarea limbajului SQL.
Intr-o prima varianta SQL s-a numit SEQUEL. El a fost definit prima oara de
Chamberlin si altii de la IBM Research Laboratory din San Jose, California in 1974 si
folosit in prototipul System R si apoi in DB2 pentru mediu MVS, SQL/DS pentru
medii VM si VSE, OS/2 Extended Edition Database Manager pentru mediu OS/2
extins, SQL/400 pentru mediu OS/400 si altele.
/A1,A2,...,An R/B1,B2,...,Bm(@01b1,@02b2,...,@0bm)
SELECT A1,A2,...,An
FROM R
WHERE B1@01b1 AND B2@02b2 AND ... AND Bm@0mbm
SELECT NUME
FROM CUMPARATORI
WHERE CONT < 0
unde camp este de tip cuvant si cuvant poate sa contina caracterele "_" care
inlocuieste orice caracter, "%" inlocuieste orice cuvant si orice alt caracter este luat ca
atare. Rezultatul este o valoare de adevar dupa cum camp contine o valoare sir de
caractere ce se conformeaza modului de alcatuire din cuvant sau nu respectiv contine
sau nu valoarea null. Se pot folosi de asemenea IN sau NOT IN pentru a indica
apartenenta sau neapartenenta la o multime, EXISTS sau NOT EXISTS pentru a
verifica existenta sau inexistanta unui element intr-o multime
si se poate aplica UNION intre doua selectii pentru a realiza reuniunea.
Exemplul 3.13. A doua cerere din exemplul 3.7 se poate scrie in SQL
Se pot atribui nume unor tupluri ale unor relatii folosite ca variabile libere ce
pot fi utilizate in celelalte parti componente ale cererii. De exemplu
SELECT ... FROM R T WHERE ...
da numele T unui tuplu al relatiei R, acest nume putand fi folosit dupa SELECT sau
dupa WHERE, T.A semnificand valoarea componentei A a tuplului T.
Exemplul 3.14. A treia cerere din exemplul 3.7 se poate scrie in SQL
SELECT NUMEMAG
FROM MAGAZINE M
WHERE
(SELECT MARFA
FROM MAGAZINE
WHERE NUMEMAG = M.NUMEMAG)
CONTAINS
(SELECT MARFA
FROM COMENZI
WHERE NUME = 'Popescu Dan')
Exemplul 3.15. A doua cerere din exemplul 3.7 se mai poate scrie
SELECT NUMEMAG,MAGAZINE.MARFA,PRET
FROM MAGAZINE,COMENZI
WHERE NUME = 'Popescu Dan' AND MAGAZINE.MARFA =
COMENZI.MARFA
(SELECT *
FROM R)
UNION
(SELECT *
FROM S)
SELECT *
FROM R,S
SELECT *
FROM R
WHERE F
ASSIGN TO R:
in care WITH CHECK OPTION indica verificarea conditiilor din definirea vederii in
momentul executarii operatiilor UPDATE si INSERT, UNIQUE specifica necesitatea
de a avea un singur tuplu in tabel pentru valorile campurilor specificate in index,
ordine poate fi ASC pentru crescator (luata prin lipsa) sau DESC pentru descrescator
ea fiind lexicografica si CLUSTER presupune gruparea tuplurilor dupa adresele date
de index putand sa apara in cel mult un index pentru fiecare tabel in parte. Eliminarea
unui tabel produce eliminarea automata a tuturor vederilor in care este el implicat.
Sistemul adauga automat valoarea null pentru tuplurile deja existente in tabel si
permite folosirea unor valori corespunzatoare pentru tuplurile adaugate sau
modificate.
Instructiunile de prelucrare date din SQL sunt SELECT (descrisa mai sus),
UPDATE (pentru reactualizari), DELETE (pentru eliminari de tupluri) si INSERT
(pentru adaugari de tupluri). Ele se aplica unei multimi de inregistrari. Ultimele trei
instructiuni au urmatoarele forme generale:
UPDATE tabel
SET camp = expresie [, camp = expresie ] ...
[ WHERE conditie ] ;
DELETE
FROM tabel
[ WHERE conditie ] ;
INSERT
INTO tabel [ ( camp [, camp ] ... ) ]
VALUES ( valoare [, valoare ] ... ) ;
sau
INSERT
INTO tabel [ ( camp [, camp ] ... ) ]
subconditie ;
- Poate sa apara o instructiune executabila SQL ori de cate ori poate sa apara o
instructiune executabila din limbajul gazda.
- In instructiunile SQL pot fi incluse referinte la variabile din programul
gazda precedate de ':' pentru a le deosebi de numele SQL.
Pentru selectarea mai multor tupluri se declara mai intai un cursor printr-o
constructie de forma
care se aplica tuplului indicat de cursor. Aceste operatii nu se pot aplica daca in
definirea cursorului in SELECT apar UNION sau ORDER BY sau defineste o vedere
ce nu se poate modifica. Daca se fac modificari, la definirea cursorului implicat se
trec in FOR UPDATE toate campurile ce sunt modificate cu UPDATE.
3. Modelul retea
Modelul retea este cel mai apropiat de forma de reprezentare a bazelor de date
sub forma diagramelor entitate-relatie. Deosebirea consta doar in faptul ca toate
relatiile ce apar pot fi numai binare si de tipul unu-la-unu sau unu-la-mai-multi.
Aceasta restrictie permite reprezentarea grafica a unei baze de date de tip retea sub
forma unui graf directionat numit retea. In retea nodurile corespund entitatilor si
relatiile sunt reprezentate prin sageti intre noduri de la tata la fiu si anume sageti
simple daca relatia este de tipul unu-la-unu si sageti duble daca relatia este de tipul
unu-la-mai-multi.
Operatiile cele mai frecvente pentru modelul retea se impart in doua categorii:
cautarea unor elemente ale unor entitati cu anumite proprietati (proces similar cu
cautarea din modelul relational) sau cautarea unor informatii prin utilizarea
legaturilor intre entitati. Cea de-a doua operatie se numeste navigare.
5. Compararea modelelor
Dintre cele trei modele de baze de date, modelul relational se impune prin
simplitate ceea ce are ca efecte folosirea cu succes a lui si de catre nespecialisti si o
productivitate marita. Avantajele modelului relational fata de celelalte modele sunt
urmatoarele [Date]: structuri de date simple, operatori simpli, fara mari diferente intre
diferitele sisteme, un nucleu comun prin utilizarea in majoritatea cazurilor a
limbajului SQL, mecanismul vederilor, o baza teoretica solida, numarul mic de
concepte, aplicarea principiului dualitatii accesului (prin program si interactiv)
, independenta fizica a datelor, independenta logica a datelor, usurinta dezvoltarii
aplicatiilor, definirea dinamica a datelor, usurinta instalarii si usurinta operarii,
simplificarea proiectarii bazelor de date, integrarea dictionarelor, posibilitatea
dezvoltarii bazelor de date distribuite, performante si posibilitati de extindere.
Singura structura de date utilizata la nivel logic in modelul relational este cea
de tabel des utilizata in viata obisnuita spre deosebire de celelalte modele care
utilizeaza mai multe tipuri de structuri de date cu diferite tipuri de definiri si
prelucrari. Operatiile se refera in general la multimi si nu la elemente particulare,
facand o descriere a obiectelor din rezultatul dorit si lasand sistemul sa gaseasca
modul de calcul optim al solutiei (navigare automata) spre deosebire de celelalte
metode in care trebuie indicat modul de prelucrare a datelor pentru a se ajunge la
rezultat (navigare manuala). De aici rezulta si independenta fata de implementare si
deci portabilitatea aplicatiilor
si posibilitatea stabilirii unor legaturi dinamice intre date. Se definesc simplu prin
intermediul operatiilor actiuni cum sunt: regasire date, reactualizare date, folosirea
datelor virtuale, definirea drepturilor de acces, controlul accesului concurent,
constrangerile de integritate si altele.
CAPITOLUL AL IV-LEA
1. SGBD INGRES
DESTROY lista
INGMENU baza-de-date
la care sistemul raspunde prin afisarea pe ecran a unui frame numit
"INGRES main menu" care permite utilizatorului sa continue lucrul cu
mai multe optiuni: sa activeze diferitele componente ale sistemului
(QBF, RBF, ABF, VIFRED sau VIGRAPH), sa efectueze operatii de
definire date cum ar fi crearea unor tabele, sa execute interactiv
operatii prin limbajele SQL sau QUEL, sa execute cereri memorate,
rapoarte sau grafice si altele.
2. SGBD SYSTEM R
3. SGBD ORACLE
4. SGBD dBASE
5. SGBD DBTG
Un sitem de baze de date pentru modelul retea a fost pus la
punct de Data Base Task Group (DBTG) care a propus o notare formala
pentru retele prin limbajul de definire a datelor (DDL) si pentru
vederi (Subschema DDL) si limbajul de prelucrare a datelor (DML) cu
ajutorul caruia pot fi scrise programe pentru aplicatii.
RECORD MAGAZIME
1 NUMEMAG CHAR(20),
1 ADRESAMAG CHAR(30);
RECORD MARFA
1 NUMEMAR CHAR(15);
RECORD PRETURI
1 PRET REAL,
1 NUMEMAR VIRTUAL
SOURCE IS MARFA.NUMEMAR OF OWNER OF MARPR
1 NUMEMAG VIRTUAL
SOURCE IS MAGAZINE.NUMEMAG OF OWNER OF MAGPR;
RECORD CUMPARATORI
1 NUME CHAR(20),
1 ADRESA CHAR(30),
1 CONT REAL;
RECORD COMENZI
1 NR_COM INTEGER,
1 CANTITATE REAL;
X := CURRENT OF MARFA
FIND MARFA RECORD BY DATABASE KEY X
GET MARFA
MAGAZINE.NUMEMAG := "Victoria"
FIND MAGAZINE RECORD USING CALC-KEY
PRETURI.NUMEMAR := "TV-Cromatic"
FIND PRETURI RECORD IN CURRENT MAGPR SET USING NUMEMAR
GET PRETURI;PRET
print PRET
INSERTION IS AUTOMATIC
INSERTION IS AUTOMATIC
INSERTION IS MANUAL
In acest caz inserarile ca elemente ale unui set se face mai intai
prin fixarea ocurentei setului, apoi fixand aria curenta de lucru pe
inregistrarea ce se insereaza si cu comanda
read N,M,C
URMCOM := URMCOM + 1
CUMPARATORI.NUME := N
FIND CUMPARATORI RECORD USING CALC-KEY
MARFA.NUMEMAR := M
FIND MARFA RECORD USING CALC-KEY
COMENZI.NR_COM := URMCOM
COMENZI.CANTITATE := C
STORE COMENZI
INSERT COMENZI INTO CUMCOM,MARCOM
PRETURI.NUMEMAR := "portocale"
PRETURI.NUMEMAG := "Unirea"
FIND PRETURI RECORD USING CALC-KEY
PRETURI.PRET := 1500
MODIFY PRETURI;PRET
read COMENZI.NR_COM
FIND COMENZI RECORD USING CALC-KEY
DELETE COMENZI
6. SGBD IMS
Informatiile pot fii campuri date prin numar de nivel, nume, tip si
eventual lungime, pot indica pozitionarea tipului de inregistrare in
arborele in care apare fie sub forma de radacina indicata prin ROOT
fie sub forma de fiu al unui tata indicat prin
POINTER = PARANT
TREE ARBMAR
RECORD MARFA ROOT
1 NUMEMAR CHAR(15)
RECORD COMENZI PARENT=MARFA POINTER=PARENT
1 NR_COM INTEGER
1 CANTITATE REAL
RECORD VIRT_CUMP PARENT=COMENZI
VIRTUAL CUMPARATORI IN ARBCUMP
TREE ARBCUMP
RECORD CUMPARATORI ROOT
1 NUME CHAR(20)
1 ADRESA CHAR(30)
1 CONT REAL
RECORD VIRT_COM PARENT=CUMPARATORI
VIRTUAL COMENZI IN ARBMAR
REGIUNI(NUMER)
OFICII(ORAS,ADROF)
AGENTI(NUMEA,VANZARI) ANGAJAT(NR_AN,NUMEAN,ADRAN,SALARIU)
OFERTE(ADROF,PRET)
CLIENTI(NUMEC,ADRC)
TREE AGENTIE
RECORD REGIUNI ROOT
1 NUMER CHAR(20)
RECORD OFICII PARENT=REGIUNI
1 ORAS CHAR(20)
1 ADROF CHAR(30)
RECORD AGENTI PARENT=OFICII
1 NUMEA CHAR(20)
1 VANZARI INTEGER
RECORD ANGAJAT PARENT=OFICII
1 NR_AN INTEGER
1 NUMEAN CHAR(20)
1 ADRAN CHAR(30)
1 SALARIU INTEGER
RECORD OFERTE PARENT=OFICII
1 ADROF CHAR(30)
1 PRET INTEGER
RECORD CLIENTI PARENT=AGENTI
1 NUMEC CHAR(20)
1 ADRC CHAR(30)
read REG,OF
GET LEFTMOST AGENTI WHERE NUMER=REG AND ORAS=OF AND VANZARI >
10000000
DELETE
REPLACE
Exemplul 4.20. Daca agentul Popescu Dan din Craiova a mai facut
o vanzare de 2500000 lei, modificarea respectiva se face cu
instructiunile:
iar daca acelasi agent tregbuie eliminat din baza de date impreuna cu
toti clientii lui acesta se poate face cu instructiunile:
7. Alte SGBD-uri
SELECT TBNAME
FROM SYSCOLUMNS
WHERE NAME = 'NUME' ;
SELECT COUNT(*)
FROM SYSTABLES
WHERE CREATOR = 'Popescu' ;
CURSUL 9
CAPITOLUL AL V-LEA
MAGAZINE(NUMEMAG,ADRESAMAG,MARFA,PRET)
asa cum apare in exemplul 3.8 poate sa provoace anumite anomali cum sunt:
Problemele enumerate mai sus nu se mai pun daca in loc de relatia data se
introduc in baza de date relatiile
MAGADR(NUMEMAG,ADRESAMAG)
MAGMAR(NUMEMAG,MARFA,PRET)
Exemplul 5.1. Pentru baza de date din exemplul 3.8 putem sa stabilim o serie
de dependente functionale dupa cum urmeaza. Presupunand ca nu exista cumparatori
cu acelasi nume si fiecare cumparator are o singura adresa si un singur cont rezulta
pentru relatia CUMPARATORI dependenta functionala
Daca pentru comenzi se dau numere diferite atunci pentru relatia COMENZI
se poate stabili dependenta functionala
care impun unicitatea adresei unui magazin si fatul ca un magazin vinde fiecare marfa
cu un singur pret.
O relatie are una sau mai multe chei. In cazul cand sunt mai multe chei se
alege una dintre ele numita cheie primara drept reprezentativa pentru relatia
respectiva, restul fiind numite candidat de cheie.
Lema 5.1. Axiomele lui Armstrong sunt corecte in sensul ca daca X -> Y se
deduce din F folosind axiomele stunci X -> Y este verificata pentru orice relatie
pentru care dependentele din F sunt verificate.
Din axiomele lui Armstrong se pot deduce si alte reguli dintre care foarte utile
sunt cele din lema urmatoare.
Lema 5.4. X -> Y rezulta din axiomele lui Armstrong daca si numai daca
Y C X\+.
Pentru a decide daca o dependenta X -> Y poate fi dedusa logic din F este
suficient sa calculam X\+ si sa vedem conform lemei 5.4 daca Y C X\+ sau nu.
Calculul lui X\+ se poate face relativ simplu folosind algoritmul urmator.
1. Se face X\(0) = X si i = 0.
2. Daca exista in F o dependenta V -> W cu V C X\(i) si W @C/ X\(i)
atunci se face X\(i+1) = X\(i) U W; i = i+1 si se reia punctul 2;
altfel STOP (X\+ = X\(i)).
Aplicand algoritmul 5.1 se obtine mai intai X\(0) = BD, apoi folosind
dependenta 5) X\(1) = BDEG, apoi folosind dependenta 6) X\(2) = BCDEG si
folosind dependenta 2) se obtine X\(3) = ABCDEG pentru care nu mai sunt
indeplinite conditiile din pasul doi si algoritmul se termina. Deci (BD)\+ = ABCDEG.
Lema 5.5. Relatia ~ definita mai sus este o relatie de echivalenta pe multimea
multimilor de dependente functionale.
CURSUL 10
1.2. Descompunerea schemelor relationale
A B C D E
Se poate folosi A -> C pentru a identifica pe b23 si b53 cu b13 si apoi B -> C pentru a
identifica b33 cu b13. Se foloseste C -> D pentru a identifica b24, b34 si b54 cu a4,
apoi se foloseste DE -> C pentru a identifica b13 cu a3 si, in sfarsit se foloseste CE ->
A pentru a identifica b31 si b41 cu a1 obtinandu-se tabelul urmator:
A B C D E
R1 a1 b12 a3 a4 b15
R2 a1 a2 a3 a4 b25
R3 a1 a2 a3 a4 a5
R4 a1 b42 a3 a4 a5
R5 a1 b52 a3 a4 a5
care avand al treilea rand numai cu simboluri a dovedeste ca descompunerea data este
fara pierderi la uniune.
Teorema 5.3. Algoritmul 5.2 determina corect daca o descompunere este fara
pierderi la uniune.
{a1a2...an | (@Eb11)...(@Ebkn)(R(w1)@A...@AR(wk))}
unde fiecare i este al i-lea rand din tabelul initial, acesta corespunzand functiei m/@r.
Modificarile din algoritm transforma formula precedenta intr-o formula echivalenta
(obtinuta prin identificarea variabilelor corespunzatoare)
{a1a2...an | R(a1a2..an)@A...}
care este o submultime a lui r si deci m/@r(r) C r. Cum incluziunea inversa este
asigurata de lema 5.7 rezulta egalitatea ceea ce dovedeste ca descompunerea este fara
pierderi la uniune.
Teorema 5.5. Algoritmul 5.3 determina corect daca X -> Y este in G\+.
GATA
Teorema 5.6. (Beeri-Fagin-Howard) Axiomele A1-A8 sunt corecte si
complete pentru dependentele functionale si multivaloare in sensul ca daca D este o
multime de dependente functionale si multivaloare pe multimea atributelor U si D\+
este multimea dependentelor functionale si multivaloare ce se deduc logic din D
(satisfacute de orice relatie care satisface dependentele din D), atunci elementele lui
D\+ sunt elementele obtinute din D aplicand de un numar finit de ori axiomele A1-
A8.
Din axiomele A1-A8 se pot deduce si alte reguli dintre care cele mai des
utilizate sunt cele din lema urmatoare pe care le dam fara demonstratie.
Exemplul 5.12. Fie A = {abc, ade, fbe} si B = {xyz, wyz}. Exista mai multe
aplicatii de simboluri de la A la B. De exemplu aplicatia h cu h(a) = h(f) = x, h(b) =
h(d) = y si h(c) = h (e) = z are drept imagine pentru toate trei elementele lui A
elementul xyz din B. Aplicatia g(a) = x, g(b) = g(d) = y, g(c) = g(e) = z si g(f) = w
transforma abc si ade in xyz si pe fbe in wyz. Nu exista o aplicatie de simboluri care
sa duca abc in xyz si ade in wyz daca x si w sunt simboluri distincte deoarece in acea
aplicatie lui a i s-ar asocia atat x cat si w ceea ce nu este posibil.
Exemplul 5.13. Fie d dependenta din fig. 5.1.a si relatia r din fig. 5.1.b.
Deoarece in prima coloana a tuplurilor din ipoteza figureaza acelesi simbol a1 rezulta
ca aplicatia de simboluri trebuie sa transforme tuplurile din ipoteza in tupluri care sa
aiba pe primul loc aceleasi valori. Daca se ia h(a1) = 5 rezulta ca ambele tupluri sunt
duse in tuplul 514 al lui r si deci h(b1) = h(b2) = 1 si h(c1) = h(c2) = 4 care se poate
extinde luand h(a2) = 5 obtinand h(a2b1c2) = 514 care este un tuplu din r. Daca h(a1)
= 0, o aplicatie de simboluri transforma cele doua tupluri din ipoteza in multimea
primelor trei tupluri ale lui r si deci h(b1) este 1 sau 3 si h(c2) este 2 sau 4 dar pentru
combinatiile 12, 32 si 34 se poate lua h(a2) = 0 si pentru combinatia 14 se poate lua
h(a2) = 5 obtinand de fiecare data pentru h(a2b1c2) un tuplu al lui r.
Deci r satisface d.
a) a1 b1 c1 b) 0 1 2
a1 b2 c2 0 3 4
__________________ 0 3 2
a2 b1 c2 5 1 4
Figura 5.1.
a1 b1 c1 d1 a2 b3 c3 d4
a1 b2 c2 d2 a3 b3 c4 d5
__________________________ __________________________
a1 b1 c2 d3 d4 = d5
a) A ->> B|C b) B -> D
a4 b4 c5 d6
a4 b5 c6 d7
__________________________
a4 b6 c5 d7
c) A ->> C|D
Figura 5.2.
Pentru a deosebi anumite calitati specifice ale unor relatii s-au facut mai multe
clasificari. Dintre aceste clasificari cea mai frecvent utilizata este clasificarea in forme
normale. Se spune ca o relatie este intr-o forma normala particulara daca satisface o
multime de constrangeri data. Transformarea unei relatii intr-o multime de relatii de
un anumit tip se numeste normalizare. Primele trei forme normale au fost definite de
Codd iar a patra si a cincia forma normala au fost definite de Fagin.
Se spune ca o relatie este in prima forma normala (1NF) daca fiecarui atribut
ii corespunde o valoare indivizibila (atom), deci orice valoare nu poate fi o multime
sau un tuplu cu valori in anumite domenii, nu pot sa apara grupuri repetitive.
Relatiile in prima forma normala pot fi vizualizate sub forma de tabele, permit
o referire simpla a datelor prin indicarea numelui tabelului, a coloanei sau atributului
si a chei tuplului din care face parte informatia respectiva (adresare de tip sistem de
coordonate), operatorii pentru aceste relatii sunt mai simpli si in numar mai mic si
permit definirea unor tehnici de proiectare si utilizare a bazelor de date.
Cu alte cuvinte, o relatie R este in 2NF daca este in 1NF si orice atribut
neprim este complet dependent de orice cheie.
R ( A, B, C, D )
PRIMARY KEY ( A, B )
R.A --> R.D
R1 ( A, D )
PRIMARY KEY ( A )
R2 ( A, B, C )
PRIMARY KEY ( A, B )
FOREIGN KEY ( A ) REFERENCES R1
Cu alte cuvinte, relatia R este in 3NF daca si numai daca atributele care nu
apar in chei sunt independente intre ele si sunt complet dependente de cheia primara
(atributele prime nu sunt dependente tranzitiv de cheia primara).
Orice relatie in a treia forma normala este in a doua forma normala. Reciproca
nu este adevarata dupa cum se vede din urmatorul exemplu.
R ( A, B, C )
PRIMARY KEY ( A )
R.B --> R.C
R1 ( B, C )
PRIMARY KEY ( B )
R2 ( A, B )
PRIMARY KEY ( A )
FOREIGN KEY ( B ) REFERENCES R1
Orice relatie in forma normala Boyce-Codd este in a treia forma normala dar
reciproca nu este adevarata dupa cum se vede din exemplul urmator.
Cu alte cuvinte, o relatie R este in a patra forma normala daca este in BCNF si
orice dependenta multivaloare este de fapt o dependenta functionala.
O relatie R este in cea de-a cincia forma normala numita si "forma normala
proiectie-uniune" (pe scurt PJ/NF sau 5NF) daca si numai daca orice dependenta de
uniune a lui R este o consecinta a unui candidat de chei a lui R.
Orice relatie care este in 5NF este si in 4NF deoarece fiecare dependenta
multivaloare poate fi privita ca un caz particular de dependenta de uniune. Orice
relatie poate fi descompusa fara pierderi la uniune intr-o multime de relatii care sunt
in 5NF. Se garanteaza faptul ca o relatie in 5NF nu contine anomalii ce pot fi
eliminate luand proiectiile.
Fagin a dat un algoritm prin care se poate testa daca o JD este o consecinta a
unei multimi de candidati de cheie. In consecinta pentru a spune daca o relatie R este
in 5NF este suficienta cunoasterea candidatilor de cheie si a tuturor dependentelor de
uniune din R.
Procesul de normalizare a relatiilor se poate descrie in felul urmator:
3. Integritate
@P/NUME(CUMPARATORI) =
@P/NUME(@S/CONT@>=0(CUMPARATORI))
Exemplul 5. . Pentru a impune conditia ca tot timpul Popescu Dan sa aiba mai
putin de 100000 lei datorii se poate folosi un identificator PD astfel
_____________________________________________________________________
_______
CUMPARATORI | NUME | ADRESA | CONT |
_________________________|______________|__________________|
________________|
PD | Popescu Dan | | |
I.CONSTR(PD).I. | | | > -100000 |
| | | |
Se pot tipari constrangerile unei relatii daca se pune in scheletul relatiei sub
nume comanda P.CONSTR.P. sau numai de un anumit tip cu comanda
P.CONSTR(T.).P. unde T este una din literele I, D sau U. Se poate elimina o
constrangere punand in schelet comanda D.CONSTR(<lista conditii>) urmata in
coloanele atributelor de descrierea constrangerii respective.
4. Securitate
Prin securitatea bazelor de date se intelege protejarea bazelor de date
impotriva folosirii neautorizate a lor si in special a modificarilor si distrugerilor
nedorite de date si citirilor nepermise de date. Tehnicile utilizate de obicei sunt
urmatoarele:
2. Protejarea fizica. Deoarece s-ar putea ajunge la date si prin alte mijloace
decat prin intermediul SGBD-ului (de exemplu prin citirea directa a mediului
magnetic) se poate face o protectie prin pastrarea codificata a datelor pe
mediul magnetic. Decodificarea datelor se poate face numai dupa identificarea
utilizatorului prin garzi asociate lui.
Modificarile din vederi pot duce la efecte laterale ce privesc partile din baza
de date ce nu apar in vederi. De exemplu stergerea unui element din vedere poate sa
duca la eliminarea unui alt element care are singura legatura cu elemntul sters si care
nu se afla in vedere.
In sistemul QBE sunt prevazute patru tipuri de drepturi: insertie (I.), stergere
(D.), modificare (U.) si citire (P.). Conferirea drepturilor unei persoane sau unui grup
de persoane pentru o relatie R se face de catre proprietarul relatiei R care pune un
tuplu in scheletul relatiei R cu comanda
I.AUTR(<lista>). <nume> I.
si pentru acordarea tuturor drepturilor in aceleasi conditii se elimina (P.) din prima
coloana. Pentru a permite tuturor sa aiba drepturile indicate se elimina Ionescu din
prima coloana sau se inlocuieste cu o variabile (eventual adaugand "_" inaintea lui).
Daca se permite accesul numai la comenzile in care cantitatea este mai mare decat 5
se adauga in ultima coloana >5 si atunci toate coloanele sunt vizibile. Pentru a
permite tuturor sa citeasca toate comenzile ce contin marfuri vandute de magazinul
Unirea se face cererea
_____________________________________________________________________
_________
COMENZI | NR_COM | NUME | MARFA | CANTITATE |
______________________|_____________|______________|_____________|
____________|
I.AUTR(P.)._Ionescu I.| _n | _p | _m | _q |
| | | | |
_____________________________________________________________________
_________
MAGAZINE | NUMEMAG | ADRESAMAG | MARFA | PRET |
______________________|_____________|______________|_____________|
____________|
I.AUTR(P.).Ionescu I. | Unirea | | _m | |
| | | | |
Toate drepturile introduse prin comenzi AUTR. sunt continute intr-un tabel
din care se pot afla informatii despre drepturile fiecarui utilizator sau restrictiile de
acces la fiecare relatie prin cererile obisnuite din QBE. De asemenea, proprietarul
unei relatii poate sa modifice drepturile de acces la relatia respectiva.
Orice operatie din baza de date se face numai pe baza unei autorizari pentru
acea operatie. Initial sistemul acorda toate drepturile de operare pentru
administratorul sistemului (SYSADM) si nu acorda nici-un drept de operare la ceilalti
utilizatori. Apoi drepturile de operare sunt transmise prin intermediul instructiunii
GRANT sau sunt revocate prin instructiunea REVOKE.
Se numeste baza de date statistica o baza de date din care se pot obtine
informatii aplicand operatii agregate la submultimi de elemente continute in ea. Prin
formularea unor intrebari unii utilizatori pot sa obtina informatii la care in mod
obisnuit nu au acces. De exemplu daca un utilizator nu are acces la campul SALARIU
dar poate face suma salariilor unor submultimi de cel putin m persoane cu m dat,
pentru a afle salariul lui Popescu el poate calcula suma tuturor salariilor si suma
tuturor salariilor fara al lui Popescu si prin scaderea celor doua sume afla salariul lui
Popescu la care nu avea acces.
Pentru a preveni astfel de situatii, unele sisteme de baze de date tin o evidenta
a intrebarilor puse de fiecare utilizator in parte sa refuza sa raspunda in anumite
conditii cum ar fi: sunt implicate mai putine inregistrari decat un numar dat m sau
sunt implicate mai mult de n-m inregistrari unde n este numarul total de elemente sau
sunt implicate mai mult de p inregistrari comune cu o cerere anterioara si altele
asemanatoare.
5. Optimizarea cererilor
Pentru cererile adresate unei baze de date de foarte multe ori se pot face
reformulari ale cererii in cereri echivalente cu ea a caror timp de executie si spatiu de
memorie ocupat sa fie mult mai mici in comparatie cu tratarea cererii initiale.
Transformarile respective sunt efectuate de utilizator sau de sistemul de calcul in
procesul de optimizare a cererilor. In acest capitol prezentam unele metode utilizate
in acest domeniu.
@p/A(@S/B=C@AD=99(AB X CD))
desi apare produsul cartezian putem evita calculul lui. Se transforma expresia data
mai intai in expresia echivalenta
@P/A(@S/B=C(AB X @S/D=99(CD)))
unde, pentre a deosebii numele, adresa si orasul cititorului de cele ale editorului am
adaugat la acesta din urma litera E la atributele respective. Intr-o vedere care contine
informatii despre cartile imprumutate se pot face cereri diverse. Sa numim relatia
corespunzatoare acestei vederi IMPRUMUT ea fiind obtinuta prin uniunea naturala a
relatiilor CARTI, CITITORI si FISE cu
unde
S=TITLU,AUTOR,EDITOR,NR_INV,NUME,ADRESA,ORAS,NR_LEG,DATA si
F este
@P/TITLU
|
|
@S/DATA < 1/8/94
|
|
@P/TITLU,AUTOR,CARTI.NR_INV,NUME,ADRESA,ORAS,
| CITITORI.NR_LEG,DATA
|
@S/CITITORI.NR_LEG=FISE.NR_LEG A
| CARTI.NR_INV=FISE.NR_INV
|
X
/\
/ \
X CARTI
/\
/ \
FISE CITITORI
Figura 5.3.
@P/TITLU
@S/CARTI.NR_INV = FISE.NR_INV
@P/TITLU,CARTI.NR_INV,FISE.NR_INV
si coborand cea de-a doua proiectie in arbore se obtine rezultatul final din fig. 5.4,
@P/TITLU
|
|
@S/CARTI.NR_INV=FISE.NR_INV
|
|
X
/ \
/ \
/ \
@P/FISE.NR_INV @P/CARTI.NR_INV,TITLU
| \
| \
@S/CITITORI.NR_LEG= CARTI
| FISE.NR_LEG
|
X
/ \
/ \
/ \
@P/FISE.NR_INV, @P/CITITORI.NR_LEG
| FISE.NR_LEG |
| |
@S/DATE<1/8/94 CITITORI
|
|
FISE
Figura 5.4.
SELECT A1,A2,...,An
FROM R
WHERE P1 AND P2 AND ...
unde P1,P2,... sunt predicate in care nu mai apare AND. In optimizari se folosesc
mult indexarile si statisticile asupra diferitelor relatii existente.
Un caz special il constituie indexul grupat in care inregistrarile asociate unei valori
din index sunt grupate in acelasi bloc sau in blocuri alaturate facand posibil un acces
mai rapid la inregistrari. Un algoritm de optimizarea cererilor este cel urmator.
SELECT NR_COM
FROM COMENZI
WHERE CANTITATE @>= 5 AND MARFA = "portocale"
Daca pentru relatia COMENZI exista un index grupat dupa NUME si indexi
negrupati dupa MARFA si CANTITATE, T=1000 (sunt circa 1000 de comenzi),
B=100 (memorate in circa 100 de blocuri), I=50 (apar circa 50 de marfuri in
comenzi), alegerile 1 si 2 nu se pot aplica. Alegerea 3 cu index negrupat dupa
MARFA da costul T/I = 1000/50 = 20. Alegerea 4 daca fisierul are blocuri
consecutive sau 5 cu parcurgerea indexului grupat dupa NUME in caz contrar are
costul B = 100. Alegerea 6 se poate face prin parcurgerea indexului asociat pentru
CANTITATE cu costul T/2 = 500 iar alegerile 7 si 8 dau costul T=1000. Deci se
obtine costul cel mai mic daca se face optiunea 3 prin care se cauta in indexul pentru
MARFA tuplurile ce corespund pentru "portocale" si pentru aceste tupluri se face
testul CANTITATE @>= 5.
range of t1 is R1
.
.
.
range of tk is Rk
retrieve(@a)
where F
unde @a este o lista de atribute ce apar in relatiile R1,...,Rk si F este o conditie asupra
atributelor, se poate gasi o expresie echivalenta in calculul relational de forma
range of t is CARTI
range of s is EDITORI
range of u is CITITORI
range of v ia FISE
retrive (u.NUME)
where t.NR_INV=v.NR_INV and u.NR_LEG=v.NR_LEG
and t.EDITOR=s.NUMEE and u.ORAS=s.ORASE
_____________
| CARTI |
|___________|
/ \
CARTI.NR_INV / \ CARTI.EDITOR
=FISE.NR_INV / \ =EDITORI.NUMEE
/ \
__________ _____________
| FISE | | EDITORI |
|________| |___________|
\ /
FISE.NR_LEG \ / CITITORI.ORAS
=CITITORI.NR_LEG \ / =EDITORI.ORASE
\ /
______________
| CITITORI |
|____________|
Figura 5.5.
=============== ===============
|| t[NR_INV] || || t[EDITOR] ||
=============== ===============
| |
NR_INV=t[NR_INV]| | NUMEE=t[EDITOR]
| |
__________ _____________
| FISE | | EDITORI |
|________| |___________|
\ /
FISE.NR_LEG \ / CITITORI.ORAS
=CITITORI.NR_LEG \ / =EDITORI.ORASE
\ /
______________
| CITITORI |
|____________|
Figura 5.6.
Se aplica pentru noul graf obtinut din nou algoritmul obtinandu-se prin
instantiere doua relatii si anume
F1 = @S/NR_INV=t[NR_INV](FISE)
E1 = @S/NUMEE=t[EDITOR](EDITORI)
obtinand un graf cu trei noduri F1, CITITORI si E1 legate prin cele doua muchii din
partea de jos a figurii 5.6. Alegand apoi pentru disectie nodul F1, pentru fiecare tuplu
u din F1 se construieste un graf Gtu asociat avand ca noduri u[NR_LEG], CITITORI
si E1 legate intre ele prin conditiile NR_LEG=u[NR_LEG] si respectiv
ORAS=ORASE. Prin instantiere se inlocuieste nodul CITITORI cu relatia
C1 = @S/NR_LEG=u[NR_LEG](CITITORI)
E2 = @S/ORASE=v[ORES](E1)
apoi prin pasul 4 se fac succesiv evaluarile REL(Gtuv)=E2, REL(Gtu)=U/v@cC1
(REL(Gtuv X {v}), REL(Gt)=U/u@cF1 (REL(Gtu) X {u}) si in final
{a1...an | (@Eb1)...(@Ebm)(P1@A...@APk)}
unde fiecare Pi este fie de forma R(c1...cr) cu cj constante sau a-uri sau b-uri fie de
forma c@0d cu c si d constante sau a-uri sau b-uri si @0 unul din operatorii de
comparatie <, >, @<=, @>=.
Formal, rezultatul este multimea tuplurilor h(s) unde s este sumarul cu spatiile
libere eliminate, h este o aplicatie de simboluri care pentru orice rand t corespunzator
relatiei R are h(t) un tuplu din R si pentru orice constrangere c@0d face h(c)@0h(d)
adevarata.
Exemplul 5. . Pentru cererea din exemplul 5. se poate construi urmatorul
tablou in care am notat prescurtat atributele T (titlu), Au (autor), E (editor), I
(nr.inventar), Ad (adresa), O (oras), C (nume cititor), L (nr. legitimatie) si D (data).
T Au E I Ad O C L D
_____________________________________________________________________
___________
a1
_____________________________________________________________________
___________
b1 b2 b3 b4 (CARTI)
b5 b6 b7 (EDITORI)
b8 b9 a1 b10 (CITITORI)
b11 b12 b13 (FISE)
T Au E I Ad O C L D
_____________________________________________________________________
___________
a1
_____________________________________________________________________
___________
b1 b2 b3 b4 (CARTI)
b3 b6 b7 (EDITORI)
b8 b7 a1 b10 (CITITORI)
b4 b10 b13 (FISE)
a1 a2 a3 a4
____________________________ ____________________________
a1 a2 (AB) a3 a4 (BC)
Pentru construirea uniunii naturale a celor doua relatii se identifica variabilele din
coloana lui B care este atribut comun si se obtine tabloul
a1 a2 a4
____________________________
a1 a2 (AB)
a2 a4 (BC)
a1 a2 0
____________________________
a1 a2 (AB)
a2 0 (BC)
a1
_____________________________
a1 a2 (AB)
a2 0 (BC)
a b a b
___________________________ ___________________________
a c d (R) a e f (R)
a e f (R) h e b (R)
g c b (R)
h e b (R)
Cele mai multe baze de date sunt folosite in acelasi timp de mai multi
utilizatori. Daca asupra lor s-ar efectua numai operatii de citire nu ar apare probleme
in utilizare. Probleme deosebite apar in momentul cand unele operatii privesc
modificarea unor elemente din baza de date cand, datorita operarii in acelasi timp pot
sa apara inconsistente sau anomalii.
in care rezultatul final poate fi valoarea lui A marita cu o unitate si nu cu doua unitati
cum ar fi normal. Anomalii asemanatoare pot sa apara prin anularea unor modificari
efectuate de tranzactii care nu se termina normal (problema dependentelor necomise)
sau cele produse prin considerarea unor stari de tranzitie ale bazei de date (problema
analizei inconsistente). Anomaliile se pot evita daca fiecare tranzactie nu permite
accesul la variabila A decat dupa ce se termina toate operatiile ei asupra acestei
variabile. Un program care permite aceasta este
Daca A a fost locat de o tranzactie nu poate fi accesat de alta tranzactie decat dupa ce
tranzactia ce la locat se termina si are loc delocarea lui A.
T1 | T2 T1 | T2 T1 | T2
__________|__________ __________|___________ ___________|
___________
READ A | READ A | READ A |
A:=A-10 | | READ B A:=A-10 |
WRITE A | A:=A-10 | | READ B
READ B | | B:=B-20 WRITE A |
B:=B+10 | WRITE A | | B:=B-20
WRITE B | | WRITE B READ B |
| READ B READ B | | WRITE B
| B:=B-20 | READ C B:=B+10 |
| WRITE B B:=B+10 | | READ C
| READ C | C:=C+20 WRITE B |
| C:=C+20 WRITE B | | C:=C+20
| WRITE C | WRITE C | WRITE C
prima este o programare seriala, a doua este o programare serializabila iar a treia nu
este o programare serializabila.
Teorema 5. . Daca T este o tranzactie care nu este in doi timpi, atunci exista o
tranzactie T1 si o programare S neserializabila a lor.
Doua planificari sunt echivalente daca produc aceleasi valori pentru fiecare
element in parte si orice locare la citire dintr-o tranzactie se face in cele doua
programari in momente cand elementul implicat are aceleasi valori.
Pentru a doua strategie a locarii unui element impreuna cu toti descendentii lui
se foloseste atentionarea predecesorilor unui element care se locheaza. Deci operatiile
permise legate de locare sunt: LOCK care locheaza un element impreuna cu toti
descendentii sai (un element nu poate fi locat de doua tranzactii in acelasi timp),
WARN care plaseaza o atentionare intr-un element (nici-o tranzactie nu poate loca un
element in care o alta tranzactie a plasat o atentionare) si UNLOCK care anuleaza o
locare sau o atentionare sau ambele pentru un element.
In cazul cand tranzactiile afecteaza mai multe medii in modificari acestea sunt
coordonate si aplicate sau nu pentru toate mediile. Se aplica in acest caz un protocol
de commit in doua faze (1) cerere de modificare catre toate mediile implicate si (2)
efectuarea modificarilor la raspunsuri pozitive sau restabiliri daca exista cel putin un
raspuns negativ. Acest sistem permite restabilirile in cazul erorilor.
Una din cele mai dificile probleme de rezolvat pentru sistemele distribuite este
minimizarea numarului si dimensiunii mesajelor. Aceasta problema se reflecta in
strategiile de prelucrare a cererilor, in administrarea cataloagelor, in propagarea
reactualizarilor, in controlul reacoperirilor, in controlul concurentei si in celelalte
operatii.
Datele unei baze de date distribuite sunt privite atat din punct de vedere logic
prin semnificatia pe care o au ele cat si actual prin modul de organizare si valorile
reprezentate la un moment dat. Orice relatie R poate fi reconstituita din fragmentele
R1,R2,...,Rn aflate in diferitele noduri fie prin uniune naturala R = R1 |X| R2 |X| ... |
X| Rn si atunci spunem ca avem o fragmentare verticala, fie prin reuniune R = R1 U
R2 U ... U Rn si atunci spunem ca avem o fragmentare orizontala.
CONTURI(F,N,T)
OPERARI(F,O,S)
POSESORI(N,P)
OPERAT(O,P)
CLIENTI(P,A)
Aceasta baza de date ar putea fi reprezentata distribuit de exemplu prin fragmentarea
orizontala a primelor patru relatii si pastrarea informatiilor legate de conturile
deschise la o filiala in nodul asociat acelei filiale iar informatiile despre clienti pot fi
memorate la sediul central CEC fiind in general mai rar accesate. Relatiile anterioare
pot fi considerate fragmente verticale pentru diferite vederi.
@P/P(@S/F=1@AT>100000(R))
Pentru a sterge un tuplu t din relatia logica R si R este compusa din fragmente
orizontale, atunci se sterge tuplul t din toate fragmentele in care apare. Daca R este
compusa din fragmente verticale apar probleme suplimentare de rezolvat deoarece
stergerea tuplurilor t[Ri] ar putea duce la pierderea de informatii fiind eliminate si
alte tupluri s pentru care s[Ri] = t[Ri]. In sistemul R* problema se rezolva asociind
fiecarui tuplu din relatiile logice fragmentate vertical cate un identificator unic si
acesta este pastrat in fiecare fragment al relatiei logice. Stergerea unui tuplu revine la
eliminarea din fragmente a tuplurilor care au identificatorul respectiv.
Daca proiectiile lui R si S dupa R@OS contin r' si respectiv s' elemente si
daca R |X S si S |X R au r" si respectiv s" elemente, se poate calcula R |X| S cu
procedeul urmator: se transfera @P/R@OS(S) in nodul lui R, se calculeaza R |X S in
nodul lui R, se transfera R |X S in nodul lui S si se calculeaza (R |X S) |X| S in nodul
lui S (sau simetric schimband intre ele R si S). Costul acestei strategii este 2c0 + s' +
r" si se obtine un cost mai mic decat efectuarea directa a uniunii daca are loc
inegalitatea
Uniunea naturala a mai multor relatii R1 |X| R2 |X| ... |X| Rn se poate calcula
prin efectuarea consecutiva a mai multor semiuniuni in care fiecare relatie Ri
intervine prin submultimea sa @P/Ri(R1 |X| ... |X| Rn) numita reducerea lui Ri in
raport cu R1,...,Rn. Foarte multe cereri corespund la astfel de reduceri.
Lema 5. . Cu parametrii c0, d, a2, ..., an, b1, ..., bn-1 definiti anterior, costul
semiuniunii Ri-1 |X R/i\lr este c0 + aid\r-l si costul semiuniunii R/i\lr X| Ri+1 este c0
+ bid\r-l iar in fiecare program semiuniune optim al cererii lant R1,...,Rn fiecare R/i\lr
care se calculeaza se realizeaza in unul din urmatoarele moduri:
1. Se calculeaza R/i\ik cu pasul Ri := Ri |X Ri+1 unde Ri+1 are valoarea curenta
R/i+1\i+1,k.
2. Se calculeaza R/i\ji cu pasul Ri := Ri |X Ri-1 unde Ri-1 are valoarea curenta
R/i-1\j,i-1.
3. Se calculeaza R/i\jk prin pasi Ri := Ri |X Ri-1 si Ri := Ri |X Ri+1 intr-o
ordine data, in momentul executarii acestor pasi valoarea lui Ri-1 este
R/i-1\j,i-1 si a lui Ri+1 este R/i+1\i+1,k.
4. Se calculeaza R/i\jk cu pasul Ri := Ri |X Ri-1 unde Ri-1 are valoarea curenta
R/i-1\jk.
5. Se calculeaza R/i\jk cu pasul Ri := Ri |X Ri+1 unde Ri+1 are valoarea curenta
R/i+1\jk.
si deoarece c/2\23 este mai mare decat 810 rezulta ca 16+c/2\23 este mai mare ca 20
si deci c/3\23 este 30 de unde rezulta c/2\23 = 840. In sfarsit pentru 13-familia
obtinem formulele
si inlocuid valorile cunoscute se poate evalua imediat c/3\13 = 46, apoi c/2\13 = 696
si in final c/1\13 = 738. Pentru a construi programul semiuniune se procedeaza astfel:
pentru calculul lui c/1\13 s-a folosit c/2\13 deci ultimul pas in program este R1 := R1
|X R2 si calculul lui c/2\13 s-a facut cu ajutorul lui c/3\13 deci penultimul pas este R2
:= R2 |X R3 iar c/3\13 a fost calculat cu c/2\12 care a fost calculat direct si deci
corespunde la R2 := R2 |X R1 de unde rezulta urmatorul program
U U
/ \ // \
/ \ // \
/ \ / / \
U |X| R S |X|
/\ / \ //\\
/ \ / \ / / \ \
/ \ / \ / / \ \
R S |X| |X| T U V W
/\ /\
/ \ / \ Figura 5.
/ \ / \
T U V W
Figura 5.
Pentru reuniunea a doua relatii costul este zero daca nodul rezultatului este
acelasi cu cel al operanzilor, este dimensiunea relatiei din afara nodului rezultatului
daca acesta coincide cu nodul unuia din operanzi si este suma dimensiunilor celor
doua relatii daca nodul rezultatului nu coincide cu al nici-unui operand. Pentru
operatorul de alegere costul este zero daca exista o copie a relatiei in nodul
rezultatului si este dimensiunea relatiei altfel.
Se pot genera si alte strategii sau considera cazuri particulare cand cele doua
relatii se afla in acelasi nod care poate sa coincida sau nu cu al rezultatului.
Algoritmul 5. . Pentru evaluarea unei cereri pentru o baza de date distribuita
reprezentata sub forma arborelui compactificat si cu indicarea nodului care sa contina
rezultatul final se face prin urmatoarea metoda:
- Se coboara in arbore cat mai mult posibil selectiile si proiectiile. Daca un
operator precede operatorul de alegere se aplica acel operator la toti fii
operatorului de alegere. Se elimina ramurile cu conditii conflictuale si
conditiile redondante.
- Se generaza subarborii arborelui dat evaluandu-se pentru fiecare din ei
costurile. O frunza etichetata cu R da un singur subarbore caruia ii
corespunde expresia R. Fie n un nod intern astfel incat pentru fiecare din fii
sai c1,c2,...,ck au fost determinate multimile de expresii asociate S1,S2,...,
Sk. Daca n este selectie sau proiectie atunci k=1 si se formeaza expresiile
corespunzatoare lui n prin aplicarea pentru radacina fiecarei expresii din S1
a operatorului din n (selectie sau proiectie). Daca operatorul din n este o
alegere atunci multimea expresiilor asociate lui n este reuniunea multimilor
expresiilor asociate fiilor lui. Daca n este reuniune sau uniune se
construiesc mai intai toti arborii binari neordonati (nu conteaza ordinea
fiilor pe fiecare nivel) cu noduri etichetate cu operatorul asociat lui n si
cu frunzele c1,...,ck si se obtine multimea expresiilor asociate lui n prin
inlocuirea frunzelor din acesti arbori cu toate combinatiile de expresii din
multimile asociate S1,...,Sk.
- Se estimeaza costurile asociate expresiilor construite considerand rezultatul
in fiecare din noduri. Pentru o frunza etichetata cu R costul asociat este
zero pentru rezultat in nodul lui R si este c0+|R| pentru rezultat in alt nod.
Fie n un nod intern. Daca n este selectie sau proiectie se obtine un cost
minim daca rezultatul lui n este in acelasi nod cu rezultatul fiului lui n si
deci costul lui n coincide cu costul fiului sau pentru fiecare nod in parte.
Daca n este reuniune pentru a afla cel mai bun cost de a calcula n in nodul a
se considera minimul dupa toate nodurile b si c a costurilor de calcul a
fiilor lui n in b si in c la care se adauga eventualele costuri de transfer
cand b sau c nu coincid cu a. Daca n este uniune se procedeaza ca la reuniune
considerand toate cazurile posibile pentru efectuarea uniunii.
- Se determina arborele ce corespunde costului minim si se descrie programul de
evaluare corespunzator lui.
|R |X| S| = |R||S|/max(IR,IS)
Una din cele mai utilizate strategii in acest caz este: locarea pentru citire a
elementului A locheaza una din copiile lui A si locarea la scriere a lui A locheaza
toate copiile lui A. Locarile se fac prin trimiterea de mesaje de cerere de locare catre
nodurile ce au copii ale relatiei si obtinerea unor confirmari sau infirmari a
posibilitatii locarii eventual si cu transmiterea valorilor elementelor locate.
Daca n este numarul de copii si k > n/2 atunci se poate defini o generalizare a
celor doua strategii precedente numita k-din-n in care are loc o locare la scriere daca
sunt locabile cel putin k dintre copii si poate fi o locare la citire daca sunt locabile cel
putin n-k+1 copii.
Daca unele procesoare din noduri nu mai functioneaza din anumite motive
sistemul poate sa asigure continuarea lucrului pentru tranzactiile care au asigurate
toate resursele necesare. La reluarea lucrului sistemul trebuie sa faca toate
modificarile necesare pentru a actualiza informatiile din nodurile cazute. De obicei
modificarile unui nod cazut sunt pastrate intr-un jurnal al unui alt nod. Se fac si
comparatii intre diferitele copii ale relatiilor si se actualizeaza dupa copia cu data cea
mai recenta.
CAPITOLUL AL VI-LEA
1. Fisiere
CAPITOLUL AL VII-LEA
APLICATII
1. Directii de cercetare
3. Interfete
REPORT nume
unde nume este fie numele unui tabel (vedere) din care se produce
raportul respectiv, fie numele unei specificatii de raport ce include
numele acelui tabel sau o cerere prin care se genereaza un tabel.
Initial generatorul de rapoarte genereaza un raport prin lipsa ce
poate fi modificat prin specificari generate de utilizator fie prin
intermediul sistemului Report By Forms (RBF) sau prin limbajul de
definire a rapoartelor.
3.5. Dictionare
!y <-- x specialized
!y <-- x1,x2,...,xn
obiect DO : [ :x | bloc-cod ]
5. Baze de cunostinte
f1,f2,...,fn |- g
A ==> ( B ==> C )
NOT D OR A
B
NOT ( D ==> C )
(8) C
6. Exemple