Sunteți pe pagina 1din 11

CAPITOLUL IV

FRAGMENTAREA DATELOR

Trebuie să arătăm că fragmentarea are şi unele dezavantaje. Dacă o aplicaţie are mai multe
cereri conflictuale care împiedică descompunerea relaţiei în mai multe fragmente disjuncte
(reciproc exclusive). Atunci acea aplicaţie are nevoie de mai multe fragmente pentru a găsi data
ea trebuie să realizeze reuniunea sau unirea acelor fragmente care necesită timp. Aceste uniri
constitue o cercetare fundamentală a fragmentării. Un alt aspect este legăt de controlul semantic
al datelor care ne permit să verificăm condiţiile de integritate ale datelor. Decizia de a utiliza o
bază de date fragmentată este foarte importantă deoarece determină performanţa execuţiei unei
întrebări. Gradul de fragmentare variază între a nu fragmenta nimic sau a fragmenta pană la
nivel de tupluri (sau atribute) individuale în cazul fragmentării orizonatale sau la nivel de
atribute în cazul fragmentării verticale. Ele se definesc numai în raport cu aplicaţiile care se
execută asupra BD. Aplicaţiile sunt caracterizate de un număr de parametrii. În concordanţă cu
valorile acestor parametrii pot fi identificate în mod individual fragmentele.

Logica fragmentării

Din punct de vedere numai al distribuţiei datelor nu există raţionamente de fragmentare a


datelor. Sistemele de fişiere distribuite se obţin dintr-un fişier întreg. Este mult mai uşor să ne
ocupăm de activităţi specifice ce privesc numai alocarea fişierelor în nodurile unei reţele de
calculatoare. În ceea ce priveşte fragmentarea, o cercetare importantă priveşte destinaţia
unităţilor distribuite. O relaţie nu este numai o secvenţă de unităţi, din următoarele motive:
1. Vederile aplicaţiilor sunt în mod obişnuit submulţimi de relaţii.
Prin urmare, locul de unde aplicaţiile accesează nu este definit de relaţia întreagă, ci de
submulţimi ale ei. Aşadar, este mai natural să considerăm mulţimi de relaţii ca unităţi de
distribuţie.
2. Dacă aplicaţia cuprinde o vedere a unei relaţii întregi care se află pe situri diferite
atunci se pot întâlni următoarele alternative; relaţia în întregime se află pe un singur site şi în
acest caz aplicaţia trebuie să-şi transfere un volum mare de date la distanţă sau se utilizează o
replicare a bazei de date care determină apoi mari probleme în realizarea actualizării şi în plus nu
este de dorit dacă memoria este limitată.
În plus, descompunerea unei relaţii în fragmente, fiecare fiind tratată ca o unitate, permite
ca un număr de tranzacţii să se execute concurent şi ne dă posibilitatea de a executa în paralel o
singură întrebare prin descompunerea într-o mulţime de subîntrebări ce operează pe fragmente.
Astfel fragmentarea creşte nivelul de concurenţă numit concurenţa intraqweri.
Trebuie să arătăm că fragmentarea are şi unele dezavantaje. Dacă o aplicaţie are mai
multe cereri conflictuale care împiedică descompunerea relaţiei în mai multe fragmente disjuncte
(reciproc exclusive) atunci acea aplicaţie are nevoie de mai multe fragmente pentru a regăsi data
ce trebuie să realizeze reuniunea sau unirea acelor fragmente care costă. Aceste uniri constituie o
cercetare fundamentală a fragmentării.
Un alt aspect este legat de controlul semantic al datelor care ne permite să verificăm
condiţiile de integritate a datelor. Decizia de a utiliza o bază de date fragmentată este foarte
importantă deoarece determină performanţa execuţiei unei întrebări. Gradul de fragmentare
variază între a nu fragmenta nimic sau a fragmenta până la nivelul de tupluri (sau atribute)
individuale în cazul fragmentării orizontale sau la nivel de atribute în cazul fragmentării
verticale. Va trebui să găsim un nivel de fragmentare cuprins între aceste nivele. Ele se definesc
numai în raport cu aplicaţiile care se execută asupra bazei de date. Aplicaţiile sunt caracterizate
de un număr de parametrii. În concordanţă cu valorile acestor parametrii pot fi identificate în
mod individual fragmentele.

Corectitudinea regulilor de fragmentare

Când am tratat normalizarea BD s-a mentionat un număr de reguli care asigură


consistenţa bazei de date. Este important să remarcăm că există o similaritate între normalizarea
şi fragmentarea datelor pe verticală. Dăm trei reguli de care trebuie să se ţină seamă că baza de
date nu suferă schimbări semantice în timpul fragemntării
1. Completitudine. Dacă o relaţie r este descompusă în fragmente r1, r2,. . . , rk atunci
fiecare element de dată ce poate fi găsit în relaţia r trebuie să fie găsit în cel puţin un fragment ri,
Această proprietate este identică cu proprietatea de descompunere fără pierderi de la
normalizare. Aceasta este importantă în fragmentare deoarece ne asigură că datele dîntr-o rela ţie
sunt mapate în fragmente (orizontale) fără nici o pierdere. În cazul fragmentării orizontale
elementul se referă la un tuplu, în timp ce în cazul fragmentării verticale se referă la un atribut.

2.Reconstrucţie. Reconstrucţia relaţiei din fragmente ne asigură că, restricţiile


definite asupra datelor sub formă de dependenţe sunt prezervate (adică dacă R 1, R2,.. . , RK sunt
schemele fragmentelor şi F o mulţime de dependenţe funcţionale pe R 1, R2,.. . , RK şi Fi=F|Ri,
1<=i<=k atunci F=ÈFi.

3. Separabilitate. Dacă r este o relaţie şi este descompusă orizontal în fragmentele


r1,...rp, şi elementul de dată ti se află în rj atunci el nu se mai află în nici un alt fragment r k, k≠j.
Acest criteriu ne asigură că fragmentele sunt disjuncte. Dacă r este descompusă în fragmente pe
vertical atunci atributele care sunt chei primare sunt repetate în toate fragmentele ei. Prin
urmare, pentru partiţionare pe verticală separabilitatea este definită numai pentru atributele
neprime (care nu aparţin cheilor candidate).

Alternative de alocare

Presupunem că baza de date este complet fragmentată şi trebuie să decidem asupra alocării
fragmentelor pe diverse siteuri din reţea. Când datele sunt alocate, ele pot fi replicate sau
menţinute într-o singură copie. Raţiunile pentru replicare sunt date de siguranţa în exploatare şi
eficienţa interogării, a întrebărilor de citire mai ales. Dacă există copii multiple de elemente de
date există şi o şansă mai mare ca o copie să fie accesibilă, chiar dacă sistemul are erori. În plus
numai întrebările de citire care accesează acelaşi element de date pot fi executate în paralel,
deoarece există copii pe mai multe staţii. Pe de altă parte, execuţia întrebărilor de actualizare
deranjează sistemul, deoarece toate copiile datelor trebuie toate actualizate. Prin urmare decizia
de replicare depinde de raportul dintre numărul de întrebări READONLY şi numărul de întrebări
de actualizare. Aceste decizii afectează aproape toţi algoritmii şi funcţiile de control ale unui
SGBD distribuit. O bază de date nereplicată (numită şi bază de date partiţionată conţine
fragmente ce sunt alocate pe staţii diferite şi există numai o copie a oricărui fragment pe o
singură staţie a reţelei). În cazul replicării, fie că baza de date există pe fiecare staţie (BD
complet replicată) sau copii de fragmente pot exista pe mai multe staţii (BD replicată parţial).
Cum vom vedea în continuare, numărul de copii ale fragmentelor poate fi o dată de intrare într-
un algoritm de alocare sau o variabilă de decizie a cărei valoare este determinată de algoritm. Un
aspect al proiectării distribuite este că, o mulţime de factori contribuie la proiectarea optimă.
Organizare logică a bazei de date, localizarea aplicaţiilor, caracteristicile de acces ale aplicaţiilor
la baza de date, şi proprietăţile sistemului de calcul pe fiecare staţie au o influenţă importantă
asupra deciziilor de distribuire. Informaţiile pentru partiţionare pot fi împărţite în patru categorii:
informaţii asupra bazei de date, asupra aplicaţiilor, asupra reţelei şi asupra sistemului de calcul.

Fragmentarea orizontală

Fragmentarea orizontală partiţionează o relaţie în raport cu tuplurile ei. Astfel fiecare


fragment conţine câte o submulţime de tupluri din relaţie. Există două variante de partiţionare
orizontală, primară şi derivată.
Fragmentarea primară a unei relaţii este realizată prin utilizarea de predicate definite pe
acea relaţie. Fragmentarea orizontală derivată este realizată cu ajutorul unor predicate care sunt
definite pe alte relaţii. Pentru a realiza o fragmentare orizontală avem nevoie de informaţii despre
baza de date şi de informaţii cu privire la aplicaţia care va utiliza fragmentele. Informaţiile
despre baza de date sunt date de schema conceptuală globală a bazei de date. În acest context
trebuie să vedem cum sunt legate relaţiile între ele, cum se unesc în mod special. În modelul
relaţional, legăturile sunt descrise prin relaţii. Totuşi în alte modele de date ca modelul E/R
legăturile sunt descrise în mod explicit. Mai târziu în modelul relaţional legăturile între relaţii se
realizează printr-o operaţie de echiunire.
Figura 1 arată modul cum se asigură legăturile dintre relaţiile unei baze de date. Săgeţile unei
legături arată o relaţie 1: n (unu la mai mulţi). De exemplu pentru fiecare calificare există mai
mulţi salariaţi cu acea profesie(F). Aceasta constituie o legătură între relaţiile de calificare(C) şi
salariaţi(S) notată cu L1.

Calificare C

Titlu, Salariu
Salariaţi S Proiecte

IdSalariat, Nume, Titlu IdProiect, Denumire, Buget, Loc

Funcţie
IdSalariat, IdProiect, OreLucrate, Sef

Figura 1. Exprimarea legăturilor (relationship) cu ajutorul săgeţilor

Relaţia din coada săgeţii este numită owner(sursă), iar cea din vârf member. Fie legătura L 1
din figura anteriară. Vom defini două funcţii owner şi member care specifică sursa şi destinaţia
legăturii.
Exemplul 1. Considerăm legătura L1 din figura anterioară. Funcţiile owner şi member au
următoarele valori:
Owner(L1) = C,
Member(L1)=S.
Informaţia cantitativă cerută despre baza de date este dată de cardinalitatea fiecărei relaţii r,
notată cu card(r). La proiectare aplicaţiile necesită ambele tipuri de informaţii cantitative şi
calitative. Informaţiile calitative orientează activitatea de fragmentare, în timp ce informaţiile
cantitative sunt cuprinse în modele de alocare. Informaţiile calitative fundamentale constau din
predicate utilizate în întrebările utilizatorilor. Dacă nu este posibil să ne imaginăm toate
predicatele utilizatorilor trebuie să investigăm pe cele mai importante dintre ele. Se sugerează
alegerea acelor întrebări ale utilizatorilor care au o frecvenţă de uilizare de cel puţin 20% şi
accesează în total cel puţin 80% din date. Din acest punct de vedere suntem interesaţi de
determinarea predicatelor simple. Fie relaţia r(A 1,A2,…,An), undeAi este un atribut cu domeniul
Di, 1≤i≤n. un predicat simplu p j definit pe r are forma : p j: Aiθd, unde dÎDi şi θ este un
comparator(<, ≤, =, >, ≥ ,¹) şi d o valoare aleasă din domeniul atributului Ai. Notăm cu pi
mulţimea tuturor predicatelor simple definite pentru relaţia ri.

Exemplu 2. Fie o instanţă a relaţiei proiect din figura anterioară. Denumire proiect=’producţie’
este un predicat simplu ca şi buget ≥20K
Totuşi întrebările utilizatorilor iunclud întrebări complexe care sunt combinaţii de predicate
simple. O combinaţie de predicate simple care ne interesează se numeşte predicat minterm care
este o cojuncţie de predicate simple, deoarece orice expresie booleană o putem transforma într-o
formă normală conjunctivă. Utilizarea predicatelor minterm în proiectarea algoritmilor nu
restrânge generalitatea. Fie o mulţime de predicate simple Pi={pi1,pi2,…,pin} pentru relaţia ri.
Mulţimea de predicate minterm00-= Mi={mi1,…,miq} este definită de
Mi={mij ; mij=Ùpik*| pik Îpi 1≤k≤m, 1≤j≤q} unde pik*=pik sau ┐pik.
Orice predicat simplu poate fi cuprins într-un predicat minterm fie în formă naturală, fie în
formă negată. Referinţa la negaţia unui predicat se referă numai la predicatele care conţin
operatorul de egalitate, adică de forma A=valoare. Pentru predicatele care conţin inegalitate,
negarea unui predicat simplu de forma A≤v este înlocuită cu predicatul A>v. În afară de
problemele teoretice, negarea complementului în mulţimi infinite, complementul poate fi dificil
de definit. De exemplu două predicate simple de forma
Margine_inferioară ≤ atribut1
Atribut1 ≤ margine_superioară, cu complementele lor
┐(Margine_inferioară ≤ atribut1)
┐(Atribut1 ≤ margine_superioară)
Cele două predicate simple pot fi scrise într-unul singur
margine_inferioară ≤ atribut1 ≤ margine_superioară, cu complementul
┐(Margine_inferioară ≤ atribut1 ≤ margine_superioară), care nu este uşor de definit.

Exemplul 3.Considerăm relaţia de calificare C pentru care dăm câteva predicate simple posibile:
p1 : Titlu=’analist’
p2 : Titlu=’progamator’
p3 : Titlu=’profesor’
p4 : Titlu=’inginer mec’
p5 : Titlu=’inginer calc’
p6 : Salariu≤60K
p7 : Salariu>60K
Dăm exemple de predicate minterm care pot fi definite pe baza acestor predicate simple.
m1: Titlu=’analist’ ÙSalariu≤6000
m2: Titlu=’analist’ ÙSalariu>6000
m3: Titlu=’programator’ ÙSalariu≤6000
m4: Titlu=’progamator’ÙSalariu>6000
m5: Titlu=’inginer mec’ÙSalariu≤4500
m6: Titlu=’ inginer mec’ÙSalariu>4500

Există două observaţii care pot fi făcute:


a) Nu există orice predicat minterm ce poate definit, ca de exemplu m4.
b) Câteva predicate pot avea sens când sunt date semanticile relaţiei r. Informaţia
cantitativă despre aplicaţia utilizatorului cuprinde următoarele două mulţimi:

1) Selectivitatea mintermului – numărul de tupluri din relaţie ce ar trebui accesate de


întrebarea utilizatorului specificată de un predicat minterm dat.
De exemplu selectivitatea lui m1 în C este 0 deoarece nu există nici un tuplu în relaţia de
decodificare unde un analist să aibă salariul mai mic de 6000. Pe de altă parte selectivitatea lui
m2 este 1.

2) Frecvenţa de accesare cu care aplicaţiile utilizatorului accesează datele. Dacă


Q=(q1,q2,...,qp) este o mulţime de întrebări ale utilizatorilor, acc(qi) indică frecvenţa de
accesare a întrebării qi într-o perioadă dată. Frecvenţa de acces ale mintermelor sunt
determinate de frecvenţele de acces ale componentelor date de predicatele simple.

Fragmentarea orizontală primară

Fragmentarea orizontală primară este definită ca o opetaţie de selecţie pentru relaţia


sursă (owner). Prin urmare, fiind dată o relaţie ri, un fragment orizontal al ei este dat de
rij=σFj(ri) , 1≤j≤k,

unde Fj este o formulă de selecţie utilizată pentru a obţine fragmentul r ij. Dacă F este o formulă
normală conjunctivă atunci ea este un predicat minterm m ij. Algoritmii care sunt daţi sunt
pentru predicate minterme.
Exemplul 4. Descompunerea relaţiei proiecte în fragmentele Proiecte1 şi Proiecte2 din
exemplul 1.
Proiecte1=σBuget≤20(Proiecte)
Proiecte2=σBuget>20(Proiecte)
Aceste probleme pot fi rezolvare în practică prin limitarea domeniilor atributelor în
concordanţă cu cerinţele aplicaţiilor. Considerăm relaţia Proiecte

Proiecte(IdProiect Denumire Buget Loc)


P1 Producţie 40 Buc
P2 DezvoltareBD 35 CR
P3 CAD/CAM 20 CR
P4 Întreţinere 30 CJ

PR1=σLOC=BUC(Proiecte),
PR2=σLOC=CR(Proiecte),
PR3=σLOC=CJ(Proiecte).

Un fragment orizontal ri al relaţiei r constă din toate tuplurile din r care satisfac un predicat
minterm mi.Prin urmare fiind dată o mulţime M de predicate minterme, există o mulţime de
fragmente orizontale corespunzătoare predicatelor minterme. Această mulţime de fragmente
orizontale sunt numite în mod obişnuit fragmente minterme. Prin urmare primul pas al oricărei
fragmentări este să determinăm o mulţime de predicate simple cu anumite proprietăţi ca:
minimalitatea, şi completitudinea.

O mulţime de predicate P se numeşte completă dacă şi numai dacă pentru orice


aplicaţie există o acceaşi probabilitate de acces la orice două tupluri care aparţin
oricărui fragment minterm ce sunt definite în concordanţă cu P.
Este evident că, completitudinea mulţimii de predicate este diferită de completitudinea
regulilor de fragmentare.Considerăm fragmentarea relaţiei Proiect în raport cu atributul loc.
Dacă există numai aplicaţii care accesează relaţia proiect, dorind să accesăm tupluri în raport
cu Localitatea, mulţimea este completă deoarece fiecare tuplu al acestui fragment proiect i are
acceaşi probabilitate de accesare. Dacă ar exista o aplicaţie care ar accesa tuplurile care au un
buget mai mic de 20, atunci P nu este complet. Unele tupluri au probabilităţi mai mari de a fi
accesate datorită acestei aplicaţii. Pentru a face mulţimea P de predicate completă trebuie să
adăugăm predicatele
(Buget≤20, Buget>20),
P={Loc=’Buc’, Loc=’CR’, Loc=’CJ’, Buget≤20, Buget>20}.
Completitudinea este o proprietate necesară deoarece o mulţime completă de predicate
ne permite să definim o mulţime de predicate minterme în raport cu care se realizează
fragmentarea orizonatală primară. Fragmentele obţinute în acest mod nu sunt numai uniforme
din punct de vedere logic, în sensul că că ele satisfac predicatul minterm, dar sunt omogene
din punct de vedere statistic. Vom da o definiţie formală a completitudinii astfel ca să ne
permită obţinerea unei mulţimi complete pe baza unui algoritm.
Totuşi, aceasta va cere ca proiectantul să specifice probabilităţiile de acces pentru fiecare
tuplu al unei relaţii pentru fiecare aplicaţie considerată. Vom prezenta pe scurt un algoritm de
obţinere al acestei mulţimi. A doua proprietate a mulţimii de predicate minterme în raport cu
care se realizează fragmentarea este minimalitatea.
Ea arată că, dacă un predicat influenţează modul cum se realizează fragmentarea (adică
cum un fragment F este fragmentat în fi,fj) ar trebui să existe cel puţin o aplicaţie care să acceseze
în mod diferit fi, fj. Cu alte cuvinte, predicatul simplu ar trebui să fie relevant în determinarea
unei fragmentări. Dacă toate predicatele din mulţimea P sunt relevante, atunci P este minimală.
O definiţie formală a relevanţei a fost data de Ceri in 1982. Fie mi, mj două predicate minterm
care sunt indentice în definiţia lor, cu excepţia că mi conţine un singur predicat simplu pi şi mj
conţine pe ùpi. Astfel fragmetele fi,fj sunt definite în raport cu mi, mj.
Atunci pj este relevant dacă şi numai dacă

accmi  accm j 

card  f i  card  f j 
.

Exemplu 5: Mulţimea P de predicate este completă şi minimală, dar dacă se mai adaugă
Nume=”instrumentare” nu mai este minimală deoarece predicatul este nerelevant în raport cu P.
Nu există nici o aplicaţie care ar trebui să acceseze fragmentele rezultate în mod diferit. Vom
prezenta un algoritm care generează o mulţime completă şi minimală de predicate P’ dintr-o
mulţime simplă de predicate P. Acest algoritm se numeşte COMMIN.
Regula R1 este o regulă de completitudine şi minimalitate dacă o relaţie sau un
fragment este partiţionat în cel puţin două părţi care sunt accesate în mod diferit de cel
puţin de o aplicaţie.
Notăm cu fi ÎP’ un fragment definit în raport cu un predicat minterm definit de predicatele din P’.
În continuare dăm un algoritm care dintr-o mulţime de predicate simple determină o mulţime
completă şi minimală P’.

1. START [ ComMin ]
2. INPUT { r: relaţie, P o mulţime de predicate simple }
3. CALL relvar (P, r; pi, fj)
4. P’¬ {pi}
5. P¬P-{pi}
6. F¬{fi}
7. WHILE P’ nu e completă
7.1 CALL relvar (P, pk ;pj, fj)
7.2 P’¬P’È{pj}
7.3 P¬P-{pj}
7.4 F¬FÈ{fj}
7.5 IF $pkÎP’care nu e relevant
Then
.1. P’¬P’-{pk}
.2. F¬F-{fk}
7.6 CONTINUE
7. STOP
Procedura relvar determină un pjÎP astfel ca pj să partiţioneze un fragment fk determinat de
P în concordanţă cu regula R1. Algoritmul începe cu găsirea unui predicat care este relevant şi
care partiţionează relaţia de intrare. În ciclul while se adaugă predicate la această mulţime ce
păstreză minimalitatea la fiecare pas.
Al doilea pas în fragmentarea orizontală este obţinerea mulţimii de predicate minterm ce
pot fi definite de o mulţime de predicate P’. Aceste predicate minterm determină fragmentele
care sunt utilizate în pasul de alocare. Determinarea fiecărui predicat minterm este trivială,
n
dificultatea este că, mulţimea de predicate minterm este foarte mare (de ordin 2 , unde n este
numărul de predicate simple). În pasul următor vom determina modul de reducere al predicatelor
minterm ce sunt necesare în fragmentare. În al treilea pas se face eliminarea unui anumit
fragment ce poate fi nesemnificativ. Această eliminare este realizată prin identificarea acelor
mintermuri ce pot fi contradictorii cu o mulţime de implicaţii I dată.
De exemplu dacă P={p1,p2}, unde
p1: atr=v1
p2: atr=v2 şi dom(atr)-{v1,v2},
Evident că I conţine două implicaţii care sunt definite astfel:
i1: (atr=v1)Þù(atr=v2)
i2: ù (atr=v1)Þ(atr=v2).

Sunt definite astfel următoarele patru predicate în raport cu P’:


m1: (atr=v1)Ù(atr=v2)
m2: (atr=v1)Ùù(atr=v2)
m3: ù (atr=v1)Ù(atr=v2)
m4: ù (atr=v1)Ùù(atr=v2) .
În acest caz predicatele minterme m1, m4 sunt contradictorii în raport cu implicaţia I, şi
prin urmare pot fi eliminate din M. Aceasta stă la baza algoritmului Porizontal. Intrarea în acest
algoritm este o relaţie ri care este supusă fragmentării orizontale cu ajutorul predicatelor simple
din mulţimea P, care a fost determinată în raport cu aplicaţiile definite pentru o relaţia ri.
1. START [ Porizontal ]
2. INPUT { r: relaţie, P o mulţime de predicate simple }
3. CALL ComMin{ri,Pi,Pi’}
4. CALL DetMin(Pi’,Mi)
5. CALL DImp(P’,I)
6. FOR fiecare mi Î Mi
0.1 IF mi= contradictoriu în I
THEN
5.1.1 Mi ¬Mi-{mi}
5.2 CONTINUE
6. OUTPUT{ Mi o mulţime de fragmente}
7. STOP.

Procedura DetMin detetrmină mulţimea de predicate minterm. Procedura DImp


determină mulţimea I de implicaţii determinate de piÎP’.
Exemplu: Să considerăm baza de date obţinută prin selecţie din relaţia proiect.
r1=бBUGET≤1000(proiect)
r2=бBUGET>1000(proiect)
Presupunem că există numai o aplicaţie care accesează relaţia profesie(Titlu, Salariu).
Aplicaţia verifică informaţiile despre salariu şi determină suma corespunzătoare. Presupunem
că, înregistrările sunt gestionate în două locuri, unul unde sunt gestionate salarii mai mici ca 5
mii şi altul în care sunt manipulate salariile mai mari ca 5mii. Există întrebări care se referă la
două staţii. Predicatele simple ce vor fi utilizate la partiţionarea relaţiei ’’profesie’’ sunt:
p1=Sal≤5000
p2=Sal>5000
Fie iniţial, mulţimea P={p1,p2}. Aplicând algoritmul ComMin lui P se arată că este completă şi
minimală. Vom forma următoarele predicate minterm ca termeni ai lui M:
m1 : (Sal≤5000) Ù(Sal>5000),
m2 : (Sal≤5000) Ùù(Sal>5000),
m3 : ù (Sal≤5000) Ù(Sal>5000),
m4 : ù (Sal≤5000) Ùù (Sal>5000).
Presupunem că domeniul atributului Sal poate fi împărţit în două, cum sugerează p1 şi
p2, următoarele implicaţii sunt evidente.

i1 : p1  p2
i2 :p1  p2
i3 : p2  p1
i2 :p2  p1
În raport cu I predicatul minterm m1 este contradictoriu cu i1 şi m4 este contradictoriu cu
i2. Prin urmare M={m1,m2} În plus, i1 şi i4 reduce specificarea lui m1 la p1 şi similar m3 se reduce
la p2 datorită lui i2 şi i3.
r1 (Titlu Sal) r2(Titlu Sal)
ing. mec. 2700 Analist 4000
Programator 3800 ing. el. 3400
Există două fragmente definite în raport cu M.
Împreună i1 şi i4 reduc specificaţia lui m2 la p1 şi similar reducem m3 la p2 datorită lui i2 şi lui i3.
Prin urmare definim două fargmente F={S1,S2} în concordanţă cu M.
S1(Titlu Sal) S2(Titlu Sal)
Ing. mec. 2700 ing. electronist 3400
Programator 3800 Analist sistem 4000

Fragmentarea orizontală a relaţiei salariati (S). Vom considera următoarea relaţie.


Presupunând că există două aplicaţii. Mai întâi la trei site-uri şi să căutăm numele şi bugetele
proiectelor dând numărul lor. În notaţia SQL întrebarea este :
SELECT S.Nume, Buget
FROM salariati S
WHERE Sal=valoare
Pentru această aplicaţie predicatele simple care ar trebui utilizate sunt următoarele:
p1 LOC=’Montreal’
p2 LOC=’Paris’
p3 LOC=’New York’
Aplicaţia a două se reduce la 2 site-uri pe care ar trebui să se gestioneze
proiectele.Acele proiecte ce au bugetul mai mic decât 20 sunt gestionate pe un site în timp ce
celelalte cu bugetul mai mare sunt gestionate pe un al doilea site. Astfel aplicaţiile simple ce
ar trebui să fie utilizate la fragmentare în concordanţă cu a doua aplicaţie sunt :
p1: Buget £ 20
p2: Buget > 20
Aplicaţia algoritmului ComMin conduce la obţinerea lui P’={p 1, p2, p3, p4, p5} care este
completă şi minimală. Bazata pe P’ pot fi definite următoarele predicate minterm ce formează
M.
m1: (Loc=Montreal) Ù(Buget≤20)
m2: (Loc=Montreal) Ù(Buget>20)
m3: (Loc=NewYork) Ù(Buget≤20)
m4: (Loc= NewYork) Ù(Buget>20)
m5: (Loc=Paris) Ù(Buget≤20)
m3: (Loc=Paris) Ù(Buget>20)

Fragmentarea orizontală derivată

O fragmentare orizonatală derivată este definită pe o relaţie membru(fiu a unei legături


în raport cu un operator de selecţie specificat pentru relaţia părinte(tată). Legătura dîntre
relaţiile tată şi fiu sunt definite de operatorul de echiunire (Equijoin). Operatorul de echiunire
putem să-l definim prîntr-o semiunire. Aceasta este importantă deoarece vom partiţiona relaţia
membru în concordanţă cu fragmentele relaţiei părinte, deci fragmentele rezultate să fie numai
pentru atributele relaţiei membru. În concordanţă cu legătura L unde
Owner(L)=s
Member(L)=r
Se numeste fragment orizontal derivat ri=>< si şi 1≤i≤n unde n este numărul maxim
de fragmente distincte care vor fi definite pe r 1 şi si=σFi(s) unde Fi este formula în raport cu care
este definit fragmentul orizontal primar s i. Fie relaţiile r de schemă R şi s de schemă S cu
atributele AÎR şi BÎS cu dom(A)=dom(B). Se numeşte semiunire a relaţiei r sau s notată cu
r  s mulţimea tuturor tuplurilor t din r ce pot participa la unirea cu un tuplu din s.
r>< s=πR(r>< s)= πR®>< πRÇS(S)=r>< πRÇS(S)
sR 
a1
a2
r  s   B a1 r    B a2 r .
Fie r(R) şi s(A), AÎR, , dom(A)=dom(B)
Într-o schemă a unei baze de date există în mod obişnuit mai mult de două legături
între relaţiile de schemă R şi S. În acest caz există mai multe fragmentări posibile. Alegerea
unei fragmentări se bazează pe unul din criteriile următoare:
1 Se alege fragmentarea cu cele mai bune caracteristici de unire (join) adică să
răspundă la întrebările care necesită unirea relaţiilor de scheme R şi S prin
folosirea de fragmente cât mai mici sau a unor algoritmi de unire
permanenţi.
2 Fragmentarea este determinată de frecvenţa cu care aplicaţiile accesează
datele din fragmentele componente şi este utilizată de mai multe aplicaţii.

Al doilea punct este cel mai important pentru BDD. Dacă în plus, avem de executat un număr
de întrebări de pe mai multe site-uri, vom putea executa orice întrebare în parallel, atunci timpul
de răspuns sau total al sistemului se micşorează. Considerăm unui graf de unire (al legăturilor)
dintre fragmente. Dacă există numai o legătură care intră sau iese dintr-un fragment atunci
graful se numeşte simplu. Avantajul proiectării unei relaţii de unire când graful este simplu este
că legătura poate fi alocată pe un site şi member şi owner-ul ei şi unirile dintre diferite
fragmente pot fi executate în paralel şi independent.

S1 S2

E1 E2

Fig. Graful de unire dintre fragmente.


În mod obişnuit obţinerea unui graf de unire simplu nu este posibil. În acest caz,
proiectarea se face pe bază unui graf de unire partiţionat.
Completitudinea este o proprietate dorită deoarece mulţimea de predicate ne dă
posibilitatea să definim numai mulţimea de predicate minterme în raport cu care realizăm
fragmentarea orizontală.Fragmentele obţinute pe această cale nu sunt numai uniforme din
punct de vedere logic, dar şi omogene din punct de vedere statistic. Este posibil să definim
formal completitudinea care să permită să se obţină o mulţime de predicate în mod automat.
Aceasta necesită ca proiectantul să specifice probabilitatea de acces pentru fiecare tuplu al
fiecărei aplicaţii considerate. Aceasta nu cere mai multă muncă ci apelează la elementele BD şi la
experienşa proiectantului pentru a găsi o mulţime completă.

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