You are on page 1of 369

Uvod u relacione baze

podataka
Gordana Pavlovic-Lazetic

Sadr
zaj
0 Uvod

Relaciona tehnologija

1 Relacioni model podataka


1.1 O modelima podataka . . . . . . . .
1.2 Strukturni deo relacionog modela . .
1.3 Manipulativni deo relacionog modela
1.3.1 Nedostajuce vrednosti . . . .
1.4 Integritetni deo relacionog modela .
1.4.1 Primarni kljuc . . . . . . . .
1.4.2 Strani kljuc . . . . . . . . . .
1.4.3 Trigeri . . . . . . . . . . . . .
1.5 Pitanja i zadaci . . . . . . . . . . . .

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

7
7
14
18
19
20
21
22
24
26

2 Manipulativni formalizmi relacionog modela


2.1 Relaciona algebra . . . . . . . . . . . . . . . .
2.1.1 Unarne operacije . . . . . . . . . . . .
2.1.2 Binarne operacije . . . . . . . . . . .
2.1.3 Prosirena relaciona algebra . . . . . .
2.2 Relacioni racun . . . . . . . . . . . . . . . .
2.2.1 Relacioni racun n-torki . . . . . . . .
2.2.2 Relacioni racun domena . . . . . . . .
2.3 Pitanja i zadaci . . . . . . . . . . . . . . . . .

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

28
28
29
31
35
37
38
41
47

II

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

Relacioni upitni jezici

3 Upitni jezik SQL


3.1 Istorijat . . . . . . .
3.2 Definisanje podataka
3.2.1 Shema . . .
3.2.2 Bazne tabele

.
.
.
.

.
.
.
.

.
.
.
.

49
.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

52
52
54
55
56
i


SADRZAJ

ii
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

61
62
63
63
64
68
70
73
74
76
79
81
82
85
86
87
90
91
93
103
105
108

4 Pogledi
4.1 Definisanje pogleda . . . . . . . . . . . . . . . . .
4.1.1 Kreiranje pogleda . . . . . . . . . . . . .
4.1.2 Eksplicitno imenovanje kolona pogleda . .
4.1.3 Kreiranje pogleda nad drugim pogledima
4.1.4 Uklanjanje pogleda . . . . . . . . . . . .
4.2 Pretrazivanje pogleda . . . . . . . . . . . . . . .
4.3 Azuriranje, unosenje i brisanje nad pogledima .
4.4 Prednosti pogleda . . . . . . . . . . . . . . . . .
4.5 Novi pristup pogledima . . . . . . . . . . . . . .
4.5.1 Unija, presek, razlika . . . . . . . . . . .
4.5.2 Restrikcija . . . . . . . . . . . . . . . . .
4.5.3 Projekcija . . . . . . . . . . . . . . . . .
4.5.4 Prirodno spajanje . . . . . . . . . . . . .
4.6 Pitanja i zadaci . . . . . . . . . . . . . . . . . . .

.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.

111
111
111
114
115
115
115
116
119
120
121
122
122
123
123

5 Standardi SQL-a
5.1 Standardni jezik baza podataka
5.1.1 Definisanje podataka .
5.1.2 Manipulisanje podacima
5.1.3 Aplikativni SQL . . . .
5.2 Pitanja i zadaci . . . . . . . . .

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

125
127
127
131
134
136

3.3

3.4
3.5
3.6
3.7

3.2.3 Indeksi . . . . . . . . . . . . . . . . .
3.2.4 Pogledi . . . . . . . . . . . . . . . . .
Manipulisanje podacima . . . . . . . . . . . .
3.3.1 Pretrazivanje . . . . . . . . . . . . . .
3.3.2 Jednorelacioni upiti . . . . . . . . . .
3.3.3 Upiti spajanja . . . . . . . . . . . . .
3.3.4 Podupiti . . . . . . . . . . . . . . . . .
3.3.5 Korelisani podupiti . . . . . . . . . . .
3.3.6 Egzistencijalni kvantifikator . . . . . .
3.3.7 Agregatne funkcije . . . . . . . . . . .
3.3.8 Operator grupisanja . . . . . . . . . .
3.3.9 Puni upitni blok . . . . . . . . . . . .

3.3.10 Operator uredenja


i operator WITH .
3.3.11 Nacin izvrsavanja SELECT iskaza . .
3.3.12 Relaciona kompletnost SQL-a . . . . .
3.3.13 Unosenje . . . . . . . . . . . . . . . .
3.3.14 Azuriranje . . . . . . . . . . . . . . . .
3.3.15 Brisanje . . . . . . . . . . . . . . . . .
Aplikativni SQL . . . . . . . . . . . . . . . .
Dinamicki SQL . . . . . . . . . . . . . . . . .
Autorizacija i prava korisnika baze podataka .
Pitanja i zadaci . . . . . . . . . . . . . . . . .

SQL2
. . . .
. . .
. . . .
. . . .

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.

.
.
.
.
.


SADRZAJ

iii

6 Upitni jezik QUEL


6.1 Interaktivni QUEL . . . . . . . . . . .
6.1.1 Definisanje podataka . . . . . .
6.1.2 Manipulisanje podacima . . . .
6.1.3 Agregatne operacije i funkcije .
6.1.4 Relaciona kompletnost QUEL-a
6.1.5 Iskazi DEFINE i MODIFY . .
6.2 Aplikativni QUEL . . . . . . . . . . .
6.3 Pitanja i zadaci . . . . . . . . . . . . .

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

137
137
137
138
140
141
142
143
145

7 Optimizacija upita
7.1 Katalog . . . . . . . . . . . . .
7.2 Sistematski pristup optimizaciji
7.3 Optimizacija u SYSTEM R . .
7.4 Optimizacija u INGRES-u . . .
7.5 Pitanja i zadaci . . . . . . . . .

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

147
147
149
154
156
158

III

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

Logi
cko projektovanje

160

8 Teorija zavisnosti
8.1 Funkcionalne zavisnosti i dekompozicija .

8.2 Aksiome izvodenja


. . . . . . . . . . . . .
8.3 Zatvorenje skupa funkcionalnih zavisnosti
8.4 Pokrivanje skupa funkcionalnih zavisnosti
8.5 Viseznacne zavisnosti . . . . . . . . . . . .
8.6 Osnovne osobine viseznacnih zavisnosti . .
8.7 Zavisnosti spajanja . . . . . . . . . . . . .
8.8 Pitanja i zadaci . . . . . . . . . . . . . . .

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

162
162
165
168
170
173
175
177
178

9 Normalne forme
9.1 Druga normalna forma . . . .
9.2 Treca normalna forma . . . .
9.3 Boyce-Codd normalna forma
9.4 Dobre i lose dekompozicije . .

9.5 Cetvrta
normalna forma . . .
9.6 Peta normalna forma . . . . .
9.7 Pitanja i zadaci . . . . . . . .

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

180
180
183
187
189
190
191
192

10 Semanti
cko modeliranje
10.1 Prosireni relacioni model RM/T
10.1.1 Strukturni deo modela . .
10.1.2 Integritetni deo modela .
10.1.3 RM/T katalog . . . . . .
10.1.4 Manipulativni deo modela

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

195
199
200
201
202
203

.
.
.
.
.
.
.


SADRZAJ

iv
10.2 Prosireni model entiteta i odnosa (PMEO) .
10.3 Strukturni deo PMEO . . . . . . . . . . . .
10.3.1 Primer logickog projektovanja . . .
10.4 Semanticki model baze podataka . . . . . .
10.5 Pitanja i zadaci . . . . . . . . . . . . . . . .

IV

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

Fizi
cka organizacija podataka

.
.
.
.
.

204
205
210
213
214

216

11 Strukture podataka i pristupne metode


11.1 Fizicka reprezentacija relacije . . . . . . . . . . . .
11.2 Sortiranje sekvencijalne datoteke . . . . . . . . . .
11.3 Sekvencijalna organizacija . . . . . . . . . . . . . .
11.3.1 Efikasnost izvrsavanja jednorelacionih upita
11.3.2 Izvrsavanje viserelacionih upita . . . . . . .
11.4 Indeks-sekvencijalna organizacija . . . . . . . . . .
11.4.1 Efikasnost izvrsavanja jednorelacionih upita
11.4.2 Izvrsavanje viserelacionih upita . . . . . . .
11.5 Pitanja i zadaci . . . . . . . . . . . . . . . . . . . .

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

218
220
223
228
229
231
233
235
238
238

12 Indeksna organizacija
12.1 Efikasnost izvrsavanja jednorelacionih upita . .
12.1.1 Pretrazivanje . . . . . . . . . . . . . . .
12.1.2 Azuriranje, unosenje i brisanje . . . . .
12.2 Izvrsavanje viserelacionih upita . . . . . . . . .
12.3 Struktura indeksa . . . . . . . . . . . . . . . . .
12.3.1 Pretrazivanje indeksa . . . . . . . . . .
12.3.2 Unosenje u indeks, brisanje i azuriranje
12.4 Pitanja i zadaci . . . . . . . . . . . . . . . . . .

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

240
241
241
242
244
244
247
248
251

13 Direktna organizacija
13.1 Funkcija direktnog pristupa . . . . . . .
13.2 Resavanje kolizije posebno ulancavanje
13.3 Resavanje kolizije otvoreno adresiranje
13.4 Efikasnost izvrsavanja operacija . . . . .
13.5 Pitanja i zadaci . . . . . . . . . . . . . .

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

253
255
256
260
265
267

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

Upravljanje transakcijama

14 Transakcija, integritet i konkurentnost


14.1 Transakcija i integritet . . . . . . . . .
14.2 Konkurentnost . . . . . . . . . . . . .
14.2.1 Izvrsenja skupa transakcija . .
14.3 Problemi konkurentnosti . . . . . . . .
14.4 Zakljucavanje . . . . . . . . . . . . . .

269
.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

271
271
273
274
276
278


SADRZAJ

14.4.1 Resenje problema konkurentnosti . . . . . . . . . . . . . . . . 282


14.5 Pitanja i zadaci . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284
15 Oporavak
15.1 Oporavak od pada transakcije . . . . .
15.2 Oporavak od pada sistema . . . . . . .
15.2.1 Poboljsanje procedure oporavka
15.3 Pitanja i zadaci . . . . . . . . . . . . .

VI

. .
. .
od
. .

. . .
. . .
pada
. . .

. . . . .
. . . . .
sistema
. . . . .

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

Distribuirane baze podataka

16 Problemi distribuiranih sistema


16.1 O distribuiranim sistemima . .
16.2 Fragmentacija podataka . . . .
16.3 Distribuirana obrada upita . .
16.4 Preneto azuriranje . . . . . . .
16.5 Upravljanje katalogom . . . .
16.6 Heterogeni distribuirani sistemi
16.7 Pitanja i zadaci . . . . . . . . .

.
.
.
.

286
288
289
291
294

295
.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

297
297
300
301
305
305
306
308

17 Distribuirano upravljanje transakcijama


17.1 Konkurentnost . . . . . . . . . . . . . .
17.2 Dvofazno zakljucavanje . . . . . . . . .
17.3 Vremenske oznake . . . . . . . . . . . .
17.3.1 Klase transakcija . . . . . . . . .
17.3.2 Analiza grafa konflikta . . . . . .
17.4 Oporavak . . . . . . . . . . . . . . . . .
17.5 Pitanja i zadaci . . . . . . . . . . . . . .

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

309
309
311
313
315
316
320
322

18 Klijent-server sistemi baza podataka


18.1 Jedna realizacija klijent-server RSUBP . . . . . . . . .
18.1.1 DB2 server . . . . . . . . . . . . . . . . . . . .
18.1.2 DB2 klijent . . . . . . . . . . . . . . . . . . . .
18.1.3 Ostali DB2 proizvodi . . . . . . . . . . . . . . .
18.1.4 Priprema i izvrsavanje aplikativnih porograma
18.1.5 Fizicka organizacija podataka u sistemu DB2 .
18.2 Pitanja i zadaci . . . . . . . . . . . . . . . . . . . . . .

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

323
326
326
327
327
329
333
336

A Objektno orijentisane baze podataka


A.1 Objektno orijentisani model podataka . . . . . . . . . . . . . .
A.1.1 Jezgro objektno orijentisanog modela podataka . . . . .
A.1.2 Ostali koncepti objektno orijentisanih modela podataka
A.2 Objektno orijentisani sistemi baza podataka . . . . . . . . . . .
A.2.1 Dugotrajne transakcije . . . . . . . . . . . . . . . . . . .
A.2.2 Upitni jezici . . . . . . . . . . . . . . . . . . . . . . . . .

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

337
339
339
344
348
348
350

.
.
.
.
.

.
.
.
.
.
.
. .

.
.
.
.
.
.
.

.
.
.
.
.
.
.

A.3 Sistemi baza podataka nove generacije . . . . . . . . . . . . . . . . . 353


A.4 Pitanja i zadaci . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355
Bibliografija

357

Uvod
Tradicionalni pristup razvoju programskih sistema za cuvanje i obradu podataka,
do pojave baza podataka krajem sezdesetih godina, bio je u sustini ad hoc: polazeci
od definicije aplikacije, kreirala bi se datoteka ili skup datoteka podataka potrebnih

za definisanu aplikaciju, i pisali bi se programi koji obraduju


podatke tih datoteka
u skladu sa aplikacijom ([52]). Sva prosirenja definisane aplikacije realizovala bi se
dodavanjem novih datoteka i pisanjem dodatnih programa. Ovakav pristup je brzo
pokazao sve svoje nedostatke:
Ponavljanje istih podataka uz razlicite aplikacije. Na primer, u jednom biblioteckom okruzenju, aplikacije za obradu knjiga, reversa i citalaca mogle bi da

koriste odgovarajuce datoteke KNJIGE, REVERSI, CITAOCI,


redom. pri
tom bi, s obzirom na potrebe ovih aplikacija, datoteka REVERSI sadrzala sve
podatke o knjizi i citaocu koji su vec sadrzani i u datoteci KNJIGE odnosno

CITAOCI.
Nekonzistentnost podataka. Zbog ponavljanja istih podataka u raznim datotekama, moze se dogoditi da se promena vrednosti primercima istog podatka ne izvede dosledno, tj. da se jednom primerku istog podatka vrednost
promeni (namerno ili nenamerno), a da se to ne ucini sa ostalim primercima
tog podatka. Na primer, adresa istog citaoca moze da bude razlicito zapisana

u datotekama CITAOCI
i REVERSI, sto ce proizvesti nekonzistentnost (nekorektnost) podataka.
Programi za obradu podataka zavise od nacina struktuiranja podataka. Tako
ce ti programi biti razliciti u slucajevima razlicite organizacije datoteka
(sekvencijalna, indeks-sekvencijalna, direktna, indeksirana, itd). Zato promena strukture podataka zahteva promenu programa.
Obrada podataka je skupa, s obzirom na nekonzistentnost i zavisnost programa od organizacije podataka.
1

0 Uvod
Koriscenje istih podataka od strane veceg broja korisnika je otezano. Na
primer, istovremeni pokusaj dva ili vise korisnika da promene sadrzaj datoteke
REVERSI zavrsice se, u mnogim slucajevima, pamcenjem promena samo
onog korisnika koji je poslednji zavrsio rad sa datotekom. Ostali korisnici ni
na koji nacin nece biti obavesteni o tome da njihove promene nisu upamcene.
U drugim slucajevima visekorisnickog pristupa podacima smestenim u sistem
datoteka, kada se pristup vrsi istoj kopiji datoteke, moguci su i tezi primeri
narusavanja korektnosti podataka.
Neadekvatna realizacija oporavka od pada sistema. U slucaju pada sistema
(npr. nestanka elektricnog napajanja), aktivni poslovi nemaju mogucnost
ponistavanja svojih delimicnih izvrsenja (ako su ona deo jedinstvene logicke
celine), a cesto, po uspostavljanju sistema, ni evidenciju o svom delimicnom
izvrsenju. Na primer, ako bi svim citaocima trebalo produziti (na reversu)
rok zaduzenja za po 10 dana, i ako bi usred izvrsavanja tog posla doslo do
pada sistema, po uspostavljanju rada ne bi postojala informacija o tome koji

su reversi obradeni
a koji jos nisu.

Da bi se mogle iskoristiti pogodnosti racunara za cuvanje podataka, neophodno


je obezbediti i programske alate prenosa podataka, upravljanja podacima i komunikacije sa korisnikom. Zato nova organizacija podataka, nazvana baza podataka,
zajedno sa programskim alatima koji je podrzavaju, treba da obezbedi:

nezavisnost struktura podataka od programa koji ih obraduju,


i programa od
struktura podataka (izmena podataka ne utice na programe);
minimalnost ponavljanja podataka;
da obrada podataka nije vezana za programski jezik opste namene, vec za visi
upitni jezik;
koriscenje baze podataka od strane veceg broja korisnika.
Pojam baza podataka pojavio se krajem sezdesetih godina i oznacavao je skup

kojima ima samo


medusobno
povezanih podataka koji se cuvaju zajedno, i medu
onoliko ponavljanja koliko je neophodno za njihovo optimalno koriscenje pri visekorisnickom radu. Podaci se pamte tako da budu nezavisni od programa koji ih
koriste, i struktuiraju se tako da je omogucen porast baze. Posle svake aktivnosti
nad bazom, koja predstavlja logicku celinu posla, stanje baze mora biti konzis njima moraju zadovoltentno (valjano); to znaci da podaci u bazi i odnosi medu
javati unapred zadate uslove koji odslikavaju deo realnosti modelirane podacima u
bazi. Za efikasan rad sa podacima i odrzavanje konzistentnog stanja baze koristi
se specificni programski proizvod sistem za upravljanje bazama podataka (krace
SUBP DBMS, Data Base Management System). Baze podataka zajedno sa SUBP
cine sistem baza podataka. U sirem smislu, u sistem baza podataka spada i odgo
varajuci hardver, svi programski alati koji se nadgraduju
na SUBP i olaksavaju rad

0 Uvod

sa bazama, kao i raznorodni korisnici baza podataka (od krajnjih korisnika, preko
aplikativnih programera do administratora baza podataka).
U razvoju sistema baza podataka moze se uociti nekoliko generacija SUBP, koje
su ili koegzistirale na trzistu ili smenjivale jedna drugu. Fundamentalna razlika
sistema ovih generacija je razlika u modelu podataka, koja se u impleizmedu
mentaciji odgovarajucih SUBP reflektuje na efikasnost pristupa podacima i obrade
podataka, produktivnost korisnika, funkcionalnost sistema i podrsku raznovrsnim
aplikacijama. Tako se u prve dve generacije svrstavaju tzv. mrezni (CODASYL)

sistemi i hijerarhijski sistemi, koji su gotovo u potpunosti prevazideni,


osamdesetih
godina, relacionom tehnologijom kao trecom generacijom SUBP (Relacioni SUBP
RSUBP). Sve tri generacije namenjene su pre svega poslovno-orijentisanim aplikacijama.
Ogranicenja relacione tehnologije odnose se na neadekvatnu podrsku aplikacijama nad podacima kompleksnijim od podataka u poslovnoj obradi, npr. nad
prostornim ili tekstuelnim podacima. Zato se relacioni model podataka prosiruje
konceptima objektnog modela, koji na adekvatniji nacin apstrahuje svojstva kompleksnih objekata; istovremeno, relaciona tehnologija se integrise sa objektnom
tehnologijom gradeci tako novu, cetvrtu generaciju SUBP. Objektna tehnologija
je jos uvek u istrazivackoj fazi, mada postoje i prototipske i komercijalne implementacije sistema za upravljanje bazama podataka. Teorijske osnove objektne
tehnologije, za razliku od relacione, jos nisu postavljene; ovo vazi i za sam objektni
model.
Ova knjiga odnosi se pre svega na relacionu tehnologiju baza podataka, pocevsi
od osnovnih postavki relacionog modela i relacionih upitnih jezika, preko teorije
logickog projektovanja relacione baze podataka i semantickog modeliranja, pa do
problema i resenja vezanih za implementaciju pune funkcionalnosti RSUBP.
Osnovna komponenta sistema za upravljanje relacionim bazama podataka koju
korisnik vidi jeste relacioni upitni jezik. To je sredstvo kojim korisnik ostvaruje komunikaciju sa relacionom bazom podataka, kojim izrazava i zadovoljava sve zahteve
vezane za podatke u bazi. Zato se, sa korisnicke tacke gledista, upitni jezik cesto
identifikuje sa kompleksnim sistemom za upravljanje bazama podataka, koji u stvari
te zahteve izvrsava, korektno i efikasno. Jedan od upitnih jezik koji se u ovoj knjizi
detaljno izlaze i kojim se ilustruje funkcionalnost RSUBP jeste SQL. Bez obzira
na sve nedostatke, SQL je standard relacionih upitnih jezika, i daleko je najzastupljeniji u relacionim sistemima; zato je njegovo detaljno poznavanje neophodno
za efikasno koriscenje tih sistema. Kako se varijante SQL-a u razlicitim sistemima
razlikuju, ovde se, zbog preciznosti, izlaze jedna od tih varijanti SQL sistema
IBM DB2 UDB (Universal DataBase) Verzija 5, bez specificnosti tesno vezanih za
ovaj RSUBP.
Sredstvo kojim sistem za upravljanje bazama podataka omogucuje vecem broju
korisnika istovremeni pristup podacima, uz punu bezbednost i korektnost podataka,
jeste transakcija. Transakcija je logicka jedinica posla i moze da se sastoji od jedne

ili veceg broja radnji nad bazom podataka, pri cemu obezbeduje
uslov da podaci i

odnosi medu njima, posle zavrsetka transakcije, korektno odrazavaju realnost koja

0 Uvod

se tim podacima modelira. Upravljanje transakcijama omogucuje da se svi zahtevi


korisnika korektno izvrsavaju, a realizuje se posebnim komponentama koje koristi
sistem za upravljanje bazama podataka.
Funkcija SUBP kojom se regulisu prava pristupa pojedinih korisnika pojedinim
objektima (podacima i drugim resursima), kao i prava izvrsenja raznih operacija
nad tim objektima, zove se autorizacija. Ona se delom realizuje mehanizmom
pogleda, ali i specificnim podsistemom autorizacije i prava korisnika. Nacini realizacije autorizacije predstavljeni su u ovoj knjizi.
Poseban znacaj u radu sa relacionim bazama podataka ima struktuiranje i organizacija samih podataka. Podatke je na nivou korisnika potrebno struktuirati, a na
fizickom nivou organizovati tako da njihovo odrzavanje bude najlakse, a operisanje
njima najefikasnije. Skup postupaka kojima se dolazi do dobro struktuiranih podataka u bazi podataka naziva se metodama logickog projektovanja baze podataka.
Skup postupaka kojima se podaci fizicki organizuju u bazi, tako da im je pristup
i odrzavanje najefikasnije, naziva se metodama fizickog projektovanja, tj. metodama fizicke organizacije podataka. Zato metode logickog projektovanja i fizicke
organizacije imaju posebno mesto u ovoj knjizi.
Znacajan segment relacione tehnologije predstavljaju distribuirane baze po
dataka. Mada su sistemi za upravljanje distribuiranim bazama podataka takode
relacioni, problemi koji se u njima moraju resavati, kao i metode za njihovo
resavanje, znatno su slozeniji nego u centralizovanim sistemima. U ovoj knjizi
razmatraju se posebno karakteristicni problemi u realizaciji pune funkcionalnosti
se izlaze i specijalni slucaj arhitekture distribuiranih
distribuiranih sistema. Takode
sistema siroko rasprostranjena klijent-server arhitektura.
Pored relacione tehnologije kojoj je ovaj udzbenik posvecen, izuzetno aktuelnu
temu u oblasti baza podataka predstavljaju objektno orijentisane baze podataka.
Objektna tehnologija nema tendenciju potiskivanja starije relacione tehnologije.
Umesto toga, integracija koncepata relacione i objektne tehnologije vidi se kao
osnov za izgradnju modela i sistema baza podataka nove generacije. Zato je konceptima objektno orijentisanih modela i nekim od kljucnih komponenti objektno
orijentisanih sistema posvecen dodatak ovog udzbenika.

Deo I

Relaciona tehnologija

Deo I sastoji se od dve glave:


Glava 1, Relacioni model podataka, prikazuje relacioni model podataka i

odreduje
njegovo mesto u arhitekturi sistema baza podataka. Relacioni model
se definise preko tri bitne komponente modela; to su strukturni, manipulativni
i integritetni deo modela. Strukturni i integritetni deo relacionog modela
izlazu se detaljno u ovoj glavi, dok je manipulativni deo samo naznacen.
Zbog znacaja i kompleksnosti manipulativnih formalizama relacionog modela,
njihovo razmatranje izdvojeno je u posebnu, drugu glavu.
U glavi 2, Manipulativni formalizmi relacionog modela, izlazu se dva
osnovna formalizma za manipulisanje podacima u relacionom modelu, relaciona algebra i relacioni racun. S obzirom na znacajna odstupanja postojecih
relacionih implementacija od osnovnih postavki relacionog modela, pre svega
u upitnim jezicima, aktuelizovano je istrazivanje implikacija manipulativnih
formalizama relacionog modela na razvoj novih sistema.

Relacioni model podataka


1.1

O modelima podataka

Arhitektura najveceg broja sistema baza podataka odgovara predlogu ANSI/SPARC


studijske grupe Americkog nacionalnog instituta za standarde, i poznata je kao
ANSI arhitektura ([6]). Ova arhitektura predstavljena je hijerarhijom apstrakcija, pri cemu svaki nivo hijerarhije ukljucuje specificni nacin predstavljanja,
objektima i operacija nad objektima. Hireprezentaciju, objekata, odnosa medu
jerarhijska arhitektura omogucuje prirodnu dekompoziciju i efikasni razvoj sistema
za upravljanje bazama podataka.
Najnizi nivo ANSI arhitekture je unutrasnji nivo. On je najblizi fizickoj
reprezentaciji baze podataka, koja u racunarskom sistemu jedina zaista postoji.
Zbog toga se unutrasnji nivo cesto i zove nivo fizicke baze podataka. Sledeci
nivo ANSI arhitekture je konceptualni (logicki) i predstavlja nacin na koji se podaci iz fizicke baze podataka predstavljaju korisniku u opstem slucaju. Najvisi nivo

ANSI arhitekture je spoljasnji nivo koji predstavu o podacima iz baze prilagodava


potrebama specificnih korisnika ili grupa korisnika.
Globalna ANSI arhitektura sistema baza podataka moze se predstaviti shemom
na slici 1.1. Objasnimo nesto detaljnije njenu strukturu.
Reprezentacija koja se nalazi na srednjem, konceptualnom nivou ANSI hijerarhije zove se model podataka. Modelom podataka predstavlja se logicka struktura
svih podataka u bazi i skup operacija koje korisnik moze izvrsiti nad tim podacima.
To znaci da se na konceptualnom nivou mogu videti svi podaci iz fizicke baze
podataka, samo sto je njihova reprezentacija pogodnija za korisnika od fizicke (na
visem je nivou apstrakcije).
Pojedini korisnici ili grupe korisnika mogu imati svoja sopstvena specificna
gledanja na model podataka (npr. iz razloga zastite ili udobnosti), pa se pogledi
(podmodeli, spoljasnji nivo hijerarhije) nalaze iznad modela u hijerarhiji apstrakcija. Isti podaci iz fizicke baze podataka (i sa konceptualnog nivoa), na ovom nivou
7

1 Relacioni model podataka

pogledi (podmodeli)

(spoljasnje sheme,
spoljasnji nivo)

@
I
@

model podataka

(konceptualna shema,
logicki nivo)

6
strukture podataka, procedure

(fizicka baza podataka,


unutrasnji nivo)

Slika 1.1: ANSI arhitektura sistema baza podataka


mogu se raznim korisnicima predstaviti na razne nacine, dok se postojanje nekih podataka moze od nekih korisnika i sakriti. Zato postoji tacno jedan model podataka
u sistemu, koji se odnosi na celokupnost baze podataka, i veci broj spoljasnjih
pogleda, od kojih se svaki sastoji od apstraktne slike dela baze podataka.
Na primer, baza podataka o studentima moze da sadrzi podatke iz dosijea
studenata, sa licnim podacima i podacima o uspehu (predmetima, ocenama, datumima polaganja, nagradama, kaznama) svakog studenta. Na konceptualnom
nivou podaci mogu biti predstavljeni tabelama DOSIJE, NASTAVNI PLAN, NAGRADE I KAZNE i POLAGANJE. Na spoljasnjem nivou, korisnicima statistickih
obrada ova baza podataka moze se predstaviti kao da sadrzi samo podatke o uspehu (npr. u virtuelnoj tabeli USPEH PO PREDMETIMA); ostali, licni podaci
koji mogu da identifikuju studenta, skrivaju se od statistickih aplikacija. Razlicitim
podgrupama korisnika mogu odgovarati jos apstraktnije predstave o podacima, koje
odgovaraju visim nivoima podmodela.
Korisnik svoje zahteve za operacijama nad bazom podataka postavlja na konceptualnom ili spoljasnjem nivou, i to interaktivno, na posebnom jeziku podataka, ili
programski, kada je jezik podataka ugnjezden u neki programski jezik opste namene
(tzv. maticni jezik, v. odeljak 3.4).
Na nivou fizicke baze podataka unutrasnjem nivou, model podataka predstavlja se specificnim, fizickim strukturama podataka (datotekama sa sekvencijalnim, indeksnim ili direktnim pristupom), i procedurama za fizicku realizaciju
operacija koje korisnik zadaje na visem nivou.
Primarni cilj modela podataka u kontekstu baza podataka jeste da obezbedi
formalni sistem za predstavljanje podataka i manipulisanje podacima u bazi podataka.

1.1 O modelima podataka

Model podataka se moze posmatrati kao kolekcija sledeca tri skupa:


a) skup tipova objekata
b) skup operacija nad objektima definisanih tipova
c) skup pravila integriteta.
Opisimo ukratko svaki od ovih skupova.
a) Skup tipova objekata cini strukturni deo modela. Tipovima objekata opisuju

se entiteti (objekti, stvari, lica, pojave, dogadaji


od znacaja koji se mogu
jednoznacno identifikovati) koji su relevantni za korisnike baze (objekat i entitet ce se nadalje uglavnom upotrebljavati sinonimno, osim ako se naglasi
drugacije). Sami tipovi entiteta karakterisu se svojstvima.
ostalih, tipove
Na primer, izdavacka baza podataka moze da sadrzi, izmedu
sa odgovarajucim svojstvima (slika
entiteta KNJIGA, PISAC i IZDAVAC,
1.2). Znacenje svojstava je uglavnom ocigledno: svaka knjiga ima naslov i
oblast kojoj pripada, uz pisca se kao znacajna svojstva navode njegovo ime,
broj objavljenih naslova i drzava ciji je drzavljanin, dok izdavaca karakterisu
njegov naziv, status (u funkciji broja izdatih naslova) i drzava u kojoj je
registrovan. Specificni model (npr. relacioni, mrezni, hijerarhijski) izabrace
specifican nacin za opisivanje ovih tipova entiteta i njihovih svojstava.
KNJIGA
naslov

oblast
PISAC

ime

br naslova

drzava

IZDAVAC
naziv

status

drzava

Slika 1.2: Tipovi entiteta izdavacke baze podataka

b) Skup operacija cini manipulativni deo modela. Operacijama se zadaju upiti


i radnje nad entitetima, tj. pretrazivanje i menjanje (azuriranje) podataka o
entitetima. Na primer, radnje nad pojedinacnim entitetima mogu biti:
registrovati novu knjigu
rashodovati knjigu

10

1 Relacioni model podataka


izmeniti drzavljanstvo pisca
izmeniti status izdavaca.
Primer operacije kojom se zadaje upit nad pojedinacnim tipom entiteta moze
biti:
stampati spisak knjiga iz zadate oblasti.
c) Skup pravila integriteta cini integritetni deo modela. Pravila integriteta
definisu uslove integriteta podataka u bazi podataka, tj. svojstva podataka
podacima, koji moraju biti zadovoljeni da bi stanje baze bilo
ili odnosa medu
valjano.
Na primer, uslovi integriteta pridruzeni pojedinacnim tipovima entiteta mogu
biti:
dva razna izdavaca ne mogu imati isti naziv
pri promeni broja naslova pisca, novi broj naslova mora biti veci od
prethodnog (starog).

Osim upita, radnji i uslova integriteta koji se odnose na pojedinacne tipove


entiteta, kao u prethodnim primerima, neki upiti i radnje mogu se odnositi na vise
tipova entiteta, kao na primer:
stampati spisak svih knjiga datog pisca
promeniti izdavaca za datu knjigu.
I upiti i radnje ove vrste (nad vise tipova entiteta) zadaju se nad odnosima
tipovima entiteta. Na primer, IZDAVASTVO

medu
se moze definisati kao odnos
tipova entiteta IZDAVAC
i KNJIGA, dok se AUTOR moze definisati kao
izmedu
tipova entiteta PISAC i KNJIGA. Ti odnosi se mogu posmatrati i
odnos izmedu
kao apstraktni tipovi entiteta u modelu (sa svojim svojstvima). Svojstva odnosa

IZDAVASTVO
i AUTOR mogu se prikazati slikom 1.3. Redni broj mogao bi da
oznacava da je dati pisac naveden kao prvi (drugi, treci, itd.) autor date knjige.

IZDAVASTVO
KNJIGA

godina

tiraz

IZDAVAC

AUTOR
PISAC

redni broj

KNJIGA

Slika 1.3: Tipovi odnosa izdavacke baze podataka


Nad odnosima se mogu zadavati i uslovi integriteta, na primer:

1.1 O modelima podataka

11

dva razna izdavaca ne mogu u istoj godini izdati istu knjigu.


Najpoznatiji klasicni modeli podataka su hijerarhijski, mrezni i relacioni model.
Za hijerarhijski i mrezni model karakteristicno je da su nastali u procesu apstrakcije ili indukcije iz postojecih implementacija SUBP, a ne kao apstraktni modeli.
Sami mrezni i hijerarhijski sistemi su prerelacioni i karakterisu se nizim nivoom
apstrakcije nego relacioni sistemi, pre svega slogovnom prirodom podataka i manipulisanja podacima. Detaljni opis hijerarhijskog i mreznog modela kao i elementi
njihovih najpoznatijih implementacija, IMS i IDMS redom, mogu se naci u [22],
i u ovoj knjizi nece biti razmatrani. Umesto toga, ilustrujmo sledecim primerom
nacin na koji se u hijerarhijskom, mreznom i relacionom sistemu realizuju delovi
odgovarajucih modela.
entitetima KNJIGA i IZDAVAC
postoji funkcionalni odnos, tj. neka
Neka medu
vazi da jednu knjigu moze da izdaje samo jedan izdavac, dok jedan izdavac moze da
izdaje veci broj knjiga. Strukturni deo hijerarhijskog modela u ovom slucaju sastoji
sa pripadnim svojstvima, i jednog
se od dva tipa entiteta KNJIGA i IZDAVAC
(slika 1.4). U ovoj funkcionalnoj
tipa funkcionalne veze KNJIGA IZDAVAC
je tzv. roditeljski tip, a tip entiteta KNJIGA je tzv. tip
vezi tip entiteta IZDAVAC
deteta. Jedan tip deteta moze imati najvise jedan roditeljski tip.

IZDAVAC

?
KNJIGA

Slika 1.4: Funkcionalna veza u hijerarhijskom modelu


U hijerarhijskom SUBP IMS definicija baze ukljucuje naziv baze i, za svaki
tip entiteta, definiciju tog tipa (u IMS terminologiji segment, SEGM). Definicija
tipa entiteta ukljucuje ime entiteta, duzinu odgovarajuceg segmenta u bajtovima,
ime roditeljskog tipa entiteta (PARENT) i imena atributa (u IMS terminologiji
polja, FIELD), a za svako polje duzinu u bajtovima, adresu prvog bajta polja u

okviru segmenta, i eventualnu uredenost


segmenata po tom polju (engl. sequencing,
SEQ). Deo definicije hijerarhijske baze u nasem slucaju mogao bi da ima sledeci
oblik (polja I SIF, K SIF predstavljaju sifru izdavaca odnosno sifru knjige):
1

DBD

NAME = IZDAVASTVO

2
3

SEGM
FIELD

NAME = IZDAVAC,
NAME = (I SIF, SEQ),

BYTES=44
BYTES=2, START=1

12

1 Relacioni model podataka


4
5
6

FIELD
FIELD
FIELD

NAME = NAZIV,
NAME = STATUS,
NAME = DRZAVA,

7
8
9
10

SEGM
FIELD
FIELD
FIELD

NAME
NAME
NAME
NAME

=
=
=
=

BYTES=20, START=3
BYTES=2, START=23
BYTES=20, START=25

KNJIGA, PARENT = IZDAVAC,


(K SIF, SEQ),
BYTES=2,
NASLOV,
BYTES=40,
OBLAST,
BYTES=10,

BYTES=52
START=1
START=3
START=43

Ova definicija hijerarhijske baze ukljucuje i integritetni deo u smislu da u bazi


ne moze postojati informacija o knjizi ako ne postoji informacija o njenom izdavacu,

jer se entitet tipa KNJIGA definise u okviru roditeljskog entiteta tipa IZDAVAC
(uslov koji je u relacionom modelu poznat kao referencijalni integritet).
Manipulisanje podacima u hijerarhijskom modelu je u znatnoj meri procedu
ralno i podrazumeva precizno navodenje
hijerarhijskog puta ka trazenom segmentu.
Tako bi, na primer, zahtev za nalazenjem prve knjige romana izdavaca Prosveta
morao da sadrzi i precizno uputstvo kako se do odgovarajuceg segmenta o toj knjizi
dolazi, i pojednostavljenom sintaksom jezika za manipulisanje podacima sistema
IMS izrazio bi se u obliku
GET UNIQUE

IZDAVAC WHERE NAZIV = Prosveta


KNJIGA WHERE OBLAST = roman

(redosled navodenja
entiteta je veoma bitan i mora da odgovara redosledu roditelj
dete iz definisane funkcionalne veze).
Ovakav iskaz ne moze se zadavati interaktivno, vec iskljucivo iz programa na
programskom jeziku opste namene (npr. COBOL, PL/I).
tipovima entiteta IZDAVAC
i KNJIGA ne postoji funkcioU slucaju da medu
nalna veza, hijerarhijski model pokazuje svoje slabosti (jer ne moze da definise vise
od jednog tipa roditelja za jedan tip entiteta). Mrezni model dopusta da jedan
tip deteta moze imati veci broj roditeljskih tipova entiteta u okviru razlicitih (imenovanih) funkcionalnih veza. Svaki tip entiteta domen funkcionalne veze zove
se tip clana te funkcionalne veze, a kodomen funkcionalne veze tip vlasnika te
funkcionalne veze. Tako se nas primer u mreznom modelu moze izraziti pomocu
KNJIGA i veznog tipa entiteta IZDAVASTVO,

tri tipa entiteta IZDAVAC,


i
pomocu dve imenovane funkcionalne veze:

IZDAJE SE: IZDAVASTVO


KNJIGA

(slika 1.5).
IZDAJE:
IZDAVASTVO
IZDAVAC
U mreznom SUBP IDMS definicija baze ukljucuje naziv baze, definiciju tipa
entiteta za svaki tip entiteta (u IDMS terminologiji slog, RECORD) i definiciju
imenovanog tipa veze za svaki tip veze (u terminologiji IDMS skup, SET).
Manipulisanje podacima u mreznim sistemima, slicno hijerarhijskim, proceduralno je orijentisano i izvrsava se paketno operacijama umetnutim u programski

1.1 O modelima podataka

13

IZDAVAC

KNJIGA
IZDAJE SE
?

IZDAJE
?

IZDAVASTVO

Slika 1.5: Imenovane funkcionalne veze skupovi u mreznom modelu


jezik opste namene, npr. COBOL. Pri tome sintaksa operacija omogucuje pre

cizno navodenje
puta kojim se pristupa pojedinom slogu, ukljucujuci navodenje
skupa, vlasnika skupa, prvog, sledeceg, poslednjeg clana skupa za datog vlasnika,
itd. Tako bi se zahtev za nalazenjem prve knjige romana izdavaca Prosveta

izrazio proceduralno, prvo nalazenjem prvog clana (IZDAVASTVO)


skupa IZDAJE
u kome je izdavac Prosveta vlasnik, zatim pronalazenjem vlasnika (KNJIGA)
u prvom koraku i, najzad, ponavljanjem
skupa IZDAJE SE ciji je clan slog naden

prethodna dva koraka sve dok se ne dode do primerka sloga KNJIGA koji je roman.
Izrazen pojednostavljenom sintaksom, ovaj zahtev ima sledeci oblik:
MOVE Prosveta TO NAZIV IN IZDAVAC
FIND IZDAVAC
FIND FIRST IZDAVASTVO WITHIN IZDAJE
PERFORM
FIND OWNER WITHIN IZDAJE SE
GET KNJIGA
IF OBLAST IN KNJIGA = roman
izdati NASLOV teku
ceg sloga KNJIGA;
iza
ci iz PERFORM petlje
END-IF
FIND NEXT IZDAVASTVO WITHIN IZDAJE
END-PERFORM
Hijerarhijski i mrezni model ne ostvaruju nezavisnost nivoa predstavljanja podataka ANSI arhitekture. Na logickom nivou prisutna je velika kolicina informacija
o fizickoj reprezentaciji i grupisanju podataka. Nasuprot njima, relacioni model po njima na jedinstven
dataka na logickom nivou predstavlja i entitete i odnose medu
nacin relacijama tabelarnog izgleda. Jezik za definisanje podataka i manipulisanje
podacima je neproceduralan i ne ukljucuje informaciju o putu kojim se fizicki pristupa podacima. Tako bi se entiteti i odnosi iz prethodnog primera u relacionom
modelu prikazali pomocu tri tabele:
KNJIGA
IZDAVAC

(K SIF, NASLOV, OBLAST)


(I SIF, NAZIV, STATUS, DRZAVA)

14

1 Relacioni model podataka


IZDAVASTVO

(I SIF, K SIF, GODINA, TIRAZ)

a zahtev za nalazenjem svih romana izdavaca Prosveta izrazio bi se relacionim


jezikom, na primer SQL-om, na sledeci nacin:
SELECT NASLOV
FROM KNJIGA, IZDAVAC, IZDAVASTVO
WHERE OBLAST = roman AND KNJIGA.K SIF = IZDAVASTVO.K SIF AND
NAZIV = Prosveta AND IZDAVAC.I SIF = IZDAVASTVO.I SIF

Redosled navodenja
relacija u FROM liniji je nebitan jer sve relacije imaju

ravnopravan tretman; isto vazi i za redosled poredenja


u WHERE liniji. Prethodni
relacioni iskaz moze se izvrsavati i interaktivno i u okviru aplikativnog programa.
Za izlaganje najznacajnijih aspekata sistema baza podataka koristice se relacioni model. Razlozi za ovaj izbor mogu se naslutiti iz prethodnog primera, a u
potpunosti se mogu sagledati tek detaljnim upoznavanjem svih modela (v. [22]).
Ti razlozi su mnogobrojni i prirodni, i nalaze se u svim bitnim karakteristikama
njima su:
relacionog modela. Najvaznije medu
strukturna jednostavnost
formalno i strogo zasnivanje
ekonomicni upitni jezici
razgranicenje nivoa predstavljanja podataka.
Relacioni model ce biti izlozen u narednim odeljcima u verziji koja je posluzila
kao osnov za kasnija prosirenja (RM/T, RM/2), i koju je autor relacionog modela
Edgar Codd (Edgar Kod) prikazao u [18], [19].

1.2

Strukturni deo relacionog modela

Dva osnovna tipa objekata koji karakterisu strukturu relacionog modela su domen
i relacija. Domen je skup vrednosti istog tipa, kao sto je skup naslova knjiga, skup

imena gradova ili skup datuma nekih dogadaja.


Domen je jednostavan ako su mu
sve vrednosti atomicne, tj. ako SUBP ne moze da ih razlozi u komponente sa
specificnim znacenjem; u suprotnom, domen je kompozitan. U daljem tekstu ce se
podrazumevati da su svi domeni jednostavni (osim ako se naglasi drugacije).
Neka su D1 , D2 , . . . , Dn (n N) domeni (ne obavezno razliciti). Dekartov
proizvod tih domena, u oznaci D1 D2 Dn , jeste skup n-torki (v1 , v2 , . . . , vn )
takvih da je vi Di za sve i = 1, 2, . . . , n. Relacija R stepena n, definisana na
domenima D1 , D2 , . . . , Dn , je proizvoljni konacni podskup navedenog Dekartovog
proizvoda. Ova relacija, za razliku od matematickog pojma relacije, je dinamickog

1.2 Strukturni deo relacionog modela

15

sadrzaja, jer se neke njene n-torke1 tokom zivota relacije brisu, neke se dodaju
a neke se menjaju.
Ako se umesto skupa indeksa domena {1, 2, . . . , n} uzme proizvoljni skup (razlicitih) imenovanih indeksa {A1 , A2 , . . . , An }, onda je svaki element vi n-torke
relacije R karakterisan ne samo domenom Di vec i indeksom Ai . Razliciti imenovani indeksi Ai (i = 1, 2, . . . , n) zovu se atributi relacije R i oznacavaju razlicite

uloge (ne nuzno razlicitih) domena nad kojima je izgradena


relacija R. Sada se
svaka n-torka relacije R moze posmatrati kao skup n parova (Ai , vi ), i = 1, 2, . . . , n,
gde je vi vrednost iz domena Di .
Relacijom R predstavlja se neki tip entiteta E, dok se n-torkama relacije R
predstavljaju pojedinacni entiteti tipa E. Zato se svaki atribut Ai relacije R moze
interpretirati kao preslikavanje tipa entiteta E u odgovarajuci domen Di , tj.
Ai : E Di .
Slicno, svaki podskup {Ai1 , Ai2 , . . . , Aik } skupa atributa relacije R moze se interpretirati kao preslikavanje
(Ai1 , Ai2 , . . . , Aik ) : E Di1 Di2 Dik .
Mada je skup Di kodomen preslikavanja (tj. atributa) Ai , u terminologiji relacionog modela on se zove domen atributa Ai , sto se oznacava sa dom(Ai ). Slicno,
sa dom(Ai1 , Ai2 , . . . , Aik ) oznacava se domen skupa atributa {Ai1 , Ai2 , . . . , Aik }, tj.
skup Di1 Di2 Dik .
Neka je e entitet tipa E. Tada je element vi Di vrednost atributa Ai entiteta
e (tj. odgovarajuce n-torke) ako je Ai (e) = vi . Slicno, element (vi1 , vi2 , . . . , vik )
Di1 Di2 Dik je vrednost skupa atributa {Ai1 , Ai2 , . . . , Aik } entiteta e (tj.
odgovarajuce n-torke) ako je (Ai1 , Ai2 , . . . , Aik )(e) = (vi1 , vi2 , . . . , vik ).
Ako su svi domeni atributa relacije R jednostavni, onda relacija R ima tabelarni
izgled i nalazi se u prvoj normalnoj formi, u oznaci 1NF, tj. normalizovana
je (o visim normalnim formama bice reci u delu o logickom projektovanju baze
podataka). Kolone tabele odgovaraju atributima relacije, a vrste n-torkama
relacije.2
Takva tabela ima sledece karakteristike:
nema dupliranih vrsta (jer je relacija skup)
redosled vrsta je nebitan (jer je relacija skup)
redosled kolona je nebitan (jer atributi relacije cine skup)
sve vrednosti u tabeli su atomicne.
1 Kada

je iz konteksta jasno kojoj relaciji pripada neka n-torka, ili kada to nije od zna
caja,
n-torka
ce se jednostavno zvati torka; pri tome se za dimenziju torke uzima stepen odgovaraju
ce
relacije.
2 U daljem tekstu parovi termina relacija/tabela, atribut/kolona i n-torka/vrsta upotrebljava
ce
se kao sinonimi; uobi
cajeno je da se u razmatranju samog relacionog modela upotrebljavaju prve
komponente ovih parova, a u kontekstu implementacija relacionog modela druge.

16

1 Relacioni model podataka

Oznaka R(A1 : D1 , A2 : D2 , . . . , An : Dn ) koristi se za predstavljanje relacije R


ciji atribut A1 uzima vrednost iz domena D1 , atribut A2 iz domena D2 , itd. i
zove se relacijska shema relacije R. Kada je jasno o kojim se domenima radi, ili
kada domeni (odnosno atributi) nisu bitni za izlaganje, za relaciju R upotrebljava
se oznaka R(A1 , A2 , . . . , An ) (odnosno samo R). Umesto oznake za nabrajanje
atributa R(A1 , A2 , . . . , An ), cesto se, u identicnom znacenju, koristi i oznaka sa
ako su od znacaja dva istaknuta
dopisivanjem atributa, R(A1 A2 . . . An ). Takode,
disjunktna podskupa X, Y skupa atributa relacije R (cija je unija jednaka celom
skupu), ona se obelezava i sa R(X, Y ).
Relaciona baza podataka je skup skupova podataka koji se na logickom nivou
mogu posmatrati kao normalizovane relacije odgovarajucih stepena i dinamickog
sadrzaja. Skup relacijskih shema relacione baze podataka je shema relacione baze
podataka. Bazne relacije su relacije koje su definisane nezavisno od drugih relacija u
bazi podataka, i koje se ne mogu izvesti iz drugih baznih relacija. One su na fizickom
nivou predstavljene odgovarajucim strukturama podataka. Izvedene relacije su
relacije koje se mogu izvesti iz baznih relacija primenom skupa operacija. One
obicno nemaju fizicku reprezentaciju, i predstavljaju razlicite poglede koje razni
korisnici mogu imati na istu bazu podataka.
Neke druge definicije relacionog modela ne ukljucuju pojam domena u osnovne

tipove objekata strukture relacionog modela. Medutim,


ovaj pojam ima svoj ope
racioni znacaj u tome sto domeni odreduju
skup operacija koje se nad njihovim
vrednostima mogu izvrsavati. Tako se vrednosti atributa nad istim domenima
mogu porediti (a vrednosti atributa nad razlicitim domenima ne mogu), pa se nad
atributima, definisanim nad istim domenima, mogu izvrsavati i sve operacije koje

ukljucuju poredenje.
Vecina upitnih jezika, kao sto je SQL, ne poznaje semanticki
aspekt domena, pa je moguce, na primer, postavljati upite kojima se porede naslovi
knjiga sa imenima drzava (kao niske simbola).
Sva naredna razmatranja bice ilustrovana jednom aproksimacijom izdavacke
relacione baze sa sledecom shemom:
P
I
K
KP
KI

(P
(I
(K
(K
(K

SIF,
SIF,
SIF,
SIF,
SIF,

IME, BR NASLOVA, DRZAVA)


NAZIV, STATUS, DRZAVA)
NASLOV, OBLAST)
P SIF, R BROJ)
I SIF, IZDANJE, GODINA, TIRAZ)

i KNJIGA rePrve tri relacije predstavljaju tipove entiteta PISAC, IZDAVAC


dom, i imaju slicnu strukturu kao i odgovarajuci tipovi entiteta. Nov je prvi atribut
u svakoj od relacija, koji predstavlja sifru, tj. jedinstveni identifikator pisca, izdavaca i knjige. Na primer, sifra knjige, K SIF, moze biti ISBN (International
Standard Book Number), P SIF i I SIF mogu biti maticni broj pisca i izdavaca,

redom. Relacija KP predstavlja apstraktni tip entiteta AUTOR, tj. odnos izmedu
tipova entiteta KNJIGA i PISAC, dok relacija KI predstavlja apstraktni tip entiteta
tipova entiteta KNJIGA i IZDAVAC.

IZDAVASTVO,
tj. odnos izmedu

1.2 Strukturni deo relacionog modela

17

Neka je sadrzaj3 tih relacija (koji ce se podrazumevati u svim primerima) sledeci:

P SIF
p1
p2
p3
p4
p5

IME
c
B.Copi
M.Benson

sic
B.Sljivi
c-Sim
D.Maksimovic
C.J.Date

BR NASLOVA
2
1
1
2
1

DRZAVA
Jugoslavija
Engleska
Jugoslavija
Jugoslavija
Amerika

I SIF
i1
i2
i3
i4

NAZIV
Prosveta
Addison Wesley Publ. Comp.
Decje novine
Matica srpska

STATUS
30
20
10
30

DRZAVA
Jugoslavija
Amerika
Jugoslavija
Jugoslavija

K SIF
k1
k2
k3
k4
k5
k6

NASLOV
Osma ofanziva
Nemam vise vremena
Pionirska trilogija
Srpskohrvatsko-engleski recnik
An Introduction to Database Systems
Trazim pomilovanje

KP

K SIF
k1
k2
k3
k4
k4
k5
k6

P SIF
p1
p4
p1
p2
p3
p5
p4

R BROJ
1
1
1
1
2
1
1

KI

K SIF
k1
k2
k3
k4
k5
k6
k6

I SIF
i1
i1
i1
i1
i2
i3
i4

IZDANJE
2
2
1
2
4
1
3

3 Stvarni

GODINA
1965
1974
1975
1979
1986
1966
1988

OBLAST
roman
poezija
roman
leksikografija
racunarstvo
poezija

TIRAZ
10000
7000
10000
10000
5000
3000
5000

sadr
zaj uklju
cio bi samo simbole iz dopustenog skupa.

18

1 Relacioni model podataka

1.3

Manipulativni deo relacionog modela

Manipulativni deo relacionog modela predstavlja formalizam za definisanje relacionog izraza opsteg oblika, cija je vrednost proizvoljni podskup skupa podataka iz
baze.
Definicija relacionog modela ukljucuje dva formalna jezika za rad sa relacijama,
koja imaju trazeno svojstvo: jedan algebarski u sustini relaciona algebra, i drugi,
zasnovan na predikatskom racunu prvog reda relacioni racun ([14]). Dokazana je
ekvivalentnost ovih formalizama u pogledu izrazajne moci ([17]). Sami formalizmi
kao i skica dokaza njihove ekvivalentnosti bice izlozeni u sledecoj glavi. Da bismo
ilustrovali mogucnosti ovih formalizama, ovde cemo samo neformalno uvesti pojam
relacione algebre.
Relaciona algebra je skup operacija nad relacijama. Relacioni izraz u relacionoj
vaznijim
algebri sastoji se od niza operacija nad odgovarajucim relacijama. Medu
operacijama relacione algebre su projekcija, restrikcija i prirodno spajanje (slika
1.6, [27]):
neka je X podskup skupa atributa relacije R; projekcija R[X] relacije R na
atribute X je relacija koja sadrzi (samo) kolone relacije R koje odgovaraju
atributima X (v. i tacku 2.1.1);
restrikcija R[X = x], za x dom(X), jeste relacija koja sadrzi (samo) n-torke
relacije R cija je vrednost skupa atributa X jednaka x (v. i tacku 2.1.1);
prirodno spajanje R S je dopisivanje torki relacije S na torke relacije R
ako imaju iste vrednosti na zajednickim atributima, uz eliminaciju po jednog
atributa iz svakog para zajednickih atributa (v. i tacku 2.1.2).
Mada se operacije relacione algebre definisu nad relacijama, one se primenjuju i
na pojedinacne n-torke, jer su i n-torke (jednoclane) relacije; na primer, projekcija
n-torke (v1 , v2 , . . . , vn ) na prva dva atributa (A1 , A2 ) je (v1 , v2 , . . . , vn )[A1 A2 ] =
(v1 , v2 ) (v. i tacke 2.1.1, 2.1.2).
Specificni sistemi relacionih baza podataka (krace relacioni sistemi) implementiraju manipulativni deo relacionog modela relacionim jezicima za definisanje
podataka i manipulisanje podacima, specificne sintakse. Da bi jezik za definisanje
podataka bio relacioni, mora da ima konstrukcije za definisanje osnovnih koncepata
strukture relacionog modela (ali i pravila integriteta, opstih i eventualno posebnih,
v. odeljak 1.4). Da bi jezik za manipulisanje podacima bio relacioni, mora da
bude relaciono kompletan, tj. da ima izrazajnu moc bar kolika je izrazajna moc
relacionog racuna ili relacione algebre. Osim toga, jezik za manipulisanje podacima
jednog relacionog sistema mora da ima jos neka svojstva. Naime, formalizam relacionog modela ima mogucnost pretrazivanja podataka, tj. pronalazenja podataka
koji predstavljaju vrednost relacionog izraza. Pored ove mogucnosti, relacioni jezik
treba da omoguci i azuriranje podataka u najsirem smislu, tj. unosenje novih i
brisanje i izmenu postojecih podataka u bazi. Zahtev za pretrazivanjem zove se
upit, dok se zahtev za azuriranjem zove radnja.

1.3 Manipulativni deo relacionog modela


projekcija

19

restrikcija
prirodno spajanje
HH

*
6

H
j
a1 b1

b1 c1

a1 b1 c1

a2 b1

b2 c2

a2 b1 c1

a3 b2

b3 c3

a3 b2 c2

Slika 1.6: Operacije projekcije, restrikcije i prirodnog spajanja


Jezik za definisanje podataka i jezik za manipulisanje podacima zajedno cine
upitni jezik . Osnova za izgradnju upitnog jezika, s obzirom na potrebu za njegovom
relacionom kompletnoscu, uvek lezi u jednom od pomenutih formalizama.

1.3.1

Nedostaju
ce vrednosti

U bazi podataka moze postojati potreba za registrovanjem semanticki razlicitih


vrsta nedostajucih vrednosti, kao sto su trenutno nepoznata vrednost (npr. status

izdavaca), ili neprimenljivo svojstvo (npr. vrednost atributa IME SUPRUZNIKA


za osobu koja nije u braku). Semantika nedostajuce vrednosti moze biti i drugacija
([46]) (npr. nepoznata vrednost koja je u poznatom intervalu), ali se prve dve
navedene vrste semanticki najvise razlikuju i najcesce pojavljuju u realnosti.
Da bi se relacioni model prosirio ovim dvema vrstama nedostajucih vrednosti,

neophodno je definisati prosirene relacije poredenja


nad vrednostima iz domena i
razlicitim nedostajucim vrednostima, kao i prosirene relacije pripadnosti skupu i

inkluzije. Rezultat poredenja


sada moze biti, osim tacno ili netacno, i drugacije
okvalifikovan (npr. ne zna se, mozda, itd). Tako se dolazi do visevalentnih logika
u relacionom modelu. Kako se definicije operacija relacione algebre baziraju na

poredenju
vrednosti atributa n-torki, a rezultat tog poredenja
moze biti tacan,
netacan ili mozda, potrebno je za svaku operaciju relacione algebre definisati vise
od jedne operacije u prosirenom modelu. Pored toga, i ostali koncepti relacionog

modela koji su bazirani na poredenju


vrednosti (npr. funkcionalne, viseznacne
zavisnosti) dobijaju kompleksniju formu, sto dosta usloznjava sam model. Stoga postojeci sistemi za upravljanje bazama podataka, ako uopste podrzavaju nedostajuce
vrednosti, podrzavaju samo jednu vrstu takve vrednosti. Jedno prosirenje relacione
algebre kao osnove za upitne jezike koji manipulisu i nedostajucim vrednostima dao
je Codd u radu [18]; ovo prosirenje bice izlozeno u tacki 2.1.3 Prosirena relaciona
algebra.

20

1 Relacioni model podataka

1.4

Integritetni deo relacionog modela

U integritetni deo relacionog modela spadaju uslovi koje treba da zadovolje podaci
u bazi da bi stanje baze bilo valjano. Pri svakom azuriranju baze podataka sistem
za upravljanje bazom podataka proverava eksplicitno ili implicitno zadate uslove

integriteta. Svaki uslov integriteta je neko tvrdenje


(engl. assertion), tj. istinitosna
formula cija vrednost treba da bude tacno u svakom valjanom stanju baze. Uslov
integriteta moze da se odnosi na pojedinacni atribut, domen ili relaciju, kao i na
celu bazu podataka.
Uslovi integriteta mogu biti specificni (odnose se na zadati atribut, relaciju,
bazu), pri cemu se zadaju eksplicitno, ili opsti, koji se mogu primeniti na svaku
relaciju ili bazu podataka, i koji su zato implicitni.
Specificni uslovi integriteta mogu biti dvojaki. Prva vrsta tih uslova odnosi

se na karakteristike pojedinacnih atributa ili njihovih domena, ili na vezu izmedu


specificnih vrednosti atributa n-torki jedne ili vise relacija. Na primer,
u relaciji K, svaka vrednost iz domena atributa K SIF je oblika slova k za
kojim sledi jednocifren do trocifren ceo broj (karakteristika pojedinacnog domena);

status jugoslovenskih izdavaca mora biti manji ili jednak 30 (veza izmedu
specificnih vrednosti atributa n-torki jedne relacije);

tiraz izdanja izdavaca Prosveta ne moze biti manji od 5000 (veza izmedu
specificnih vrednosti atributa n-torki dve relacije).

Druga vrsta specificnih uslova integriteta su logicke veze koje postoje izmedu
atributa jedne relacije. Na primer,

u relaciji I, svaka sifra izdavaca, I SIF, jednoznacno odreduje


vrednost atributa NAZIV, STATUS, DRZAVA (sadrzaj relacije I zadovoljava ovaj uslov);

u relaciji I, vrednost atributa DRZAVA jednoznacno odreduje


vrednost atributa STATUS (sadrzaj relacije I ne zadovoljava ovaj uslov, ali ako bi on bio
eksplicitno zadat, svi izdavaci iz iste drzave morali bi da imaju isti status).
Opsti uslovi integriteta (koji se mogu primeniti na svaku relaciju) bice ilustrovani kroz sledeca dva primera:

u relaciji I atribut I SIF mora imati definisanu i odredenu


vrednost (iz odgovarajuceg domena) u svakoj n-torci, tj. njegova vrednost ne sme biti nedostajuca; razne n-torke relacije I moraju imati razlicite vrednosti atributa
I SIF (integritet entiteta);
u relaciji KI ne sme postojati n-torka ciji atribut I SIF ima vrednost koja
ne postoji na atributu I SIF relacije I (integritet obracanja, referencijalni
integritet).

1.4 Integritetni deo relacionog modela

21

Opsti uslovi integriteta bice vezani za koncepte primarnog odnosno stranog


kljuca, koji ce precizno biti definisani u narednim tackama. Ovi uslovi integriteta
moraju da vaze uvek, u svakoj relaciji, za njen primarni odnosno strani kljuc (ako
relacija ima strani kljuc).
specificnim uslovima integriteta, uslovi druge vrste (logicke veze) mogu
Medu
atributima. Razne vrste zavisnosti
se formalizovati kroz koncept zavisnosti medu
i njihove implikacije na logicko projektovanje baze bice razmotrene u glavama 8 i
9. Ovde ce biti opisan najcesce korisceni oblik zavisnosti funkcionalna zavisnost
koja se koristi i u definiciji primarnog kljuca.
Definicija 1.1 Neka su X, Y {A1 , A2 , . . . , An } neprazni podskupovi skupa atributa relacije R(A1 , A2 , . . . , An ). Oznacimo sa R[XY ] projekciju relacije R na uniju

atributa X, Y (eventualni presecni atributi uzimaju se samo jednom). Tada, izmedu


skupova atributa X i Y postoji funkcionalna zavisnost, u oznaci X Y , ako u
svakom trenutku postojanja relacije R, R[XY ] jeste funkcija R[X] R[Y ], tj. ako
za svaki par n-torki t1 , t2 R, takav da je t1 [X] = t2 [X], vazi da je i t1 [Y ] = t2 [Y ].

U tom slucaju kaze se da skup atributa X funkcionalno odreduje


atribute skupa Y,
tj. da skup atributa Y funkcionalno zavisi od atributa skupa X.
Napomena 1.1 Uslov koji definise funkcionalnu zavisnost X Y ekvivalentan
je uslovu da R[X = x][Y ] ima najvise jednu n-torku za proizvoljno x dom(X)
(R[X = x][Y ] je projekcija na atribute Y restrikcije relacije R po uslovu X = x).
Primeri funkcionalnih zavisnosti su:
I SIF
NAZIV
I SIF
STATUS
I SIF
DRZAVA
DRZAVA STATUS

Prva funkcionalna zavisnost cita se kao I SIF funkcionalno odreduje


NAZIV (izdavaca), ili NAZIV (izdavaca) funkcionalno zavisi od I SIF. Analogno je i citanje
ostalih funkcionalnih zavisnosti.

1.4.1

Primarni klju
c

Definicija 1.2 Neka je X {A1 , A2 , . . . , An } podskup skupa atributa relacije


R(A1 , A2 , . . . , An ). Kaze se da je X kljuc (ili kandidat za kljuc) relacije R ako su
ispunjena sledeca dva uslova:

a) X funkcionalno odreduje
sve atribute relacije R, tj. X Ai za i = 1, 2, . . . , n;
b) nijedan pravi podskup od X nema tu osobinu, tj. za svaki pravi podskup
X 0 X postoji 1 j n tako da X 0 6 Aj .
Nadkljuc je svaki skup atributa za koji vazi samo svojstvo a).
Na primer, atribut I SIF je kljuc relacije I.
Svaka relacija ima bar jedan kljuc, jer u svakoj relaciji R(A1 , A2 , . . . , An ) vazi
funkcionalna zavisnost {A1 , A2 , . . . , An } Ai , za svako 1 i n. Dakle, skup

22

1 Relacioni model podataka

{A1 , A2 , . . . , An } svih atributa relacije R je nadkljuc. Ako ne postoji pravi podskup


X {A1 , A2 , . . . , An } sa tim svojstvom, onda je skup {A1 , A2 , . . . , An } kljuc. Ako
takav pravi podskup X postoji, kljuc je najmanji podskup od X sa tim svojstvom.
Jedna relacija moze imati vise kljuceva. (Na primer, relacija I moze imati i kljuc
NAZIV ako vazi funkcionalna zavisnost NAZIV I SIF, sto bi postojeci sadrzaj
relacije I zadovoljio). Jedan od kljuceva bira se za primarni kljuc, koji jedinstveno
identifikuje entitete predstavljene n-torkama relacije. Primarni kljuc moze se sastojati od jednog ili vise atributa. Svaka relacija u relacionom modelu mora imati
primarni kljuc.
Prvo opste pravilo integriteta, integritet entiteta, koje implicitno mora da vazi za
primarni kljuc svake relacije, iskazuje se, koriscenjem prethodne definicije, sledecim
zahtevima:
dve razne n-torke jedne relacije ne mogu imati identicne vrednosti primarnog
kljuca;
nijedan od atributa primarnog kljuca relacije ne sme imati nedostajucu vrednost ni u jednoj n-torci relacije.

1.4.2

Strani klju
c

Na osnovu primarnog kljuca jedne relacije moguce je definisati koncept stranog


kljuca druge relacije.
Definicija 1.3 Skup STK jednog ili vise atributa bazne relacije T2 je njen strani
kljuc koji se odnosi na baznu relaciju T1 ako su ispunjena sledeca dva uslova:
a) svaka vrednost skupa atributa STK n-torke iz T2 je ili u potpunosti nedostajuca ili u potpunosti nije nedostajuca (element je odgovarajuceg Dekartovog
proizvoda);
b) bazna relacija T1 ima primarni kljuc PRK takav da je svaka vrednost skupa
atributa STK n-torke iz T2 , koja nije nedostajuca, identicna PRK-vrednosti neke
n-torke iz T1 .
Za relaciju T2 kaze se da je zavisna od relacije T1 .
Na primer, atribut I SIF u relaciji KI je strani kljuc relacije KI koji se odnosi
na relaciju I.
Drugo opste pravilo integriteta, referencijalni integritet ili integritet obracanja,
definisano je upravo uslovom b) iz definicije 1.3. Ono mora implicitno da vazi u

svakoj relaciji za koju je definisan strani kljuc, jer obezbeduje


njegove korektne
vrednosti.
Ovo pravilo integriteta moze imati i drugu, ekvivalentnu formulaciju. Ona koristi semanticki aspekt pojma domen (v. odeljak 1.2), i zahteva da svaki atribut
jedne relacije koji je definisan na domenu na kome je definisan atribut primarnog
kljuca druge relacije ima svojstva koja karakterisu strani kljuc.

1.4 Integritetni deo relacionog modela

23

Relacije T1 , T2 ne moraju biti razlicite. Na primer, relacija RADNIK moze

sadrzati, pored ostalih, atribute MATICNI


BROJ i MATICNI
BROJ SEFA;
prvi
navedeni atribut je primarni kljuc, dok je drugi navedeni atribut strani kljuc koji
se odnosi na primarni kljuc iste relacije, jer sef moze biti samo neko ko je radnik
tog preduzeca.
Problem odrzavanja integriteta entiteta i referencijalnog integriteta javlja se pri
svakoj operaciji izmene sadrzaja baznih relacija. Posebno, referencijalni integritet
moze biti narusen pri unosenju novih n-torki u relaciju nad kojom je definisan strani
kljuc, pri izmeni vrednosti neke n-torke na atributu iz primarnog ili stranog kljuca,
kao i pri brisanju n-torki iz relacije na koju se odnosi strani kljuc druge relacije. Ovi
problemi i nacini njihovog resavanja bice detaljnije ilustrovani primerima u tacki
3.3.14 o operacijama azuriranja upitnog jezika SQL.

Svi implementirani relacioni sistemi obezbeduju


u izvesnoj meri podrsku uslovi
ma integriteta, pre svega opstim uslovima integriteta. Medutim,
to nije uvek slucaj
sa specificnim uslovima integriteta. Prvi kompletni relacioni prototipski sistem,
System R IBM-ove istrazivacke laboratorije iz San Hozea u Kaliforniji, imao je
iskaz za zadavanje specificnih uslova integriteta koji se odnose bilo na stanje baze
(vrednosti atributa, sadrzaj relacije ili cele baze), bilo na promenu stanja baze.

Taj iskaz moze da sadrzi proizvoljno tvrdenje


upitnog jezika. Na primer, uslov
integriteta koji se namece pri promeni statusa izdavaca je da novi status mora biti
veci od starog, i u sintaksi System R zadaje se iskazom
ASSERT ON UPDATE TO I: New STATUS >= Old STATUS
Izmena podataka koja narusava uslov integriteta se odbija. Uslov integriteta

moze da se odnosi na pojedinacnu n-torku ili na skup n-torki (kada je u tvrdenju


prisutna agregatna funkcija, v. tacku 3.3.7).
Komercijalni proizvodi razvijeni iz prototipskog sistema System R ne podrzavaju
na prethodni, deklarativni nacin, specificne uslove integriteta. Tako, na primer,
neke verzije DB2 sistema nude mogucnost programiranja procedura za odrzavanje
proizvoljnih (specificnih) uslova integriteta, ali je te procedure obavezno pisati u
Assembler 370 jeziku, sto ih cini prakticno neupotrebljivim za krajnjeg korisnika,
i svakako veoma udaljenim od ideje deklarativne specifikacije. Sistem DB2 UDB
Verzija 5 ima mogucnost deklarativnog zadavanja specificnih ogranicenja koja se
odnose na jednu ili vise kolona jedne tabele, i koja mora da zadovolji svaka vrsta te
tabele. Ta ogranicenja zadaju se u okviru CONSTRAINT CHECK opcije iskaza
za kreiranje tabele (CREATE) odnosno iskaza za izmenu strukture tabele (ALTER
TABLE). Na primer, u tabeli KI (izdavastvo), ogranicenje da svako izdanje starije
od 1980. godine mora imati tiraz bar 5000, u DB2 UDB iskazuje se CONSTRAINT
opcijom pomenutih iskaza oblika
CONSTRAINT GODTIR CHECK (GODINA >= 1980 OR TIRAZ >=5000)
Opcija CONSTRAINT omogucuje zadavanje staticnih ogranicenja, tj. ogranicenja koja se odnose na vrednosti pojedinih kolona u svakoj pojedinacnoj vrsti

24

1 Relacioni model podataka

starih i novih
tabele, u svakom trenutku, i koja ne mogu izraziti odnos izmedu
vrednosti kolona pri azuriranju, kakav je bio prethodni primer ogranicenja pri
azuriranju kolone STATUS. Ova druga mogucnost u DB2 UDB sistemu ostvarena
je kroz opstiji koncept koncept trigera kojima je posvecena sledeca tacka.

1.4.3

Trigeri

Svi dosad pomenuti oblici uslova integriteta ukljucuju, eksplicitno ili implicitno,

pored tvrdenja,
i akciju koju sistem preduzima u slucaju da tvrdenje
nije tacno.
Na primer, kod specificnih uslova integriteta koji se odnose na strukturu domena,
pokusaj da se unese vrednost atributa koja nije iz odgovarajuceg domena odbija
se. To odbijanje da se registruje vrednost predstavlja akciju koja se preduzima u
slucaju da uslov integriteta nije zadovoljen. Pokusaj da se izbrise n-torka iz jedne
relacije, sa vrednoscu primarnog kljuca koja postoji kao vrednost stranog kljuca
n-torke zavisne relacije, odbija se, ili proizvodi kaskadno brisanje odgovarajucih
n-torki iz zavisne relacije, odnosno postavljanje markera nedostajucih vrednosti
stranog kljuca u odgovarajuce n-torke zavisnih relacija (o ovim efektima brisanja
bice vise reci u odeljku o SQL podrsci brisanju).
Opstija forma uslova integriteta, kojom se moze zadati proizvoljna akcija u

slucaju proizvoljnog (navedenog) dogadaja


nad objektom u bazi, zove se triger
(okidac, engl. trigger).
Triger je proceduralni mehanizam koji specificnoj operaciji modifikovanja podataka triger operaciji, nad specificnom baznom relacijom,
pridruzuje niz SQL iskaza, triger proceduru, koja se aktivira tj. izvrsi kadgod se
izvrsi triger operacija.
Triger se moze koristiti za validaciju ulaznih podataka, za automatsko generisanje vrednosti unesene vrste, za citanje iz ili upis u druge tabele u cilju us
postavljanja medusobnih
veza, za podrsku uzbunjivanju (alarmiranju) kroz poruke
elektronske poste. Koriscenje trigera omogucuje brzi razvoj aplikacija, globalno
nametanje ogranicenja (uslova integriteta) i lakse odrzavanje aplikacija i podataka.
U sistemima koji podrzavaju mehanizam trigera uobicajeno je da za svaku od
operacija unosenja, izmene i brisanja postoje po dve vrste trigera kojima se definisu
procedure koje ta operacija aktivira: triger cija se triger procedura aktivira pre
izvrsenja same operacije (pre-triger) i triger cija se triger procedura aktivira posle
izvrsenja operacije (posle-triger). Pre-trigeri koriste se najcesce za proveru nekih
uslova pre izvrsenja triger procedure. Posle-trigeri koriste se za propagiranje vred
nosti prema potrebi, ili za izvodenje
drugih zadataka kao sto je slanje poruke, koji
mogu biti deo triger operacije.
Primer 1.1 Za relacije P (pisac) i KP (autor), sa pripadnim atributima, u DB2
UDB sistemu mogao bi da definise sledeci triger vezan za registraciju novog autorskog dela, tj. za unosenje n-torke u relaciju KP:
CREATE TRIGGER KP UNOS
AFTER INSERT ON KP

1.4 Integritetni deo relacionog modela

25

REFERENCING NEW AS NKP


FOR EACH ROW MODE DB2SQL
UPDATE P
SET BR NASLOVA = BR NASLOVA + 1
WHERE P SIF = NKP.P SIF
(ovaj se triger odnosi na automatsko uvecanje broja naslova autora za 1, a aktivira
se kadgod se unese podatak o novoj knjizi tog autora; dakle, triger operacija je
operacija unosenja INSERT u tabelu KP, a triger procedura sastoji se od jednog
jedinog SQL iskaza azuriranja UPDATE tabele P; uvecanje u tabeli P izvrsava
se posle AFTER izvrsenog unosa u tabelu KP; nova uneta vrsta u tabelu KP
dobija ime NKP opcijom REFERENCING; triger se aktivira za svaku novu unetu
vrstu u tabelu KP FOR EACH ROW, dok je DB2SQL jedini podrzani vid trigera
u ovom sistemu).
Na slican nacin mogu se definisati i trigeri pri brisanju, odnosno izmeni podatka
o autorskom delu:
CREATE TRIGGER KP BRIS
AFTER DELETE ON KP
REFERENCING OLD AS OKP
FOR EACH ROW MODE DB2SQL
UPDATE P
SET BR NASLOVA = BR NASLOVA - 1
WHERE P SIF = OKP.P SIF)
CREATE TRIGGER KP AZUR
AFTER UPDATE OF P SIF ON KP
REFERENCING NEW AS NKP OLD AS OKP
FOR EACH ROW MODE DB2SQL
BEGIN ATOMIC
UPDATE P
SET BR NASLOVA = BR NASLOVA - 1
WHERE P SIF = OKP.P SIF;
UPDATE P
SET BR NASLOVA = BR NASLOVA + 1
WHERE P SIF = NKP.P SIF
END
(posto se triger procedura poslednjeg trigera sastoji od dva SQL iskaza, neophodno
je zagraditi ih BEGIN ATOMIC END konstrukcijom, koja ukazuje da se ili
oba iskaza moraju izvrsiti uspesno ili nijedan).
Uslov integriteta koji kontrolise odnos starih i novih vrednosti kolona pri
azuriranju moze se sada izraziti trigerom cija se triger procedura sastoji od iskaza
generisanja greske u slucaju da odnos nije valjan, i izvestavanja o toj gresci.

26

1 Relacioni model podataka

Primer 1.2 Zahtev da pri promeni statusa izdavaca (atribut STATUS tabele I),
novi status mora biti veci od starog, inace se promena ne izvrsava vec se izdaje
poruka o gresci, moze biti realizovan sledecim trigerom u sistemu DB2:
CREATE TRIGGER N STATUS
NO CASCADE BEFORE UPDATE OF STATUS ON I
REFERENCING NEW AS NI OLD AS OI
FOR EACH ROW MODE DB2SQL
WHEN (NI.STATUS < OI.STATUS)
SIGNAL SQLSTATE 85000 (Novi status manji od starog)
(triger se aktivira pre izvrsenja operacije azuriranja BEFORE a triger procedura
ne proizvodi aktiviranje drugih trigera NO CASCADE; kod greske niskovna

konstanta 85000 bira se prema utvrdenim


sintaksnim pravilima).
Koriscenjem trigera mogu se izraziti i opsti uslovi integriteta, integritet entiteta
i referencijalni integritet. Na primer, referencijalni integritet nad relacijama I, KI
sa kaskadnim brisanjem, ukoliko zavisne n-torke postoje u zavisnoj relaciji, moze
se izraziti sledecim trigerom u sistemu DB2:
CREATE TRIGGER REFINT
AFTER DELETE ON I
REFERENCING OLD AS OI
FOR EACH ROW MODE DB2SQL
DELETE FROM KI
WHERE KI.I SIF = OI.I SIF
Ipak, zbog znacaja koji opsti uslovi integriteta imaju, neuporedivo je bolje imati
posebnu, jednostavnu i deklarativnu (neproceduralnu) formu za njihovo zadavanje.

1.5

Pitanja i zadaci

1. Definisati sledece pojmove:


ANSI arhitektura
logicka reprezentacija
konceptualna shema
fizicka reprezentacija
pogled
model podataka
baza podataka
sistem za upravljanje bazama
podataka

sistem baza podataka


strukturni deo modela
manipulativni deo modela
upitni jezik
integritetni deo modela
relacioni model podataka
relaciona baza podataka
strukturni deo relacionog modela
atribut
domen

1.5 Pitanja i zadaci


relacija
bazna relacija
izvedena relacija

27
normalizovana relacija
relacijska shema
shema relacione baze podataka

2. U cemu se razlikuje sistem za upravljanje bazama podataka od datoteckog


sistema?

3. Cime
je predstavljen manipulativni deo relacionog modela?
je to relaciona kompletnost?
4. Sta
5. Objasniti razlicite vrste uslova integriteta. Kako se one predstavljaju u relacionom modelu?
6. Definisati sledece pojmove:
funkcionalna zavisnost
primarni kljuc
nadkljuc
strani kljuc

integritet entiteta
referencijalni integritet
triger
uslov i procedura trigera

7. Navesti primer specificnog uslova integriteta.


8. Navesti sve funkcionalne zavisnosti, primarne i strane kljuceve relacija I, K,
P, KI, KP.
9. Navesti primer trigera.
10. Razmotriti primer relacione baze podataka o studentima. Koje se relacije i
njihovim atributima mogu uociti?
koje funkcionalne zavisnosti medu
11. Navesti primer upita i radnji nad relacionom bazom iz primera 10.
12. Koje su najvaznije karakteristike relacionog modela?
13. Koji su tipovi objekata u hijerarhijskom a koji u mreznom modelu?
14. Uporediti relacioni, hijerarhijski i mrezni model.
su to nedostajuce vrednosti?
15. Sta
16. Pored raznih definicija klasicnog relacionog modela, postoji citav niz modela koji predstavljaju specificne varijante relacionog modela. Takvi su, na
primer, binarni relacioni modeli koji se zasnivaju na konceptu binarne relacije,
nesvodivi relacioni modeli koji se baziraju na relacijama koje se nikako ne
mogu dekomponovati bez gubljenja informacije, funkcionalni modeli, bazi njima ([21]), itd. Kako bi u
rani na unarnim relacijama i funkcijama medu
binarnom relacionom modelu izgledala shema baze podataka iz primera 10?

Manipulativni formalizmi
relacionog modela
Kao sto je vec pomenuto u odeljku 1.3, formalizmi za manipulisanje podacima, koji
su sastavni deo relacionog modela, jesu relaciona algebra i relacioni racun. Upitni
jezici u sastavu SUBP imaju svoj osnov u jednom od ova dva formalizma, ili u
njihovoj kombinaciji.
Skup svojstava koja treba da podrzi svaki upitni jezik bice u sledecem odeljku
prikazan kroz formalizam relacione algebre, jer je ovaj formalizam, u odnosu na
relacioni racun, jednostavniji za razumevanje pri prvom susretu sa pojmovima, i
olaksava objasnjenje koncepata kao sto su, na primer, uslovi integriteta, mehanizmi
autorizacije ili algoritmi azuriranja pogleda. Uprkos pogodnosti relacione algebre
u prezentaciji i razjasnjavanju koncepata, relacioni racun pokazuje prednosti u implementaciji koncepata kroz relacioni upitni jezik. Zato ce u odeljku 2.2 biti izlozen
i formalizam relacionog racuna.

2.1

Relaciona algebra

Prema originalnoj Codd-ovoj definiciji, relacionu algebru cini skup od devet operacija nad relacijama, izabranih tako da se njihovim komponovanjem moze pristupiti svakom podatku u bazi. Kompozicija operacija zajedno sa relacijama na koje
se primenjuju obrazuje relacioni izraz u relacionoj algebri ili izraz relacione algebre.
Vrednost takvog izraza je uvek relacija. Operacije relacione algebre su relacioni
analogoni skupovnih operacija unije, preseka, razlike i Dekartovog proizvoda, kao i
specificne relacione operacije: unarne projekcija i restrikcija, i binarne prirodno
spajanje, slobodno spajanje i relaciono deljenje.
Upotrebljena notacija za operacije relacione algebre je jedna od mogucih notacija i koristi se za ilustrovanje elemenata i koncepata formalizma. Skup operacija
treba interpretirati kao jednu definiciju moci koju svaki relacioni jezik mora da
poseduje.
28

2.1 Relaciona algebra

29

Osnovne operacije relacione algebre bice definisane na sledecim dvema (apstraktnim) relacijama: R(A1 , A2 , . . . , An ), S(B1 , B2 , . . . , Bm ).

2.1.1

Unarne operacije

Pod unarnim relacionim operacijama podrazumevaju se operacije koje se izvrsavaju


nad pojedinacnom relacijom. To su operacije projekcije i restrikcije.
Osim operanda imena relacije, uz ove operacije se navodi jos po jedan operand
tipa skupa atributa (u slucaju operacije projekcije), odnosno logickog izraza (u
slucaju operacije restrikcije).
Projekcija. Neka je X podskup skupa atributa {A1 , A2 , . . . , An } relacije R, a Y
komplement skupa X u odnosu na ceo skup atributa {A1 , A2 , . . . , An }. Tada se
promenom redosleda atributa relacija R moze predstaviti kao R(X, Y )1 . Operacija
projekcije relacije R na skup atributa X obelezava se sa R[X] i definise na sledeci
nacin:
R[X] = {x | x dom(X) i postoji y dom(Y ) takav da (x, y) R(X, Y )}.2
Dakle, rezultat operacije projekcije relacije R na skup atributa X je relacija koja
ukljucuje samo atribute iz skupa X. Drugim recima, operacijom projekcije se
iz tabele kojom je predstavljena relacija R biraju samo kolone koje odgovaraju
atributima iz skupa X, i to bez ponavljanja dupliranih torki.
Operacija projekcije moze se primeniti i na pojedinacnu torku, s obzirom da se
torka moze tretirati kao relacija koja sadrzi tacno tu torku. Tako, ako je r(A1 :
v1 , A2 : v2 , . . . , An : vn ) n-torka, onda se operacija projekcije n-torke r na skup
atributa {Ai1 , Ai2 , . . . , Aik } definise sa:
r[Ai1 , Ai2 , . . . , Aik ] = (vi1 , vi2 , . . . , vik ).
Analogno se i ostale operacije relacione algebre, definisane nad relacijama, mogu
primeniti i na pojedinacne torke.
Primer 2.1 Rezultat operacije projekcije relacije K na atribut OBLAST, u oznaci
K[ OBLAST ], jeste relacija koja ima jedan atribut (OBLAST) i koja sadrzi sve
razlicite oblasti iz kojih su knjige registrovane u bazi:
OBLAST
roman
poezija
leksikografija
racunarstvo
1 Umesto
2 Umesto

oznake R(X, Y ) koristi se i oznaka R(XY ).


oznake torke (x, y), koristi
ce se i oznaka xy.

30

2 Manipulativni formalizmi relacionog modela

Pokazuje se da je relaciona projekcija algebarski analogon egzistencijalnog kvantifikatora koji se primenjuje u relacionom racunu. Intuitivno, ako za relaciju
R(X, Y ) sa dva disjunktna podskupa skupa atributa X, Y vazi da je x R[X],
onda u relaciji R postoji n-torka r takva da je r[X] = x.
Restrikcija.
Neformalno govoreci, operacijom restrikcije biraju se n-torke (u
celosti) zadate relacije koje zadovoljavaju logicki izraz naveden u oznaci operacije.

Argumenti logickog izraza su poredenja


vrednosti dva atributa zadate relacije (defi
nisana nad istim domenima), ili poredenja
jednog atributa te relacije sa konstantom
iz odgovarajuceg domena; operacije logickog izraza su logicke operacije NOT, OR
i AND (uz uobicajena pravila prioriteta).
Za formalno definisanje operacije restrikcije koristi se uzi pojam -restrikcije,
koji se uvodi na sledeci nacin. Neka je relacijska operacija iz skupa {=, 6=, <,
, >, }, i neka su Ai , Aj atributi relacije R sa zajednickim domenom nad kojim je
definisana operacija ; neka je a vrednost iz tog domena. Tada zapis R[Ai Aj ]
(ili R[Ai a]) oznacava operaciju -restrikcije, definisanu sa:
R[Ai Aj ] = {x | x R i x[Ai ]x[Aj ]} (slicno za R[Ai a]).

Poredenja
Ai Aj , Ai a zovu se termi poredenja.
Relacioni logicki izraz je:

term poredenja;
NOT (relacioni logicki izraz);
(relacioni logicki izraz) AND (relacioni logicki izraz);
(relacioni logicki izraz) OR (relacioni logicki izraz).
Neka je P relacioni logicki izraz. Tada se izrazu P moze pridruziti preslikavanje
koje svaku vrstu relacije R preslikava u tacno ili netacno. Operacija restrikcije (ili
prosirene -restrikcije, [19]) relacije R po relacionom logickom izrazu3 P obelezava
se sa R[P ] i definise se na sledeci nacin:
R[P ] = {x | x R i P (x)}.
Primer 2.2 Rezultat restrikcije relacije K po uslovu OBLAST = roman, u oznaci
K[OBLAST = roman], jeste relacija sa istom shemom kao i relacija K, i sa dve
trojke:
K SIF
k1
k3

NASLOV
Osma ofanziva
Pionirska trilogija

OBLAST
roman
roman

3 U daljem tekstu, umesto relacioni logi


cki izraz koristi
ce se i termin logi
cki izraz. U istom
zna
cenju koristi se i termin logi
cki uslov.

2.1 Relaciona algebra

2.1.2

31

Binarne operacije

Prvi skup binarnih operacija relacione algebre predstavljaju relacioni analogoni


klasicnih skupovnih operacija unije, preseka, razlike i Dekartovog proizvoda.
Relaciona unija, presek, razlika i Dekartov proizvod. Operacija relacione
unije je specificna u odnosu na tu operaciju u matematici. Ova operacija u matematici dopusta uniranje raznorodnih skupova, kao sto su skupovi knjiga, izdavaca
i autora, dok relaciona operacija unije dopusta uniranje skupa knjiga sa drugim
skupom knjiga, skupa izdavaca sa drugim skupom izdavaca, skupa autora sa drugim
skupom autora. Relaciona operacija unije treba da obezbedi predstavljanje jednom
relacijom svih objekata (n-torki) iz dve odabrane relacije, pod uslovom da su objekti
u tim relacijama iste vrste. Objekti u dve relacije su iste vrste ako su te relacije
unijski kompatibilne, pri cemu se unijska kompatibilnost definise na sledeci nacin:
relacije R i S su unijski kompatibilne ako su istog stepena (m = n), i za bar jedno
1 1 preslikavanje skupa atributa relacije R u skup atributa relacije S vazi da
odgovarajuci parovi atributa relacija R, S uzimaju vrednosti iz istih domena. Pri
relacionoj operaciji unije, redosled atributa u relaciji R i redosled njihovih slika
u relaciji S, pri jednom takvom preslikavanju, mora biti implicitno ili eksplicitno
naznacen, nezavisno od principa da je redosled atributa relacije nebitan. Pod tim
uslovima,
R S = {t | t R ili t S}.
Treba naglasiti da, kao sto i skupovna definicija kaze, operacija uniranja podrazumeva i eliminaciju duplikata, kako bi rezultat bio relacija.
Primer 2.3 Ako su atributi DRZAVA u relacijama P (pisac) i I (izdavac) definisani nad istim domenom, onda se moze izracunati unija projekcija ovih relacija na
zajednicki atribut:
P[ DRZAVA ] I[ DRZAVA ] =

DRZAVA
Jugoslavija
Engleska
Amerika

Pod istim uslovima kao i za operaciju unije, definisu se operacije preseka i razlike
na sledeci nacin:
R S = {t | t R i t S} (presek),
R \ S = {t | t R i t
/ S} (razlika).
Dekartov proizvod relacija R1 i R2 sa po n1 , n2 atributa, redom, jeste
relacija R1 R2 sa n1 + n2 atributa cije su vrste dobijene dopisivanjem vrsta

32

2 Manipulativni formalizmi relacionog modela

relacije R2 na vrste relacije R1 . Ako je t1 = (t11 , . . . , t1n1 ) proizvoljna n1 torka relacije R1 a t2 = (t21 , . . . , t2n2 ) proizvoljna n2 -torka relacije R2 , tada je
(t1 , t2 ) = (t11 , t12 , . . . , t1n1 , t21 , t22 , . . . , t2n2 ) odgovarajuca n1 + n2 -torka relacije R1 R2 .
Dekartov proizvod k relacija (k > 2) R1 , R2 , . . . , Rk definise se kao (R1 R2
Rk1 ) Rk . Ova operacija se uglavnom uvodi iz koncepcijskih razloga, a
veoma retko zaista i izvrsava, s obzirom na velicinu relacije (broj i duzinu vrsta)
koju proizvodi kao rezultat.
Primer 2.4 Rezultat Dekartovog proizvoda relacija K i I je sledeca relacija sa 7
atributa i 24 sedmorke:
K SIF
k1
k1
k1
k1
k2
k2
k2
k2
...
k6

NASLOV
Osma ofan.
Osma ofan.
Osma ofan.
Osma ofan.
Nemam v.v.
Nemam v.v.
Nemam v.v.
Nemam v.v.
...
Trazim pom.

OBLAST
roman
roman
roman
roman
poezija
poezija
poezija
poezija
...
poezija

I SIF
i1
i2
i3
i4
i1
i2
i3
i4
...
i4

NAZIV
Prosveta
Addison. . .
Decje. . .
Matica. . .
Prosveta
Addison. . .
Decje. . .
Matica. . .
...
Matica. . .

STAT.
30
20
10
30
30
20
10
30
...
30

DRZAVA
Jugoslav.
Amerika
Jugoslav.
Jugoslav.
Jugoslav.
Amerika
Jugoslav.
Jugoslav.
...
Jugoslav.

(skracenja oznaka su iz prostornih razloga).


Slobodno () spajanje. Operacija slobodnog spajanja (ili -spajanja) primenjuje se na dve relacije, R i S, i proizvodi kao rezultat relaciju sa m + n atributa.
Ta relacija sadrzi n-torke relacije R na koje su dopisane m-torke relacije S, ali samo
ako su vrednosti naznacenih atributa Ai odnosno Bj tih torki u relaciji .
Neka je relacijska operacija iz skupa {=, 6=, <, , >, }, i neka su Ai , Bj
atributi relacija R, S, redom. Tada se operacija slobodnog () spajanja relacija
R, S po atributima Ai , Bj , redom, obelezava sa R[Ai Bj ]S i definise na sledeci
nacin:
R[Ai Bj ]S = {(r, s) | r R i s S i r[Ai ]s[Bj ]}.
Prirodno spajanje.
Operacija prirodnog spajanja je specijalni (i najcesci)
slucaj operacije slobodnog spajanja, a to je spajanje po jednakosti. Ovo spajanje
se moze izvesti po jednakosti podskupova atributa dveju relacija (a ne samo po
jednakosti pojedinacnih atributa), pri cemu se iz rezultata iskljucuje jedan od tih
podskupova.
Neka su za relacije R, S uoceni podskupovi atributa X {A1 , A2 , . . . , An } i
Y {B1 , B2 , . . . , Bm }, koji imaju jednak broj elemenata a odgovarajuci parovi
(prvih, drugih, itd.) atributa imaju iste domene. Tada se komplementi skupova

2.1 Relaciona algebra

33

atributa X odnosno Y , u odnosu na skup svih atributa relacije R odnosno S, mogu


obeleziti sa Z odnosno W . Permutacijom skupova atributa, relacije R, S mogu
se predstaviti sa R(Z, X), S(Y, W ). Tada se operacija prirodnog spajanja relacija
R, S po skupovima atributa X, Y, redom, obelezava sa R[X Y ]S i definise na
sledeci nacin:
R[X Y ]S = {(z, x, w) | (z, x) R i (y, w) S i x = y}.
Kada su X i Y svi zajednicki atributi relacija R i S, operacija prirodnog spajanja
se obelezava sa R S.
Primer 2.5 Rezultat operacije prirodnog spajanja relacija P i I (spajanje po jednakosti atributa DRZAVA) je sledeca relacija sa 7 atributa i 10 sedmorki od kojih
se svaka odnosi na pisca i izdavaca iz iste zemlje:
P SIF
p1
p1
p1
p3
p3
p3
p4
p4
p4
p5

IME
c
B.Copi
c
B.Copi
c
B.Copi
S.

B.S.
S.

B.S.
S.

B.S.
D.Maks.
D.Maks.
D.Maks.
C.J.Date

BR N.
2
2
2
1
1
1
2
2
2
1

DRZAVA
Jugoslav.
Jugoslav.
Jugoslav.
Jugoslav.
Jugoslav.
Jugoslav.
Jugoslav.
Jugoslav.
Jugoslav.
Amerika

I SIF
i1
i3
i4
i1
i3
i4
i1
i3
i4
i2

NAZIV
Prosveta
Decje novine
Matica srpska
Prosveta
Decje novine
Matica srpska
Prosveta
Decje novine
Matica srpska
Addison Wesley

STATUS
30
10
30
30
10
30
30
10
30
20

(skracenja oznaka su iz prostornih razloga).


Deljenje.
Relaciona operacija deljenja relacije R(X, Y ) po zadatom skupu
atributa Y drugom relacijom T proizvodi rezultat (analogan celobrojnom delu
kolicnika pri deljenju celih brojeva) koji se sastoji od projekcija n-torki relacije R
na atribute X, i to samo onih projekcija n-torki koje se, (Dekartovski) pomnozene
svakom vrstom relacije T , sadrze u relaciji R.
Neka je, kao i do sada, R(A1 , A2 , . . . An ) relacija, i neka je Y = {Y1 , Y2 , . . . , Yk }
{A1 , A2 , . . . , An }, a X = {A1 , A2 , . . . , An } \ Y . Neka relacija T (Z1 , Z2 , . . . , Zk )
ima isti broj atributa kao skup Y , pri cemu su parovi odgovarajucih atributa
definisani nad istim domenima. Oznacimo simbolom Z skup atributa relacije T .
Tada se operacija deljenja relacije R po skupu atributa Y relacijom T obelezava sa
R[Y Z]T i definise sa:
R[Y Z]T = {x | x R[X] i {x} T (Z) R(X, Y )}.
Dakle, rezultat operacije deljenja je maksimalni podskup projekcije R[X] ciji je
Dekartov proizvod sa T (Z) sadrzan u R(X, Y ).

34

2 Manipulativni formalizmi relacionog modela

ca,
Primer 2.6 Neka je TEMP relacija koja sadrzi sve sifre knjiga Branka Copi
tj.
c]) KP) [ K SIF] = TEMP K SIF
((P[IME = B.Copi
k1
k3
(o mogucnosti dodeljivanja vrednosti relacionog izraza nekoj relaciji bice reci na
kraju izlaganja o relacionoj algebri).

ca mogu se dobiti deljeSifre


izdavaca koji su stampali sve knjige Branka Copi
njem, relacijom TEMP, projekcije relacije KI na atribute K SIF, I SIF:
(KI[ K SIF, I SIF ]) [ K SIF K SIF ] TEMP = I SIF
i1
Dakle, jedini takav izdavac je Prosveta sa sifrom i1.
Za dve proizvoljne relacije R, S vazi da je (R S) S = R, tj. operacija
relacionog deljenja je inverzna operaciji mnozenja (Dekartovog proizvoda). Otuda
i naziv deljenje za razmatranu operaciju.
Pokazuje se da je operacija deljenja algebarski analogon univerzalnog kvantifikatora. Intuitivno, ako za relaciju R(X, Y ) sa dva disjunktna podskupa atributa X, Y
i relaciju T (Z), vazi da x R[Y Z]T, onda za svaku vrednost z T vazi da je
(x, z) R(X, Y ).
Primer 2.7 Primer izraza relacione algebre, koji ukljucuje nekoliko njenih operacija, je nalazenje naziva jugoslovenskih izdavaca koji su stampali bar jednu knjigu
engleskog pisca, kao i imena takvih pisaca i naslova njihovih knjiga:
((I[ DRZAVA = Jugoslavija ] P[ DRZAVA = Engleska ]) KI KP K)
[NAZIV, IME, NASLOV]
Osim operacija relacione algebre koje je uveo Codd, relaciona algebra se, udobnosti radi, cesto prosiruje sa dve dodatne operacije, redovno podrzane i u upitnim
jezicima ([22]):
definisanje aliasa drugog imena za relaciju, sto se posebno koristi pri
izracunavanju Dekartovog proizvoda relacije sa samom sobom, da se ne bi
ponovila imena atributa u relaciji rezultatu:
DEFINE ALIAS ime-relacije-1 FOR ime-relacije-2
dodela, kojom se rezultat relacionog izraza dodeljuje novoj relaciji:
relacija-1 := relacioni izraz.
Relaciona algebra, kako je ovde izlozena, u izvesnom smislu je maksimalna: ona

sadrzi sve operacije relacione algebre. Moze se, medutim,


dokazati, da taj skup

2.1 Relaciona algebra

35

operacija nije minimalan, u smislu da se neke od operacija mogu iskljuciti a da


preostali skup operacija zadrzi istu izrazajnu moc. Jedan minimalni, ekvivalentni
skup operacija relacione algebre cine operacije unije, razlike, Dekartovog proizvoda,
projekcije i restrikcije ([64]).

2.1.3

Pro
sirena relaciona algebra

Prosirenje relacione algebre koje se u ovoj tacki razmatra odnosi se na podrsku


jednoj vrsti nedostajuce vrednosti, kao i na sire definisanje operacija unije, preseka,
razlike i operacija spajanja. Izlazemo Codd-ovo prosirenje relacionog modela i
relacione algebre ([18]).
Domen svakog atributa prosiren je jednom oznakom nedostajuce vrednosti, koja
se moze upotrebiti za oznaku bilo koje (svake) nedostajuce vrednosti, bez obzira na
njenu semantiku. Tada se i skup istinitosnih vrednosti {T, F} prosiruje nepoznatom istinitosnom vrednoscu (oznacimo je sa ), i postaje {T, F, }. Primetimo
da je semantika nepoznate istinitosne vrednosti razlicita od semantike nedostajuce
vrednosti za atribut (mada mogu biti isto oznacene), jer je nepoznata istinitosna
vrednost vrednost iz domena istinitosnih vrednosti, dok nedostajuca vrednost
atributa to nije.
Prosirena relacija jednakosti (u oznaci =)
je sada trovalentna, tj.
(a=b)
{T, F, },

a takve su i druge relacije poredenja,


pripadnosti skupu i inkluzije. Specijalno,

( S)
= i ({}S)
= , za svaki neprazni skup S i nedostajucu vrednost
istog tipa, .
Da bi se definisao logicki izraz u ovoj trovalentnoj logici, potrebno je definisati
i odgovarajuce (trovalentne) logicke operacije, koje se zadaju sledecim tablicama:
AND
T
F

T
T
F

F
F
F
F

OR
T
F

T
T
T
T

F
T
F

NOT
T
F

F
T

Prosireni logicki izraz dobija se primenom prosirenih logickih operacija na

prosirena poredenja.
Pri tom, on treba da ima istinitosnu vrednost ako i samo
ako su ispunjena sledeca dva uslova:
svako pojavljivanje nedostajuce vrednosti u izrazu moze se zameniti odre
denom
vrednoscu iz odgovarajuceg domena tako da izraz dobije vrednost T;
svako pojavljivanje nedostajuce vrednosti u izrazu moze se zameniti odre
denom
vrednoscu iz odgovarajuceg domena tako da izraz dobije vrednost F.4
4 Uo
ceno

je da postoji niz problema u interpretaciji nedostaju


cih vrednosti, posebno trovalentne

36

2 Manipulativni formalizmi relacionog modela

Na primer, ( =a)
= (a je vrednost iz nekog domena; kada se kao argument

poredenja
zameni sa a, vrednost poredenja
postaje T; kada se zameni sa b, za

b 6= a, vrednost poredenja
postaje F).
Proizvoljni upit sa zadatim logickim izrazom sada se interpretira kao naci
sve podatke za koje se zna da je vrednost logickog izraza tacno (a ne naci sve
podatke za koje je vrednost logickog izraza tacno ), pa ne moraju da vaze sve
tautologije dvovalentne logike.
Razlike u definiciji prosirenih logickih izraza u trovalentnoj logici (u odnosu
na odgovarajucu definiciju onih u dvovalentnoj logici) reflektuju se i na razlike u definiciji operacija prosirene relacione algebre. Naime, za svaku operaciju
relacione algebre, s obzirom da u svoju definiciju ukljucuje neku od prosirenih

relacija (poredenje,
pripadnost skupu, inkluzija), uvode se po dve nove operacije:

TACNA i MOZDA
operacija, ciji su rezultati, redom, skup podataka za koje
se zna da pripadaju rezultatu operacije, i skup podataka za koje se ne zna da li

pripadaju rezultatu operacije. Tako se TACNA


restrikcija relacije R po logickom
uslovu P , u oznaci R[PT ], moze definisati na sledeci nacin:
R[PT ] = {x | x R i (P ) = T }.

Na primer, TACNA
restrikcija relacije R po relacijskoj operaciji na atributima
Ai i Aj , u oznaci R[Ai T Aj ], definise se kao

R[Ai T Aj ] = {x | x R i (x[Ai ]x[A


j ]) = T }.

Slicno, MOZDA
restrikcija relacije R po logickom uslovu P , u oznaci R[P ], moze
se definisati na sledeci nacin:
R[P ] = {x | x R i (P ) = }.

Na primer, MOZDA
restrikcija relacije R po relacijskoj operaciji na atributima
Ai i Aj , u oznaci R[Ai Aj ], definise se kao

R[Ai Aj ] = {x | x R i (x[Ai ]x[A


j ]) = }.
Slicno vazi i za operacije spajanja ( i prirodnog), kao i za operaciju deljenja.

Uvodenje
nedostajuce vrednosti u relacioni model omogucuje i prosirenje operacija unije, preseka i razlike, sa unijski kompatibilnih relacija na relacije koje to
logike ([25]). Tako
ce neki logi
cki izraz, striktnom primenom prosirenih logi
ckih operacija, dobiti
vrednost , mada jedan od navedenih uslova nije ispunjen ([27]). Na primer, ako relacija R ima
samo jedan atribut, A, i jednu n-torku vrednost a, a relacija S dva atributa, B, A, i jednu
n-torku par (b, ), tada
ce prosireni logi
cki izraz (R.A=S.A)

AND (S.A=
0 a01 ), primenom
prosirenih logi
ckih operacija, dobiti vrednost ( AND = ), mada prema navedenim uslovima
izraz treba da ima vrednost F. Zbog ovakvih problema neki autori sugerisu da se u relacione sisteme
i ne uklju
cuju nedostaju
ce vrednosti, dok drugi preporu
cuju pa
zljivu preradu komponenti RSUBP,
posebno optimizatora, da bi se ovakvi problemi resili.

2.2 Relacioni racun

37

nisu. Tako se za relacije R(A, B) i S(B, C) (A, B, C su skupovi atributa) operacija

spoljasnje unije, u oznaci R S, definise kao

R S = R1 S1 , gde je R1 = R (C : )5 i S1 = (A : ) S.
Slicno se definisu i prosirene spoljasnje operacije preseka i razlike.
Spoljasnje slobodno spajanje relacija R, S definise se tako da rezultujuca relacija
sadrzi sve podatke tih relacija, cak i kada njihove projekcije na atribute spajanja
nisu jednake. Tako, za relacije R(A, B) i S(C, D) spoljasnje -spajanje po paru

atributa B i C, u oznaci R[B C]S, definise se kao unija tri skupa:

R[B C]S = T (R1 (C : , D : )) ((A : , B : ) S1 );


relacija T je rezultat obicnog -spajanja, a relacije R1 i S1 su delovi relacija R i
S, redom, koji se ne mogu spojiti -spajanjem sa drugom relacijom, tj.
T
R1
S1

=
=
=

R[BC]S,
R \ T [A, B],
S \ T [C, D].

Spoljasnje prirodno spajanje definise se na slican nacin kao spoljasnje slobodno


spajanje; sada se za uzima relacijska operacija =, a iz rezultata se uklanjanju
kolone dupliranih vrednosti:

R[B C]S = T [A, B, D] (R1 (D : )) ((A : ) S1 )


(relacije T, R1 i S1 su kao i ranije, samo sa = umesto ).
Ovako definisana spoljasnja spajanja zovu se i puna spajanja (engl. FULL
JOIN), za razliku od obicnih, unutrasnjih spajanja (engl. INNER JOIN). Ako se iz
prethodnih definicionih izraza izostavi druga odnosno treca komponenta (R1 . . . ,
odnosno S1 ), dolazi se do definicije desnog (engl. RIGHT) odnosno levog (engl.
LEFT) spoljasnjeg spajanja.
Detaljne informacije o prosirenoj trovalentnoj logici, tacnim, mozda i spoljasnjim operacijama relacione algebre, kao i primeri trovalentnih logickih izraza i
prosirenih operacija, mogu se naci u [18], [25], [26].

2.2

Relacioni ra
cun

Drugi formalizam kojim se moze opisati manipulativni deo relacionog modela je


relacioni racun. Dok relaciona algebra daje skup eksplicitnih operacija za izgradnju
relacije rezultata, relacioni racun pruza notaciju za opisivanje svojstava relacije
rezultata. Tako relaciona algebra predstavlja recepturni, proceduralni pristup, a
relacioni racun deskriptivni, neproceduralni.
5 Oznaka (X : ) ozna
cava relaciju sa jednim atributom X i jednom vrstom ; sli
cno
va
zi i za par (X : , Y : ).

38

2 Manipulativni formalizmi relacionog modela

Na primer, zahtev za nalazenjem naslova knjiga koje je izdalo izdavacko preduzece Prosveta, mogao bi se, u terminima operacija relacione algebre, preciznim

navodenjem
redosleda izvrsavanja operacija, izraziti na sledeci nacin :
izvrsiti restrikciju relacije I po uslovu NAZIV=Prosveta;

izvrsiti prirodno spajanje dobijenog medurezultata


i relacije KI;

izvrsiti prirodno spajanje dobijenog medurezultata


i relacije K;

projektovati medurezultat
na atribut NASLOV.
Isti zahtev bi se, manje proceduralnom notacijom relacionog racuna, izrazio
opisom sledecih svojstava rezultata:
naci naslove knjiga za koje postoje izdanja izdavaca ciji je naziv Prosveta.
Relacioni racun je baziran na predikatskom racunu prvog reda. Dve varijante
ovog racuna definisao je, kao i relacioni model, Edgar Codd; jedna je relacioni racun
n-torki, a druga relacioni racun domena.

2.2.1

Relacioni ra
cun n-torki

Kao sto relaciona algebra predstavlja skup operacija nad relacijama, kojima se moze
izgraditi izraz relacione algebre, tako relacioni racun n-torki predstavlja formalizam
za izgradnju relacionog izraza, izraza relacionog racuna.
Bitno svojstvo relacionog racuna n-torki predstavlja n-torna promenljiva. To
je promenljiva koja je definisana nad specificnom relacijom za koju je vezana, tj.
promenljiva koja kao svoje vrednosti uzima n-torke te relacije, i samo njih. Relacija
za koju je vezana n-torna promenljiva zove se i dijapazon te n-torne promenljive.
S obzirom da je relacioni racun formalni koncept, razne implementacije usvajaju
razlicite sintakse za opis njegovih konstrukcija, i nacin na koji se jednoj n-tornoj
promenljivoj dodeljuje njen dijapazon.
Jedna varijanta originalne Codd-ove definicije i sintakse izraza relacionog racuna
n-torki (alfa-izraza) moze se opisati sledecim elementima ([17], [64]).
Izraz relacionog racuna n-torki je oblika
{(t1 , t2 , . . . , tk ) : f },
pri cemu vazi:
1. Promenljive t1 , t2 , . . . , tk su n-torne promenljive (npr. r, s, t) ili indeksirane
n-torne promenljive (npr. r[1], s[3], t[2]), i njihov skup se zove ciljna lista.

2.2 Relacioni racun

39

2. f je formula (kvalifikacioni izraz) koja se gradi od atoma i operacija na sledeci


nacin:
a1) ako je R ime relacije, a s n-torna promenljiva vezana za relaciju R,
onda oznaka R(s) oznacava to vezivanje i zove se atom pripadnosti;
a2) ako su s, u n-torne promenljive, a konstanta, a operacija pore
denja
(=, 6=, <, , >, ), onda oznaka s[i]u[j] (odnosno s[i]a) oznacava

poredenje
i-te komponente promenljive s sa j-tom komponentom promenljive

u (odnosno konstantom a) i zove se atom poredenja;


f1) svaki atom je formula; sve n-torne promenljive atoma su slobodne
promenljive u toj formuli;
f2) ako su f, g formule, onda su i f AND g, f OR g i NOT f formule; pojavljivanje promenljive je slobodno ili vezano u f AND g, f OR g,
NOT f , tacno onakvo kakvo je odgovarajuce pojavljivanje te promenljive u
f odnosno u g;
f3) ako je f formula, onda su i (s)(f ) i (s)(f ) formule; n-torna
promenljiva s ima definisan dijapazon u formuli f ; ona je slobodna u formuli f i vezana egzistencijalnim (odnosno univerzalnim) kvantifikatorom u
formuli (s)(f ) (odnosno u formuli (s)(f ));
f4) ako je f formula, onda je i (f ) formula;
f5) nista drugo nije formula relacionog racuna n-torki.
3. Slobodne promenljive u formuli f su one i samo one n-torne promenljive koje
su sadrzane u ciljnoj listi.
Primer 2.8 Neka su r, s, t imena n-tornih promenljivih, i neka su K(r), P(t),
KP(s) atomi pripadnosti relacijama K, P, KP, redom. Oznacimo sa r[i] i-ti
atribut promenljive r (analogno znacenje imaju s[j], t[k]; pretpostavlja se da je

skup atributa relacije ureden).


Tada su primeri izraza relacionog racuna:
{r[2] : K(r)}

( naslovi svih knjiga)

{r[2] : K(r) AND r[3] =roman}

(naslovi svih romana)

{(r[2], r[1]) : K(r) AND (s)(t) (KP(s) AND P(t) AND s[1] = r[1] AND
s[2] = t[1] AND t[4] = Jugoslavija)}
(naslovi i sifre knjiga ciji bar jedan autor ima jugoslovensko drzavljanstvo).
Jedna specificna sintaksa zadavanja izraza relacionog racuna n-torki, koja je
bliska sintaksi upitnih jezika zasnovanih na relacionom racunu, opisana je u [22] i
bice ovde ukratko prikazana.
Za deklaraciju n-torne promenljive i njeno vezivanje za relaciju, u ovoj sintaksi
koristi se iskaz oblika

40

2 Manipulativni formalizmi relacionog modela


RANGE OF <ime-promenljive> IS <ime- relacije>

(npr. RANGE OF k IS K).


Upit se u ovoj sintaksi izrazava izrazom relacionog racuna (krace: izrazom) koji
u Bekusovoj notaciji ima sledeci oblik:

<izraz>

::=

<ciljni-atributi>
<formula>

::=
::=

<poredenje>

::=

<ciljni-atributi>
| <ciljni-atributi> WHERE <formula>
<promenljiva>.<atribut>{,<promenljiva>.<atribut>}

<poredenje>
| (<formula>)
| NOT <formula>
| <formula> AND <formula>
| <formula> OR <formula>
| EXISTS <promenljiva> (<formula>)
| FORALL <promenljiva> (<formula>)
<promenljiva>.<atribut> (= | 6= | < | | > | )
(<promenljiva>.<atribut> | <konstanta> )

(pod promenljiva podrazumeva se ime n-torne promenljive; atribut je ime


atributa).
Dakle, izraz relacionog racuna je oblika
X1 .A1 , X2 .A2 , . . . , Xk .Ak WHERE f ,
pri cemu su X1 , X2 , . . . , Xk n-torne promenljive, A1 , A2 , . . . ,Ak su atributi
relacija dijapazona promenljivih X1 , X2 , . . . , Xk , redom, a f je formula koja
koristi tacno X1 , X2 , . . . , Xk kao slobodne promenljive. Neka rel(X) oznacava
relaciju dijapazon n-torne promenljive X. Tada vrednost izraza relacionog racuna
jeste projekcija na atribute A1 , A2 , . . . , Ak onog podskupa Dekartovog proizvoda
rel(X1 )rel(X2 ) rel(Xk )
za koji f dobija vrednost tacno.

Primer 2.9 Izrazi relacionog racuna iz primera 2.8 u ovoj sintaksi imaju sledeci
oblik:

2.2 Relacioni racun


RANGE OF k
RANGE OF kp
RANGE OF p

41
IS K
IS KP
IS P

k.NASLOV

(naslovi svih knjiga)

k.NASLOV WHERE k.OBLAST =roman

(naslovi svih romana)

k.NASLOV, k.K SIF WHERE EXISTS kp (EXISTS p (kp.K SIF = k.K SIF
AND kp.P SIF = p.P SIF AND p.DRZAVA = Jugoslavija))
(naslovi i sifre knjiga ciji bar jedan autor ima jugoslovensko drzavljanstvo).

2.2.2

Relacioni ra
cun domena

Relacioni racun domena lici na relacioni racun n-torki, s tim sto je promenljiva
tog racuna deklarisana nad domenom atributa (domenska promenljiva) a ne nad
relacijom.
Prema Codd-ovoj definiciji relacionog racuna, izraz relacionog racuna domena
ima oblik
{x1 x2 . . . xk | f },
pri cemu vazi:
1. x1 , x2 , . . . , xk su domenske promenljive;
2. f je formula relacionog racuna domena cije su slobodne promenljive upravo
promenljive x1 , x2 , . . . , xk ; pri tome se ta formula definise na isti nacin kao
i formula relacionog racuna n-torki, osim sto sada atom moze imati nesto
modifikovan oblik:
a1) ako je R relacija stepena n, a y1 , y2 , . . . , yn konstante ili domenske
promenljive nad domenima odgovarajucih atributa, onda je R(y1 y2 . . . yn )
atom; znacenje ovog atoma je da vrednosti od yi (za one yi koji su domenske
promenljive) moraju biti izabrane tako da y1 y2 . . . yn predstavlja n-torku
relacije R;
a2) ako su x, y domenske promenljive, a konstanta, a operacija

poredenja,
onda su xy i xa atomi; znacenje ovih atoma je da par vrednosti

x, y (odnosno vrednost x) mora biti izabran tako da je poredenje


tacno.
Primer 2.10 Izrazi relacionog racuna domena su:
a) Naci sifru i status izdavaca ciji je naziv Prosveta:
{xy| (z)(I(xProsvetayz))}
b) Naci imena pisaca jugoslovenskih drzavljana:
{x| (y)(z)(P(yxzJugoslavija))}

42

2 Manipulativni formalizmi relacionog modela


c) Naci ime i sifru autora Osme ofanzive:
{xy| (z)(u)(v)(w)(t)
(K(zOsma ofanzivau) AND KP(zyv) AND P(yxwt))}

Specificna sintaksa relacionog racuna n-torki, opisana u [22] i prikazana u


prethodnoj tacki, moze se modifikovati tako da obuhvati i relacioni racun do
mena. Formula obuhvata sada jos jedan oblik poredenja
tzv. uslov pripadnosti . Naime, ako je R(A1 , . . . , An ) relacija sa atributima A1 , . . . , An , onda je
R(Ai1 : ai1 , . . . , Aik : aik ) uslov pripadnosti, gde je aij ili domenska promenljiva
nad domenom atributa Aij ili konstanta iz domena atributa Aij . Za n-torku r R
vrednost uslova pripadnosti je tacno ako su konstante iz uslova pripadnosti jednake
vrednostima odgovarajucih atributa n-torke r. Uslov pripadnosti eliminise navo
denje
egzistencijalno kvantifikovanih domenskih promenljivih koje nisu od interesa
za dati upit (npr. u prethodnom primeru promenljive u, v, w, t).
U izrazu relacionog racuna domena, domenske promenljive navode se umesto
i umesto atributa u poreciljnih atributa (ciljne domenske promenljive), a takode

denju. Ostali elementi sintakse formule (i izraza) relacionog racuna n-torki i relacionog racuna domena su isti.
Primer 2.11 Ako su KX, PX, IX, STATUSX, IMEX, NASLOVX domenske
promenljive deklarisane nad domenima atributa K SIF, P SIF, I SIF, STATUS,
IME, NASLOV, redom, onda izrazi relacionog racuna domena iz prethodnog
primera u ovoj sintaksi imaju sledeci oblik:
a) Naci sifru i status izdavaca ciji je naziv Prosveta:
IX, STATUSX, WHERE I( I SIF:IX, STATUS:STATUSX, NAZIV:Prosveta);
b) Naci imena pisaca jugoslovenskih drzavljana:
IMEX WHERE P( IME:IMEX, DRZAVA:Jugoslavija);
c) Naci ime i sifru autora Osme ofanzive:
IMEX, PX WHERE EXISTS KX
(K(K SIF: KX, NASLOV:Osma ofanziva) AND
KP(K SIF:KX, P SIF:PX) AND P(P SIF:PX, IME:IMEX)).
Relacioni racun domena je mehanizam ekvivalentan relacionom racunu n-torki,
u smislu da za svaki izraz relacionog racuna domena postoji izraz u relacionom
racunu n-torki koji ima istu vrednost, i obratno (dokaz u [64]). Osim toga, moze se
dokazati da je relaciona algebra ekvivalentna, u istom smislu, sa relacionim racunom
n-torki. Dokaz svodljivosti izraza relacione algebre na izraz relacionog racuna ntorki, izraza relacionog racuna n-torki na izraz relacionog racuna domena, a izraza
relacionog racuna domena na izraz relacione algebre, moze se naci, za razlicite

2.2 Relacioni racun

43

sintakse relacione algebre i relacionog racuna, u [64], [48]. Otuda sledi, posebno,
ekvivalentnost relacione algebre i relacionog racuna (u bilo kojoj od dve varijante).

Ovde ce biti skiciran algoritam svodenja


izraza relacionog racuna n-torki (direktno)
na izraz relacione algebre, koji je Codd dao jos 1972. godine ([17]).

Algoritam 1 (svodenje
izraza relacionog ra
cuna n-torki na izraz relacione
algebre)
Algoritamski koraci:
1. Za svaku n-tornu promenljivu izraza relacionog racuna, pretraziti odgo
varajucu relaciju, uz izvodenje
operacije restrikcije ako postoji uslov restrikcije nad tom relacijom.
2. Napraviti Dekartov proizvod relacija dobijenih u koraku 1.
3. Izvrsiti restrikciju Dekartovog proizvoda dobijenog u koraku 2 prema uslovu

spajanja iz formule, tj. prema poredenju


razlicitih n-tornih promenljivih.
4. Primeniti kvantifikatore zdesna ulevo na sledeci nacin:
za kvantifikator EXISTS T, ako je T n-torna promenljiva nad relacijom

R, eliminisati atribute iz R iz relacije medurezultata;

za kvantifikator FORALL T, podeliti relaciju medurezultat


relacijom
R (tj. onim njenim delom koji je dobijen posle eventualne primene restrikcije
u koraku 1).
5. Projektovati dobijenu relaciju na skup atributa iz ciljne liste.

Primer 2.12 Ilustrujmo rad algoritma 1 na izdavackoj bazi podataka. Upit naci
sifre i nazive jugoslovenskih izdavaca ciji je status veci od 10, i koji su 1979. godine
stampali sve knjige6 nekog inostranog pisca moze se preformulisati u upit naci
sifru i naziv svakog jugoslovenskog izdavaca ciji je status veci od 10, i za kojeg
postoji inostrani pisac takav da za svaku izdatu knjigu vazi sledece: ako je autor
knjige taj pisac, onda je tu knjigu 1979. godine izdao taj izdavac. Ovaj se upit
moze u relacionom racunu n-torki formulisati sledecim izrazom (o sistematicnoj
obradi implikacije ako onda v. tacku 3.3.6):
6 Sve knjige ovde zna
ci sve knjige o kojima postoji informacija u bazi, tj. primenjuje se
pretpostavka o zatvorenoj interpretaciji baze.

44

2 Manipulativni formalizmi relacionog modela

RANGE
RANGE
RANGE
RANGE

OF
OF
OF
OF

i
p
ki
kp

IS
IS
IS
IS

I
P
KI
KP

i.I SIF, i.NAZIV WHERE


i.DRZAVA = Jugoslavija AND i.STATUS> 10 AND
EXISTS p (p.DRZAVA 6= Jugoslavija AND
FORALL kp (kp.P SIF 6= p.P SIF OR
EXISTS ki (ki.GODINA = 1979 AND
ki.K SIF = kp.K SIF AND ki.I SIF = i.I SIF)))
Kada se algoritam primeni na ovaj primer, njegovi pojedini koraci daju sledeci

niz medurezultata,
tj. rezultat.
Posle koraka 1 pretrazena je kompletna relacija KP i sledeci delovi relacija I, P,
KI:
I

I SIF
i1
i4

NAZIV
Prosveta
Matica srpska

STATUS
30
30

DRZAVA
Jugoslavija
Jugoslavija

P SIF
p2
p5

IME
M.Benson
C.J.Date

BR NASLOVA
1
1

DRZAVA
Engleska
Amerika

KI

K SIF
k4

I SIF
i1

GODINA
1979

TIRAZ
10000

IZDANJE
2

Posle koraka 2 dobija se relacija Rez2 koja ima 16 atributa i 22 17 = 28


16-torki (oznake su maksimalno skracene zbog prostornog ogranicenja):
I SIF
i1
i1
i1
i1
i1
i1
i1
..
.

NAZIV
Prosveta
Prosveta
Prosveta
Prosveta
Prosveta
Prosveta
Prosveta
..
.

...
...
...
...
...
...
...
...
..
.

i4

Matica s. . . .

P SIF
p2
p2
p2
p2
p2
p2
p2
..
.

IME
Benson
Benson
Benson
Benson
Benson
Benson
Benson
..
.

...
...
...
...
...
...
...
...
..
.

K SIF I SIF
k4
i1
k4
i1
k4
i1
k4
i1
k4
i1
k4
i1
k4
i1
..
..
.
.

...
...
...
...
...
...
...
...
..
.

K SIF P SIF
k1
p1
k2
p4
k3
p1
k4
p2
k4
p3
k5
p5
k6
p4
..
..
.
.

...
...
...
...
...
...
...
...
..
.

p5

Date

...

k4

...

k6

...

i1

p4

2.2 Relacioni racun

45

Korak 3 predstavlja restrikciju dobijenog Dekartovog proizvoda po uslovu spajanja relacija I, P, KI, KP. Uslov spajanja u ovom primeru je implikacija tipa: ako
su pisac (P) i autor knjige (KP) isti, onda ta knjiga treba da je izdanje (KI) izdavaca
I, tj. u terminima atributa n-torki,
P.P SIF = KP.P SIF KP.K SIF = KI.K SIF AND KI.I SIF = I.I SIF,
ili kako je zapisano u formulaciji upita:
kp.P SIF 6= p.P SIF OR (ki.K SIF = kp.K SIF AND ki.I SIF = i.I SIF).
Zato se posle koraka 3 dobija relacija Rez3 , u kojoj su prisutne sve 16-torke
koje zadovoljavaju prvi clan disjunkcije (pisac i autor knjige nisu isti), i sve 16torke koje zadovoljavaju drugi clan disjunkcije, tj. 16-torke kod kojih su pisac i
autor knjige isti a knjiga je u izdanju navedenog izdavaca. Dakle, relacija Rez3
dobija se iz relacije Rez2 izbacivanjem samo onih vrsta koje ne zadovoljavaju ni
jedan clan disjunkcije, tj. za koje vazi: P.P SIF = KP.P SIF AND (KP.K SIF 6=
KI.K SIF OR KI.I SIF 6= I.I SIF) (pisac i autor knjige su isti, ali knjiga nije u
izdanju izdavaca iz te 16-torke); vrste koje se u koraku 3 izbacuju su:
(i1, Prosveta, . . . , p5, Date,
. . . , k4, i1, . . . , k5, p5, . . . )
(i4, Matica S., . . . , p2, Benson, . . . , k4, i1, . . . , k4, p2, . . . )
(i4, Matica S., . . . , p5, Date,
. . . , k4, i1, . . . , k5, p5, . . . )
Relacija Rez3 ima 16 atributa i dvadeset pet 16-torki.
Posle prve primene koraka 4, koja odgovara primeni egzistencijalnog kvantifikatora na n-tornu promenljivu tabele KI (EXISTS ki), dobija se relacija REZ4
analogna relaciji REZ3 , samo bez atributa relacije KI:
REZ4 I SIF
i1
i1
..
.
i4

NAZIV
Prosveta
Prosveta
..
.

...
...
...
..
.

P SIF
p2
p2
..
.

Matica s. . . . p5

IME
Benson
Benson
..
.

...
...
...
..
.

K SIF
k1
k2
..
.

Date

. . . k6

P SIF
p1
p4
..
.

...
...
...
..
.

p4

...

Ova tabela ima 11 atributa i dvadeset pet 11-torki.


Posle druge primene koraka 4, koja odgovara primeni univerzalnog kvantifikatora na n-tornu promenljivu tabele KP (FORALL kp), dobija se relacija sa 8
atributa i samo jednom osmorkom. Ona predstavlja izdavaca (Prosvetu) koji zadovoljava trazeni uslov da je izdao sve knjige inostranog pisca, zajedno sa svim takvim
piscima (u ovom slucaju samo M.Benson):

REZ40 I SIF
i1

NAZIV
Prosveta

ST
30

DRZAVA
Jugoslavija

P SIF IME
BR N DRZAVA
p2
Benson 1
Engleska

46

2 Manipulativni formalizmi relacionog modela

Posle trece primene koraka 4, koja odgovara primeni egzistencijalnog kvantifikatora na n-tornu promenljivu tabele P (EXISTS p), dobija se relacija sa 4 atributa
i jednom cetvorkom:
REZ400 I SIF NAZIV STATUS DRZAVA
i1
Prosveta 30
Jugoslavija
Najzad, posle koraka 5 dobija se relacija sa dva (izlazna) atributa i jednim ure
denim
parom, koji predstavlja i jedini par vrednosti koje zadovoljavaju pocetni
upit:
REZ5 I SIF NAZIV
i1
Prosveta
Ovo je i krajnji rezultat (vrednost) polaznog izraza relacionog racuna. Redosled
izvrsavanja odgovarajucih operacija relacione algebre rezultuje sledecim izrazom
relacione algebre, dobijenim transformacijom izraza relacionog racuna:
((((( I[ DRZAVA = Jugoslavija AND STATUS > 10]
(P[ DRZAVA 6= Jugoslavija]) (KI[ GODINA = 1979]) KP
[ KP.P SIF 6= P.P SIF OR
(KI.K SIF = KP.K SIF AND KI.I SIF = I.I SIF)]
[ I.I SIF, NAZIV, STATUS, DRZAVA, P.P SIF, IME,
BR NASLOVA, DRZAVA, KP.K SIF, KP.P SIF, R BROJ]
KP
[ I.I SIF, I.NAZIV]

)
)
)
)
)

Dokaz korektnosti algoritma svodenja


Codd bazira na svodljivosti logickih operacija AND, OR, NOT u formulama relacionog racuna na odgovarajuce skupovne
operacije projekcije i egzisoperacije , , \, kao i na analogiji koja postoji izmedu

tencijalnog kvantifikatora, odnosno izmedu operacije deljenja i univerzalnog kvantifikatora.


I relaciona algebra i relacioni racun su suvise formalni jezici za krajnjeg korisnika, pa se prirodno javlja potreba za izgradnjom jednostavnijih i prirodnijih za
upotrebu upitnih jezika baza podataka. Jedan od opisana dva formalizma (ili njihova kombinacija) koristi se kao osnov za izrazajnije upitne jezike. Za upitni jezik
zahteva se da bude relaciono kompletan, tj. da se u tom jeziku mogu izraziti bar svi

izrazi relacionog racuna. Prethodna tvrdenja


ustanovljavaju relacionu kompletnost
relacione algebre. Dok je relaciona algebra pogodna za izlaganje koncepata relacionog modela, relacioni racun pokazuje prednosti u implementaciji koncepata kroz
relacioni upitni jezik. Relacioni racun je neproceduralan i pogodniji je (od relacione
algebre) za izrazavanje slozenih upita jednim jedinstvenim izrazom. Ovo svojstvo
cini upitni jezik zasnovan na relacionom racunu pogodnijim za optimizaciju, sto je
veoma znacajno u realizaciji upitnog jezika. Naime, optimizatori postojecih SUBP

2.3 Pitanja i zadaci

47

proizvoda nisu u mogucnosti da optimizuju istovremeno veci broj izraza (tj. iskaza),
pa je njihova produktivnost veca ako se vise aktivnosti upakuje u jedan jedini
izraz. To je i razlog zbog kojeg Codd preporucuje upotrebu logickog jezika
relacionog racuna, u odnosu na algebarski jezik relacionu algebru, kao osnove
za implementaciju upitnog jezika ([19]).

2.3

Pitanja i zadaci

1. Definisati sledece pojmove:


relaciona algebra

prosirena relaciona algebra

projekcija

spoljasnja unija

restrikcija

spoljasnje slobodno spajanje

relaciona unija, presek, razlika

spoljasnje prirodno spajanje

Dekartov proizvod

relacioni racun

slobodno () spajanje

relacioni racun n-torki

prirodno spajanje

n-torna promenljiva

relaciono deljenje

relacioni racun domena

2. Kako se izraz relacionog racuna n-torki svodi na izraz relacione algebre?


Navesti primer.
3. Dokazati komutativnost i asocijativnost operacija relacione unije, preseka i
prirodnog spajanja.
4. Izraziti operacije prirodnog spajanja, relacionog preseka i deljenja pomocu operacija relacione unije, razlike, Dekartovog proizvoda, projekcije i restrikcije.
5. Navesti primere operacija relacione algebre.
6. Da li su operacije Dekartovog proizvoda i deljenja relacija inverzne? Da li
definicija operacije deljenja dopusta deljenje praznom relacijom? Objasniti.
7. Izracunati rezultat relacionog izraza PKPKII. Po kojim atributima se
izvrsava svaka od operacija spajanja?
8. Objasniti razloge zbog kojih su potrebna prosirenja relacione algebre. Navesti
primere operacija prosirene relacione algebre.
9. Kako biste u relacionom modelu sa nedostajucim vrednostima definisali
funkcionalnu zavisnost?
10. Izrazima relacione algebre, relacionog racuna n-torki i relacionog racuna domena formulisati sledece upite:

48

2 Manipulativni formalizmi relacionog modela


Naci sve informacije o piscima.
Naci sifre izdavaca koji izdaju knjigu sa sifrom k1.
4000 i 8000.
Naci sva izdanja sa tirazem izmedu
Naci parove (sifra izdavaca, sifra pisca) iz iste drzave.
Naci naslove knjiga jugoslovenskih pisaca.
Naci naslove knjiga engleskih pisaca u izdanju jugoslovenskih izdavaca.
Naci parove drzava takve da izdavac iz prve drzave izdaje knjigu pisca
iz druge drzave.
Naci sve parove sifara knjiga koje izdaje isti izdavac.
Naci sifre pisaca kojima je bar jednu knjigu izdao neki jugoslovenski
izdavac.
Naci sifre izdavaca koji nisu izdali ni jedan roman jugoslovenskog pisca.
Naci imena pisaca cije je sve knjige objavio izdavac sa sifrom i1.
Naci naslove knjiga ciji je bar jedan autor jugoslovenski drzavljanin, ili
ih je objavio jugoslovenski izdavac.
Naci nazive izdavaca koji su izdali bar sve knjige koje je izdao i izdavac
sa sifrom i3.

Deo II

Relacioni upitni jezici

Relacioni upitni jezici su prakticni rezultat formalnih istrazivanja relacionog


modela i njegovih manipulativnih formalizama. Zasnovani su na relacionoj algebri
ili relacionom racunu, ali poseduju znatno vece mogucnosti za izrazavanje opstijih
je sirokom krugu
radnji nad relacijama baze. Nacin formulacije upita prilagoden
korisnika baza podataka i, posebno, korisnicima ogranicenih znanja iz matematike
i programiranja.
Jezici za komunikaciju sa bazom podataka (upitni jezici u sirem smislu) mogu se
klasifikovati u jezike dobijene nadgradnjom programskih jezika opste namene, jezike

izgradene
po modelu relacionog racuna (n-torki ili domena), jezike zasnovane na
relacionoj algebri, i SQL-olike jezike, koji ukljucuju konstrukcije kako relacione
algebre, tako i relacionog racuna.
Najveci broj implementacija relacionih upitnih jezika 80-tih godina 20. veka
bio je zasnovan na upitnom jeziku SQL (Structured Query Language), proizvoda
istrazivacke IBM laboratorije u San Hozeu (San Jose) u Kaliforniji. Bez obzira na
izvesne nedostatke i odstupanja od principa relacionog modela, aktuelni standard
SQL upitni jezik.
relacionog upitnog jezika je takode
onima
Gotovo svi komercijalni RSUBP proizvodi podrzavaju i SQL jezik. Medu
koji su razvijani kao SQL sistemi znacajniji su, na primer, SQL/DS, DB2, MRS,
Oracle, AIM/RDB, INFORMIX.
Vecina relacionih upitnih jezika ima svoju interaktivnu i aplikativnu varijantu.
Prva omogucuje postavljanje ad hoc upita nad relacionom bazom, dok druga omogucuje ugradnju upitnog jezika u maticni programski jezik i razvoj slozenih aplikacija

nad relacionom bazom. Princip dualnosti, koji se najcesce postuje, obezbeduje


da
se sve radnje interaktivne varijante upitnog jezika mogu izraziti i u aplikativnoj (i
da obratno, naravno, ne vazi).
Deo II sastoji se od 5 glava:
Glava 3, Upitni jezik SQL, prikazuje evoluciju SQL-a i njegove mogucnosti
u definisanju podataka, manipulisanju podacima i definisanju uslova integriteta, kako u interaktivnoj tako i u aplikativnoj varijanti. Ova glava
ukljucuje i mogucnosti SQL-a u definisanju autorizacije, dodeli i oduzimanju

prava korisnicima za izvrsavanje odredenih


operacija (i posebno SQL iskaza)

nad odredenim podacima u bazi podataka (ili bazom podataka u celini).


Izlozeni su bitni aspekti autorizacije i kontrole prava korisnika kao jedne od
funkcija SUBP.
Glava 4, Pogledi, odnosi se na spoljasnji nivo ANSI arhitekture sistema baza
podataka. Pogledi se predstavljaju prvo u obliku u kome je njihovo definisanje
i manipulisanje njima podrzano SQL-om, a zatim se izlaze jedan novi pristup
pogledima koji na dosledniji nacin tretira ovaj koncept.
U glavi 5, Standardi SQL-a, izlaze se evolucija standarda SQL-a, i posebno
specificnosti aktuelnog standarda SQL2.
50

51
Glava 6, Upitni jezik QUEL, sadrzi prikaz osnovnih elemenata relacionog
upitnog jezika QUEL. Mada daleko manje prisutan od SQL-a, ovaj jezik predstavlja, po misljenju vecine strucnjaka, superiorniji upitni jezik od SQL-a po
nizu svojstava.
Najzad, glava 7, Optimizacija upita, posvecena je strategijama i tehnikama
optimizovanja izvrsavanja upita u relacionim upitnim jezicima.

Upitni jezik SQL


3.1

Istorijat

Upitni jezik SQL predstavlja zavrsnu fazu evolucije klase jezika razvijene u IBM
istrazivackoj laboratoriji u San Hozeu, Kalifornija. Ovu evoluciju upitnih jezika
karakterise odstupanje od jezika relacione algebre i priblizavanje jezicima relacionog
racuna. Svi jezici ove klase su skupovno orijentisani, u znacajnoj meri neprocedu
ralni, i omogucuju zadavanje onoga sta se zeli dobiti, bez preciznog navodenja
nacina kako ce se zeljeni rezultat dobiti.
Prvi od jezika u ovoj klasi bio je upitni jezik SQUARE (Specifying QUeries
As Relational Expressions) ([9]), implementiran u prvom potpunom prototipskom
relacionom sistemu SYSTEM R ([4]). Sam SQUARE ima mogucnosti koje ne

poznaje relaciona algebra, kao sto je poredenje


skupova inkluzijom ili imenovanje
n-torki relacije (slobodne promenljive). Jezik je relaciono kompletan i ima prepoznatljivu sintaksu za sve operacije relacione algebre. Osim toga, SQUARE ima agregatne funkcije COUNT, AVG, MIN, MAX i SUM kojima se skup vrednosti nekog
atributa relacije preslikava u numericku vrednost ili vrednost iz odgovarajuceg domena. Tako, u jeziku SQUARE, zapis
A1 ,...,An RB1 ,...,Bm (1 b1 , . . . , m bm )

oznacava projekciju na atribute A1 , . . . , An restrikcije relacije R po logickom izrazu


B1 1 b1 AND . . . AND Bm m bm (A1 , . . . , An , B1 , . . . , Bm su neki od atributa
relacije R); kompozicija ovakvih operacija (u oznaci ) omogucuje realizaciju operacije spajanja, odnosno osnovnih operacija relacione algebre. Na primer, zapis
A,B,C RCC SD (=

d1 )

oznacava projekciju na atribute A, B, C rezultata prirodnog spajanja relacije R i


restrikcije relacije S po uslovu D = d1 .
S druge strane, zapis
52

3.1 Istorijat

53
(t1 )1 R1 , . . . , (tk )k Rk :

u jeziku SQUARE moze se smatrati analogonom izraza relacionog racuna n-torki i


oznacava projekciju na atribute i torki ti relacija Ri (1 i k), koje zadovoljavaju logicki uslov . Promenljive ti su slobodne promenljive, a uslov ukljucuje,
kao operande, konstante, promenljive ti , ili neke projekcije tih promenljivih. Ovaj
zapis ujedno predstavlja okvir za istovremenu obradu (u jednom upitu) veceg broja
relacija.
Neprivlacnu matematicku sintaksu jezika SQUARE trebalo je da popravi njegov
sledbenik SEQUEL (Structured English QUEry Language) ([11]). English (en
gleski) u njegovom imenu odnosi se na uvodenje
rezervisanih reci engleskog jezika
za oznacavanje uloge koju pojedini atributi relacije imaju u upitu, dok structured (struktuirani) oznacava postojanje blokova od kojih se gradi (struktuira)
upit, umetanjem jednog u drugi. Tako prvi SQUARE zapis u SEQUEL-u ima
oblik
SELECT A1 , . . . , An
FROM R
WHERE B1 1 b1 AND . . . AND Bm m bm .
Odgovarajuca sintaksa za slobodnu promenljivu t relacije R u SEQUEL-u je
SELECT ... FROM R t WHERE ... .

Operisanje vecim brojem relacija postize se navodenjem


imena tih relacija u
FROM liniji, npr.
SELECT FROM R, S.
I SEQUEL je relaciono kompletan jezik koji podrzava iste agregatne funkcije
kao i SQUARE.
Upitni jezik SEQUEL je kasnije, uz izvesne izmene (preko jezika SEQUEL/2,
implementiranog 1976. [12], i de facto podrzanog u poslednjoj verziji System R),
i iz pretezno pravnih razloga, preimenovan u SQL (Structured Query Language).
Pod tim imenom je doziveo niz verzija i standarda.
Do 1986. godine nije bilo standarda upitnog jezika baza podataka, ni internacionalnog, ni domaceg. Prvi takav standard objavila je komisija X3H2 za baze
podataka Americkog instituta za standarde. Bio je to ANSI SQL/86, koji se pojavio kao reakcija na postojece stanje na trzistu (reakcioni standard, [43]), i
koji je sadrzavao zajednicke komponente raznih realizovanih verzija SQL jezika.
Ovaj standard bio je pracen i odgovarajucim ISO standardom. Standard SQL/86

obezbedivao
je samo tabelarni model podataka, nezavisan od jezika, definiciju
(engl. interface) ka slogovno orijentisanim
sheme, poglede i kursore za sumede
programskim jezicima.
Standard SQL-a koji je objavljen 1989, SQL/89, bio je siroko prihvacen na

trzistu. On je funkcionalno kompletniji od SQL/86, obezbeduje


referencijalni integritet i ugnjezdenje SQL-a u programske jezike Ada, C, COBOL, FORTRAN,
Pascal i PL/I.

54

3 Upitni jezik SQL

Aktuelni standard SQL jezika je SQL/92 (SQL2, SQL-92) ili, pod punim

nazivom, Medunarodni
standardni jezik baza podataka (1992) (International
Standard Database Language SQL (1992), [39]). SQL2 je anticipatorni standard,

sto oznacava njegovu pretenziju da vodi i usmerava trziste. Ukljucuje, izmedu


ostalih, i sledeca svojstva:
jezik za definisanje podataka
dinamicki SQL kroz PREPARE i EXECUTE iskaze ([24])
spoljasnje spajanje
kaskadno azuriranje i brisanje
privremene tabele
skupovne operacije unije, preseka i razlike
definiciju domena u shemi

nove ugradene
tipove podataka
nivoe konzistentnosti transakcija
odlozenu proveru uslova integriteta
SQL dijagnostiku, itd.
SQL2 standardu posvecena je glava 5.
Za 1995. godinu planirano je bilo objavljivanje novog standarda SQL-a, SQL3,
kompatibilnog sa SQL2, ali obogacenog objektnim aspektom podataka (o objektnom modelu podataka bice reci u Dodatku), izracunljivo kompletnog (sa kontrolnim strukturama, bez potrebe ugnjezdenja u programske jezike opste namene). O
statusu pojedinih komponenti SQL3 standarda v. glavu 5.
U preostalom delu ove glave bice detaljno opisana sintaksa i semantika SQL-a.
Radi konkretizacije jezika i mogucnosti programiranja na njemu (bilo interaktivnog
ili aplikativnog), izlaganje ce se odnositi na jednu implementaciju SQL-a, za RSUBP
DB2 UDB (Universal Data Base) Verzija 5.2 (pod operativnim sistemima Windows
95, Windows NT, OS/2). Bez obzira na to, najveci deo razmatranja odnosi se na
SQL uopste, nezavisno od implementacije.

3.2

Definisanje podataka

Osnovni iskazi definisanja podataka u SQL-u su iskazi za kreiranje i iskazi za uklanjanje baznih tabela, indeksa i pogleda, kao i iskazi za izmenu strukture baznih
tabela i pogleda. Pored ovih objekata, novije verzije SQL-a (ukljucujuci i standard
SQL2, v. 5.1), podrzavaju koncept sheme, razlicit od koncepta relacijske sheme
kako je definisana relacionim modelom v. 1.2, a slican konceptu sheme relacione
baze podataka, kao i iskaze za definisanje, izmenu i uklanjanje sheme.

3.2 Definisanje podataka

55

Mogucnost izvrsenja ovih iskaza u bilo kom trenutku, a ne samo na pocetku


razvoja aplikacije, cini SQL sisteme vrlo fleksibilnim; proces projektovanja baze
potrebe da celokupni posao logickog i fizickog projektovanja
podataka je osloboden
odjed(definisanja tabela i pristupnih puteva kao sto su indeksi) mora biti uraden
nom i perfektno.
S obzirom na specificnost virtuelnih tabela pogleda, koje fizicki ne postoje,
vec postoji samo njihova definicija sacuvana u sistemskom katalogu (v. odeljak
7.1 Katalog), definisanju pogleda, kao i ostalim operacijama nad pogledima bice
posvecena glava 4. Zato ce u ovom odeljku biti opsirnije razmatrani samo iskazi za
definisanje shema, baznih tabela i indeksa.

3.2.1

Shema

Shema je kolekcija imenovanih objekata baze podataka, koja obezbeduje


logicku
klasifikaciju tih objekata. Neki od objekata baze podataka koje shema moze da
sadrzi jesu tabele, pogledi, trigeri, paketi, itd.
I sama shema se moze posmatrati kao objekat baze podataka. Shema se kreira
izvrsavanjem CREATE SCHEMA iskaza, kojim se mogu kreirati i drugi objekti u
toj shemi i dodeliti korisnicima prava pristupa tim objektima (v. 3.6). Iskaz za
kreiranje sheme ima sledeci oblik:

[
[
[
[

CREATE SCHEMA ime-sheme [ AUTHORIZATION ime-vlasnika-sheme]


CREATE TABLE iskaz {, CREATE TABLE iskaz }]|
CREATE VIEW iskaz {, CREATE VIEW iskaz }] |
CREATE INDEX iskaz {, CREATE INDEX iskaz}] |
GRANT iskaz {, GRANT iskaz } ]

Ako se AUTHORIZATION opcija ne navede, podrazumevani vlasnik kreirane


sheme je korisnik koji izvrsava CREATE SCHEMA iskaz.
Pri kreiranju nekog objekta izvan CREATE SCHEMA iskaza, ime objekta se
moze kvalifikovati imenom sheme. Tada objekat ima dvodelno ime, pri cemu je
prvi deo imena ime sheme kojoj se objekat dodeljuje. Ako se ime sheme ne
navede, objekat se dodeljuje podrazumevanoj (engl. default) shemi cije je ime
identifikacija korisnika koji izvrsava iskaz kreiranja objekta. Slicno, ako se pri

navodenju
objekta (npr. u SELECT iskazu) izostavi ime sheme, podrazumeva
se shema imenovana imenom korisnika koji taj iskaz zadaje. Ovo svojstvo bice
korisceno u svim primerima SQL-a.
Shema se moze i ukloniti iskazom oblika
DROP SCHEMA ime-sheme RESTRICT
pri cemu pravilo RESTRICT zabranjuje uklanjanje sheme ako ona sadrzi bilo koji
objekat baze podataka.

56

3 Upitni jezik SQL

3.2.2

Bazne tabele

Iskaz kreiranja.

Osnovni oblik iskaza za kreiranje bazne tabele je

CREATE TABLE ime-bazne-tabele


( def-kolone {, def-kolone}
[, def-prim-kljuca]
[, def-str-kljuca {, def-str-kljuca}]
[, uslov-ogranicenja {, uslov-ogranicenja})
[ drugi-parametri]
Ime bazne tabele je identifikator (maksimalne duzine 18 znakova u DB2), ciji je
prvi znak slovo a ostali znaci su slova, cifre ili podvlaka ( ). Ovako definisano ime

je nekvalifikovano, a moze se kvalifikovati navodenjem


lokacije (sheme) i vlasnika
tabele.
Definicija kolone def-kolone ima oblik:
ime-kolone tip-podataka [NOT NULL] [[WITH] DEFAULT [ vrednost]]
gde tip-podataka moze biti:1
INTEGER ili INT, 32-bitni ceo broj;
SMALLINT, 16-bitni ceo broj;
BIGINT, 64-bitni ceo borj;
DECIMAL(p,q) ili DEC(p,q), decimalni broj; p je ukupni broj cifara decimalnog broja, dok je q broj cifara razlomljenog dela (1 p 31, 0 q
p);
FLOAT(p), broj u pokretnom zarezu, jednostruke (1 p 24) ili dvostruke
(25 p 53) tacnosti;
CHARACTER(m) ili CHAR(m), niska znakova fiksne duzine m (1 m
254).
Mogu se koristiti sledece skracenice:
DECIMAL(p)
DECIMAL(p,0),
DECIMAL
DECIMAL(5),
FLOAT
FLOAT(53),
DOUBLE [PRECISION] FLOAT,
REAL
FLOAT(24),
CHAR
CHAR(1),
CHARACTER
CHAR(1).
1 Skup tipova podataka sistema DB2 je bogatiji i uklju
cuje i tipove datuma, vremena (DATE,
TIME), niski znakova promenljive du
zine (VARCHAR, LONG VARCHAR), tipove grafi
ckih niski
(GRAPHIC, VAR GRAPHIC), binarnih i znakovnih velikih objekata (BLOB, CLOB, DBCLOB),

korisni
cki definisane tipove bazirane na ugradenim
SQL tipovima ([37]).

3.2 Definisanje podataka

57

Opcija [NOT NULL] [[WITH] DEFAULT [vrednost]] odnosi se na kolonu


koja ne dozvoljava nedostajuce NULL vrednosti, tj. na mogucnost supstitucije
nedostajuce vrednosti navedenom (DEFAULT) vrednoscu iz domena (na primer,
vrednost moze biti konstanta 0 ili 1 za slucaj kolone tipa INTEGER). Ako se vrednost u opciji DEFAULT ne navede, nedostajuca vrednost se sistemski zamenjuje
podrazumevanom (DEFAULT) vrednoscu za odgovarajuci domen (na primer, belina tj. blank za tip CHAR, 0 za tip INTEGER, itd). Opcija DEFAULT moze da
se koristi i samostalno (bez NOT NULL) i to u slucaju kolone koja dopusta NULL
vrednosti; pri tome se kao podrazumevana vrednost moze navesti i NULL.
Definicije primarnog i stranog kljuca predstavljaju posebne oblike uslova ograni
cenja, pa im je i sintaksa prilagodena
opstoj sintaksi ovih uslova.
Definicija primarnog kljuca je oblika
[CONSTRAINT ime] PRIMARY KEY ( ime-kolone {, ime-kolone})
pri cemu svaka kolona cije je ime navedeno u ovoj definiciji mora biti eksplicitno
definisana kao NOT NULL.
Primarni kljuc koji se sastoji od jedne kolone moze se zadati i u samoj definiciji

te kolone, navodenjem
opcije [CONSTRAINT ime] PRIMARY KEY.
U sistemu DB2, tabela ne mora imati definisan primarni kljuc (sto predstavlja
odstupanje od principa relacionog modela), ali je veoma pozeljno da ga ima jer on

obezbeduje
jedinstvenost vrsta.
Definicija stranog kljuca je oblika
[CONSTRAINT ime] FOREIGN KEY ( kolona {, kolona})
REFERENCES odnosna-tabela
[ON DELETE efekat] [ON UPDATE efekat]
gde je odnosna-tabela bazna tabela u kojoj ovde navedene kolone cine primarni
kljuc. Tabela u kojoj je definisan strani kljuc je zavisna od odnosne tabele. Ne
zahteva se postojanje indeksa po kolonama stranog kljuca, ali je to cesto pogodno iz
razloga performansi (npr. kod operacije spajanja nad primarnim i stranim kljucem
ili kod odrzavanja referencijalnog integriteta).
Strani kljuc koji se sastoji od jedne kolone moze se zadati i u samoj definiciji te

kolone, navodenjem
kompletne definicije stranog kljuca.
Pri brisanju (DELETE) vrsta iz odnosne tabele, moze se primeniti jedno od
sledecih pravila brisanja (tj. efekat u ON DELETE opciji moze biti sledeci):
NO ACTION: omogucuje brisanje vrste u odnosnoj tabeli samo ako ne postoji vrsta u zavisnoj tabeli koja zavisi od vrste koja se brise (tj. ako ne postoji
vrsta u zavisnoj tabeli cija je vrednost stranog kljuca jednaka vrednosti primarnog kljuca vrste koja se brise). U suprotnom, sistem odbija da izvrsi
brisanje iz odnosne tabele i javlja gresku. Ovo je i podrazumevani efekat koji
se primenjuje ukoliko se nista ne navede.

58

3 Upitni jezik SQL


RESTRICT: efekat je isti kao NO ACTION, razlikuju se samo po vremenu
kada se primenjuju. Naime, u slucaju da se operacija brisanja reflektuje
na veci broj tabela sa razlicitim efektima pri brisanju, RESTRICT efekat
primenjuje se pre svih drugih efekata, a NO ACTION posle svih drugih
efekata. Zato u nekim (retkim) situacijama ovi efekti mogu da dovedu do
razlicitih rezultata. 2
SET NULL: omogucuje brisanje vrste u odnosnoj tabeli i postavljanje NULL
vrednosti u kolone stranog kljuca zavisne tabele koje to dopustaju (nisu NOT
NULL); NULL vrednosti se postavljaju u vrste zavisne tabele koje zavise
(u smislu opisanom uz prethodni efekat) od vrste koja se brise. Aktivnost
postavljanja NULL vrednosti ogranicena je na neposredno zavisne tabele (ne
prenosi se dalje). Efekat SET NULL se ne moze primeniti ako je neka od
kolona stranog kljuca NOT NULL kolona.
CASCADE: omogucuje brisanje naznacene vrste odnosne tabele i brisanje
svih zavisnih vrsta zavisne tabele, uz postovanje pravila brisanja njihovih
zavisnih tabela.

Pri azuriranju (UPDATE) vrsta odnosne tabele, i to na kolonama koje ulaze


u primarni kljuc, dopusteno pravilo je samo NO ACTION (podrazumevano) ili
RESTRICT. To znaci da se vrednost primarnog kljuca p1 odnosne tabele moze
zameniti drugom vrednoscu samo ako u zavisnoj tabeli ni jedna vrsta nema na
odgovarajucem stranom kljucu vrednost p1 .
Uslov ogranicenja je logicki izraz ciji su argumenti kolone tabele, konstante i
izrazi nad njima, i predstavlja ogranicenje nad podacima koji se unose u tabelu.
Sintaksa opcije zadavanja uslova ogranicenja je
CONSTRAINT ime CHECK ( uslov)
Uslov ogranicenja koji se odnosi samo na jednu kolonu tabele moze se zadati i
u definiciji te kolone, istom sintaksom.
Provera uslova ogranicenja kao i referencijalnog integriteta moze biti, posebnim
iskazom (SET CONSTRAINT), odlozena (deaktivirana) i aktivirana. Deaktiviranje provere uslova ogranicenja posebno je korisno kod masovnog unosa podataka
u bazu.
2 Na primer, neka tabela T3 ima dva strana klju
ca koji se odnose na tabele T1 i T2, i neka
je pravilo pri brisanju za tabelu T2 CASCADE. Neka je, dalje, definisan pogled (v. glavu 4
Pogledi) V1 slede
cim iskazom:
CREATE VIEW V1 AS SELECT * FROM T1 UNION ALL SELECT * FROM T2
Tada se rezultat izvrsavanja iskaza
DELETE FROM V1
razlikuje u slu
cajevima kada je pravilo pri brisanju iz tabele T1 RESTRICT odnosno NO ACTION.

3.2 Definisanje podataka

59

Ostali elementi iskaza za kreiranje tabele, drugi-parametri, odnose se na elemente fizicke reprezentacije bazne tabele (u sistemu DB2 takvi elementi su prostor
tabela u koji se tabela smesta i njegove karakteristike, prostor tabela u koji ce se
smestiti svaki buduci indeks nad tabelom, kao i prostor tabela u koji se smestaju
veliki objekti, itd; v. tacku 18.1.5 Fizicka reprezentacija podataka u sistemu
DB2).
Primer 3.1 Kreirati tabele K, I, KI sa strukturom opisanom u odeljku 1.2.
CREATE TABLE K
(K SIF
CHAR (5)
NOT NULL,
NASLOV
CHAR (50) NOT NULL WITH DEFAULT,
OBLAST
CHAR (20),
PRIMARY KEY
(K SIF))
CREATE TABLE I
(I SIF
CHAR (6)
NOT NULL,
NAZIV
CHAR (20) NOT NULL WITH DEFAULT,
STATUS
SMALLINT,
DRZAVA
CHAR (20) NOT NULL WITH DEFAULT,
PRIMARY KEY
(I SIF))
CREATE TABLE
KI
(K SIF
CHAR(5)
NOT NULL,
I SIF
CHAR(6)
NOT NULL,
IZDANJE
SMALLINT
NOT NULL,
GODINA
SMALLINT,
TIRAZ
INTEGER,
PRIMARY KEY
(K SIF, I SIF, IZDANJE),
FOREIGN KEY KSK (K SIF) REFERENCES K ON DELETE RESTRICT
ON UPDATE RESTRICT,
FOREIGN KEY ISK (I SIF) REFERENCES I ON DELETE CASCADE)
Efekat ovih iskaza je kreiranje novih, praznih baznih tabela koje se zovu xyz.K,
xyz.I, xyz.KI, redom; xyz je ime sheme u kojoj su kreirane ove tabele, ili ime
po kome je sistemu poznat korisnik koji zadaje CREATE TABLE iskaz. U okviru
sheme xyz (tj. korisnik xyz) moze se obracati ovim tabelama kvalifikovanim imenom
xyz.K (xyz.I, xyz.KI) ili nekvalifikovanim imenom K (I, KI), dok se iz ostalih shema
(tj. od strane ostalih korisnika) mora upotrebiti kvalifikovano ime.
Pokusaj da se brise vrsta u tabeli K sa vrednoscu k u koloni K SIF bice uspesan
samo kada u tabeli KI ne postoji vrsta sa istom vrednoscu k u koloni K SIF, jer
strani kljuc K SIF u tabeli KI ima pravilo brisanja DELETE RESTRICT. Slicno,
pokusaj da se vrednost k u koloni K SIF neke vrste promeni bice uspesan samo
ako u tabeli KI ne postoji vrsta sa vrednoscu k u koloni K SIF (ON UPDATE
RESTRICT).
Brisanje vrste u tabeli I sa vrednoscu i atributa I SIF proizvodi brisanje svih
vrsta u tabeli KI sa vrednoscu i kolone I SIF, jer strani kljuc I SIF u tabeli KI

60

3 Upitni jezik SQL

ima pravilo brisanja DELETE CASCADE. Ovde se brisanje zavrsava jer nema
vise zavisnih tabela (tj. vrsta). Ako bi postojala tabela zavisna od tabele KI, tj.
od njene kolone I SIF, i na nju bi se primenilo pravilo brisanja definisano za njen
do zavisne
strani kljuc. Ovakvo kaskadno brisanje se zavrsava i u slucaju da se dode
tabele za koju je definisan strani kljuc sa pravilom brisanja DELETE SET NULL.
Za promenu vrednosti vrste tabele I na koloni I SIF vazi isto sto i za tabelu K i
kolonu K SIF (podrazumevano pravilo azuriranja NO ACTION ima isto dejstvo
kao i RESTRICT).
Iskaz izmene.
Postojeca bazna tabela moze se u svako doba promeniti dodavanjem novih kolona, dodavanjem ili uklanjanjem primarnog, stranog kljuca, ili
uslova ogranicenja u opstem slucaju, ili promenom fizickih parametara tabele. Iskaz
promene bazne tabele ima oblik
ALTER TABLE bazna-tabela
ADD ime-kolone tip-podataka [NOT NULL [WITH] DEFAULT [ vrednost]]
| ADD def-prim-kljuca
| ADD def-str-kljuca
| ADD uslov-ogranicenja
| DROP def-prim-kljuca
| DROP def-str-kljuca
| DROP uslov-ogranicenja
| drugi parametri
pri cemu svi uvedeni identifikatori (npr. vrednost, def-prim-kljuca, itd.), imaju isto
znacenje kao i u CREATE TABLE iskazu. Posebno, za novu dodatu kolonu vaze
iste mogucnosti kao i za definisanu kolonu u CREATE TABLE iskazu. Na primer,
ALTER TABLE KI
ADD CENA INTEGER
Ovaj iskaz dodaje kolonu CENA tabeli KI. Sve postojece vrste tabele KI
prosiruju se sestom kolonom koja uzima vrednost NULL (ili 0 u slucaju opcije
NOT NULL WITH DEFAULT). Opcija NOT NULL (bez kvalifikacije WITH DEFAULT) u ALTER iskazu nije dozvoljena.
Primarni kljuc se moze dodati ako tabela vec nema definisan primarni kljuc i
ako sve kolone koje se ukljucuju u primarni kljuc imaju svojstvo NOT NULL.
Pri uklanjanju primarnog kljuca (DROP PRIMARY KEY) definicije stranih
kljuceva koje su se prethodno odnosile na uklonjeni primarni kljuc ukidaju se automatski.
Iskazom ALTER TABLE ne moze se menjati tip podataka postojecih kolona
(osim duzine VARCHAR kolone), niti se mogu uklanjati postojece kolone.
Ako jedan ALTER TABLE iskaz sadrzi vise radnji dodavanja, uklanjanja
(kolona, primarnog, stranog kljuca, itd.) ili promene tabele, prvo se izvrsava radnja
dodavanja kolona, a ostale radnje se izvrsavaju u redosledu kojim su navedene.

3.2 Definisanje podataka


Iskaz uklanjanja.

61

Postojeca bazna tabela moze se ukloniti SQL iskazom

DROP TABLE bazna-tabela


Izvrsavanjem ovog iskaza, opis te bazne tabele uklanja se iz kataloga, a svi
indeksi, pogledi, uslovi ogranicenja ukljucujuci primarni i strane kljuceve, definisani
nad tom baznom tabelom, kao i sve definicije stranih kljuceva koje se odnose na tu
tabelu automatski se uklanjaju. Pri tome se pravila brisanja za strane kljuceve
ne primenjuju (npr. uklanjanje tabele I ne proizvodi brisanje vrsta iz tabele KI).
DROP iskaz moze se primentiti i na druge objekte indekse, poglede, prostore
tabela, uslove ogranicenja, itd.

3.2.3

Indeksi

Indeks se moze posmatrati kao uredeni


skup pokazivaca na vrste bazne tabele, fizicki
odvojen od podataka u tabeli. Svaki indeks baziran je na vrednostima podataka
jedne ili vise kolona tabele.
Indeks je veoma koristan mehanizam koji ubrzava pristup vrstama tabele. Kao
sto je u pronalazenju nekog pojma u knjizi koristan indeks, koji eliminise potrebu
za prelistavanjem knjige stranu po stranu, tako je i u pretrazivanju vrsta tabele po
nekom uslovu mnogo efikasnije koristiti indeks po koloni koja ucestvuje u uslovu,
nego pretrazivati tabelu sekvencijalno, vrstu po vrstu. Tako, na primer, ako nad
tabelom K postoji indeks po koloni OBLAST, pristup knjigama po uslovu da je
knjiga roman, mnogo je brzi nego ako takav indeks ne postoji.
Izvrsavanjem iskaza za kreiranje indeksa, RSUBP gradi odgovarajucu strukturu
podataka i odrzava je automatski. O nacinu organizovanja, izgradnje i koriscenja
indeksa kao metode pristupa vrstama tabele, bice opsirno reci u glavi 12. U ovoj
tacki bice naveden samo nacin na koji SQL podrzava rad sa indeksima.
Iskaz kreiranja.
Nad indeksima se mogu izvrsavati samo SQL iskazi za definisanje, tj. iskazi za kreiranje i uklanjanje indeksa.
Iskaz kreiranja indeksa je oblika
CREATE [UNIQUE] INDEX ime-indeksa ON bazna-tabela
( ime-kolone [redosled] {, ime-kolone [redosled]})
[ drugi-parametri]
Opcija UNIQUE precizira da dve razne vrste u baznoj tabeli nad kojom se kreira
indeks ne mogu uzeti istovremeno istu vrednost na indeksnoj koloni ili njihovoj
kombinaciji. Redosled uz svaku kolonu komponentu indeksa je ili ASC (rastuci)
ili DESC (opadajuci); ASC se podrazumeva ako se redosled ne navede. Nizanje
kolona sleva na desno odgovara glavnom-ka-sporednom redosledu kolona, pri cemu

su vrste indeksa uredene


po zadatom redosledu (ASC, DESC) vrednosti navedenih
kolona. Uz izvesna ogranicenja, nad svakom kolonom se moze izgraditi indeks (npr.
DB2 sistem ne podrzava indekse nad kolonama dugackih LONG tipova kao

62

3 Upitni jezik SQL

sto su dugacki niskovni ili graficki tip promenljive duzine, veliki binarni objekti
itd).
Drugi-parametri odnose se na fizicke karakteristike indeksa, npr. prostor tabela
u koji se smesta indeks, ili da li je indeks grupisuci ili negrupisuci (v. odeljak 12).
Jedna od komponenti RSUBP-a, upravljac podacima (engl. data manager),
automatski odrzava jednom kreirani indeks, tako da on odslikava azuriranja bazne
tabele, sve dok se indeks ne ukloni.
U iskazu
CREATE INDEX XKIC ON KI (CENA)
opcija UNIQUE se ne navodi jer veci broj izdanja moze imati istu cenu.
Iskaz uklanjanja.

Iskaz za uklanjanje indeksa ima oblik

DROP INDEX ime-indeksa


Izvrsavanjem ovog iskaza opis indeksa se uklanja iz kataloga. U sistemu DB2,
svaki pristupni paket (v. refsec:klijserv) koji koristi takav indeks oznacava se

nevazecim i izgraduje
se ponovo pre sledeceg izvrsenja.

3.2.4

Pogledi

Pogledi su virtuelne tabele koje nisu predstavljene fizickim podacima, vec je njihova
definicija (u terminima drugih tabela) zapamcena u katalogu.
Iskaz za kreiranje pogleda u SQL-u je oblika:
CREATE VIEW ime-pogleda [( kolona {, kolona})]
AS puni upitni blok
[WITH CHECK OPTION]
Puni upitni blok pripada manipulativnom delu SQL-a (v. tacku 3.3.9), i zato
ce pogledi biti prikazani detaljnije u posebnoj glavi o pogledima. CHECK opcija se
odnosi na primenu ogranicenja navedenih u logickom izrazu WHERE linije upitnog
bloka, pri unosenju i izmeni podataka u pogledu. Na primer,
CREATE
AS SELECT
FROM
WHERE

VIEW JUGIZD
I SIF, NAZIV
I
DRZAVA=Jugoslavija

Kada se izvrsi ovaj CREATE iskaz, podupit SELECT-FROM-WHERE se ne


izvrsava, vec se samo definicija upita sacuva u katalogu.
Pogled JUGIZD je prozor, i to dinamicki, na tabelu I. Izmene nad pogledom JUGIZD automatski se izvrsavaju nad tabelom I, a izmene nad tabelom I

3.3 Manipulisanje podacima

63

automatski se odrazavaju (vide) na pogled JUGIZD (ako zadovoljavaju uslove


koji definisu taj pogled).
Korisnik moze ali i ne mora biti svestan da pogled nije bazna tabela, jer se nad
pogledom mogu postavljati upiti (gotovo svi) kao i nad baznom tabelom.
Iskaz za uklanjanje pogleda ima oblik
DROP VIEW ime-pogleda
Na primer
DROP VIEW JUGIZD
Definiciju pogleda nije moguce menjati.3

3.3

Manipulisanje podacima

SQL podrzava cetiri manipulativna iskaza:


SELECT pretrazivanje
INSERT umetanje
UPDATE azuriranje
DELETE brisanje
U ovom odeljku bice, navedenim redosledom, postupno izlozena sintaksa i semantika ovih iskaza.

3.3.1

Pretra
zivanje

Osnovni oblik iskaza pretrazivanja u SQL-u sastoji se od tzv. jednostavnog upitnog


bloka oblika 4
SELECT lista-kolona
FROM
ime-tabele
WHERE logicki-izraz
Lista-kolona je spisak kolona iz tabele ime-tabele. Logicki-izraz ukljucuje pore
denja
atributa, konstanti i izraza (odgovarajuceg tipa) u kojima atributi i konstante
ucestvuju, kao i ispitivanje pripadnosti vrednosti takvih izraza zadatom skupu.
Pripadne relacijske operacije su =, <>, <, <=, >, >=, IN, BETWEEN, LIKE, IS
3 SQL sistema DB2 ima iskaz ALTER VIEW ali se on odnosi samo na jednu specifi
cnu karakteristiku postoje
cih kolona pogleda.
4 Upitni blok ovog oblika osnovna je komponenta i ostalih manipulativnih iskaza; isto va
zi i za
tzv. puni upitni blok (v. 3.3.9.

64

3 Upitni jezik SQL

NULL (NOT IN, NOT BETWEEN, NOT LIKE, IS NOT NULL); od kvantifikatora
dopusten je egzistencijalni kvantifikator. Moguca struktura logickog izraza bice
prikazana primerima koji slede. Svi primeri odnose se na tabele izdavacke baze
podataka opisane u odeljku 1.2 (o strukturnom delu relacionog modela).
Rezultat operacije koju definise SELECT upitni blok je tabela koja je izvedena

iz tabele navedene u FROM liniji, pri cemu su njene kolone odredene


listom kolona
a vrste tacnoscu logickog izraza: samo one vrste tabele iz FROM linije za koje
logicki izraz ima vrednost tacno pojavljuju se u rezultujucoj tabeli.
Primer 3.2 Naci sifre i statuse izdavaca iz Amerike.
SELECT I SIF, STATUS
FROM
I
WHERE DRZAVA=Amerika

Rezultat:
I SIF STATUS
i2
20

Imena kolona mogu se (a nekad i moraju, kao sto ce biti pokazano) kvalifikovati
imenima tabela iz kojih poticu, pa se prethodni primer ekvivalentno zapisuje kao
SELECT I.I SIF, I.STATUS
FROM
I
WHERE I.DRZAVA=Amerika
SELECT iskaz ima mnogo opstiju strukturu i izrazajne mogucnosti. One ce

u sledecim tackama biti uvodene


redom, od svojstava jednostavnog upitnog bloka
(tacke 3.3.2 do 3.3.8), preko punog upitnog bloka (tacka 3.3.9) do opste strukture
SELECT iskaza (3.3.10).

3.3.2

Jednorelacioni upiti

Dve osnovne klase jednorelacionih upita (upita nad jednom tabelom) jesu upiti nekvalifikovanog pretrazivanja, u kojima nema WHERE linije, pa se sve vrste tabele
kandiduju za rezultat, i upiti kvalifikovanog pretrazivanja, koji sadrze WHERE
liniju i kriterijum odabira vrsta.
Primer 3.3 (zadr
zavanje duplikata)
Naci sifre svih izdatih knjiga.
SELECT K SIF
FROM KI
ili, ekvivalentno:
SELECT ALL K SIF
FROM KI

Rezultat:
K SIF
k1
k2
k3
k4
k5
k6
k6

3.3 Manipulisanje podacima

65

Rezultat izvrsavanja ovog upita sadrzi i duplikate (pa relacija rezultat nije skup,
suprotno definiciji relacije u relacionom modelu).
Primer 3.4 (eliminacija duplikata)
Rezultat:
K SIF
k1
k2
k3
k4
k5
k6

Naci sve razlicite sifre izdatih knjiga.


SELECT DISTINCT K SIF
FROM KI

Relacija rezultat izvrsavanja ovog upita jeste skup.


Primer 3.5 (pretra
zivanje cele tabele)
Naci sve podatke o svim izdavacima.
SELECT *
FROM
I

(ekvivalentno sa

SELECT I SIF, NAZIV, STATUS, DRZAVA


FROM
I)

Rezultat izvrsavanja upita je kopija cele tabele I.


Primer 3.6 (skalarni izrazi u SELECT liniji)
Za svaku izdatu knjigu, naci sifru izdavaca, sifru knjige, izdanje i tiraz izdanja
u hiljadama primeraka (tiraz knjige u tabeli KI je u primercima).
SELECT K SIF, I SIF, IZDANJE, Tiraz u hiljadama=, TIRAZ/1000
FROM
KI
Rezultat:
K SIF
k1
k2
k3
k4
k5
k6
k6

I SIF
i1
i1
i1
i1
i2
i3
i4

IZDANJE
2
2
1
2
4
1
3

4
Tiraz
Tiraz
Tiraz
Tiraz
Tiraz
Tiraz
Tiraz

u
u
u
u
u
u
u

hiljadama=
hiljadama=
hiljadama=
hiljadama=
hiljadama=
hiljadama=
hiljadama=

5
10
7
10
10
5
3
5

Oznake 4 i 5 umesto (nepostojecih) imena kolona uvodi sam sistem, kao


redne brojeve neimenovanih kolona u relaciji rezultatu. Sistem DB2 (kao i standard
SQL2) omogucuje imenovanje kolona nastalih od izraza, pa se prethodni iskaz moze
zapisati i na sledeci nacin:

66

3 Upitni jezik SQL

SELECT K SIF, I SIF, IZDANJE, Tiraz u hiljadama= AS KOMENTAR,


TIRAZ/1000 AS TIRHILJ
FROM
KI

Cetvrta
i peta kolona rezultujuce tabele sada ce imati naziv KOMENTAR,
TIRHILJ, redom.
Kao sto nekvalifikovani oblik SELECT iskaza omogucuje izbor kolona navedene

tabele, navodenje
logickog izraza u WHERE liniji tog iskaza omogucuje i izbor
samo onih vrsta za koje je vrednost tog izraza tacno. Sve opcije navedene uz
nekvalifikovano pretrazivanje u prethodnim primerima odnose se i na kvalifikovano
pretrazivanje. Osim toga, WHERE linija ovih upita moze da ukljuci i specificne
operacije, pa se razlikuju sledece podklase upita kvalifikovanog pretrazivanja.

Primer 3.7 (poredenja


i logi
cke operacije u logi
ckom izrazu)
Naci sifre izdavaca iz Jugoslavije sa statusom vecim od 20.
SELECT I SIF
FROM I
WHERE DRZAVA=Jugoslavija AND STATUS>20

Rezultat:
I SIF
i1
i4

Umesto uobicajenih operacija poredenja,


u logickom izrazu moze se pojaviti i
neka od specificnih relacijskih operacija: IN, BETWEEN, LIKE, IS NULL (NOT
IN, NOT BETWEEN, NOT LIKE, IS NOT NULL).
Primer 3.8 (BETWEEN)
Naci sifre izdavaca ciji je status u intervalu od 15 do 30, kao i njihove statuse.
SELECT I SIF, STATUS
FROM I
WHERE STATUS BETWEEN 15 AND 30

Rezultat:
I SIF STATUS
i1
30
i2
20
i4
30

Kao i BETWEEN, relacijska operacija IN (tj. NOT IN) je skraceni zapis za

disjunkciju (OR) niza poredenja


na jednakost (odnosno konjunkciju AND niza

poredenja na razlicitost).
Primer 3.9 (IN)
Naci sifre izdavaca ciji je status 20 ili 30, kao i njihove statuse.
SELECT I SIF, STATUS
FROM
I
WHERE STATUS IN (20, 30)

3.3 Manipulisanje podacima

67

Za dati sadrzaj tabele I (odeljak 1.2) ovaj upit ima isti rezultat kao i upit iz
prethodnog primera.
Relacijska operacija LIKE (odnosno NOT LIKE) omogucuje izbor vrednosti iz
date kolone (obavezno tipa CHAR(n)) na osnovu slicnosti (odnosno razlicitosti) sa
navedenim obrascem istog tipa.
Primer 3.10 (LIKE)
Naci sifre izdavaca iz drzava koje u imenu imaju bar jedno u, kao i te drzave.
SELECT I SIF, DRZAVA
FROM I
WHERE DRZAVA LIKE %u%

Rezultat:
I SIF DRZAVA
i1
Jugoslavija
i3
Jugoslavija
i4
Jugoslavija

Relacijska operacija IS NULL (odnosno IS NOT NULL) omogucuje testiranje


nedostajuce (NULL) vrednosti zadatog atributa.
Primer 3.11 (IS NULL)
Naci sve sifre izdavaca i izdanja knjige sa sifrom k1 ciji je tiraz poznat u bazi
(nema nedostajucu vrednost).
SELECT I SIF, IZDANJE
FROM KI
WHERE K SIF = k1 AND
TIRAZ IS NOT NULL

Rezultat:
I SIF IZDANJE
i1
2

68

3.3.3

3 Upitni jezik SQL

Upiti spajanja

Spajanje tabela predstavlja mogucnost istovremenog pretrazivanja podataka iz vise

tabela, i moze se izvesti po jednoj od operacija poredenja


(=, <, <=, >, >=, <>)
nad uporedivim kolonama dve tabele. Ova operacija ucestvuje u izgradnji logickog
izraza u WHERE liniji, a sve tabele koje ucestvuju u spajanju navode se u FROM
liniji. U slucaju istih imena kolona u dve tabele, njihova pojavljivanja moraju

biti kvalifikovana navodenjem


imena tabela iz kojih poticu. Izdvaja se nekoliko
karakteristicnih tipova upita spajanja:
Primer 3.12 (spajanje dve tabele)
Naci sve informacije o izdavacima i piscima iz iste drzave.
SELECT *
( ekvivalentno sa:
FROM
I, P
WHERE I.DRZAVA = P.DRZAVA

SELECT I.*, P.*


FROM
I, P
WHERE I.DRZAVA = P.DRZAVA

Rezultat:
I SIF NAZIV
ST. DRZ.
P SIF IME
c
i1
Prosveta
30
Jugosl. p1
B.Copi

i1
Prosveta
30
Jugosl. p3
B.Simsic
i1
Prosveta
30
Jugosl. p4
D.Maksimovic
i2
Add.Wesley 20
Amer.
p5
C.J.Date
c
i3
D.novine
10
Jugosl. p1
B.Copi
sic
i3
D.novine
10
Jugosl. p3
B.Sim
i3
D.novine
10
Jugosl. p4
D.Maksimovic
c
i4
M.srpska
30
Jugosl. p1
B.Copi

i4
M.srpska
30
Jugosl. p3
B.Simsic
i4
M.srpska
30
Jugosl. p4
D.Maksimovic
(skracenja oznaka vrednosti su iz prostornih razloga)

BR N.
2
1
2
1
2
1
2
2
1
2

DRZ.
Jugosl.
Jugosl.
Jugosl.
Amer.
Jugosl.
Jugosl.
Jugosl.
Jugosl.
Jugosl.
Jugosl.

Primer 3.13 Naci sve parove sifara izdavaca/pisca iz iste drzave, pri cemu je status izdavaca veci od 20.
Rezultat:
I SIF P SIF
i1
p1
SELECT I.I SIF, P.P SIF
i1
p3
FROM I, P
i1
p4
WHERE I.DRZAVA = P.DRZAVA
i4
p1
AND I.STATUS > 20
i4
p3
i4
p4

3.3 Manipulisanje podacima

69

Najznacajniji oblik spajanja je prirodno spajanje koje predstavlja spajanje po


relacijskoj operaciji =, ali sa izostavljanjem jedne od dve identicne kolone. U SQL
u to se postize eksplicitnim navodenjem
svih kolona tabela koje se spajaju, osim
po jedne iz svakog para identicnih kolona dobijenih pri spajanju.
Primer 3.14 (prirodno spajanje)
Naci sve informacije o izdavacima i piscima iz iste drzave, pri cemu se drzava
pojavljuje samo kao jedna kolona.
SELECT I SIF, NAZIV, STATUS, I.DRZAVA, P SIF, IME, BR NASLOVA
FROM
I, P
WHERE I.DRZAVA = P.DRZAVA
Rezultat izvrsavanja upita je isti kao u primeru 3.12, samo bez druge kolone
DRZAVA.
Primer 3.15 (spajanje n (n > 2) tabela)
Naci sve parove drzava takve da izdavac iz prve drzave izdaje knjigu pisca iz
druge drzave.
SELECT DISTINCT I.DRZAVA AS IDRZAVA, P.DRZAVA AS PDRZAVA
FROM
I, KI, KP, P
WHERE I.I SIF = KI.I SIF AND KI.K SIF = KP.K SIF
AND KP.P SIF = P.P SIF
Rezultat:
IDRZAVA
Jugoslavija
Jugoslavija
Amerika

PDRZAVA
Jugoslavija
Engleska
Amerika

Primer 3.16 (spajanje tabele sa samom sobom)


Naci sve parove sifara izdavaca iz iste drzave.
Upit se moze razmatrati po analogiji sa primerom 3.12, tj. sa upitom naci sve
parove sifara izdavaca/pisca iz iste drzave, koji se izrazava SELECT iskazom
SELECT I.I SIF, P.P SIF
FROM
I, P
WHERE I.DRZAVA = P.DRZAVA
U novom upitu se, koncepcijski, i umesto tabele P pojavljuje (jos jednom) tabela
I (slicno, I SIF umesto P SIF), pa je problem koji se javlja nejednoznacnost imena
I u logickom izrazu WHERE linije. Koncepcijsko resenje sastoji se u sledecem:
treba posmatrati dve identicne kopije tabele I (RSUBP, npr. DB2 ih, naravno, ne
realizuje fizicki), prvu i drugu. Sada se posmatraju svi parovi vrsta iz prve

70

3 Upitni jezik SQL

i druge kopije i odabiraju oni parovi sa jednakom drzavom. Ove kopije potrebno
je razlicito imenovati (sto je omoguceno tzv. korelacionim imenom tabele u sintaksi
FROM linije), pri cemu se upit svodi na upit analogan prethodnom:5

SELECT PRVI.I SIF, DRUGI.I SIF


FROM I PRVI, I DRUGI
WHERE PRVI.DRZAVA = DRUGI.DRZAVA

Rezultat:
I SIF I SIF
i1
i1
i1
i3
i1
i4
i2
i2
i3
i1
i3
i3
i3
i4
i4
i1
i4
i3
i4
i4

Upotrebljeni oblik FROM linije identifikuje ime PRVI sa tabelom I, kao i ime
DRUGI sa istom tabelom. Nasuprot ovom koncepcijskom resenju, u realizaciji
ovakvog upita nije neophodno imati dve kopije iste tabele. Dovoljno je obezbediti
mehanizam za obracanje dvema vrstama tabele I istovremeno. Taj mehanizam su
dve n-torne promenljive (PRVI, DRUGI, u ovom slucaju), od kojih svaka, kao skup
mogucih vrednosti, ima skup vrsta tabele I, tj. u svakom trenutku izvrsavanja upita
ima kao svoju vrednost jednu vrstu te tabele (nezavisnu od vrednosti druge n-torne
promenljive).
Posto u prethodnom rezultatu ima suvisnih parova (npr. (i1, i1) kao i jedan od
parova (i1, i3), (i3, i1)), upit se moze dopuniti uslovom PRVI.I SIF < DRUGI.I SIF,
tj.
Rezultat:
SELECT PRVI.I SIF, DRUGI.I SIF
I SIF I SIF
FROM I PRVI, I DRUGI
i1
i3
WHERE PRVI.DRZAVA = DRUGI.DRZAVA AND
i1
i4
PRVI.I SIF < DRUGI.I SIF
i3
i4
Dopusteno je upotrebiti n-torne promenljive (korelaciono ime tabele) i u kontekstu u kome nisu neophodne. Njihova dosledna upotreba smatra se odrazom dobrog

stila. Stavi
se, kadgod n-torna promenljiva nije eksplicitno dodeljena tabeli, SQL
uvodi implicitnu n-tornu promenljivu sa istim imenom kao i ime tabele.

3.3.4

Podupiti

Cinjenica
da je rezultat izvrsavanja upitnog bloka nad tabelom opet tabela
omogucuje ugnjezdenje SELECT upitnih blokova.
5 Korelaciono ime tabele je nekvalifikovani identifikator; kolone u SELECT i WHERE linijama
kvalifikuju se korelacionim imenom tabele.

3.3 Manipulisanje podacima

71

Podupit je SELECT upitni blok umetnut u logicki izraz WHERE linije drugog
SELECT upitnog bloka (ili iskaza azuriranja). Svojstvo ugnjezdenja SELECT upitnih blokova je osnovno svojstvo na kome je SQL utemeljen (Structured u nazivu
SQL ukazuje upravo na ovu vrstu struktuiranosti). Podupit se koristi za:

predstavljanje pojedinacne vrednosti koja ucestvuje u operaciji poredenja;


predstavljanje skupa vrednosti cija se nepraznost ispituje primenom EXISTS
(NOT EXISTS) kvantifikatora, koji se pretrazuje IN (NOT IN) relacijskom
operacijom, ili koji se kvantifikuje kvantifikatorima SOME, ANY ili ALL i

zatim ucestvuje u operaciji poredenja.


Ugnjezdenje blokova moze biti visestruko, ali u gotovo svim primenama na
realne probleme ugnjezdenje do nivoa 3 zadovoljava.
Ugnjezdeni SELECT upitni blok se, po pravilu, moze zameniti upitom spajanja,
cije je izvrsenje cesto efikasnije.
Primer 3.17 (relacijska operacija IN)
Naci nazive izdavaca koji izdaju knjigu sa sifrom k6.
SELECT I.NAZIV
FROM I
WHERE I.I SIF IN
(SELECT KI.I SIF
FROM KI
WHERE KI.K SIF=k6)

Rezultat:
NAZIV
Decje novine
Matica srpska

Iskaz se izvrsava prvo izvrsavanjem podupita koji vraca skup vrednosti sifara
izdavaca koji izdaju knjigu sa sifrom k6 (ovaj podupit izvrsava se samo jedanput pri
jednom izvrsavanju celog iskaza). Zatim se pretrazuje tabela I, i za svakog izdavaca
cija je sifra u izracunatom skupu izdaje se naziv tog izdavaca. U slucaju da izostane
eksplicitno kvalifikovanje imena (I SIF umesto I.I SIF i KI.I SIF), primenjuje se
implicitno kvalifikovanje imena (I.I SIF za kolonu I SIF ispred IN i KI.I SIF za
kolonu I SIF iza IN). Ovo je saglasno pravilu da se nekvalifikovano ime kolone
kvalifikuje imenom tabele (ili imenom n-torne promenljive) koja je navedena u
FROM liniji koja je najdirektnije deo istog upita ili podupita. Zato je prethodni
iskaz ekvivalentan sledecem iskazu (tj. ima identican rezultat kao i taj iskaz):
SELECT NAZIV
FROM
I
WHERE I SIF IN
(SELECT I SIF
FROM
KI
WHERE K SIF=k6)
Isti upit moze se formulisati i upotrebom operacije spajanja, bez podupita:

72

3 Upitni jezik SQL


SELECT I.NAZIV
FROM
I, KI
WHERE I.I SIF = KI.I SIF AND KI.K SIF = k6

Primer 3.18 (podupit i spolja


snji upit nad istom tabelom)
Naci sifre izdavaca koji izdaju bar jednu knjigu koju izdaje i izdavac sa sifrom
i3.
SELECT DISTINCT I SIF
FROM
KI
WHERE K SIF IN
(SELECT K SIF
FROM
KI
WHERE I SIF=i3)
Analogno prethodnim primerima formulisu se i drugi oblici iskaza kvalifikovanjem
imena i operacijom spajanja umesto podupita.
sestruki nivo ugnje
zdenja)
Primer 3.19 (vi
Naci nazive izdavaca koji izdaju bar jedan roman.
SELECT I.NAZIV
FROM I
WHERE I.I SIF IN
(SELECT KI.I SIF
FROM KI
WHERE KI.K SIF IN
(SELECT K.K SIF
FROM K
WHERE K.OBLAST=roman))

Rezultat:
NAZIV
Prosveta

Primer 3.20 (operacija poredenja)


Naci sifre izdavaca iz iste drzave kao izdavac sa sifrom i1.
SELECT iskaz kojim se zadaje ovaj upit moze da koristi implicitne ili eksplicitne
n-torne promenljive, tj. sledeca dva iskaza su ekvivalentna:
SELECT I SIF
FROM I
WHERE DRZAVA =
(SELECT DRZAVA
FROM I
WHERE I SIF=i1)

SELECT IX.I SIF


FROM I IX
WHERE IX.DRZAVA =
(SELECT IY.DRZAVA
FROM I IY
WHERE IY.I SIF=i1)

3.3 Manipulisanje podacima

73

Ovakvi podupiti ciji nekvantifikovani rezultat ucestvuje u operaciji poredenja


opravdani su samo kada se unapred zna da rezultat podupita sadrzi najvise jedan
element. Sledeca dva primera ilustruju koriscenje podupita ciji rezultati sadrze
vise od jednog elementa, ali im kvantifikatori SOME, ANY, ALL, omogucuju

ucestvovanje u operaciji poredenja


(tzv. kvantifikovano poredenje).

Primer 3.21 (kvantifikovano poredenje


kvantifikator SOME)
Naci nazive izdavaca koji izdaju knjigu sa sifrom k6
SELECT NAZIV
FROM
I
WHERE I SIF = SOME(SELECT I SIF
FROM
KI
WHERE K SIF=k6)
Parafraza ovog iskaza je da se traze nazivi onih izdavaca cija je sifra jednaka sa
NEKOM (SOME) sifrom izdavaca koji izdaje knjigu sa sifrom k6. Isto je znacenje
i kvantifikatora ANY.

Primer 3.22 (kvantifikovano poredenje


kvantifikator ALL)
Naci sve informacije o izdanjima ciji je tiraz manji od svakog tiraza izdanja
izdavaca sa sifrom i1.
SELECT *
FROM KI
WHERE TIRAZ <
ALL (SELECT TIRAZ
FROM KI
WHERE I SIF=i1)

3.3.5

Rezultat:
K SIF
k5
k6
k6

I SIF
i2
i3
i4

IZD.
4
1
3

GOD.
1986
1966
1988

TIRAZ
5000
3000
5000

Korelisani podupiti

Pored strukture upita u kojoj se podupit izvrsava samo jedanput pri jednom
izvrsavanju celog upita, moguca je struktura u kojoj podupit zavisi od tabele iz
FROM linije spoljasnjeg upita (tj. sadrzi n-tornu promenljivu koja odgovara ovoj
tabeli). Tada se podupit mora izvrsiti za svaku vrstu tabele iz spoljasnjeg upita,
da bi se utvrdilo da li se ta vrsta kvalifikuje za rezultat celog upita ili ne. Takav
podupit zove se korelisani podupit.
Primer 3.23 Isti upit kao u primeru 3.17 (naci nazive izdavaca koji izdaju knjigu
sa sifrom k6) moze se preformulisati tako da ukljuci korelisani podupit na sledeci
nacin:

74

3 Upitni jezik SQL


SELECT I.NAZIV
FROM
I
WHERE k6 IN
(SELECT KI.K SIF
FROM
KI
WHERE KI.I SIF=I.I SIF)

U podupitu je neophodno eksplicitno kvalifikovati ime kolone I.I SIF da bi se razlikovalo od nekvalifikovanog imena kolone I SIF, koja ima implicitnu kvalifikaciju
KI.I SIF.
Ovaj iskaz se izvrsava na sledeci nacin: za svaku vrstu tabele I, i specificnu
vrednost Ix njene kolone I SIF (sifra izdavaca), izvrsava se podupit
(SELECT K SIF
FROM
KI
WHERE I SIF=Ix)
Ako pretrazeni skup sifara knjiga K SIF sadrzi sifru k6, posmatrana vrsta

tabele I se dalje obraduje


i izdaje se vrednost njene kolone NAZIV; postupak se
ponavlja za sledecu vrstu tabele I.
Prethodni podupit zove se korelisani podupit jer je u neposrednoj zavisnosti od
spoljasnjeg upitnog bloka.
Analogna forma upita odgovara i slucaju kada se korelisani podupit i spoljasnji
upitni blok odnose na istu tabelu. U ovom slucaju se moraju uvesti eksplicitne
n-torne promenljive razlicite od imena tabele.
Primer 3.24 Naci sifre svih knjiga koje izdaje vise od jednog izdavaca.
SELECT DISTINCT KIX.K SIF
FROM KI KIX
WHERE KIX.K SIF IN
(SELECT KIY.K SIF
FROM KI KIY
WHERE KIY.I SIF <> KIX.I SIF)

3.3.6

Rezultat:
K SIF
k6

Egzistencijalni kvantifikator

U SQL-u, egzistencijalno kvantifikovani logicki izraz je oblika EXISTS (SELECT


. . . FROM . . . ) (odnosno NOT EXISTS (SELECT . . . FROM . . . )). Ovaj izraz
izracunavanjem dobija vrednost tacno ako i samo ako je rezultat podupita predstavljenog konstrukcijom SELECT . . . FROM . . . neprazan (odnosno prazan).

3.3 Manipulisanje podacima

75

Primer 3.25 Naci nazive izdavaca koji izdaju knjigu sa sifrom k3.
SELECT I.NAZIV
FROM
I
WHERE EXISTS
(SELECT *
FROM
KI
WHERE KI.I SIF=I.I SIF AND KI.K SIF=k3)
Ovaj iskaz nalazi nazive svih izdavaca za koje postoji vrsta u tabeli izdavastva
(KI) sa istom sifrom izdavaca i sifrom knjige k3. Na primer, prva vrsta tabele I ima
naziv izdavaca Prosveta i sifru izdavaca i1. U tabeli KI postoji vrsta sa sifrom
izdavaca i1 i sifrom knjige k3, pa je Prosveta jedan (i jedini) od naziva koji se
pojavljuju u rezultatu.
Egzistencijalni kvantifikator je mocan mehanizam SQL-a. Forma prethodnog
upita je samo preformulacija upita izrazenog bez egzistencijalnog kvantifikatora, jer
se svaki upit formulisan IN relacijskom operacijom moze formulisati i koriscenjem
EXISTS kvantifikatora. Da obratno ne vazi, sugerise sledeci primer.
ca.
Primer 3.26 Naci nazive izdavaca koji izdaju sve knjige Branka Copi
Ovaj upit je vec razmatran kao ilustracija operacije deljenja u relacionoj algebri
(odeljak 2.1). Pogledajmo sta on novo donosi kada je u pitanju SQL.
Prirodna formulacija upita ukljucila bi univerzalni kvantifikator za svaki
(FORALL), koji nije podrzan u SQL-u. Univerzalni kvantifikator se moze izraziti
negacijom egzistencijalnog kvantifikatora, tj.
(FORALL x)p(x) NOT (EXISTS x)(NOT(p(x))),
gde je x promenljiva, a p logicki izraz koji ukljucuje promenljivu x.
ca, postoji
Tako se izraz nazivi izdavaca takvih da, za svaku knjigu Branka Copi

vrsta u KI tabeli koja utvrduje


da taj izdavac izdaje tu knjigu, moze preformulisati
ca
u ekvivalentni izraz nazivi izdavaca takvih da ne postoji knjiga Branka Copi

takva da ne postoji vrsta u KI tabeli koja utvrduje


da taj izdavac izdaje tu knjigu.
ca u virtuelnu
Da bi se pojednostavio upit, izdvojmo prvo sve knjige Branka Copi
tabelu pogled K BC sledecim SQL iskazom:
CREATE VIEW K BC AS
(SELECT *
FROM
K
WHERE K SIF IN
(SELECT K SIF
FROM
KP
WHERE P SIF =
(SELECT P SIF
FROM
P
WHERE IME = Branko
Copi
c)))

76

3 Upitni jezik SQL

ca moze
Sada se nalazenje naziva izdavaca koji su izdali sve knjige Branka Copi
izraziti sledecim SQL iskazom:
Rezultat:
SELECT I.NAZIV
FROM I
NAZIV
WHERE NOT EXISTS
Prosveta
(SELECT
FROM K BC
WHERE NOT EXISTS
(SELECT
FROM KI
WHERE KI.I SIF=I.I SIF AND KI.K SIF=K BC.K SIF))
Korisna sugestija je da se u izrazavanju komplikovanog upita, kakav je poslednji
od pseudo SQL iskaza koji ukljucuje FORALL kvantifikator, a zatim
primer, pode
izvrsi konverzija u pravi SQL upit koji ukljucuje NOT EXISTS kvantifikator umesto
univerzalnog kvantifikatora FORALL ([24]).
Druga korisna sugestija za formulaciju slozenih upita je da se, kadgod to odgo od implikacije, a da se ona zatim preformulise u logicki
vara prirodi upita, pode
izraz koji je korektan u SQL-u. Tako bi se prethodni primer prirodno formulisao
kao naci naziv izdavaca (npr. Ix) takvog da za svaku knjigu vazi implikacija: ako
c, onda je izdavac Ix izdao tu knjigu.
je autor knjige Branko Copi
Implikacija ako p onda q ekvivalentna je izrazu NOT (p) OR q, pa se
c ili je
implikacija iz naseg primera moze izraziti kao autor knjige nije Branko Copi
izdavac Ix izdao tu knjigu. Zajedno sa prethodnim razmatranjem kvantifikatora
FORALL, dobija se ekvivalencija izraza
FORALL x (IF p THEN q) NOT EXISTS x (NOT NOT p AND NOT q), tj.
FORALL x (IF p THEN q) NOT EXISTS x (p AND NOT q).
Zato ceo prethodni upit dobija formulaciju: Naci naziv izdavaca (npr. Ix)
c a koju nije
za kojeg vazi sledece: ne postoji knjiga ciji je autor Branko Copi
izdao izdavac Ix (ovo je upravo formulacija izrazena SQL-om). Opisani postupak
predstavlja sistematicni pristup obradi univerzalnog kvantifikatora i implikacije.

3.3.7

Agregatne funkcije

Za razliku od skalarnih funkcija, ciji je argument skalarna vrednost, tj. jedna


vrednost iz jednog domena, agregatne funkcije preslikavaju skup vrednosti jedne
kolone (obicno izvedene tabele) u skalarnu vrednost. Pod izvedenom tabelom ovde
se podrazumeva rezultat primene logickog izraza iz WHERE linije na tabele iz
FROM linije.
SQL podrzava sirok spektar skalarnih funkcija, od konverzionih (npr. funkcija
za pretvaranje celobrojnog ili realnog tipa u decimalni tip, DECIMAL, za pretvaranje brojevnih tipova u znakovni tip, realni tip dvostruke tacnosti ili celobro-

3.3 Manipulisanje podacima

77

jni tip DIGITS, FLOAT, INTEGER, redom), preko opstih (npr. funkcija koja
vraca duzinu podatka u bajtovima LENGTH) i aritmetickih (ABS, TAN, SQRT,
TRUNC), do funkcija za obradu znakovnih podataka (npr. SUBSTR vraca podnisku niske, navedene duzine, od pozicije kao pocetka, ili POSSTR vraca poziciju
prvog pojavljivanja jedne niske u drugoj), kao i druge funkcije vezane za specificne

tipove odredenog
sistema (npr. TIME, YEAR, CHAR, DATE, DAY nad podacima tipa TIME, DATE, TIMESTAMP). Poziv skalarne funkcije moze se navesti
kao operand u izrazu odgovarajuceg tipa.
Primer 3.27 Izdati nazive izdavaca i nazive njihovih drzava prevedene na engleski
jezik.
Iskaz kojim se realizuje ovaj upit ilustrovace skalarnu funkciju SUBSTR i mogucnost SQL-a sistema DB2 u selektivnoj dodeli vrednosti skalarnom izrazu tabelerezultata.
Rezultat:
SELECT NAZIV,
NAZIV
DRZAVA ENG
CASE SUBSTR(DRZAVA,1,1)
WHEN J THEN Yugoslavia
Prosveta
Yugoslavia
WHEN A THEN USA
Addison Wesley USA
WHEN E THEN UK
Decje novine
Yugoslavia
END AS DRZAVA ENG
Matica Srpska
Yugoslavia
FROM I
Mada je SQL i bez agregatnih funkcija dovoljan za pretrazivanje svakog pojedinacnog podatka iz baze podataka (relaciono je kompletan), bez mehanizma
agregatnih funkcija on ne omogucuje izrazavanje prakticnih i cesto potrebnih upita
tipa Koliko ima izdavaca?
SQL podrzava agregatne funkcije COUNT, SUM, AVG, MAX i MIN6 , sa
sledecim znacenjem:
COUNT
SUM
AVG
MAX
MIN

broj vrednosti u koloni


zbir vrednosti u koloni
srednja vrednost u koloni
najveca vrednost u koloni
najmanja vrednost u koloni.

Agregatna funkcija se poziva tako sto se navede njeno ime sa argumentom


imenom kolone u zagradi. Poziv agregatne funkcije moze se naci u SELECT liniji
bilo glavnog bilo ugnjezdenog upita. Ako se takav poziv navede, odgovarajuca
SELECT linija mora se sastojati samo od takvih poziva (izuzetak su upiti koji
ukljucuju GROUP BY liniju, v. tacku 3.3.8). Poziv agregatne funkcije ne moze se
naci u WHERE liniji upita.
6 SQL sistema DB2 podr
zava i agregatne funkcije standardne devijacije i varijanse STDDEV,
VARIANCE.

78

3 Upitni jezik SQL

Argument za funkcije SUM i AVG mora biti kolona brojevnih vrednosti. Argumentu moze da prethodi rezervisana rec DISTINCT, koja ukazuje na eliminaciju
duplikata u koloniargumentu pre primene funkcije, ili rezervisana rec ALL (sto se
i podrazumeva) kada se funkcija primenjuje na sve vrednosti u koloni, ukljucujuci
i duplikate.
Agregatna funkcija COUNT mora imati DISTINCT opciju ispred argumenta,
osim u svom specijalnom obliku COUNT() kojim se prebrojavaju vrste (a ne vrednosti kolone) koje zadovoljavaju zadati logicki uslov; ovaj oblik agregatne funkcije

COUNT ne dozvoljava navodenje


DISTINCT opcije i podrazumeva opciju ALL.
Za sve agregatne funkcije (osim COUNT()) vazi da se primenjuju samo na neNULL vrednosti koloneargumenta iz onih vrsta odgovarajuce tabele koje zadovoljavaju logicki uslov WHERE linije upita; agregatna funkcija COUNT() primenjuje
se na sve vrste koje zadovoljavaju zadati uslov.
Argument agregatne funkcije moze biti i izraz u kome ucestvuje kolona (npr.
TIRAZ/1000), ali samo kada opcija DISTINCT nije navedena.
Pojedini sistemi primenjuju i niz drugih pravila i ogranicenja za upotrebu agregatnih funkcija ([37], [24]).
Primer 3.28 (COUNT)
Naci ukupan broj izdavaca koji su izdali bar po jednu knjigu.
SELECT COUNT(DISTINCT I SIF)
FROM KI

Rezultat:
1
4

Primer 3.29 (COUNT())


Naci broj izdanja knjige sa sifrom k6.
SELECT COUNT()
FROM KI
WHERE KI.K SIF=k6

Rezultat:
1
2

Primer 3.30 (SUM)


Naci ukupni tiraz knjige sa sifrom k6 (svih izdanja svih izdavaca).
SELECT SUM(TIRAZ)
FROM KI
WHERE KI.K SIF=k6

Rezultat:
1
8000

Primer 3.31 (MAX)


Naci sifre izdavaca ciji je status nizi od maksimalnog statusa u I tabeli.

3.3 Manipulisanje podacima

79

Rezultat:
I SIF
i2
i3

SELECT I.I SIF


FROM I
WHERE STATUS <
(SELECT MAX(STATUS)
FROM I)

Primer 3.32 (AVG)


Naci sifru, status i drzavu izdavaca ciji je status visi ili jednak prosecnom statusu
izdavaca iz te drzave (ovo je ujedno i primer agregatne funkcije u korelisanom
podupitu).
SELECT IX.I SIF, IX.STATUS, IX.DRZAVA
FROM I IX
WHERE IX.STATUS >=
(SELECT AVG(STATUS)
FROM I IY
WHERE IY.DRZAVA = IX.DRZAVA)

3.3.8

Rezultat:
I SIF STATUS
i1
30
i2
20
i4
30

DRZAVA
Jugoslavija
Amerika
Jugoslavija

Operator grupisanja

Na jednostavni SELECT upitni blok moguce je primeniti i operator grupisanja


GROUP BY ime-kolone

koji preureduje
(logicki) tabelu iz FROM linije u particije ili grupe tako da unutar jedne grupe sve vrste imaju istu vrednost u koloni iz GROUP BY operatora.
vazi i da su sve vrste tabele sa istom vrednoscu kolone iz GROUP BY
Takode
operatora u jednoj grupi. Za potrebe grupisanja, sve NULL vrednosti u koloni iz
GROUP BY operatora tretiraju se kao jednake.
SELECT linija se sada primenjuje na svaku grupu, a ne na svaku vrstu tabele.
Primer 3.33 Za svaku izdatu knjigu, naci sifru knjige i ukupni tiraz u kome je
izdata.
SELECT K SIF, SUM(TIRAZ)
FROM KI
GROUP BY K SIF

Rezultat:
K SIF 2
k1
10000
k2
7000
k3
10000
k4
10000
k5
5000
k6
8000

80

3 Upitni jezik SQL

Svaki izraz u SELECT liniji mora biti singlton (jednoclan skup) za svaku grupu,
tj. mora biti jedna od kolona iz GROUP BY operatora, konstanta ili agregatna
funkcija nad svim vrednostima neke kolone unutar te grupe. Precizirajmo sada
pravilo iz tacke 3.3.7: ukoliko se agregatna funkcija javlja u SELECT liniji upita u
kome se ne primenjuje GROUP BY operator na istom nivou ugnjezdenja, ta linija
ne sme da sadrzi ime kolone, konstantu ili izraz.
Ukoliko u SELECT upitnom bloku postoji WHERE linija, vrste koje ne zadovoljavaju logicki izraz iz WHERE linije eliminisu se pre bilo kakvog grupisanja.
Primer 3.34 Za svaku knjigu, naci sifru knjige i maksimalni tiraz izdanja te knjige,
iskljucujuci izdanja izdavaca sa sifrom i1.
SELECT K SIF, MAX(TIRAZ)
FROM KI
WHERE I SIF <> i1
GROUP BY K SIF

Rezultat:
K SIF 2
k5
5000
k6
5000

GROUP BY operator moze se primeniti, sa analognom semantikom, i na bilo


koju kombinaciju kolona tabele iz FROM linije.
Kvalifikovano grupisanje.
Kao sto pretrazivanje vrsta tabele SELECT upitnim blokom moze biti kvalifikovano WHERE logickim izrazom kojim se biraju
odnosno eliminisu vrste tabele iz FROM linije, tako i pretrazivanje grupa dobijenih
GROUP BY operatorom moze biti kvalifikovano primenom logickog izraza kojim
se biraju one grupe na koje ce se SELECT linija primenjivati, odnosno eliminisu
ostale grupe. Taj novi logicki izraz zadaje se operatorom
HAVING logi
cki-izraz
Izrazi koji ucestvuju u logickom izrazu HAVING operatora moraju imati jedinstvenu vrednost po grupi.
Primer 3.35 Naci sifru knjige za svaku knjigu koja ima vise izdanja:
SELECT K SIF
FROM KI
GROUP BY K SIF
HAVING COUNT(*) > 1

Rezultat:
K SIF
k6

Operatori GROUP BY i HAVING mogu se primeniti i u podupitima.


Znacajno je da se svaki upit formulisan GROUP BY i HAVING operatorom
moze preformulisati u oblik koji ih ne koristi. Tako se poslednji primer moze izraziti
i na sledeci nacin:

3.3 Manipulisanje podacima

81

SELECT K SIF
FROM K
WHERE 1 <
(SELECT COUNT (*)
FROM KI
WHERE K SIF=K.K SIF)
Zbog nedostataka ova dva operatora koji su izvan okvira ovog teksta, u literaturi
([24]) preporucuju se alternativne formulacije upita (koje ne koriste GROUP BY
HAVING konstrukcije).

3.3.9

Puni upitni blok

Pored osnovnog oblika iskaza pretrazivanja SQL-a sa strukturom jednostavnog upitnog bloka koja ukljucuje sve dosad pomenute mogucnosti, iskaz pretrazivanja
moze imati i oblik punog upitnog bloka. Neformalno, puni upitni blok se dobija
primenom (0 ili vise) skupovnih operacija unije, preseka i/ili razlike na jednostavne
ili druge pune upitne blokove7 .
Mogucnost primene skupovnih operacija na upitne blokove posledica je cinjenice
da je rezultat izvrsavanja svakog upitnog bloka (izvedena) relacija tj. skup
skup vrsta. Operacije unije (UNION), preseka (INTERSECT) i razlike (EXCEPT)
u SQL-u se mogu primenjivati samo na unijski kompatibilne relacije (u smislu u
kome je unijska kompatibilnost uvedena u tacki 2.1.2). Ako su odgovajujuce kolone

jednako imenovane, kolona tabele-rezultata nasleduje


to ime. U suprotnom, kolona
rezultujuce tabele je neimenovana (tj. dobija sistemski generisano ime).
Obzirom da je eliminacija duplikata, kao sastavni deo ovih skupovnih operacija,
(vremenski) skupa operacija, SQL nudi mogucnost da se ona ne izvrsi (opcija ALL
uz svaku od skupovnih operacija). Ovo je narocito pogodno kada se unapred zna
da rezultat nece imati duplikata.
Primer 3.36 Naci sifre knjiga koje su romani ili ih izdaje izdavac sa sifrom i2 (ili
za koje vaze oba uslova).
SELECT K SIF
FROM K
WHERE OBLAST = roman
UNION
SELECT K SIF
FROM KI
WHERE I SIF = i2

Rezultat:
K SIF
k1
k3
k5

Primer 3.37 Naci nazive drzava u kojima su registrovani i izdavaci i pisci.


7 Dakle,

i jednostavni upitni blok jeste puni upitni blok.

82

3 Upitni jezik SQL

SELECT DRZAVA
FROM I
INTERSECT
SELECT DRZAVA
FROM P

Rezultat:
DRZAVA
Amerika
Jugoslavija

Ako se u ovom primeru operacija INTERSECT zada sa opcijom ALL (INTERSECT ALL), u rezultatu ce se dobiti i ponovljene vrednosti:
SELECT DRZAVA
FROM I
INTERSECT ALL
SELECT DRZAVA
FROM P

Rezultat:
DRZAVA
Amerika
Jugoslavija
Jugoslavija

Primer 3.38 Izdati nazive drzava u kojima su registrovani pisci ali ne i izdavaci.
SELECT DRZAVA
FROM P
EXCEPT
SELECT DRZAVA
FROM I

Rezultat:
DRZAVA
Engleska

Isti bi se rezultat dobio, u nasem primeru, i za operaciju EXCEPT ALL, zato sto
je u relacijama P i I jednak broj vrsta sa istim vrednostima atributa DRZAVA (po 1

sa vrednoscu Amerika i po tri sa vrednoscu Jugoslavija). Medutim,


kada bi, npr.
u relaciji P bilo registrovano cetiri pisca iz Jugoslavije a u relaciji I tri izdavaca
iz Jugoslavije, tada bi operacija EXCEPT ALL u nasem primeru proizvela, pored
vrednosti Engleska, i vrednost Jugoslavija. Ovo je u suprotnosti sa skupovnim
pojmom razlike pa i sa samim relacionim modelom.
Pri visestrukoj primeni skupovnih operacija, redosled njihovog izvrsavanja je
sleva nadesno (odozgo nanize), pri cemu operacija preseka (INTERSECT) ima
prioritet. Redosled izvrsenja se moze zagradama menjati.
Puni upitni blok, pa prema tome i skupovne operacije UNION, INTERSECT,
EXCEPT, mogu se primeniti i u podupitima iskaza pretrazivanja, ali i u drugim
iskazima SQL-a npr. u iskazu za kreiranje pogleda (CREATE VIEW, v. 4), ili
iskazima za unosenje, brisanje i azuriranje (v. 3.3.13, 3.3.15, 3.3.14).

3.3.10

Operator uredenja
i operator WITH

Kompletni iskaz pretrazivanja SELECT iskaz, pored strukture jednostavnog i

punog upitnog bloka, moze imati i dodatne operatore operator uredenja


po vred-

3.3 Manipulisanje podacima

83

nostima izabranih kolona rezultujuce tabele (ORDER BY) i operator kojim se pretrazivanje punim upitnim blokom primenjuje nad imenovanom izvedenom tabelom
rezultatom izvrsavanja nekog punog upitnog bloka (WITH operator).

Primer 3.39 (pretra


zivanje sa uredenjem)
Prikazati sifre i statuse izdavaca u opadajucem redosledu statusa.
Rezultat:
I SIF STATUS
i1
30
i4
30
i2
20
i3
10

SELECT I SIF, STATUS


FROM I
ORDER BY STATUS DESC

Uredenje
se moze zadati na isti nacin kao u CREATE INDEX iskazu. Osim
opadajuceg (DESC), moguc je i rastuci poredak (ASC) koji se i podrazumeva.
Kolone u ORDER BY liniji (moze ih biti vise) mogu se identifikovati i svojim rednim
brojevima (sleva nadesno u rezultujucoj tabeli) umesto imenima; ako je kolona
neimenovani skalarni izraz, ona se mora identifikovati svojim rednim brojem.

Primer 3.40 Uredenje


tabele iz primera 3.6 u rastucem poretku sifara izdavaca
unutar rastucih tiraza u hiljadama postize se SELECT iskazom
SELECT
K SIF, I SIF, IZDANJE, Tiraz u hiljadama =, TIRAZ/1000
FROM
KI
ORDER BY 5, I SIF
Rezultat:
K SIF
k6
k5
k6
k2
k1
k3
k4

I SIF
i3
i2
i4
i1
i1
i1
i1

IZDANJE
1
4
3
2
2
1
2

4
Tiraz
Tiraz
Tiraz
Tiraz
Tiraz
Tiraz
Tiraz

u
u
u
u
u
u
u

hiljadama
hiljadama
hiljadama
hiljadama
hiljadama
hiljadama
hiljadama

=
=
=
=
=
=
=

5
3
5
5
7
10
10
10

Primer 3.41 Pretra


zivanje nad imenovanom izvedenom tabelom
Iz tabele sa parovima (IME, NAZIV) koja sadrzi imena pisaca i nazive izdavaca
ca.
koji izdaju knjige tih pisaca, izdati nazive svih izdavaca Branka Copi
WITH PI AS
(SELECT DISTINCT IME, NAZIV
FROM P, I, KP, KI
WHERE P.P SIF=KP.P SIF AND KP.K SIF=KI.K SIF AND

84

3 Upitni jezik SQL


KI.I SIF=I.I SIF)
SELECT NAZIV
FROM PI
WHERE IME=B.Copic
Rezultat:
NAZIV
Prosveta

Operatori WITH i ORDER BY mogu se primeniti u istom SELECT iskazu,

da bi se dobilo uredenje
po vrednostima kolona rezultata pretrazivanja imenovane
izvedene tabele. U prethodnom primeru, na kraju SELECT iskaza mogao bi se
navesti operator ORDER BY NAZIV kako bi se dobili nazivi izdavaca knjiga Branka

ca uredeni
Copi
po abecednom redu.

3.3 Manipulisanje podacima

3.3.11

85

Na
cin izvr
savanja SELECT iskaza

SELECT iskaz koji ne sadrzi skupovne operacije UNION, INTERSECT, EXCEPT,


moze biti dosta slozen, i moze da ukljuci sledece linije, obavezno u navedenom
redosledu:
SELECT
FROM
WHERE
GROUP BY
HAVING
ORDER BY

...
...
...
...
...
...

Ovakav SELECT iskaz moze, osim toga, da ukljuci i podupite. Redosled u


kome se (konceptualno) izvrsavaju linije ovakvog SELECT iskaza je isti kao i redosled u kome su zapisane, osim SELECT linije koja se izvrsava pretposlednja
neposredno ispred ORDER BY operatora. Tako algoritam izvrsavanja SELECT
iskaza sadrzi sledece korake:
1. izracunati Dekartov proizvod tabela iz FROM linije;
2. iz rezultata prethodnog koraka eliminisati sve n-torke koje ne zadovoljavaju
logicki izraz WHERE linije;
3. rezultat prethodnog koraka grupisati po vrednostima kolona navedenih u
GROUP BY liniji;
4. iz rezultata prethodnog koraka eliminisati grupe koje ne zadovoljavaju logicki
izraz HAVING linije;
5. za svaku grupu iz rezultata prethodnog koraka proizvesti po jednu n-torku,
prema sadrzaju SELECT linije;

6. uredenjem
rezultata prethodnog koraka prema kolonama u ORDER BY liniji
dobiti konacni rezultat SELECT iskaza.
Ukoliko se u SELECT iskazu nalazi ugnjezden podupit, onda se sve (prisutne)
linije izvrsavaju navedenim redom u podupitu, pa zatim u spoljasnjem upitu.
Prethodni algoritam je samo konceptualan zato sto daje korektan rezultat, ali bi
njegovo striktno izvrsavanje bilo veoma neefikasno. Zbog toga se pristupa raznim

tehnikama optimizacije koje obezbeduju


istu korektnost u izvrsavanju SELECT
iskaza, ali uz maksimalnu efikasnost.
Ako SELECT iskaz sadrzi skupovnu operaciju, prvo se izvrsavaju njeni operandi
(pojedinacni SELECTFROMWHEREitd. blokovi), prema prethodnoj konceptualnoj metodi, ali bez eventualnih ORDER BY operatora. Zatim se na rezultate
izvrsavanja ovih blokova primenjuje skupovna operacija, i najzad operator ORDER BY, ako postoji (u jednom SELECT iskazu moguce je navesti najvise jedan
ORDER BY operator i to na kraju iskaza).

86

3 Upitni jezik SQL

3.3.12

Relaciona kompletnost SQL-a

Za SQL se moze jednostavno dokazati da je relaciono kompletan, tako sto se


pokazuje da podrzava sve operacije relacione algebre (za koju je pokazano da je
relaciono kompletna, v. odeljak 2.2). U ovoj tacki koristice se formalniji termin
relacija (a ne njegov sinonim tabela, uobicajen u terminologiji SQL-a), jer je
izlaganje tesno vezano za formalizam relacionog modela relacionu algebru.
1. Skupovne operacije unije, preseka i razlike SQL podrzava direktno operacijama UNION, INTERSECT, EXCEPT.
2. Skupovna operacija Dekartovog proizvoda relacija R i S realizuje se upitom
spajanja
SELECT
FROM R, S
3. Operacija projekcije relacije R na atribute Ai1 , . . . , Aik realizuje se upitom
bez WHERE linije
SELECT Ai1 , . . . , Aik
FROM R
4. Operacija restrikcije po logickom izrazu realizuje se upitom sa WHERE
linijom
SELECT
FROM R
WHERE
5. Operacija slobodnog spajanja relacija R i S po paru atributa Ai , Bj realizuje se upitom spajanja
SELECT
FROM R, S
WHERE R.Ai S.Bj
6. Operacija prirodnog spajanja relacija R(A1 , . . . , An ), S(B1 , . . . , Bm ) po
atributima Ai i Bj realizuje se upitom spajanja
SELECT A1 , . . . , An , B1 , . . . , Bj1 , Bj+1 , . . . , Bm
FROM R, S
WHERE Ai = Bj
7. Operacija deljenja relacije R(A, B) relacijom S(C), po atributu B, ima
sledecu interpretaciju: naci skup vrednosti atributa A, takvih da je svaka
vrednost u relaciji R sa svakom vrednoscu iz S, tj. naci skup vrednosti
a R[A] takvih da za svaku vrednost c S postoji n-torka (par) t R,

3.3 Manipulisanje podacima

87

takva da je t = (a, c); primenom ekvivalencije (x)P (x) (x)P (x), interpretacija je ekvivalentna sledecoj: naci skup vrednosti a R[A], sa svojstvom da ne postoji vrednost c S za koju ne postoji n-torka t R takva
da je t = (a, c), sto se u SQL-u moze neposredno izraziti sledecim iskazom:
SELECT A
FROM R RX
WHERE NOT EXISTS
(SELECT *
FROM S
WHERE NOT EXISTS
(SELECT *
FROM R
WHERE R.B = S.C AND R.A = RX.A))
(slicno i za relaciju R sa n atributa, odnosno relaciju S sa m atributa).
Dakle, SQL je relaciono kompletan.

3.3.13

Uno
senje

Nove vrste se unose u tabelu iskazom INSERT cija sintaksa ima jedan od sledeca
dva oblika:
INSERT INTO ime-tabele [( ime-kolone {,ime-kolone})]
VALUES ( konstanta {,konstanta})
ili
INSERT INTO ime-tabele [( ime-kolone {,ime-kolone})]
puni upitni blok
Prvim oblikom INSERT iskaza u tabelu se upisuje pojedinacna vrsta sa navedenim konstantnim vrednostima u navedenim kolonama. Broj konstanti mora biti
jednak broju kolona, a pridruzivanje se vrsi u navedenom redosledu. U kolone koje
nisu navedene unose se NULL (odnosno podrazumevane) vrednosti ako kolona nije
definisana kao NOT NULL kolona; pod istim uslovom vrednost NULL moze se i
eksplicitno navesti kao konstanta.
Drugim oblikom INSERT iskaza u tabelu se upisuje jedna ili vise vrsta, koje
predstavljaju rezultat izvrsavanja punog upitnog bloka; pri tom i-ta kolona rezultata izvrsavanja punog upitnog bloka odgovara i-toj koloni u zapisu iskaza. Ako
je rezultat izvrsavanja punog upitnog bloka prazan, INSERT iskazom se ne dodaje
nijedna vrsta tabeli.
U oba slucaja, redosled u kome se kolone navode ne mora da odgovara redosledu
kolona u tabeli u koju se unosi. Ako se imena kolona ne navedu, vrednosti se
za
dodeljuju kolonama u redosledu definisanom tabelom. U oba slucaja, takode,

svaku vrstu koja se unosi mora biti obezbedena vrednost u svakoj NOT NULL
koloni koja nije podrzana DEFAULT opcijom.

88

3 Upitni jezik SQL

Primer 3.42 Dodati tabeli K knjigu sa sifrom k7, sa naslovom Carobna


suma
i sa trenutno nepoznatom oblascu.
INSERT INTO K (K SIF, NASLOV)
VALUES (k7,
Carobna
suma)
Uneta vrsta ima nedostajucu (NULL) vrednost u koloni OBLAST.
Isti efekat proizvodi i sledeci iskaz:
INSERT INTO K (K SIF, NASLOV, OBLAST)
VALUES (k7,
Carobna
suma, NULL)
Operacijom unosenja moze da bude narusen neki od uslova integriteta baze
podataka, pri cemu takvu operaciju sistem odbija da izvrsi.
Primer 3.43 Iskaz
INSERT INTO KI (K SIF, I SIF, IZDANJE, TIRAZ)
VALUES (k20, i20, 3, 10000)
bio bi odbijen, jer bi se njegovim izvrsavanjem realizovalo unosenje vrste u tabelu
izdanja KI, koja se odnosi na izdavaca (i20) koji nije poznat u tabeli izdavaca I (i na
knjigu k20 koja nije poznata u tabeli knjiga K); time bi bio narusen referencijalni
integritet (v. tacku 1.4.2).
Primer 3.44 Uneti u tabelu KI KOPIJA vrste tabele KI koje se odnose na izdavace i1 i i2.
Tabela KI KOPIJA moze da se kreira prema obrascu tabele KI (analognim
CREATE TABLE iskazom), sa istim kolonama kao i tabela KI. Izvrsavanjem
sledeceg iskaza, u tabelu KI KOPIJA unosi se odgovarajuci sadrzaj:
INSERT INTO KI KOPIJA
SELECT K SIF, I SIF, IZDANJE, TIRAZ
FROM
KI
WHERE I SIF IN (i1, i2)

KI KOPIJA:
K SIF I SIF
k1
i1
k2
i1
k3
i1
k4
i1
k5
i2

IZDANJE
2
2
1
2
4

GODINA
NULL
NULL
NULL
NULL
NULL

TIRAZ
10000
7000
10000
10000
5000

3.3 Manipulisanje podacima

89

Tabeli se mogu dodati i vrste koje su rezultat operacije spajanja dve ili vise
tabela, kao sto pokazuje sledeci primer:
Primer 3.45 Kreirati tabelu IP DRZAVA sa kolonama I SIF, P SIF, DRZAVA i
uneti u tu tabelu sve parove sifara izdavaca i pisaca iz iste drzave, kao i odgovarajuce
drzave.
CREATE TABLE IP DRZAVA
(I SIF
CHAR(6) NOT NULL,
P SIF
CHAR(6) NOT NULL,
DRZAVA CHAR(20),
PRIMARY KEY (I SIF,P SIF));
INSERT INTO IP DRZAVA
SELECT I SIF, P SIF, I.DRZAVA
FROM
I, P
WHERE I.DRZAVA = P.DRZAVA
Za razliku od upita u primeru 3.12, navedeni par CREATE, INSERT iskaza
kreira trajnu (baznu) tabelu IP DRZAVA koja se moze pretraziti sledecim SELECT
iskazom:
SELECT *
FROM IP DRZAVA

Rezultat:
I SIF P SIF
i1
p1
i1
p3
i1
p4
i2
p5
i3
p1
i3
p3
i3
p4
i4
p1
i4
p3
i4
p4

DRZAVA
Jugoslavija
Jugoslavija
Jugoslavija
Amerika
Jugoslavija
Jugoslavija
Jugoslavija
Jugoslavija
Jugoslavija
Jugoslavija

Drugi oblik INSERT iskaza omogucuje i da se puni upitni blok primeni na


imenovanu izvedenu tabelu WITH operatorom (slicno kao kod SELECT iskaza).
Primer 3.46 Kreirati tabelu IZD BC sa jednom kolonom NAZIV (izdavaca) i u
ca.
nju upisati sve izdavace koji izdaju knjige Branka Copi

Nazive svih izdavaca knjiga Branka Copica dobicemo iz izvedene tabele sa


parovima (IME, NAZIV) koja sadrzi imena pisaca i nazive izdavaca koji izdaju
knjige tih pisaca.
CREATE TABLE IZD BC
(NAZIV CHAR(20) NOT NULL)

90

3 Upitni jezik SQL

INSERT INTO IZD BC


WITH PI AS
(SELECT DISTINCT IME, NAZIV
FROM P, I, KP, KI
WHERE P.P SIF=KP.P SIF AND KP.K SIF=KI.K SIF
AND KI.I SIF=I.I SIF)
SELECT NAZIV
FROM PI
WHERE IME=B.Copic
Rezultat:
NAZIV
Prosveta

3.3.14

A
zuriranje

Za azuriranje u uzem smislu, tj. za izmenu postojecih vrednosti u tabeli, koristi se


UPDATE iskaz. Sintaksa iskaza ima oblik:
UPDATE ime-tabele [ ime n-torne promenljive]
SET ime-kolone = izraz {,ime-kolone = izraz}
[ WHERE logicki-izraz ]
U UPDATE iskazu navodi se ime tabele ciji se sadrzaj menja. To moze biti
ime bazne tabele ili ime pogleda. Ime n-torne promenljive (ili korelaciono ime)
upotrebljava se u slucaju da logicki izraz WHERE linije ukljucuje upitni blok nad
tabelom koja se azurira, i u cijoj WHERE liniji figurise tabela iz UPDATE iskaza.
U SET liniji navode se sve kolone koje se menjaju kao i izraz po kome se
izracunava vrednost za svaku kolonu.
Kao argumente, izraz moze da ukljuci konstante, druge kolone, programske
promenljive (u aplikativnom SQL-u), pri cemu se vrednost kolone ime-kolone u
pojedinoj vrsti zamenjuje izracunatom vrednoscu odgovarajuceg izraza za tu istu
vrstu.
Ako se WHERE linija ne navede, vrednosti navedenih kolona menjaju se u
svim vrstama tabele; ako se navede, vrednosti se menjaju u svakoj vrsti tabele koja
zadovoljava logicki izraz WHERE linije.
Primer 3.47 Uvecati tiraze svih izdanja izdavaca i3 za 10%.
UPDATE KI
SET
TIRAZ = TIRAZ * 1.1
WHERE I SIF=i3

3.3 Manipulisanje podacima

91

do greske, izvrsavanje se obustavlja.


Ako pri izvrsavanju UPDATE iskaza dode
Pri tome ni jedna vrsta tabele nije promenjena, odnosno ako su promene nad nekim
vrstama vec izvrsene, bice ponistene. Do greske moze doci, na primer, u slucaju
da je nova vrednost suvise velika za datu kolonu, s obzirom na definiciju te kolone.
Izvrsavanje UPDATE iskaza moze da bude odbijeno i u slucaju da se njime narusava
referencijalni integritet.
Ako tabela koja se azurira ima primarni kljuc koji je strani kljuc drugih tabela,
UPDATE iskaz nad kolonama koje ukljucuju primarni kljuc odnosne tabele tj.
strani kljuc zavisne tabele izvrsava se prema navedenim pravilima azuriranja u
definiciji stranih kljuceva zavisnih tabela. Operacija azuriranja definisana UPDATE iskazom ce biti uspesna samo ako su pravila azuriranja svih zavisnih tabela
zadovoljena.
Pravila azuriranja (UPDATE RESTRICT, UPDATE NO ACTION) opisana su
u tacki 3.2.2. Tako, ne moze se promeniti vrednost kolone primarnog kljuca, za
ako se
koju postoji odgovarajuca vrednost stranog kljuca u zavisnoj tabeli. Takode,
menja vrednost kolone stranog kljuca, nova vrednost mora postojati kao vrednost
odgovarajuce kolone tabele u kojoj je ta kolona deo primarnog kljuca.
Primer 3.48 Zahtev za izvrsenje iskaza
UPDATE KI
SET
I SIF = i6
WHERE I SIF = i4
bice odbijen, jer vrednost i6 ne postoji u tabeli I u kojoj je kolona I SIF primarni
kljuc.
Primer 3.49 Uvecati tiraz svih izdanja izdavaca iz Jugoslavije za 10%.
UPDATE KI
SET TIRAZ = TIRAZ * 1.1
WHERE I SIF IN
(SELECT I SIF
FROM
I
WHERE DRZAVA = Jugoslavija)

3.3.15

Brisanje

Za brisanje vrsta iz tabele upotrebljava se iskaz oblika


DELETE FROM ime-tabele [ ime n-torne promenljive]
[ WHERE logicki-izraz ]

92

3 Upitni jezik SQL

Izvrsavanjem ovog iskaza iz tabele ime-tabele brisu se sve vrste te tabele koje
zadovoljavaju logicki izraz. Vrste se brisu u celosti (nije moguce izbrisati samo
neke vrednosti iz date vrste). Ako se WHERE linija ne navede, brisu se sve vrste
navedene tabele. Tabela moze biti i pogled, pri cemu se vrste brisu iz bazne tabele
nad kojom je pogled definisan.
Primer 3.50 Izbrisati iz tabele KI sva izdanja izdavaca i4.
DELETE FROM KI
WHERE I SIF=i4
Izvrsavanjem ovog iskaza iz tabele KI brise se jedna vrsta.
do greske, izvrsavanje iskaza se
Ako za vreme izvrsavanja DELETE iskaza dode
prekida. Sadrzaj tabele nece biti promenjen. Greska moze biti, na primer, rezultat
narusenog referencijalnog integriteta.
Ako tabela iz koje se brise ima primarni kljuc koji je strani kljuc drugih tabela,
DELETE iskaz se izvrsava prema navedenim pravilima brisanja u definiciji stranih
kljuceva zavisnih tabela. Operacija brisanja definisana DELETE iskazom ce biti
uspesna samo ako su pravila brisanja svih zavisnih tabela zadovoljena.
Pravila brisanja (DELETE RESTRICT, DELETE CASCADE, DELETE SET
NULL) opisana su u tacki 3.2.2. Na primer, ne moze se izbrisati knjiga iz tabele K
ako postoji izdanje te knjige u tabeli KI (jer je K SIF u tabeli KI strani kljuc sa
pravilom brisanja DELETE RESTRICT, a kolona K SIF je primarni kljuc u tabeli
K). S druge strane, moguce je obrisati izdavaca i3 iz tabele izdavaca I iskazom
DELETE FROM I
WHERE I SIF=i3
Izvrsavanjem ovog iskaza brisu se i sve vrste u tabeli KI koje se odnose na izdavaca
i3, jer strani kljuc I SIF u tabeli KI ima pravilo brisanja DELETE CASCADE.
Ovde se prenosenje brisanja zavrsava jer nema tabela koje, preko svog stranog
kljuca, zavise od tabele KI. Ako bi postojala tabela zavisna od tabele KI, tj. od
njene kolone I SIF, i na nju bi se primenilo pravilo brisanja definisano za njen strani
do zavisne tabele
kljuc. Prenosenje brisanja moze se zavrsiti i u slucaju da se dode
ciji strani kljuc ima pravilo brisanja DELETE SET NULL.
U logickom izrazu WHERE linije (kao i u slucaju UPDATE iskaza) moze se
naci i predikat koji ukljucuje (ugnjezdeni) puni upitni SELECT blok.
Korelisani podupit u a
zuriranju u brisanju.
U WHERE liniji DELETE
(UPDATE) iskaza moze se primeniti i korelisani podupit koji se izvrsava po jedan
put za svaku vrstu tabele iz DELETE (UPDATE) iskaza, da bi se odredilo da li se
ta vrsta brise (azurira) ili ne.
Primer 3.51 Izbrisati izdavace koji izdaju knjigu sa sifrom k3.

3.4 Aplikativni SQL

93

DELETE FROM I
WHERE k3 IN
(SELECT KI.K SIF
FROM
KI
WHERE KI.I SIF = I.I SIF)

3.4

Aplikativni SQL

Vecina SQL proizvoda podrzava dva vida izvrsavanja SQL iskaza: interaktivni
izvrsavanje samostalnih SQL iskaza preko on-line terminala, i aplikativni izvrsavanje SQL iskaza umetnutih u program na visem programskom jeziku, pri cemu se
SQL iskazi mogu izvrsavati naizmenicno sa iskazima programskog jezika. Program
na aplikativnom SQL-u prolazi kroz prekompiliranje kao prvu fazu svoje obrade.
Aplikativni SQL, dalje, moze da ukljuci dve vrste SQL iskaza:
staticke SQL iskaze koji vec u fazi pisanja programa imaju precizan oblik i

cija se analiza (utvrdivanje


tipa iskaza i objekata koji u njemu ucestvuju
npr. tabela, pogleda, kolona, itd.) i priprema za izvrsenje moze u potpunosti
obaviti u fazi prekompiliranja;
dinamicke SQL iskaze koji se zadaju u obliku niske znakova koja se dodeljuje
programskoj promenljivoj, i cija se analiza i priprema moze obaviti tek u fazi
izvrsavanja programa kada je poznat njihov precizni oblik.
Pored ovakvog nacina koriscenja baze podataka u programu na programskom
jeziku, postoje i druge mogucnosti ugradnje blokova za komunikaciju sa SUBP u
program. U slucaju sistema DB2, te mogucnosti su direktni pozivi DB2 funkcija
(Call Level Interface CLI) i upotreba ODBC standarda (Open Database Con korisnika i
nectivity). ODBC standard odnosi se na standardizovanje sumede

medusistema
(prema SUBP), nezavisno od SUBP kome ce medusistem
proslediti
korisnicki zahtev. Pri tome, nemoguce je koristiti specificnosti pojedinog sistema (u
ovom slucaju DB2), a svi upiti upuceni sistemu DB2 preko ODBC-a izvrsavaju se
dinamicki. S druge strane, direktni pozivi DB2 funkcija (CLI-sistem) su specificni
za DB2 sistem i koriste sve njegove mogucnosti (kao i aplikativni SQL), mada su
maksimalno usaglaseni sa ODBC pristupom (v. ??). Za razliku od programa na aplikativnom SQL-a koji mora da se prekompilira, kompilira, poveze sa bazom i najzad
izvrsi, DB2 CLI aplikacija ne mora ni da se prekompilira ni da se povezuje sa bazom;
ona koristi standardni skup funkcija za izvrsenje SQL iskaza u vreme izvrsenja programa. Na taj nacin DB2 CLI aplikacija postaje prenosivija u odnosu na aplikaciju u aplikativnom SQL-u (bar kada su razne DB2 platforme u pitanju), ali je
osnovna prednost aplikativnog SQL-a u tome sto moze da koristi staticki SQL i sto
je u znacajnoj meri standardizovan pa se moze koristiti (u manjoj ili vecoj meri) i
razlicitim SUBP-platformama.
medu
U slucaju da aplikacija zahteva prednosti oba mehanizma (DB2 CLI i aplikativnog SQL-a), moguce je koristiti staticki SQL unutar DB2 CLI aplikacije kreiranjem zapamcenih procedura napisanih na statickom SQL-u. Zapamcena procedura

94

3 Upitni jezik SQL

se poziva iz DB2 CLI aplikacije i izvrsava se na serveru. Jednom napisanu zapamcenu proceduru moze da pozove bilo koja DB2 CLI ili ODBC aplikacija. Naime,
aplikacija moze biti projektovana tako da se izvrsava u dva dela jedan na klijentu
a drugi na serveru. Zapamcena procedura je deo koji se izvrsava na serveru, a
moze biti napisana i koriscenjem DB2 CLI funkcija. Zapamcene procedure imaju
niz prednosti, od smanjenja mreznog saobracaja pri prenosu podataka do koncepta
ucaurenja (v. A) koji povecava bezbednost podataka. O konceptu i implementaciji
direktnih poziva DB2 funkcija, ODBC standarda i zapamcenih procedura u sistemu
DB2 moze se vise detalja naci u prirucniku [?].
SQL kakav je opisan u prethodnim odeljcima odnosi se na interaktivni vid
izvrsavanja tzv. interaktivni SQL. U ovom i sledecem odeljku bice opisan aplikativni SQL i to staticki i dinamicki SQL, redom.
Potreba za umetanjem SQL-a u visi programski jezik javlja se zbog odsustva
kontrolnih struktura u upitnom jeziku, cesto neophodnih pri obradi podataka iz
baze podataka. Umetanjem (tzv. ugnjezdenjem) SQL-a u visi programski jezik
(tzv. maticni jezik engl. host language), kao sto su C, FORTRAN, COBOL,
PL/I, Pascal, Ada ili Assembler, dobija se aplikativni SQL, na kome se mogu pisati
kompleksni programi (aplikacije) za najraznovrsnije obrade. Osnovni princip svih
aplikativnih SQL jezika je princip dualnosti, prema kome se svaki interaktivni SQL
iskaz moze izraziti i u aplikativnom SQL-u, ali obratno ne vazi (sto i opravdava

ovakva umetanja). Svaki program na aplikativnom SQL-u obraduje


se u nekoliko faza; o njima ce biti reci u odeljku 18.1.4 Priprema i izvrsenje aplikativnog
programa.
Izvrsavanje SQL upita (interaktivnog ili aplikativnog) proizvodi uvek tabelu,
koja u opstem slucaju sadrzi veci broj redova. U slucaju aplikativnog SQL-a, u
kome se rezultat izvrsavanja upita predaje programu na dalju obradu, ta skupovna
priroda rezultata SQL upita je u suprotnosti sa slogovnom prirodom program
skih jezika (oni mogu da obraduju
samo po jedan slog, red ili podatak u jednom
programske i upitne
trenutku). Mehanizam kojim se premoscuje ova razlika izmedu
(slogovne i skupovne) komponente aplikativnog SQL-a zove se kursor. Kursor je
oblik pokazivaca na vrstu u rezultujucoj tabeli, koji moze da prelazi preko svake
vrste, ostvarujuci njihovu programsku obradu jednu po jednu. Ukoliko rezultat
izvrsavanja upita jeste tabela sa jednom vrstom, kursor nije potreban; tada se u
SELECT iskaz uvodi jos jedan red (INTO linija) kojim se navodi u koje se programske promenljive (ili u koju se programsku strukturu) smestaju komponente
jedine vrste tabele rezultata.
Neke od osnovnih karakteristika ugnjezdenja SQL-a u maticni jezik su:
1. Svaki umetnuti SQL iskaz pocinje rezervisanim prefiksom EXEC SQL koji
omogucuje prekompilator lakse razlikovanje SQL iskaza od iskaza maticnog
jezika.

3.4 Aplikativni SQL

95

2. SQL iskaz moze da ukljuci maticne promenljive (promenljive maticnog jezika)


tako sto im dodeljuje vrednost, ili tako sto njihovu vrednost upisuje u bazu.
Svaka maticna promenljiva (ili struktura) koja se koristi u SQL iskazu mora
biti deklarisana pre koriscenja; deklarisanje se vrsi u okviru posebne sekcije
koja pocinje deklarativnim iskazom
EXEC SQL BEGIN DECLARE SECTION
a zavrsava se deklarativnim iskazom
EXEC SQL END DECLARE SECTION
Ovakvih sekcija moze biti vise u programu.
3. Obracanju maticnoj promenljivoj u okviru SQL iskaza prethodi dvotacka,
koja razlikuje tu promenljivu od imena atributa SQL-a.
Maticna promenljiva se moze naci bilo gde u SQL iskazu gde moze i konstanta,
kao i u INTO liniji, pri cemu mora da se uskladi tip maticne promenljive
i odgovarajuceg atributa sa kojim se poredi, ili kojoj se vrednost atributa
dodeljuje. Maticna promenljiva i atribut mogu imati isto ime. Na primer,
EXEC SQL SELECT NASLOV, OBLAST
INTO :KNJIGA, :OBLAST
FROM K
WHERE K SIF = :DATI K SIF
Kako je atribut K SIF primarni kljuc, rezultat prethodnog upita je samo jedna
n-torka, tj. tabela sa jednom vrstom cije se vrednosti atributa NASLOV,
OBLAST upisuju, redom, u programske promenljive KNJIGA, OBLAST.
U slucaju da je vrednost atributa OBLAST u n-torci iz prethodnog primera
bila NULL, doslo bi do greske pri izvrsenju SELECT iskaza, jer programska
promenljiva OBLAST ne moze da primi NULL vrednost. Zato se uz maticne
promenljive uvode indikatorske promenljive koje amortizuju ovu nesaglasnost tipa maticne promenljive i NULL vrednosti atributa. Sada je obracanje
maticnoj promenljivoj oblika :V1:V2,8 gde je V1 maticna promenljiva, a V2
indikatorska promenljiva. U slucaju SELECT INTO iskaza, ako je vrednost atributa u SELECT liniji NULL, vrednost maticne promenljive V1 se
nece promeniti, a indikatorska promenljiva V2 ce dobiti negativnu vrednost.
Prethodni SELECT iskaz bi, uz koriscenje indikatorske promenljive, imao
oblik:
8 Puno

obra
canje je oblika :V1 INDICATOR :V2.

96

3 Upitni jezik SQL


EXEC SQL SELECT NASLOV, OBLAST
INTO :KNJIGA, :OBLAST:O1
FROM K
WHERE K SIF = :DATI K SIF
U ovom slucaju ne dolazi do greske u izvrsenju SELECT iskaza, cak i ako
atribut OBLAST ima vrednost NULL. Za maticnu promenljivu KNJIGA nije
potrebno uvoditi indikatorsku promenljivu jer se promenljivoj KNJIGA dodeljuje vrednost atributa NASLOV koji je definisan opcijom NOT NULL
WITH DEFAULT; ovaj atribut ne uzima NULL vrednost (eventualno podrazumevanu vrednost belinu).
4. Program koji sadrzi izvrsne SQL iskaze komunicira sa sistemom DB2 preko
memorijskog prostora koji se zove SQL prostor za komunikaciju (engl. SQL
Communication Area, SQLCA). SQLCA je struktura koja se azurira posle
izvrsenja svakog SQL iskaza. U ovu strukturu upisuju se informacije o
izvrsenom SQL iskazu.9
Najcesce koriscena promenljiva SQLCA strukture je SQLCODE. To je indikator uspesnosti izvrsenja SQL iskaza, koji moze da dobije sledece vrednosti:

0, ako je izvrsenje uspesno (u prethodnom primeru ako je nadena


tacno
jedna vrsta u rezultujucoj tabeli),
pozitivnu vrednost, ako se pri uspesnom izvrsenju dogodilo nesto
izuzetno (npr. +100 ako je rezultujuca tabela prazna),
negativnu vrednost, ako se zbog nastale greske iskaz nije izvrsio uspesno.
SQLCA prostor se u program ukljucuje iskazom
EXEC SQL INCLUDE SQLCA
koji mora da se navede pre prvog izvrsnog SQL iskaza.
Provera statusa izvrsenja SQL iskaza, sacuvanog u promenljivoj SQLCODE,
zadaje se direktivom prekompilatoru da umetne odgovarajuce IF THEN
iskaze u program. Direktiva je deklarativni iskaz oblika
EXEC SQL WHENEVER uslov

akcija

uslov moze biti:


drugi zapis za SQLCODE = 100),
NOT FOUND (nije naden
9 I program za interaktivno izvr
senje SQL iskaza komunicira sa sistemom DB2 preko SQLCA.
Tako se i pri interaktivnom izvrsenju SQL iskaza, razmatranom u prethodnim odeljcima, u SQLCA
upisuju informacije o izvrsenju tih iskaza.

3.4 Aplikativni SQL

97

SQLERROR (indikator greske drugi zapis za SQLCODE < 0) ili


SQLWARNING (indikator upozorenja drugi zapis za SQLCODE > 0
AND SQLCODE <> 100);
akcija je
CONTINUE program nastavlja sa izvrsenjem ili
GOTO obelezje skok na deo programa u kome se nastavlja obrada,
npr. izvestavanje o uzroku nastalog uslova.
Dakle, deklarativni iskaz WHENEVER omogucuje programeru da zada nacin
na koji ce se proveravati SQLCODE posle svakog izvrsnog SQL iskaza.
Ovakvih iskaza moze biti veci broj u programu. Svaki WHENEVER iskaz
odnosi se na sve SQL iskaze (u redosledu njihovog zapisa, ne izvrsenja) do

navodenja
sledeceg WHENEVER iskaza.
Na primer, iskaz oblika
EXEC SQL WHENEVER SQLERROR CONTINUE

obezbedice nastavak izvrsenja programa i u slucaju da je pri izvrsavanju SQL


iskaza doslo do greske. To znaci da program nece imati prinudni zavrsetak,
ali, sa druge strane, to obavezuje programera da posle svakog SQL iskaza
u programu eksplicitno ispituje vrednost promenljive SQLCODE; u slucaju

greske kontrolu upravljanja treba preneti na deo kojim se greska obraduje.


Osim promenljive SQLCODE, SQLCA struktura ukljucuje i veci broj drugih
njima je promenljiva SQLSTATE tipa
promenljivih. Najvaznija medu
CHAR[5] koja slicno promenljivoj SQLCODE sadrzi kod rezultata izvrsavanja
SQL iskaza (npr. prva dva karaktera 01 promenljive SQLSTATE predstavljaju grupu kodova upozorenja i ukazuju, slicno SQLCODE>0, da je doslo
do pojave koja rezultuje upozorenjem). Tako, uslov NOT FOUND u direktivi
WHENEVER predstavlja, u stvari, disjunkciju uslova vrednosti promenljivih

SQLCODE i SQLSTATE: SQLCODE=100 OR SQLSTATE=02000. Medu


ostalim zanimljivijim promenljivim SQLCA strukture je niz celih brojeva
SQLERRD[6] koji se odnosi na razne vrste informacija o nastaloj gresci ili
rezultatu izvrsavanja SQL iskaza, kao i skup CHAR(1) promenljivih SQLWARN0 SQLWARN10 koje sadrze informacije o uzroku upozorenja. Znacenje nekih od ovih elemenata SQLCA strukture je sledece (opis kompletne
SQLCA strukture moze se naci u [37]):

SQLERRD[3] sadrzi broj vrsta obradenih


(unetih, azuriranih ili izbrisanih) izvrsavanjem poslednjeg INSERT, UPDATE ili DELETE iskaza
(ne racunaju se vrste izbrisane kao posledica kaskadnog brisanja; v.
prethodni odeljak);

98

3 Upitni jezik SQL


SQLERRD[5] sadrzi ukupan broj izbrisanih, unetih ili azuriranih vrsta,
direktno ili indirektno, izvrsavanjem odgovarajuceg iskaza;
SQLwarn0 sadrzi W ako bar jedna od preostalih SQLwarni promenljivih sadrzi upozorenje (W); tako uslov SQLWARNING u direktivi
WHENEVER predstavlja disjunkciju uslova (SQLCODE >0 AND SQLCODE <>100 ) OR SQLWARN0 = W;
SQLWARN1 sadrzi W ako je pri dodeli promenljivoj maticnog jezika
odesecena vrednost kolone tipa niske znakova (CHAR(m));
SQLWARN2 sadrzi W ako je doslo do eliminacije NULL vrednosti pri
primeni agregatne funkcije.
5. Ugnjezdeni SQL, pored izvrsnih SQL iskaza (koje sadrzi i interaktivni SQL),
sadrzi i deklarativne SQL iskaze. Takav je, npr. iskaz EXEC SQL DECLARE

CURSOR koji se ne izvrsava, vec pomaze prekompilatoru u izvodenju


sintak
snih provera. Deklarativni SQL iskazi se pisu u delu programa predvidenom
za deklaracije maticnog jezika (npr. na pocetku programa), dok se izvrsni
SQL iskazi mogu navesti na bilo kom mestu u programu gde se mogu navesti
i izvrsni iskazi maticnog jezika. Svaki kursor koji se koristi u programu mora
se prethodno deklarisati. Tako se sledecim deklarativnim iskazom moze uvesti
kursor nad rezultatom navedenog upita:
EXEC SQL
SELECT
FROM
WHERE

DECLARE X CURSOR FOR


I SIF, NAZIV, STATUS
I
DRZAVA = :Y

Ako ce se kursor koristiti samo za citanje vrsta tabele rezultata izvrsavanaja


SELECT iskaza, uz deklaraciju kursora moze se navesti i opcija FOR FETCH
ONLY (FOR READ ONLY). To omogucuje racionalniji pristup podacima
vecem broju korisnika jer sistem za upravljanje bazama podataka zna da
ce se podaci samo citati i da ne zahtevaju ekskluzivan pristup.
Ukoliko je potrebno azurirati neke kolone rezultata SELECT iskaza nad kojim je deklarisan kursor, kursor se deklarise kao kursor za azuriranje nad
navedenim kolonama, dodavanjem linije
FOR UPDATE OF lista-kolona

Tabela rezultat SELECT iskaza nad kojim je deklarisan kursor ne moze


se azurirati (tj. kursor se ne moze deklarisati kao kursor za azuriranje) ako
SELECT iskaz ukljucuje neku od sledecih konstrukcija:
DISTINCT opciju u spoljasnjoj SELECT liniji;

3.4 Aplikativni SQL

99

skupovnu (UNION, INTERSECT, EXCEPT) operaciju osim UNION


ALL;
agregatnu funkciju u spoljasnjoj SELECT liniji;
GROUP BY ili HAVING liniju u spoljasnjem SELECT iskazu;
ORDER BY liniju;
podupit nad istom tabelom;
dve ili vise tabela u FROM liniji
tabelu-pogled (u FROM liniji) koja se ne moze azurirati;
FOR FETCH ONLY (FOR READ ONLY) opciju.
Ako se kursor koristi samo za pretrazivanje vrsta rezultata SELECT iskaza,

vrste se mogu pretrazivati u specificnom redosledu navodenjem


ORDER BY
linije.
Pre nego sto se prethodno deklarisanim kursorom moze uzeti (FETCH) pojedina vrsta rezultujuce tabele, i zatim izvrsiti obrada te vrste, potrebno je nad
kursorom izvrsiti operaciju otvaranja (OPEN). Time se upit kojim je deklarisan
kursor izvrsava, a pokazivac vrste priprema za pozicioniranje na prvu vrstu rezultata. Po zavrsenoj obradi i poslednje vrste vrsi se operacija zatvaranja kursora
(CLOSE). Na primer,
EXEC SQL OPEN X;
/* otvaranje kursora */
WHILE (SQLCODE == 0) /* ima jo
s vrsta i FETCH se uspe
sno izvr
sava */
{ EXEC SQL FETCH X INTO :I SIF, :NAZIV, :STATUS;
/* "uzimanje" sledece vrste */
...
}
EXEC SQL CLOSE X
Ovi iskazi se navode u proceduralnom delu programa. Otvaranjem kursora
(OPEN X) SELECT iskaz iz deklaracije kursora se izvrsava, a zatim se, iskazom
FETCH X, pretrazuje jedna po jedna vrsta, redom, iz tabele koja je dobijena
izvrsavanjem SELECT iskaza. Vrednosti komponenti pretrazene vrste dodeljuju
se programskim promenljivim I SIF, NAZIV, STATUS. I FETCH iskaz, kao i SELECT INTO, moze da ukljuci indikatorske promenljive gdegod je to potrebno, pa
je prethodni primer FETCH iskaza bolje zapisati u obliku
EXEC SQL FETCH X INTO :I SIF, :NAZIV, :STATUS:IND;
FETCH iskaz je jedini iskaz kojim se moze pomerati kursor. Posto, u opstem
slucaju, rezultujuca tabela sadrzi veci broj vrsta, pretrazivanje vrste iz rezultujuce
tabele obicno se stavlja u petlju (WHILE, na primer, u C-u). Petlja se ponavlja sve

100

3 Upitni jezik SQL

dok ima vrsta u rezultujucoj tabeli. Po izlasku iz petlje kursor se zatvara (CLOSE
X).
Ako je kursor X u jednom trenutku pozicioniran na neku vrstu (tekuca vrsta
kursora X, u oznaci CURRENT OF X), ta vrsta moze se azurirati ili izbrisati,
iskazima UPDATE ili DELETE CURRENT OF X. Sintaksa tih iskaza ilustrovana
je sledecim primerom:
EXEC SQL UPDATE I
SET STATUS = STATUS + :POVECANJE
WHERE CURRENT OF X
Jedan program moze imati veci broj deklaracija (razlicitih) tabela i kursora. Na
primer, povecanje statusa (za 10%) svim izdavacima koji su izdali knjigu sa sifrom
koja se nalazi u programskoj promenljivoj knjiga, moze se izraziti programskom
strukturom sledeceg oblika:
#include <stdio.h>
#include <stdlib.h>

EXEC SQL INCLUDE SQLCA;


EXEC SQL BEGIN DECLARE SECTION;
char knjiga[5];
char i[6];
char naziv[20];
short status;
char drzava[20];
short n_ind, s_ind, d_ind;
EXEC SQL END DECLARE SECTION;

void greska(char *poruka)


{
.
.
.
printf("SQL greska, SQLCODE = %i, %s\n ", SQLCODE, poruka);
EXEC SQL ROLLBACK;
exit(0);
}
main()
{
EXEC SQL CONNECT to izdavastvo;

3.4 Aplikativni SQL

101

if (SQLCODE <> 0) greska(" pri otvaranju konekcije");


EXEC SQL DECLARE Z CURSOR FOR
SELECT I SIF, NAZIV, STATUS, DRZAVA
FROM
I
WHERE EXISTS
(SELECT *
FROM
KI
WHERE KI.I SIF = I.I SIF AND KI.K SIF = :knjiga)
FOR UPDATE OF STATUS
EXEC SQL WHENEVER NOT FOUND CONTINUE;
EXEC SQL WHENEVER SQLERROR
CONTINUE;
EXEC SQL WHENEVER SQLWARNING CONTINUE;
.
.
.
EXEC SQL OPEN Z;
if (SQLCODE <> 0) greska(" pri otvaranju kursora Z");
EXEC SQL FETCH Z INTO :i, :naziv:n_ind, :status:s_ind, :drzava:d_ind;
if (SQLCODE == 100)
greska(" nema izdavaca koji su izdali datu knjigu");
if (SQLCODE <>0)
greska(" pri prvom uzimanju vrste o trazenom izdavacu");
while(SQLCODE <> 100)
{
printf("naziv izdavaca je %s", naziv);
EXEC SQL UPDATE I
SET STATUS = STATUS * 1.1
WHERE CURRENT OF Z;
if ((SQLCODE <> 0))
greska(" pri azuriranju tekuceg izdavaca");
EXEC SQL FETCH Z INTO :i, :naziv:n_ind, :status:s_ind, :drzava:d_ind;
if ((SQLCODE <> 0) && (SQLCODE <> 100))
greska(" pri uzimanju (FETCH) sledeceg izdavaca");
}
EXEC SQL CLOSE Z;
if (SQLCODE <> 0) greska(" pri zatvaranju kursora Z");
EXEC SQL COMMIT;
if (SQLCODE <> 0) greska(" pri operaciji COMMIT");
EXEC SQL CONNECT RESET;
if (SQLCODE <> 0) greska(" pri zatvaranju konekcije");
}
Znacenje iskaza CONNECT i CONNECT RESET je uspostavljanje i zatvaranje
konekcije sa bazom podataka (u ovom primeru izdavastvo) koja je na serveru,

102

3 Upitni jezik SQL

u slucaju klijent/server RSUBP (v. 18). Pre pripreme i izvrsenja ovog programa
neophodno je da je takva baza kreirana.
Znacenje iskaza COMMIT je da se, u slucaju uspesnog izvrsenja jednog ili vise
SQL iskaza, promene koje ti iskazi prouzrokuju i koje su privremenog karaktera,
trajno upisu u bazu. Znacenje iskaza ROLLBACK je da se, u slucaju greske
u nekom koraku izvrsavanja jednog ili vise SQL iskaza, sve privremene promene
poniste. Greska u izvrsenju moze da nastane, na primer, zbog uslova prekoracenja.
Program moze zatim normalno da zavrsi sa radom, kao u prethodnom primeru
(exit(0)) u kome moduo greska obavlja i funkciju ROLLBACK-a, ili moze da
nastavi sa izvrsenjem sledece grupe svojih iskaza sledece transakcije (v. deo ??
Upravljanje transakcijama). Izvrsavanjem COMMIT odnosno ROLLBACK iskaza
zatvaraju se i svi otvoreni kursori.

3.5 Dinamicki SQL

3.5

103

Dinami
cki SQL

Kao sto je naglaseno u prethodnom odeljku, svaki ugnjezdeni staticki SQL iskaz u
u smislu da je poznat njegov tip (npr.
fazi prekompilacije sasvim je precizno odreden
SELECT, UPDATE, INSERT), i da su poznata imena tabela i kolona koje u njemu
ucestvuju; SQL iskaz se zamenjuje pozivom (u maticnom jeziku) odgovarajuce CLI
procedure, ali se izvrsavanjem programa taj poziv (pa dakle i sam SQL iskaz) ne
menja.
Za razliku od ovog, statickog SQL-a, u dinamickom SQL-u iskazi nisu poznati
u vreme pisanja aplikativnog programa i preciziraju se tek u fazi izvrsavanja programa. Takvi SQL iskazi, umesto da se eksplicitno navode u programu, zadaju
se u obliku niske znakova koja se dodeljuje maticnoj promenljivoj. SQL iskaz

se tada izgraduje
na osnovu podataka programa (npr. vrednost odgovarajuce
maticne promenljive moze da se dobije preko terminala). Kako vrednost maticne
promenljive moze da se menja u toku izvrsavanja programa, to i SQL iskaz dodeljen
moze da se menja u toku izvrsavanja programa.
toj maticnoj promenljivoj takode
Da bi dinamicki SQL iskaz mogao da se izvrsi, potrebno je pripremiti ga za
izvrsenje ugnjezdenim (statickim) iskazom PREPARE. Zatim se dinamicki iskaz
moze izvrsiti ugnjezdenim (statickim) iskazom EXECUTE.
Primer 3.52 Neka je V1 maticna promenljiva tipa niske znakova, koja je u programu dobila vrednost nisku znakova nekog izvrsnog SQL iskaza. Tada iskaz
EXEC SQL PREPARE

S1 FROM :V1

kreira izvrsni SQL iskaz cije je ime S1, od niske znakova kojom je iskaz zadat u
maticnoj promenljivoj V1. Posle provere uspesnosti izvrsenja PREPARE iskaza
moze se veci broj puta izvrsiti EXECUTE iskaz oblika
EXEC SQL EXECUTE S1
Dinamicki se mogu pripremiti i izvrsiti samo izvrsni SQL iskazi, i to najveci deo
njih (ne svi). Neki od tih iskaza su: ALTER, COMMIT, CREATE, DELETE,
DROP, INSERT, ROLLBACK, SELECT, SET, UPDATE. Potpuna lista ovih
iskaza moze se naci u [37].
Moguce je koristiti i ugnjezdeni (staticki) iskaz EXECUTE IMMEDIATE da bi
se u jednom koraku pripremio i izvrsio dinamicki SQL iskaz (primenjuje se obicno
kada je dinamicki SQL iskaz potrebno izvrsiti samo jedanput).
Primer 3.53 Ako vrednost maticne promenljive V1 jeste niska znakova DELETE
FROM KI WHERE K SIF = k1 , onda iskaz
EXEC SQL EXECUTE IMMEDIATE :V1

104

3 Upitni jezik SQL

izvrsava DELETE iskaz nad tabelom KI, pri cemu se brisu sva izdanja knjige sa
sifrom k1.
Dinamicki SQL iskaz ne sme da sadrzi obracanja maticnim promenljivim.
Umesto toga mogu se koristiti oznake parametara. Oznaka parametra je znak
pitanja (?) i navodi se na mestu na kome bi se navela maticna promenljiva kada bi
iskaz bio staticki. U vreme izvrsavanja pripremljenog SQL iskaza, oznake parametara se zamenjuju tekucim vrednostima maticnih promenljivih (ili strukture) koje
se navode u EXECUTE iskazu.
Primer 3.54 Ako je vrednost maticne promenljive V1 niska znakova INSERT
INTO K VALUES (?, ?, ?), posle izvrsenja iskaza
EXEC SQL PREPARE K INSERT FROM :V1
moze se izvrsiti iskaz
EXEC SQL EXECUTE K INSERT USING :KSIFRA, :KNASLOV, :KOBLAST
KSIFRA, KNASLOV i KOBLAST su maticne promenljive (tipa CHAR(5),
CHAR(50), CHAR(20), redom) koje odgovaraju shemi tabele K, tj. atributima
K SIF, NASLOV, OBLAST, redom.
Kada se, koriscenjem EXECUTE ili EXECUTE IMMEDIATE iskaza, izvrsi neki
dinamicki SQL iskaz, uspesnost izvrsenja tog dinamickog SQL iskaza registruje se
u promenljivoj SQLCODE prostora SQLCA, i moze se ispitivati na isti nacin kao
i u statickom SQL-u.
izvrsnim SQL iskazima koji ne mogu da se izvrsavaju dinamicki nalaze
Medu
se, na primer, i sledeci iskazi:
CLOSE
DECLARE
EXECUTE
EXECUTE IMMEDIATE

FETCH
OPEN
PREPARE
WHENEVER

Dinamicki pripremljeni SELECT iskaz se moze izvrsiti koriscenjem kursora,


tako sto se izvrse sledeci koraci (u slucaju fiksne liste atributa):
1. priprema iskaza
2. deklarisanje kursora nad imenom iskaza
3. otvaranje kursora
4. uzimanje vrsta iz rezultujuce tabele

3.6 Autorizacija i prava korisnika baze podataka

105

5. zatvaranje kursora.
Primer 3.55 Neka program pretrazuje sifre knjiga i sifre izdavaca iz tabele KI,
dinamickim izvrsavanjem SELECT iskaza oblika
SELECT K SIF, I SIF
FROM
KI
WHERE ...
Iskaz se cita sa terminala, pri cemu korisnik zadaje WHERE liniju. Neka je iskaz dodeljen maticnoj promenljivoj tipa niske znakova, KI NISKA. Izvrsenje dinamickog
iskaza realizovace se izvrsenjem sledecih statickih iskaza:
EXEC SQL PREPARE ISKAZ FROM :KI NISKA;
...
EXEC SQL DECLARE C1 CURSOR FOR ISKAZ;
...
EXEC SQL OPEN C1;
WHILE ...
{
...
EXEC SQL FETCH C1 INTO :K BR, :I BR;
...
}
...
EXEC SQL CLOSE C1;
Dinamicki SQL nudi potpunu fleksibilnost programiranja. U kompleksnom programu koji treba da izvrsava razlicite tipove i strukture SQL iskaza, tesko je (ili
cak nemoguce) modelirati sve te iskaze. Tada je pogodno koristiti dinamicki SQL.
Takav program je svaki program za interaktivno izvrsavanje SQL iskaza koji moze
da prihvati i izvrsi gotovo svaki SQL iskaz. Cena ove fleksibilnosti je dodatna
slozenost programiranja, kao i smanjena brzina izvrsavanja programa. Posebno je
slozeno dinamicko izvrsavanje SQL SELECT iskaza koji ima promenljivu SELECT
listu ([38]).

3.6

Autorizacija i prava korisnika baze podataka

Da bi baza podataka mogla bezbedno i efikasno da se koristi, svaki korisnik mora


imati autorizaciju (engl. authorization) za pristup sistemu za upravljanje bazama
podataka, tj. svakom korisniku mora da bude dodeljeno korisnicko ime kojim se
predstavlja tom sistemu.
Pored ovog, prvog nivoa sigurnosti baze, SUBP obicno podrzava i vise nivoe
bezbednosti. Na primer, razlicitim korisnicima ili grupama korisnika moze se
omoguciti da obavljaju razlicite opste zadatke nad bazama podataka, kao sto su

106

3 Upitni jezik SQL

povezivanja sa bazom, kreiranje tabela ili administriranje sistema. Za korisnike


se tada kaze da se razlikuju po nivoima autorizacije. S druge strane, razlicitim
korisnicima ili grupama korisnika mogu se dodeliti razlicita prava (engl. privilegies) pristupa i izvrsenja specificnih operacija nad specificnim objektima u bazi.
Na primer, da bi jedan korisnik mogao da menja podatke u nekoj tabeli, on mora
imati pravo (dodeljeno eksplicitno ili implicitno) za promenu podataka u toj tabeli.
Upravljanje autorizacijom i pravima je jedna od funkcija SUBP.
Sistem autorizacije i prava pristupa i manipulisanja objektima predstavlja hijerarhiju. Autorizacija viseg nivoa ukljucuje mogucnosti autorizacije nizeg nivoa,
dok neka prava ukljucuju skup drugih prava; na primer, pravo azuriranja ukljucuje
nivoa autorizacije i prava kojima
i pravo citanja podataka. Postoji i veza izmedu
raspolaze korisnik sa tim nivoom autorizacije.
Nivo autorizacije dodeljuje se korisniku eksplicitno. Pravo (ili skup prava) na

odredenom
objektu baze podataka korisniku se moze dodeliti eksplicitno ili implicitno. Za eksplicitnu dodelu koristi se SQL iskaz GRANT cija je sintaksa oblika
GRANT lista-prava ON objekat TO lista-korisnika
Na primer, jedno pravo nad bazom podataka je CONNECT (pristup bazi),
nad tabelom i indeksom ALTER (promena), DELETE (pravo brisanja slogova),
SELECT (pravo postavljanja upita).
Da bi se korisniku kome se dodeljuje pravo nad jednim objektom omogucilo da to
pravo prenese na treceg korisnika (prenosivo pravo), ono se mora dodeliti GRANT
iskazom sa opcijom WITH GRANT OPTION. Na primer, korisniku STUDENT
mogu se dodeliti prava citanja i unosa u tabelu tabela, sa pravom da ta prava
prenese, iskazom
GRANT SELECT, INSERT ON tabela TO USER STUDENT
WITH GRANT OPTION
Implicitno se dodela prava grupi korisnika vrsi dodelom nivoa autorizacije (npr.
korisnik sa najvisim nivoom autorizacije ima sva prava nad svim objektima baza),

izvrsavanjem nekih operacija (npr. operacija kreiranja baze podataka obezbeduje svim korisnicima prava povezivanja na tu bazu i kreiranja tabela u njoj), ili

izvodenjem
iz opstijeg prava (na primer, pravo azuriranja objekta implicira pravo
citanja vrednosti objekta).
Prethodno dodeljeno (implicitno ili eksplicitno) pravo nad pojedinim tipovima
objekata u bazi podataka moze se oduzeti korisniku SQL iskazom REVOKE oblika
REVOKE lista-prava ON objekat FROM lista-korisnika.
Na primer,
REVOKE SELECT, INSERT

ON tabela FROM STUDENT

3.6 Autorizacija i prava korisnika baze podataka

107

U sistemu DB2 postoje dva nivoa autorizacije upravljanja bazama podataka


i dva nivoa autorizacije sistemske kontrole (v. sliku 3.1). Autorizacija upravljanja podacima ima odgovornost za bezbednost i integritet podataka. Najvisi
nivo autorizacije celokupnog sistema jeste autorizacija za administriranje SUBP

(SYSADM) koja obezbeduje


kontrolu nad svim resursima (alatima i objektima)
upravljaca bazama podataka, i ukljucuje sva nize nivoe autorizacije DBADM,
SYSCTRL, SYSMAINT, kao i pravo da dodeli ili oduzme DBADM autorizaciju.
Drugi nivo autorizacije upravljanja bazama podataka (DBADM) vezan je za
administriranje specificne baze podataka. On ukljucuje prava kreiranja objekata,
izdavanja SQL komandi i pristup podacima u svakoj tabeli. Ovaj nivo autorizacije
ukljucuje pravo dodele ili oduzimanja najopstijeg prava nad specificnim objektom
(CONTROL prava) kao i pojedinacnih prava.
Autorizacija nivoa sistemske kontrole odnosi se samo na operacije koje se ticu
sistemskih resursa i ne dopusta direktan pristup podacima. Najvisi nivo sistemske
kontrole (SYSCTRL) omogucuje prava kreiranja, azuriranja i uklanjanja baze podataka odnosno prostora tabela. Drugi nivo sistemske kontrole nivo odrzavanja
sistema (SYSMAINT), ukljucuje prava odrzavanja baze podataka azuriranje konfiguracije baze podataka, pravljenje sigurnosnih kopija baze podataka ili prostora
tabela, restauraciju i pracenje postojece baze podataka.
U hijerarhiji prava, najvisi nivo pripada CONTROL pravu nad objektom baze
podataka koje ukljucuje punu kontrolu nad tim objektom, kao i pravo dodele
(GRANT) i oduzimanja (REVOKE) svih prava (osim CONTROL) nad tim objektom drugim korisnicima. Na primer, kreiranjem tabele odnosno pogleda stice se
automatski CONTROL pravo nad tom tabelom, kao i nad pogledom ako se poseduje CONTROL pravo nad svim tabelama i pogledima nad kojima je taj pogled
definisan.
U sistemu DB2, iskazom GRANT mogu se dodeliti, kako prava, tako i nivoi
autorizacije. Tako, nivo autorizacije DBADM moze dodeliti samo korisnik sa
SYSADM autorizacijiom. Za dodelu ostalih nivoa autorizacije potrebno je da korisnik ima neku od autorizacija administriranja SUBP. Ako je objekat u sintaksi
GRANT iskaza baza podataka (DATABASE), moguca prava vezana su za bazu u
celini (npr. CONNECT za povezivanje na bazu, CREATETAB za kreiranje tabela
u bazi, itd.), inace, ako je objekat neki objekat baze podataka (npr. tabela,
pogled, shema, indeks, itd.), lista prava koja se mogu nad tim objektom dodeliti
korisnicima zavisi od vrste objekta (v. [?]). Dodeljeno pravo je prenosivo (opcijom WITH GRANT OPTION) u sistemu DB2 samo za neke vrste objekata (npr.
sheme, tabele, poglede).
Lista-korisnika moze biti lista pojedinacnih korisnika (USER sa navedenim
imenima), gr
upa korisnika (GROUP sa navedenim imenom grupe) ili svih korisnika (PUBLIC).
Na primer,
GRANT UPDATE ON TABLE I TO PUBLIC

108

3 Upitni jezik SQL

SYSADM
(administrator
sistema)

DBADM
(administrator)
baze podataka)

SYSCTRL
(administrator
sistemskih resursa)

SYSMAINT
(administrator
odrzavanja sistema)

Korisnici baza podataka sa pravima

Slika 3.1: Hijerarhija nivoa autorizacije i prava


svim korisnicima daje pravo azuriranja tabele I u tekucoj bazi podataka. Ovaj
iskaz moze da izvrsi korisnik koji ima bar DBADM autorizaciju, CONTROL pravo
nad tabelom I, ili mu je pravo UPDATE nad tabelom I dodeljeno uz opciju WITH
GRANT OPTION.

3.7

Pitanja i zadaci

1. Kako se mogu klasifikovati relacioni upitni jezici?


2. Koji su jezici prethodili SQL-u i sta ih karakterise?
3. Navesti iskaze za manipulisanje podacima u SQL-u.
4. Definisati sledece pojmove SQL-a:

3.7 Pitanja i zadaci

109

jednostavni upitni blok

operator grupisanja

puni upitni blok

interaktivni SQL

SELECT iskaz

aplikativni SQL

podupit

staticki SQL

korelisani podupit

dinamicki SQL

agregatna funkcija

kursor

5. Dokazati relacionu kompletnost SQL-a.


6. Iskazima SQL-a formulisati upite iz zadatka 10 glave 2.
7. Iskazima SQL-a formulisati sledece upite:
Naci ukupni broj knjiga koje izdaje izdavac sa sifrom i1.
Naci ukupni tiraz knjige sa sifrom k6.
Naci ukupni tiraz knjiga ciji je jedan od autora pisac sa sifrom p2.
Za svaku knjigu koju izdaje neki izdavac naci sifru knjige, sifru izdavaca
i odgovarajuci ukupni tiraz.
Naci sifre knjiga koje je izdao samo izdavac sa sifrom i1.
Naci sifre autora knjiga koje su izdali svi izdavaci.
Naci sifre izdavaca koji izdaju knjigu sa sifrom k6 u izdanjima ciji je
prosecni tiraz manji od najmanjeg tiraza izdavaca i1.
8. Navesti primere iskaza unosenja, brisanja i azuriranja koji se korektno
izvrsavaju, i onih cije izvrsenje sistem odbija. Objasniti.
9. Iskazima SQL-a formulisati sledece zahteve:
Povecati tiraz svim izdanjima izdavaca Prosveta za 10%.
Iz izdavacke baze podataka izbrisati sve podatke o knjizi koja nije izdata.
U tabelu I uneti podatke o izdavacu sa sifrom i10 ciji status jos nije
poznat.
10. Koje su osnovne karakteristike aplikativnog SQL-a?
su kursori i koje se operacije nad kursorima mogu izvrsavati?
11. Sta
12. Navesti moguce vrednosti promenljive SQLCODE i objasniti njihovo znacenje.
13. Napisati program na aplikativnom SQL-u umetnutom u programski jezik C,
koji stampa sve podatke o izdavacima u rastucem poretku njihovih naziva.
Uz svakog izdavaca program treba da stampa i sve podatke o knjigama koje
taj izdavac izdaje, u rastucem poretku naslova knjiga.
14. Definisati sledece pojmove:

110

3 Upitni jezik SQL


staticki SQL

oznaka parametra

dinamicki SQL

autorizacija

PREPARE iskaz

nivo autorizacije

EXECUTE iskaz

pravo pristupa podacima

EXECUTE IMMEDIATE iskaz

prenosivo pravo

15. Da li su iskazi PREPARE i EXECUTE dinamicki ili staticki?


16. Koji se iskazi SQL-a mogu dinamicki izvrsavati, a koji ne mogu? Navesti
primere.
17. Navesti primer izvrsavanja dinamickog SELECT iskaza pomocu kursora.
18. Koje prednosti a koje nedostatke ima dinamicki SQL?
19. Koji su nivoi autorizacije u sistemu DB2?
20. Kakav je odnos nivoa autorizacije i skupa prava?
21. Opisati strukturu i semantiku GRANT i REVOKE iskaza
22. Navesti primer iskaza dodele prenosivog prava azuriranja tabele svim korisnicima.

Pogledi
U ovoj glavi bice predstavljene virtuelne relacije (tabele) pogledi, u obliku u
kome je njihovo definisanje i manipulisanje njima podrzano u SQL standardima i
aktuelnim implementacijama SQL-a. Jedan novi pristup pogledima, koji razresava
mnoge nelogicnosti u njihovom tretmanu u SQL-u, bice prikazan u poslednjem
odeljku ove glave ([27]).

4.1
4.1.1

Definisanje pogleda
Kreiranje pogleda

Pogledi su virtuelne tabele koje nemaju odgovarajucu fizicku reprezentaciju, vec je


njihova definicija, u terminima drugih tabela, zapamcena u sistemskom katalogu.
Iskaz za kreiranje pogleda u SQL-u ima sledeci osnovni oblik:
CREATE VIEW pogled [( kolona{,kolona})]
AS
podupit
[WITH CHECK OPTION]
Na primer,
CREATE VIEW IJUG
AS SELECT I SIF, STATUS, DRZAVA
FROM
I
WHERE DRZAVA = Jugoslavija
Kada se izvrsi ovaj CREATE iskaz, podupit SELECT... se ne izvrsava, vec se
samo struktura upita sacuva u katalogu.
Pogled IJUG je prozor, i to dinamicki, na tabelu I. Izmene nad pogledom
IJUG automatski se odrazavaju na baznu tabelu I, a izmene nad baznom tabelom I
automatski se projektuju na pogled IJUG, pod uslovom da se odnose na deo tabele I
111

112

4 Pogledi

nad kojim je pogled IJUG definisan, tj. pod uslovom da se izmene odnose na sifru,
status ili drzavu jugoslovenskog izdavaca. Svaki upit pretrazivanja ili azuriranja
nad pogledom IJUG sistem konvertuje u ekvivalentni upit nad baznom tabelom I.
Na primer, iskaz
SELECT *
FROM
IJUG
WHERE STATUS > 20
SQL kompilator konvertuje u ekvivalentni iskaz nad tabelom I:
SELECT I SIF, STATUS, DRZAVA
FROM
I
WHERE STATUS > 20 AND DRZAVA = Jugoslavija
Konverzija se vrsi zdruzivanjem SELECT iskaza koji zadaje korisnik i SELECT
iskaza zapamcenog u katalogu pri definisanju pogleda. Iz kataloga se zakljucuje
da FROM IJUG zapravo znaci FROM I, da se svaki izbor iz IJUG mora dodatno

kvalifikovati poredenjem
DRZAVA = Jugoslavija u logickom izrazu WHERE linije,
a da SELECT znaci SELECT I SIF, STATUS, DRZAVA.
Slicno bi se izvrsio i iskaz unosenja, brisanja ili azuriranja nad tabelom pogledom IJUG.
Podupit u CREATE VIEW iskazu je puni upitni blok (v. 3.3.9) a ne SELECT

iskaz u najopstijem obliku, pa ne moze, na primer, da ukljuci operaciju uredenja


ORDER BY (sto vazi za podupite uopste).
CHECK opcija oznacava da se operacije UPDATE i INSERT nad pogledom
izvrsavaju samo ako vrsta koja se menja odnosno unosi zadovoljava WHERE logicki
uslov podupita.
Mada su pogledi virtuelne tabele nad kojima je moguce vrsiti gotovo sve operacije kao i nad baznom tabelom, neka ogranicenja u radu sa tabelama pogledima
ipak postoje. To su, na primer, sledeca ogranicenja:
Operacija INSERT nad tabelom IJUG uvodi nedostajucu vrednost na koloni
NAZIV bazne tabele I ako ona nije definisana kao NOT NULL, odnosno belinu
ako je kolona definisana kao NOT NULL WITH DEFAULT. Ako je kolona
NAZIV definisana kao NOT NULL kolona, operacija INSERT nije dopustena.
Kako se azuriranja nad pogledom izvrsavaju kao azuriranja nad baznom tabelom, nije dopusteno pogledu dodavati vrstu sa vrednoscu primarnog kljuca
koja je vec prisutna u baznoj tabeli, cak i kada nije vidljiva u pogledu;
na primer, sifra izdavaca i2 nije vidljiva kroz pogled IJUG, ali se vrsta (i2,
30, Jugoslavija) ipak ne moze dodati INSERT iskazom pogledu IJUG kao
ni baznoj tabeli I, a ne moze se ni UPDATE iskazom vrednost kolone I SIF
izmeniti na i2. Takva operacija se odbija.
Operacija

4.1 Definisanje pogleda

113

UPDATE IJUG
SET
DRZAVA = Srbija
WHERE I SIF=i1
izbacila bi iz pogleda azuriranu vrstu, a operacija
INSERT INTO IJUG(I SIF, STATUS, DRZAVA)
VALUES (i8, 10, Amerika)
unela bi, kroz pogled, vrstu u baznu tabelu I. Uneta vrsta ne bi ni bila
ukljucena u pogled IJUG.
Poslednje dve operacije ne bi mogle da se izvrse nad pogledom cija definicija ukljucuje CHECK opciju (npr. ako definicija pogleda IJUG ukljucuje WITH
CHECK OPTION). CHECK opcija se moze zadati samo ako je pogled takav da
se moze azurirati (v. 4.3). Ako je UPDATE operacija dozvoljena samo na nekim
kolonama, onda se i CHECK opcija primenjuje samo na te kolone.
Sistem DB2 podrzava i precizniji ali i opstiji oblik definisanja pogleda. Tako,
CHECK opcija moze da ima dva pojavljivanja: LOCAL i CASCADED (podrazumevano).
Ako je pogled V definisan sa opcijom WITH CASCADED CHECK OPTION,

onda on nasleduje
uslove kojima je definisan svaki pogled od koga zavisi (koji se
pojavljuje, neposredno ili posredno, u FROM liniji pogleda V). Osim toga, i pogledi

definisani nad V nasleduju


sve te uslove. Dakle, nad uslovima kojima je definisan
pogled V i svi pogledi od kojih V zavisi, vrsi se operacija konjunkcije (AND) i njen
rezultat predstavlja uslov koji se primenjuje na unosenje i azuriranje pogleda V i
svakog pogleda koji je definisan nad V.
Ako je pogled V definisan sa opcijom WITH LOCAL CHECK OPTION, onda
se na unosenje i azuriranje pogleda V primenjuje samo uslov kojim je pogled V
definisan. Isto ovazi i za poglede definisane nad pogledom V.
Na primer, neka je definisan sledeci niz pogleda (P oznacava pojavljivanje
CHECK opcije i moze biti LOCAL ili CASCADED):
V1 je definisan nad baznom tabelom T
V2 je definisan nad pogledom V1 WITH P CHECK OPTION
V3 je definisan nad pogledom V2
V4 je definisan nad pogledom V3 WITH P CHECK OPTION
V5 je definisan nad pogledom V4
Tada pogledi V1V5, u zavisnosti od opcije LOCAL/CASCADED, pri unosenju
ili azuriranju podlezu proveri uslova sledecih pogleda:
P LOCAL P CASCADED
V1

V2 V2
V2,V1
V3 V2
V2,V1
V4 V2, V4
V4,V3, V2,V1
V5 V2, V4
V4,V3, V2,V1

114

4 Pogledi

Dalje, kao sto SELECT iskaz moze da realizuje pretrazivanje punim upitnim
blokom nad imenovanom izvedenom tabelom rezultatom izvrsavanja nekog upitnog bloka (WITH operatorom), slicnu mogucnost ima i definicija pogleda: podupit
kojim se pogled definise moze se primeniti na izvedenu imenovanu tabelu. Tada je
sintaksa iskaza za definisanje pogleda oblika
CREATE VIEW pogled [( kolona{,kolona})]
AS WITH izvedena tabela podupit
[WITH CHECK OPTION]
Na primer, pogled kojim se iz tabele I izdvajaju jugoslovenski izdavaci ciji je
status>20,moze se definisati i sledecim iskazom:
CREATE VIEW ijugw
AS WITH ijug1 AS (SELECT I_SIF, STATUS, DRZAVA
FROM I
WHERE DRZAVA = Jugoslavija)
SELECT *
FROM ijug1
WHERE STATUS>20
WITH CHECK OPTION

4.1.2

Eksplicitno imenovanje kolona pogleda

U iskazu kojim se kreira pogled IJUG nisu eksplicitno imenovane kolone tog

pogleda. Imena kolona nasledena


su od rezultata podupita kojim je pogled definisan (I SIF, STATUS, DRZAVA). U slucaju pogleda IJUG moguce je i eksplicitno
imenovanje kolona pogleda
CREATE VIEW IJUG (I SIF, STATUS, DRZAVA)
pri cemu imena kolona pogleda mogu biti razlicita od onih u rezultatu podupita,
ali mora ih biti isti broj.
Postoje slucajevi u kojima pogled ne moze da nasledi imena kolona od podupita
koji ga definise, pa je eksplicitno imenovanje kolona pogleda neophodno. To se
desava kada je neka kolona pogleda izvedena, funkcijom ili izrazom, iz kolone tabele
nad kojom je pogled definisan (pa ne postoji ime koje bi nasledila), ili ako dve ili
vise kolona pogleda treba da imaju isto ime. Ovi slucajevi su ilustrovani sledecim
primerima.
Primer 4.1 Kreirati pogled koji prikazuje sifre izdatih knjiga i njihove ukupne
tiraze.
CREATE VIEW
AS

KNJIGATIR (K SIF, UK TIRAZ)


SELECT K SIF, SUM(TIRAZ)
FROM
KI
GROUP BY K SIF

4.2 Pretrazivanje pogleda

115

Primer 4.2 Kreirati pogled koji prikazuje parove drzava takvih da izdavac iz prve
drzave izdaje knjigu pisca iz druge drzave (primer ujedno ilustruje i pogled definisan
nad vecim brojem baznih tabela).
CREATE VIEW PARDRZAVA (IDRZAVA, PDRZAVA)
AS SELECT DISTINCT I.DRZAVA, P.DRZAVA
FROM I, KI, KP, P
WHERE I.I SIF=KI.I SIF AND KI.K SIF=KP.K SIF AND KP.P SIF=P.P SIF

4.1.3

Kreiranje pogleda nad drugim pogledima

Kako SELECT iskaz moze da se izvrsava nad pogledom, moguce je i da SELECT


iskaz kojim se pogled definise, u svojoj FROM liniji ima neki prethodno definisani
pogled. Na primer,
CREATE VIEW DOBRIIJUG
AS
SELECT I_SIF, STATUS
FROM IJUG
WHERE STATUS > 20
Opcija provere (CHECK) nad pogledom koji je definisan nad drugim pogledom
realizuje se, u zavisnosti od pojavljivanja (LOCAL, CASCADED) prema pravilima
iz prethodne tacke.

4.1.4

Uklanjanje pogleda

Definisani pogled moze se ukloniti SQL iskazom


DROP VIEW ime-pogleda
Definicija pogleda se uklanja iz kataloga, i svi pogledi definisani nad tim pogledom postaju neoperativni (oni jos uvek postoje tako da se njihovo ime ne moze
koristiti za druge objekte dok se eksplicitno, DROP iskazom, i oni ne uklone, ali
se ne mogu koristiti dok se ponovo ne kreiraju definicijom identicnom inicijalnoj).
Ako se ukloni bazna tabela, svi pogledi definisani nad njom ili nad pogledima defin postaju neoperativni.
isanim nad tom tabelom, takode
Iskaz ALTER VIEW omogucuje izmenu vrlo spcificnih svojstava kolona pogleda,
koji su izvan dometa naseg interesovanja. Zato cemo smatrati da se definicija
jednom kreiranog pogleda ne moze menjati.

4.2

Pretra
zivanje pogleda

Konverzija upita pretrazivanja pogleda u upite pretrazivanja baznih tabela moze


se sprovesti kao sto je opisano ranije (tacka 4.1.1), pri cemu je taj proces obicno
jednostavan i pravolinijski. Problemi mogu da nastupe u nekim slucajevima, kao

116

4 Pogledi

kada se, na primer, kolona pogleda koja je izvedena primenom agregatne funkcije
pretrazuje kao konvencionalna kolona.
Primer 4.3 Neka se nad prethodno definisanim pogledom KNJIGATIR (primer
4.1) izvrsi SELECT iskaz pretrazivanja
SELECT *
FROM
KNJIGATIR
WHERE UK TIRAZ > 7000
Primenom mehanizma konverzije dobio bi se SELECT iskaz koji ima sledecu nekorektnu formu u SQL-u:
SELECT K SIF, SUM(TIRAZ)
FROM
KI
WHERE SUM(TIRAZ) > 7000
GROUP BY K SIF
Ta forma je nekorektna jer se u WHERE liniji ne sme naci agregatna funkcija
(SUM). Odgovarajuci korektni iskaz imao bi oblik
SELECT K SIF, SUM(TIRAZ)
FROM
KI
GROUP BY K SIF
HAVING SUM(TIRAZ) > 7000
ali neki SQL kompilatori ne umeju da naprave takvu konverziju.
U sistemu DB2 moguce je pretrazivati sve poglede na isti nacin kao i bazne
tabele.

4.3

A
zuriranje, uno
senje i brisanje nad pogledima

Azuriranje pogleda u ovom odeljku razmatrace se u najsirem smislu, koji ukljucuje


i unosenje, i brisanje, i izmenu (tj. azuriranje u uzem smislu).
Mada se pogledi, onako kako su ovde uvedeni, mogu (gotovo) svi pretraziti,
samo njihov manji deo moze se azurirati SQL-om.
Postoje pogledi za koje se znacenje azuriranja moze precizno opisati (kaze se
da se ti pogledi teorijski mogu azurirati), a postoje i pogledi za koje takav opis
ne postoji (oni se ni teorijski ne mogu azurirati). Primer za prvu grupu pogleda
je pogled IJUG: tu je jasno sta znaci uneti vrstu (i5, 40, Italija) (u tabelu I unosi
se vrsta (i5, , 40, Italija)), brisanje vrste (i1, 30, Jugoslavija) izvrsava se kao
brisanje iz tabele I vrste (i1, Prosveta, 30, Jugoslavija), a izmena drzave izdavaca

4.3 Azuriranje, unosenje i brisanje nad pogledima

117

i1 sa Jugoslavija na Srbija izvrsava se kao izmena na istoj koloni i vrsti u baznoj


tabeli.
Nemogucnost teorijskog azuriranja nekih pogleda proistice iz strukture tih

pogleda, a ne iz neprilagodenosti
jezika ili sistema da to azuriranje realizuju. Na
primer, u pogledu PARDRZAVA nije jasno sta bi uopste znacilo izbrisati vrstu
(Jugoslavija, Jugoslavija) koja pripada tom pogledu, tj. ne postoji izmena baznih
tabela I, P koja ima tacno efekat brisanja para (Jugoslavija, Jugoslavija) i niceg
drugog. Slicno vazi i za azuriranje u uzem smislu i unosenje u ovaj pogled.
Upitni jezik SQL omogucuje azuriranje nekog podskupa skupa pogleda koji se
teorijski mogu azurirati. Taj podskup se opisuje na sledeci nacin.
Pogled koji se definise nad jednom baznom tabelom, eliminacijom nekih vrsta
i nekih kolona te tabele, naziva se pogledom koji je podskup vrsta i kolona. SQL
omogucuje azuriranje samo pogleda koji su podskupovi vrsta i kolona. Ranije
kreirani pogled IJUG upravo je takvog tipa pa je njegovo azuriranje u SQL-u

moguce. Medutim,
SQL namece i specificna ogranicenja da bi ovakvi pogledi mogli
da se azuriraju:
(a) Ako je kolona pogleda izvedena od izraza u kome se primenjuje skalarna
operacija, skalarna funkcija ili konstanta, onda INSERT operacije nad pogledom nisu dozvoljene, UPDATE operacije su dozvoljene samo na preostalim
kolonama, a operacije brisanja su dozvoljene. Na primer, nad pogledom
CREATE VIEW T U HILJ (K SIF, I SIF, IZDANJE, H TIRAZ)
AS
SELECT K SIF, I SIF, IZDANJE, TIRAZ/1000
FROM
KI
INSERT operacija nije dozvoljena, UPDATE operacija nije dozvoljena na
koloni H TIRAZ (kompilator ne poseduje znanje o tome kako bi se ta operacija odrazila na baznu kolonu TIRAZ), a DELETE operacija je dopustena
i izvrsava se brisanjem odgovarajuce vrste iz bazne tabele.
(b) Ako je kolona pogleda izvedena od agregatne funkcije, onda taj pogled ne
moze da se azurira; na primer, nad pogledom
CREATE VIEW UT (UK TIRAZ)
AS
SELECT SUM(TIRAZ)
FROM
KI
ocigledno nema smisla ni jedna od operacija INSERT, UPDATE, DELETE.
(c) Ako definicija pogleda ukljucuje GROUP BY ili HAVING operatore, pogled se
ne moze azurirati. Na primer, na pogled KNJIGATIR (primer 4.1) ne moze se
primeniti INSERT operacija, niti UPDATE operacija na koloni UK TIRAZ.
DELETE operacije i UPDATE operacija na koloni K SIF teorijski se mogu
izvrsiti tako da izbrisu ili izmene sve odgovarajuce vrste u baznoj tabeli KI,
ali SQL sistema DB2 ni te operacije ne dopusta.

118

4 Pogledi

(d) Ako definicija pogleda ukljucuje DISTINCT opciju, pogled se ne moze


azurirati. Ovo je posledica pretpostavke da odabrana polja, cim su kvali
fikovana DISTINCT opcijom, ne odreduju
jednoznacno vrstu tabele, tj. ne
ukljucuju njen primarni kljuc. U takav pogled ne mogu se unositi vrste jer bi
to dovelo do unosenja NULL vrednosti na kolonama bazne tabele koje ulaze
u primarni kljuc. Na primer, u pogled
CREATE VIEW KBIB
AS
SELECT DISTINCT K SIF, I SIF
FROM
KI
ne mogu se unositi vrste (INSERT operacija nad tabelom KI podrazumeva
unosenje vrednosti i za kolonu IZDANJE koja je definisana kao NOT NULL
kolona). Za UPDATE i DELETE operacije vaze ista razmatranja kao u
slucaju (c).
U slucaju pogleda
CREATE VIEW KO
AS
SELECT DISTINCT K SIF, OBLAST
FROM K
sistem DB2 (SQL) nije svestan cinjenice da se u ovaj pogled moze, teorijski,
i unositi, i menjati, i brisati, jer je pogled ekvivalentan (u smislu identicnosti
sadrzaja) pogledu definisanom bez DISTINCT opcije (K SIF je primarni
kljuc); te operacije nisu dozvoljene nad ovim pogledom zbog njegove sintakse. Sistem DB2 (tj. kompilator njegovog SQL jezika) nema mogucnost
analize semantike pogleda.
(e) Ako podupit kojim je pogled definisan sadrzi neku od skupovnih operacija
(osim UNION ALL), pogled se ne moze azurirati. U slucaju UNION ALL
operacije, u pogled se ne moze vrsiti unosenje; da bi operacije brisanja i
azuriranja u uzem smislu mogle da se izvrse, postoje dalja ogranicenja: operandi UNION ALL operacije ne smeju biti definisani nad istom baznom
tabelom, a odgovarajuce kolone tih operanada moraju imati identicne tipove.
Na primer, nad pogledom
CREATE VIEW I 20 JUG
AS
SELECT I SIF, NAZIV, STATUS, DRZAVA
FROM I
WHERE STATUS < 20
UNION ALL
SELECT I SIF, NAZIV, STATUS, DRZAVA
FROM I
WHERE DRZAVA = Jugoslavija

4.4 Prednosti pogleda

119

INSERT operacija nije dozvoljena (jer definicija pogleda ukljucuje UNION


ALL operaciju), ali nisu dozvoljene ni UPDATE i DELETE operacije (jer su
operandi UNION ALL operacije definisani nad istom baznom tabelom).
(f) Ako FROM linija u definiciji pogleda ukljucuje (eksplicitno ili implicitno) veci
broj n-tornih promenljivih, pogled se ne moze azurirati. Na primer, pogled
CREATE VIEW K6 IZDAVACI
AS
SELECT I.I SIF, NAZIV, STATUS, DRZAVA
FROM
I, KI
WHERE I.I SIF=KI.I SIF AND KI.K SIF=k6
ima rezultat koji je podskup vrsta i kolona (bazne tabele I), ali SQL kompilator to ne prepoznaje jer se u FROM liniji SELECT iskaza nalaze dve
tabele. Ovaj pogled zato ne moze da se azurira u SQL-u, mada ga je teorijski

moguce azurirati. Medutim,


kada se ovaj pogled predefinise na sledeci nacin,
dobija se ekvivalentan pogled koji se moze azirirati i u SQL-u:
CREATE VIEW K6 IZDAVACI
AS
SELECT I SIF, NAZIV, STATUS, DRZAVA
FROM I
WHERE I SIF IN (SELECT I SIF
FROM KI
WHERE K SIF = k6)
U ovom pogledu nema visestrukih n-tornih promenljivih u FROM liniji pa se
prepoznaje da je pogled podskup vrsta i kolona.

4.4

Prednosti pogleda

Mehanizam pogleda, kao realizacija koncepta podmodela, omogucava znacajna


olaksanja u manipulisanju podacima relacione baze podataka. Zbog toga se podrska

mehanizmu pogleda, mada ne spada u minimalni skup svojstava koja odreduju


RSUBP, smatra vaznim konceptom koji podrzavaju svi ozbiljniji prototipski i
komercijalni relacioni sistemi za upravljanje bazama podataka.
Neke od prednosti mehanizma pogleda su sledece:
izvesna kolicina logicke nezavisnosti podataka; ako se baza podataka preprojektuje, pri cemu su iste informacije organizovane u nove tabele, programi
ne moraju da se menjaju jer mehanizam pogleda moze da se upotrebi da
simulira postojanje starih tabela;
iste podatke razni korisnici mogu videti na razne nacine; ovaj aspekt je
narocito vazan ako postoji veci broj raznorodnih grupa korisnika baze podataka;

120

4 Pogledi
pojednostavljena korisnicka predstava o bazi i manipulisanje njom; na primer,
pretrazivanje tabele PARDRZAVA je znatno jednostavnije od pretrazivanja
istih informacija iz pripadnih baznih tabela;
skrivanje podataka kao nacin kontrole ovlascenja; na primer, ne moze se prici
izdavacu i2 preko pogleda IJUG. Ako je skrivanje informacije o izdavacu i2
znacajno za neke grupe korisnika, najjednostavnije je to skrivanje ostvariti mehanizmom pogleda. Ubedljiv primer ovog aspekta pogleda je grupa

korisnika baze podataka o gradanima,


koja se bavi statistickim obradama.
Ovakvoj grupi se, kroz odgovarajuci pogled, ne dopusta uvid u specificne

podatke o odredenom
licu.

4.5

Novi pristup pogledima

U ovom odeljku bice izlozen jedan novi pristup pogledima ([27]), koji na formalan
i dosledan nacin tretira poglede kao imenovane izraze relacione algebre ili relacionog racuna. Iz ovog pristupa formalno logicki sledi niz svojstava pogleda koja se
odnose na mogucnost pretrazivanja i azuriranja pogleda, eliminisuci sasvim potrebu
za ad hoc pravilima u ovim domenima; takva pravila su inace karakteristicna za
sve standarde SQL-a, kao i za postojece implementacije (v. prethodne odeljke
ove glave). Ovaj pristup omogucuje i azuriranje znatno sire klase pogleda (npr.
pogleda definisanih nad vecim brojem tabela) nego sto je to slucaj sa prethodno
kako se relacioni izraz koji
izlozenim, klasicnim pristupom pogledima. Takode,
definise pogled zadaje relacionom algebrom ili relacionim racunom, pojmovi kao
sto su operatori grupisanja GROUP BY i HAVING ili opcija DISTINCT, karakteristicni za specificni (i u znatnoj meri manjkavi) upitni jezik SQL, ne ucestvuju vise
u razmatranju mogucnosti pretrazivanja i azuriranja pogleda.
Ovaj odeljak se odnosi na poglede kao koncept koji, u obliku u kome se izlaze,
nema podrsku SQL-a. Stoga ce i primeri i pravila biti izrazeni u terminima relacione
algebre kao formalizma koji je u direktnoj vezi (za razliku od SQL-a) sa relacionim
modelom.
Iskaz kreiranja pogleda ukljucuje ime pogleda i relacioni izraz. Imena kolona

pogleda nasleduju
se od rezultata relacionog izraza, s tim sto u relacionom izrazu
moze da ucestvuje (vise puta) i operacija prosirene relacione algebre za preimenovanje atributa, RENAME. Na primer (analogon primeru 4.2),
CREATE VIEW PARDRZAVA
((I RENAME DRZAVA AS IDRZAVA) * KI * KP *
(P RENAME DRZAVA AS PDRZAVA) ) [IDRZAVA, PDRZAVA]
Pogledi se pretrazuju ili konverzijom upita nad pogledom u upit nad baznom
tabelom, cija je restrikcija pojacana uslovima koji definisu sam pogled, ili materijalizacijom pogleda (kao privremene bazne tabele) i izvrsavanjem upita nad materijalizovanim pogledom.
Mehanizam azuriranja pogleda mora da zadovolji sledece osnovne principe.

4.5 Novi pristup pogledima

121

Mogucnost azuriranja pogleda mora biti bazirana na semantici pogleda a ne


na njegovoj sintaksi, tj. ne sme se dogoditi da je pogled definisan na jedan
nacin moguce azurirati, a da je isti pogled, definisan na drugi nacin, nemoguce
azurirati (v. pogled K6 IZDAVACI, odeljak 4.3).
Mogucnost azuriranja pogleda definisanog binarnom operacijom mora biti
simetricna (npr. brisanje iz pogleda koji je definisan operacijom preseka dve
relacije mora postovati princip brisanja iz obe relacije).
Operacije unosenja, brisanja i azuriranja pogleda moraju se izvrsavati kao
odgovarajuce operacije (unosenja, brisanja, azuriranja, redom) nad tabelama
nad kojima je pogled definisan.
Pravila azuriranja pogleda moraju biti rekurzivno primenljiva, jer pogled
moze biti definisan nad drugim pogledom.
Ako se pogled moze azurirati, onda to treba da vazi za sve operacije azuriranja
u sirem smislu unosenje, brisanje i azuriranje u uzem smislu.
Za svaki pogled podrazumeva se CHECK opcija, tj. pogled striktno
ogranicava skup n-torki kojima se moze pristupiti, na samo one n-torke
koje zadovoljavaju definiciju pogleda.
Pravila za azuriranje pogleda sada se zadaju u zavisnosti od operacije relacione
algebre kojom je definisan pogled, i to za svaku operaciju posebno. Pravila za
azuriranje pogleda koji je definisan izrazom koji ukljucuje veci broj operacija relacione algebre dobijaju se kombinovanjem pravila za pojedinacne operacije. Ovde
ce biti razmotreno nekoliko karakteristicnih operacija.

4.5.1

Unija, presek, razlika

U ovoj tacki razmatracemo samo uniju, ali odgovarajuca razmatranja vaze i za


presek i razliku.
Unosenje n-torke u pogled oblika R S, gde su R i S kompatibilni relacioni
izrazi, izvrsava se kao unosenje u rezultat onog relacionog izraza cije restrikcije
n-torka zadovoljava. Na primer, u pogled definisan unijom
(I[ STATUS >= 20]) (I[DRZAVA = Jugoslavija]),
moze se uneti cetvorka (i5, Mladost, 10, Jugoslavija), jer zadovoljava restrikciju

drugog relacionog izraza. Cetvorka


se u pogled unosi unosenjem u baznu relaciju I.
Iz unije se n-torka brise tako sto se izbrise iz svakog operanda unije ciju restrikciju zadovoljava.
Izmena n-torke je dopustena samo ako i ta n-torka i njena izmenjena vrednost
zadovoljavaju uslov date unije, tj. restrikciju jednog ili drugog (ne obavezno istog)
njenog operanda.

122

4 Pogledi

4.5.2

Restrikcija

Unosenje (brisanje, azuriranje) u pogled oblika R [logicki izraz] moze se izvrsiti


samo ako n-torka koja se unosi (brise, azurira, kao i azurirana vrednost) zadovoljava strukturu (i eventualne uslove) relacionog izraza R i logickog izraza koji

odreduje
restrikciju. Unosenje (brisanje, azuriranje) se izvrsava kao unosenje u
rezultat relacionog izraza R (brisanje iz R, azuriranje u R). Na primer, u pogled
definisan relacionim izrazom
I[DRZAVA = Jugoslavija],
moze se uneti cetvorka (i5, Mladost, 10, Jugoslavija), jer zadovoljava i strukturu

tabele I i logicki izraz koji odreduje


restrikciju. Cetvorka
se unosi u baznu tabelu I,
i istovremeno se vidi kroz pogled. S druge strane, unosenje koje narusava uslove
integriteta bazne tabele (npr. jedinstvenost primarnog kljuca) nece se izvrsiti.

4.5.3

Projekcija

Pogled koji je definisan projekcijom relacije R na neki podskup X njenih atributa


moze se azurirati ako skup atributa X sadrzi primarni kljuc relacije R. U tom
slucaju unosenje u pogled vrsi se popunjavanjem ostalih atributa relacije R nedostajucim vrednostima, pri cemu se postuju pravila integriteta, npr. jedinstvenost
primarnog kljuca. Pri brisanju iz pogleda brise se cela n-torka relacije R, dok se pri
izmeni menjaju vrednosti navedenih atributa projekcije pogleda, ukoliko se time
ne narusavaju uslovi integriteta. Na primer, u pogled definisan relacionim izrazom
I[I SIF, STATUS],
moze se uneti par (i5, 20) (kao cetvorka (i5, NULL, 20, NULL) u tabelu I), ali
se ne moze uneti par (i1, 10), jer je vrednost i1 primarnog kljuca tabele I vec
prisutna u tabeli I. Iz ovog pogleda moze se izbrisati par (i1, 30) i to brisanjem
cetvorke (i1, Prosveta, 30, Jugoslavija) iz tabele I. Izmena para (i1, 30) u par
(i1, 20) realizuje se kao izmena cetvorke (i1, Prosveta, 30, Jugoslavija) tabele I

u cetvorku (i1, Prosveta, 20, Jugoslavija); medutim,


izmena para (i1, 30) u par
(i2, 30) nije dopustena, jer narusava jedinstvenost primarnog kljuca I SIF.
Azuriranje pogleda koji je definisan projekcijom na atribute koji ne ukljucuju
primarni kljuc relacije predstavlja problem.
Unosenje u takav pogled nije
dopusteno, jer bi podrazumevalo unosenje nedostajucih vrednosti na atributima
iz primarnog kljuca, koji nisu ukljuceni u atribute projekcije. Brisanje iz takvog
pogleda bi se realizovalo kao brisanje svih n-torki cele relacije koje zadovoljavaju
logicki izraz kojim je definisano brisanje. Azuriranje n-torke ovakvog pogleda se
odnosi, opet, na azuriranje svih n-torki odgovarajuce relacije koje zadovoljavaju
logicki izraz kojim je definisano azuriranje. Primer ovakvog pogleda je pogled
PARDRZAVA (iz primera 4.2), definisan relacionim izrazom
((I RENAME DRZAVA AS IDRZAVA) KI KP
(P RENAME DRZAVA AS PDRZAVA) ) [ IDRZAVA, PDRZAVA ].

4.6 Pitanja i zadaci

123

Ovaj relacioni izraz ukljucuje projekciju relacije, koja je rezultat prirodnog spajanja cetiri relacije, na atribute IDRZAVA, PDRZAVA. Ovi atributi ne ukljucuju
primarni kljuc relacije koja se projektuje, pa u pogled definisan ovom projekcijom,
prema prethodnom, nije dopusteno unosenje.

4.5.4

Prirodno spajanje

Novi pristup pogledima koji se u ovom odeljku izlaze ima za rezultat mogucnost
azuriranja svih pogleda koji su definisani operacijom prirodnog spajanja. Azuriranje

takvih pogleda moze da ima izvesne bocne efekte, ali ti bocni efekti obezbeduju
integritet azuriranog pogleda, tj. relacija nad kojima je pogled definisan.
Pretpostavimo, na primer, da tabela KI nema strani kljuc I SIF, i da je u tabeli
KI prisutna petorka (i5, k5, 1, 1990, 10000) koja se odnosi na izdavaca sa sifrom
i5 o kome ne postoji informacija u tabeli I. Neka je pogled definisan relacionim
izrazom
I KI
i neka se u pogled unosi osmorka (i5, Mladost, 20, Jugoslavija, k6, 2, 1995, 5000).
Ovo unosenje se realizuje kao unosenje cetvorke (i5, Mladost, 20, Jugoslavija) u

tabelu I, i petorke (i5, k6, 2, 1995, 5000) u tabelu KI. Medutim,


unosenje u tabelu
I proizvodi, kao bocni efekat, unosenje jos jedne osmorke u pogled to je osmorka
(i5, Mladost, 20, Jugoslavija, k5, 1, 1990, 10000).
Uopste, unosenje n-torke u u pogled definisan operacijom prirodnog spajanja
dveju relacija, R S, realizuje se kao unosenje u relaciju R dela n-torke u koji se
odnosi na atribute iz R i, ako to nije vec postignuto bocnim efektom, kao unosenje
u relaciju S dela n-torke u koji se odnosi na atribute iz S. Slicno se izvrsavaju
operacija brisanja i operacija izmene n-torki. Nijedna od ovih operacija ne sme da
narusi uslove integriteta relacija R, S.
Detaljnije razmatranje izlozenog pristupa pogledima, sa specificnostima efekata
pojedinih operacija azuriranja na pojedine relacione izraze koji definisu poglede,
moze se naci u [27].

4.6

Pitanja i zadaci

je pogled?
1. Sta
2. Objasniti iskaz za definisanje pogleda u SQL-u.
3. Kako se izvrsava iskaz pretrazivanja pogleda u SQL-u?
4. Kada je neophodno eksplicitno imenovati kolone pogleda?
5. Koji se pogledi mogu azurirati u SQL-u?
6. Koje su prednosti pogleda?

124

4 Pogledi

7. Opisati novi, sistematicni prilaz pogledima i razmotriti njegove prednosti.


8. Kreirati pogled nad izdavackom bazom podataka koji se sastoji od svih iz ca.
davaca koji su izdali neki roman Branka Copi
9. Kreirati pogled nad izdavackom bazom podataka koji se sastoji od svih izdavaca, knjiga koje su izdali i autora tih knjiga.
10. Neka je data sledeca definicija pogleda:
CREATE VIEW V TIRAZ
AS
SELECT *
FROM
KI
WHERE TIRAZ > 5000
Formulisati SQL iskaze nad baznim tabelama kojima se izvrsavaju sledeci
iskazi pretrazivanja i azuriranja pogleda:

SELECT *
FROM
V TIRAZ
WHERE K SIF > k3

UPDATE V TIRAZ
SET
TIRAZ = TIRAZ * 1.1
WHERE GODINA > 1990

DELETE FROM V TIRAZ


WHERE GODINA < 1960

INSERT INTO V TIRAZ


VALUES (k1, i1, 1, 1960, 5000)

Standardi SQL-a
Cilj standardizovanja jezika baza podataka je da obezbedi prenosivost definicija
baza podataka i aplikativnih programa medju implementacijama koje su saglasne sa
standardom. Za razmenu definicija baza podataka i pogleda specificnih za aplikaciju
moze se koristiti jezik za definisanje podataka. Jezik za manipulisanje bazama
podataka obezbedjuje operacije nad podacima koje omogucuju razmenu kompletnih
aplikacionih programa.
Od 1986. godine, kada je prvi put standardizovan (ANSI American National
Standard Institute, americki standard i ISO International Standard Organization,

medunarodni
standard), jezik baza podataka SQL je u neprestanom razvoju od
strane veceg broja organizacija za standardizaciju (ANSI, ISO, FIPS Federal Information Processing Standards for the US federal government, IEC International
Electrotechnical Commision, itd). Najnovija puna verzija standarda publikovana je
1992. godine, ANSI X3.135-1992 i ISO/IEC 9075:1992. Puni naziv ovog standarda

je Medunarodni
standardni jezik baza podataka (1992) (International Standard
Database Language SQL (1992) [?]), mada se srece i pod nazivom SQL2, SQL-92.
SQL2 znacajno prosiruje standarde iz 1986. i 1989. godine, ukljucenjem jezika
za manipulisanje shemom, tabela za informacije o shemama, novih olaksica za
dinamicko kreiranje SQL iskaza, novih tipova podataka i domena. Ostale novine
SQL2 standarda ukljucuju spoljasnje spajanje, kaskadno azuriranje i brisanje kod
referencijalnog integriteta, skupovnu algebru nad tabelama, nivoe konzistentnosti
transakcija, skrolovane kursore, odlozenu proveru uslova ogranicenja, i znacajno
prosirenje dijagnostike, tj. izvestavanje o izuzecima i greskama. SQL2 eliminise
veliki broj ogranicenja kako bi jezik postao sto fleksibilniji i neprotivurecniji ([?],
[?]). Detaljniji opis resenja ovog standarda izlozen je u sledecoj tacki.
Dalja prosirenja i poboljsanja SQL standarda su u razvoju, i odnose se na
promociju SQL-a u izracunljivo kompletan jezik za definisanje i upravljanje perzistentnim, kompleksnim objektima. Za 1995. godinu planirano je bilo objavljivanje
novog standarda SQL-a, SQL3, kompatibilnog sa SQL2, ali obogacenog objektnim aspektom podataka (o objektnom modelu podataka bice reci u Dodatku).
125

126

5 Standardi SQL-a

SQL3 ukljucuje korisnicki definisane i apstraktne tipove podataka (ATP, koji se


grade po uzoru na C++ klase), sa hijerarhijama generalizacije i specijalizacije i

visestrukim nasledivanjem,
objekte kao njihove instance, metode, polimorfizam i
ucaurenje (enkapsulaciju). SQL3 je izracunljivo kompletan jezik (ima kontrolne
strukture i ne zahteva ugnjezdenja u programske jezike opste namene).
Razna svojstva ukljucena u predlog SQL3 standarda su u razlicitim fazama
razvoja, i imaju razlicite statuse. Godine 1993, ANSI i ISO komiteti za razvoj
odlucili su da razloze buduci razvoj SQL-a u visedelni standard. Ti delovi su:
I Opis strukture dokumenta.
II Jezgro specifikacije, ukljucujuci ATP i svojstva objektnog SQL-a.
III SQL/CLI (Call Level Interface): verzija zasnovana na elementima standarda
SQL2 bila je publikovana 1995. godine kao ISO/IEC 9075-3:1995. Dalji rad
na ovoj komponenti, koji treba da obezbedi podrsku novim svojstvima u
ostalim delovima SQL-a, u razvoju je.
IV SQL/PSM: specifikacija zapamcenih procedura (engl. Persistent Stored Modules). Ova komponenta ukljucuje sve aspekte izracunljive kompletnosti jezika
promenljive, iskaze dodele, grananja, iteracije, strukturu bloka, poziv
procedura i funkcija, obradu greske; posebno je znacajna za klijent/server
okruzenje. Jedna verzija ove komponente standardizovana je 1996. godine
(9075-4:1996).
V SQL/veznici: veznici za dinamicki SQL i ugnjezdeni SQL preuzeti su iz SQL2;
godine 1998. publikovan je standard veznika za objektne jezike (C++ i Java)
SQL/OLB, ANSI X3.135.101998.
VI SQL/XA: SQL specijalizacija popularnog XA interfejsa koji je razvio
globalnog upravljaca transakcijama i SQL upravljaca resurX/Open, izmedu
sima. Standardizuje pozive funkcija prema standardu distribuirane obrade
transakcija (Remote Database Access Part3:SQL, ISO/IEC 9579-3:1996,
Part2:SQL, ISO/IEC 9579-2:1998).
VII SQL za vremenske serije: SQL podprojekat za razvoj i poboljsanje mehanizama za upravljanje vremenskim serijama.

Godine 1993. odobren je novi ISO/IEC projekat za razvoj SQL biblioteke klasa
za multimedijalne aplikacije, tzv. SQL Multimedia (SQL/MM). Ideja je da se
specifikuju paketi definicije SQL apstraktnih tipova podataka (ATP) koriscenjem
svojstava SQL3, i da se stanardizuju posebne biblioteke klasa za nauku i tehniku,
obradu dokumenata i puno pretrazivanje tekstova, kao i metode za upravljanje
multimedijalnim objektima kao sto su slika, zvuk, animacija, muzika, video.

5.1 Standardni jezik baza podataka SQL2

5.1

127

Standardni jezik baza podataka SQL2

Puno ime ovog standarda je Medunarodni


standardni jezik baza podataka SQL
(1992), a neformalno se zove i SQL2 ili SQL-92. Izlaganje o ovom standardu
organizovano je u tacke koje se odnose na definisanje podataka, manipulisanje podacima i na aplikativni SQL. Iako taj standard vazi za standard relacionog upitnog
jezika, nigde u njegovoj obimnoj specifikaciji ne pominje se termin relacioni. On
se definise, jednostavno, kao standardni jezik baza podataka.
tri nivoa saglasnosti raznih varijanti SQL jezika sa
Standard SQL2 predvida
resenjima iz standarda puni (full), srednji (intermediate) i pocetni (entry) SQL.
Pocetni SQL ukljucuje iskaze za definisanje sheme, jezik manipulisanja podacima, referencijalni integritet, proveru uslova integriteta, ugnjezdenje SQL-a u
sedam razlicitih programskih jezika, direktno izvrsenje iskaza manipulisanja podacima, SQLSTATE parametar, (pre)imenovanje kolona u SELECT listi, opciju
pri kreiranju pogleda WITH CHECK OPTION.
Srednji SQL ukljucuje bitno nova svojstva kao sto su iskazi za promenu sheme,
dinamicki SQL i nivoi izolovanosti SQL transakcija, podrsku kaskadnom brisanju,
unijsko spajanje, operacije nad niskama karaktera, operacije preseka i razlike, jed tipovima podataka, kompletnostavne domene, CASE izraz, transformaciju medu
niju dijagnostiku i analizu gresaka, visestruki izbor skupova karaktera, intervalne i
pojednostavljene tipove datuma/vremena i niske karaktera promenljive duzine.
Puni SQL ukljucuje jos i imenovanje i odlozenu proveru uslova integriteta,
prosirenu podrsku tipovima datuma/vremena, azuriranje i brisanje iz tabele nad
kojom je zadat i logicki izraz WHERE linije, kaskadno azuriranje, skrolovane kursore, niske bitova kao tipove podataka, privremene tabele, dodatne opcije uslova
integriteta i opste uslove ogranicenja.
Svojstva SQL2 izlozena u sledecim tackama uglavnom se odnose na puni SQL.
Standard SQL2 sadrzi niz poboljsanja u odnosu na prethodni SQL standard.
Uprkos tome, on jos uvek ima neke nedostatke. Osnovni nedostaci i ovog standarda
leze u neadekvatnoj podrsci nekim bitnim svojstvima relacionog modela. Neki
od tih nedostataka su slaba podrska domenima, nedosledno operisanje pogledima,
odsustvo podrske operaciji deljenja, mogucnost dupliranja vrsta, podupiti.

5.1.1

Definisanje podataka

Domen.
Novost u odnosu na prethodni standard SQL-a u pogledu definisanja
podataka jeste izvesna (prilicno slaba) podrska domenima, kao i podrska uslovima
integriteta domena.
Iskazi za kreiranje i uklanjanje domena su oblika
CREATE DOMAIN naziv-domena [AS] tip-podataka
[ podrazumevana-definicija ]
[ lista-definicija-ogranicenja-domena ]

128

5 Standardi SQL-a
DROP DOMAIN naziv-domena opcija

Komponenta tip-podataka je skalarni tip podataka iz prosirenog skupa koji


ukljucuje, pored ranijih, i sledece tipove:
BIT [VARYING] (n)
INTERVAL
DATE
TIME
TIMESTAMP.
Podrazumevana (DEFAULT) definicija precizira podrazumevanu vrednost tog
domena i oblika je
DEFAULT podrazumevana-vrednost
Na primer,
DEFAULT NULL
Definicija-ogranicenja-domena je uslov integriteta koji se odnosi na svaki atribut
definisan nad tim domenom; ogranicenje domena predstavlja, u sustini, skup dopustenih vrednosti domena i zadaje se logickim izrazom proizvoljne kompleksnosti.
Na primer, iskaz
CREATE DOMAIN K SIF AS CHAR(5) DEFAULT ?
CONSTRAINT BROJ KNJIGE
CHECK (VALUE >= k1 AND VALUE <= k5001)
kreira domen koji se zove K SIF i za koji se podrazumeva vrednost ? (ako se
vrednost ne navede); nad tim domenom je definisano jedno ogranicenje (CONSTRAINT) koje se zove BROJ KNJIGE i koje precizira oblik dopustenih vrednosti.
Opcija pri uklanjanju domena moze biti RESTRICT ili CASCADE, pri cemu
prva onemogucuje uklanjanje domena ako postoje atributi definisani nad njim, a
druga prenosi uklanjanje domena tako sto atributi koji su nad njim bili definisani
postaju definisani nad tipom podataka nad kojim je bio definisan domen koji se
i iskaze za izmenu (ALTER) domena i njegove definiuklanja. Standard predvida

cije, uvodenje
i uklanjanje podrazumevane vrednosti (SET, DROP DEFAULT),
dodavanje i uklanjanje ogranicenja domena (ADD, DROP CONSTRAINT).
Osim ovih mogucnosti, definicija domena ne podrzava pravu semantiku domena

(npr. ne proverava se domenska kompatibilnost kod poredenja,


korisnik ne moze
zadavati operacije nad novim domenima, nema podrske podtipovima i nadtipovima,
itd).

5.1 Standardni jezik baza podataka SQL2

129

Bazna tabela.
Definicija bazne tabele (CREATE TABLE) je prosirena mogu
cnoscu navodenja
domena za atribute, kao i definicijom ogranicenja bazne tabele
koja, osim primarnog i stranog kljuca, moze da ukljuci i kandidate kljuceva (oblika
UNIQUE (lista-atributa), koji ne obavezuju na NOT NULL atribute) i provere
ogranicenja tabele (oblika CHECK(logicki-izraz)). Definicija stranog kljuca sada
moze da sadrzi, osim akcije pri brisanju, i akciju pri azuriranju koja moze biti NO
ACTION (slicno prethodnoj RESTRICT), CASCADE, SET DEFAULT ili SET
NULL.
Na primer, bazna tabela KI moze biti definisana u SQL2 sledecim CREATE
TABLE iskazom:
CREATE TABLE KI
(K SIF
K SIF
NOT NULL,
I SIF
I SIF
NOT NULL,
IZDANJE IZDANJE NOT NULL,
GODINA GODINA NULL,
TIRAZ
TIRAZ
0,
PRIMARY KEY (K SIF, I SIF, IZDANJE),
FOREIGN KEY (K SIF) REFERENCES K
ON DELETE NO ACTION
ON UPDATE NO ACTION,
FOREIGN KEY (I SIF) REFERENCES I
ON DELETE CASCADE
ON UPDATE CASCADE,
CHECK (IZDANJE>0 AND IZDANJE<50 ))
Atribut K SIF definisan je nad domenom K SIF (dopustena su ista imena
atributa i domena), a slicno vazi i za ostale atribute; NULL odnosno 0 uz
definiciju atributa GODINA odnosno TIRAZ, oznacava podrazumevanu vrednost
(u slucaju da se vrednost atributa izostavi).
mogucnost definisanja perzistentnih (trajnih) i privremenih
Standard predvida
baznih tabela. Perzistentne bazne tabele su bazne tabele u uobicajenom znacenju.
Privremene (TEMPORARY) bazne tabele vezane su za jednu konekciju (prikljucenje) SQL-klijenta na SQL-server (u klijent-server okruzenju, v. 18) i materijalizuju
se tek pri izvrsenju funkcija koje se u toku te konekcije pozivaju iz programa na
maticnom jeziku (v. tacke 5.1.2 Manipulisanje podacima i 5.1.3 Aplikativni SQL).
Na pocetku konekcije privremene tabele su prazne, dok se na kraju konekcije njihov
sadrzaj opet brise. Na privremene tabele se, za razliku od trajnih baznih tabela,
ne primenjuje puna funkcionalnost RSUBP kontrola konkurentnosti, oporavak,
registrovanje u katalog, itd.
Izmena bazne tabele (ALTER TABLE) sada se moze odnositi kako na dodavanje tako i na uklanjanje atributa, kljuceva, podrazumevanih vrednosti i uslova
ogranicenja tabele.
Uklanjanje bazne tabele (DROP TABLE) moze da ukljuci i opciju (RESTRICT

130

5 Standardi SQL-a

ili CASCADE) koja ce zabraniti uklanjanje, odnosno preneti dejstvo uklanjanja ako
postoji pogled ili uslov ogranicenja definisan nad tom tabelom.
Op
sti uslov ograni
cenja.
ogranicenja je

Opsti oblik iskaza za kreiranje i uklanjanje uslova

CREATE ASSERTION ime-pravila CHECK( uslov)


DROP ASSERTION ime-pravila
Uslov je logicki izraz proizvoljne slozenosti, koji moze da ukljuci (slicno formuli

relacionog racuna) operacije poredenja,


IN, BETWEEN, LIKE operacije, egzistencijalno kvantifikovane relacione izraze i logicke operacije AND, NOT, OR, kao i

neke nove predikate (kvantifikovana poredenja


i testove jedinstvenosti UNIQUE,
podudaranja MATCH, preklapanja OVERLAPS). Logicke operacije su trovalentne (v. 2.1.3, Prosirena relaciona algebra), pa i logicka vrednost uslova pripada
skupu {true, false, unknown}.
Na primer, uslov ogranicenja baze podataka o izdavastvu koji je formulisan kao
ni jedan izdavac sa statusom manjim od 20 ne moze izdavati ni jednu knjigu u
tirazu vecem od 5000 moze se zadati sledecim iskazom:
CREATE ASSERTION KI1 CHECK
(NOT EXISTS ( SELECT * FROM I, KI
WHERE I.STATUS < 20 AND
I.I SIF = KI.I SIF AND KI.TIRAZ > 5000))
Uslov ogranicenja koji se zadaje ovim iskazom moze da se odnosi na celu bazu
podataka (dakle, na veci broj tabela), ali moze da se odnosi i na pojedinacnu tabelu,
kao i na specificni atribut pojedinacne tabele. Posto se poslednja dva slucaja mogu
izraziti i na drugi nacin (CREATE TABLE odnosno CREATE DOMAIN iskazom),
iskaz CREATE ASSERTION predstavlja izvesnu meru redundantnosti razmatranog
standarda.
Shema. Prema ovom standardu, svi objekti baze podataka (domeni, tabele,
pogledi, kolone, itd.) definisu se kao elementi odgovarajucih SQL shema (ili samo
shema). Semantika pojma shema odgovara istom konceptu u SQL DB2 (v. 3.2.1),
i razlikuje se od pojma relacione sheme dok je slicna pojmu sheme relacione baze
podataka, kako su definisani relacionim modelom (v. 1.2). Na ovo znacenje pojma shema ukazuje i sintaksa definicije sheme u SQL2 koja od vaznijih komponenti
ukljucuje sledece:
CREATE SCHEMA ime-sheme
[ definicija-domena | definicija-tabele |
definicija-pogleda | definicija-uslova-ogranicenja

5.1 Standardni jezik baza podataka SQL2

131

{, definicija-domena} {, definicija-tabele}
{, definicija-pogleda} {, definicija-uslova-ogranicenja}
]
Shema se moze i ukloniti iskazom oblika
DROP SCHEMA ime-sheme
pri cemu se moze navesti i opcija (RESTRICT ili CASCADE) koja ce zabraniti
uklanjanje sheme ako ona sadrzi objekte baze podataka, odnosno implicitno izvrsiti
odgovarajuce DROP iskaze na objektima sadrzanim u shemi.
Ime svake tabele koja je komponenta kreirane sheme kvalifikuje se (eksplicitno
ili implicitno) imenom sheme.

5.1.2

Manipulisanje podacima

Prosirenje standarda SQL2 u sferi manipulisanja podacima ogleda se u sledecim


svojstvima:
SQL2 podrzava nekoliko novih skalarnih operacija i funkcija (u odnosu na
prethodni standard): operaciju dopisivanja (||), funkcije UPPER, LOWER,
SUBSTRING, LENGTH (za niske karaktera i bitova), operacije sabiranja
(+), oduzimanja (), mnozenja () i deljenja (/) nad podacima tipa DATETIME odnosno INTERVAL, funkcije za konverziju tipova, operaciju CASE

za navodenje
uslovne vrednosti, itd.
SQL2 podrzava relativno kompletnu dijagnostiku (informacije o izvrsenju
iskaza i eventualnim greskama). Manipulativni iskazi proizvode, osim vrednosti koda u celobrojnoj promenljivoj SQLCODE, i vrednost znakovnog tipa
u promenljivoj SQLSTATE, kao i informacije o uslovima izvrsenja u prostoru dijagnostike (engl. diagnostics area), koje se mogu dobiti operacijom
GET DIAGNOSTICS.
U FROM liniji SELECT iskaza moze da se pojavi i lista izvedenih tabela, tj.
lista tabela rezultata punih SELECT blokova; na primer, iskaz
SELECT P SIF, I SIF
FROM P, (SELECT *
FROM I
WHERE I STATUS > 10) AS DOBRIIZD
WHERE P.DRZAVA = DOBRIIZD.DRZAVA
izdaje parove sifara pisca i izdavaca iz iste drzave, pri cemu se uzimaju u obzir
samo dobri izdavaci sa statusom vecim od 10.
SQL2 podrzava dodelu imena izvedenoj koloni i izvedenoj tabeli, u SELECT
liniji odnosno u FROM liniji; na primer, iskaz

132

5 Standardi SQL-a
SELECT K SIF, I SIF, Tiraz u hilj.= AS KOM, TIRAZ/1000 AS TuH
FROM KI
.
.
.
proizvodi rezultattabelu sa cetiri kolone; prve dve su imenovane imenima
kolona tabele KI K SIF i I SIF, treca je imenovana KOM i ima konstantni
sadrzaj, dok je naziv cetvrte kolone TuH i ona sadrzi tiraze u hiljadama
primeraka (v. i prethodni primer).
SQL2 podrzava novu, eksplicitnu operaciju spajanja, koja ukljucuje sve vrste
spajanja Dekartov proizvod, prirodno, slobodno, unutrasnje, spoljasnje i
unijsko spajanje. Sintaksa ove operacije je
tabela-1 CROSS JOIN |
[NATURAL] [INNER | LEFT | RIGHT | FULL | UNION] JOIN
tabela-2
[ON logicki-izraz]
CROSS JOIN oznacava Dekartov proizvod, dok se unijsko spajanje (UNION
JOIN) odnosi na spoljasnju uniju (v. tacku 2.1.3 Prosirena relaciona algebra).
Opcija INNER odnosi se na unutrasnje (obicno) spajanje, kako prirodno tako
i slobodno. Opcije LEFT, RIGHT i FULL odnose se na levo, desno i puno
spoljasnje spajanje. Prirodno spajanje (NATURAL) vrsi se po jednakim vrednostima jednako imenovanih atributa navedenih tabela, i pri tom se ON opcija ne sme navesti, dok je u slucaju slobodnog ()-spajanja (NATURAL se
izostavlja) ON opcija obavezna i definise uslov spajanja. Na primer,
SELECT *
FROM
(I NATURAL JOIN KI)
Tabele tabela-1 i tabela-2 mogu biti i izvedene tabele u smislu iz prethodnih
paragrafa.

Sintaksa SQL2 omogucuje zapis TABLE T ekvivalentan SELECT bloku (SELECT FROM T ).
SQL2 podrzava, pored operacije UNION, i eksplicitne operacije preseka i
razlike, INTERSECT i EXCEPT. Operacija preseka je viseg prioriteta od operacija unije i razlike. Tabele argumenti ovih operacija moraju biti izvedene,
tj. zadate SELECT blokovima ili izrazima oblika TABLE tabela. Moguce je
eksplicirati redosled odgovarajucih kolona u tabelama operandima.
U SQL2 moguce je koristiti ugnjezdene pune SELECT upitne blokove za
predstavljanje skalarnih vrednosti; to je ucinjeno, na primer, u SELECT liniji
sledeceg iskaza:

5.1 Standardni jezik baza podataka SQL2

133

SELECT I.I SIF, (SELECT SUM(KI.TIRAZ)


FROM KI
WHERE KI.I SIF = I.I SIF ) AS UK TIRAZ
FROM I
Logicki izraz, gdegod se pojavljuje u SQL-u, moze da ukljuci i binarnu operaciju poklapanja MATCH UNIQUE, koja dobija vrednost tacno ako se njen
prvi operand (n-torka) poklapa sa tacno jednom n-torkom tabele koja je njen
drugi operand. U slucaju da su prisutne i nedostajuce vrednosti, MATCH
operacija ima opcije FULL (puno) i PARTIAL (delimicno).
Logicki izraz ukljucuje i (dvovalentni) pozitivni i negativni test nedostajuce
vrednosti oblika IS NULL i IS NOT NULL, kao i test vrednosti logickog izraza
(p) oblika
(p) IS [NOT] TRUE
(p) IS [NOT] FALSE
(p) IS [NOT] UNKNOWN

((p) je (nije) tacno)


((p) je (nije) netacno)
((p) je (nije) nepoznato).

Argument agregatne funkcije koja ukljucuje opciju DISTINCT moze biti


proizvoljni izraz, a ne obavezno ime kolone.
Provera uslova ogranicenja moze biti odlozena, tj. suspendovana i zatim
ponovo aktivirana; na primer,
SET CONSTRAINTS KI1 DEFERRED
...
SET CONSTRAINTS KI1 IMMEDIATE
SQL2 standardizuje prikljucenje konekciju klijenta na server tj. na bazu koja
je na serveru. Tako se SQL konekcija definise kao asocijacija SQL klijenta i
SQL servera (v. 18) a moze se ostvariti eksplicitno, iskazom konekcije koji
izvrsava klijent i koji identifikuje zeljeni SQL server. Iskaz je oblika
CONNECT TO ime-SQL-servera [ USER ime-korisnika]
| DEFAULT
Ovim iskazom konekciji se moze dodeliti i ime. Jedan klijent moze da ostvari
vise konekcija sa raznim serverima (ukljucujuci i podrazumevani DEFAULT

server), pri cemu je u odredenom


trenutku tekuca ona konekcija ciji je iskaz
konekcije poslednji izvrsen.
Imenovana (ili podrazumevana) konekcija moze da postane tekuca i izvrsavanjem
iskaza
SET CONNECTION ime-konekcije | DEFAULT

134

5 Standardi SQL-a
Konekcija se moze ostvariti i implicitno, pozivom (sa klijenta) procedure na
serveru, pri cemu se, ako ne postoji nijedna konekcija, ostvaruje konekcija sa
podrazumevanim serverom.
SQL konekcija se zavrsava eksplicitno, iskazom
DISCONNECT

ime-konekcije | DEFAULT | CURRENT | ALL

pri cemu se zatvara imenovana, podrazumevana (DEFAULT), tekuca (CURRENT) konekcija, odnosno sve postojece konekcije klijenta.
Konekcija se moze zatvoriti i implicitno, po izvrsenju poslednje procedure
pozvane iz aplikativnog programa ili poslednjeg interaktivnog SQL iskaza.

5.1.3

Aplikativni SQL

Neke od znacajnijih mogucnosti koje pruza standard SQL2 u domenu aplikativnog


SQL-a su sledece:

sa programskim jezicima PL/I, Pascal, Ada, FOR SQL2 obezbeduje


sumedu
TRAN, C, COBOL i MUMPS.
Bogatiji skup operacija nad kursorima; tako, pored ostalih, tu su operacije
uzimanja prethodne kao i naredne, prve kao i poslednje vrednosti kursora
(FETCH PRIOR, FETCH NEXT, FETCH FIRST, FETCH LAST), pri cemu
se podrazumeva naredna vrednost (NEXT) ako se nista ne naglasi, a za svaki
drugi izbor (PRIOR, FIRST, LAST) kursor mora biti deklarisan opcijom
SCROLL:
DECLARE X SCROLL CURSOR
FOR SELECT ...

SQL2 eksplicira koncept transakcije uvodenjem


iskaza za pocetak transakcije (SET TRANSACTION) kojim se zadaju nivoi izolovanosti transakcije
(READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ,
SERIALIZABLE) i/ili nacin pristupa podacime (status transakcije) READ
ONLY, READ WRITE.
Pored iskaza za pocetak transakcije SET TRANSACTION, eksplicitni su i
iskazi uspesnog odnosno neuspesnog zavrsetka transakcije (COMMIT, ROLLBACK, v. odeljak 14.1 Transakcija i integritet).
Nivo SERIALIZABLE je najjaci stepen izolovanosti i garantuje linearizovanost izvrsenja; to je i podrazumevani nivo izolovanosti.
Najslabiji nivo izolovanosti transakcije je READ UNCOMMITTED koji
dopusta pojavu svih problema konkurentnosti osim izgubljenog azuriranja
(v. odeljak 14.3 Problemi konkurentnosti). Ti problemi se manifestuju

5.1 Standardni jezik baza podataka SQL2

135

kao fenomen citanja nepostojecih podataka1 (engl. dirty read, v. zavisnost


od ponistenog azuriranja, odeljak 14.3), i fenomeni neponovljivog citanja
odnosno fantomskih redova. 2
Nivo READ COMMITTED dopusta drugi i treci od navedenih fenomena,
a REPEATABLE READ samo treci. Dakle, po stepenu izolovanosti prema
standardu nivoi su: SERIALIZABLE, REPEATABLE READ, READ COMMITTED, READ UNCOMMITTED. Ovim nivoima izolovanosti odgovaraju
u sistemu DB2 redom sledeci nivoi: REPEATABLE READ, READ STABILITY, CURSOR STABILITY, UNOMMITTED READ.
Pored ugnjezdenja SQL iskaza u maticni jezik, SQL2 uvodi i koncept SQL procedure na serveru koja se poziva (CALL iskazom) iz programa na maticnom
jeziku. Deklaracija procedure ukljucuje, pored parametara, jedinstveni SQL
iskaz, i mora biti u skladu sa pravilima maticnog jezika iz kog se poziva.
Kao i IBM proizvodi DB2, i SQL2 podrzava dinamicki SQL, izuzetno vazno
sredstvo za konstrukciju slozenih aplikacija. Na primer, tipicna on-line aplikacija (aplikacija koja podrzava pristup bazi podataka preko on-line terminala) mora da ukljuci sledeci niz koraka:
1. prihvatanje komande sa terminala;
2. analiza komande;
3. izdavanje odgovarajuceg SQL iskaza bazi podataka;
4. vracanje poruke i rezultata na terminal.

Umesto da se u programu predvidaju


svi moguci oblici iskaza koji se unosi sa terminala u vreme izvrsavanja programa, pogodno je konstruisati
SQL iskaz dinamicki (iskazom PREPARE), a zatim ga kompilirati i izvrsiti
dinamicki (iskazom EXECUTE, v. odeljak 3.5 Dinamicki SQL). SQL2
takode
ukljucuje veci broj iskaza za podrsku dinamickom SQL-u, npr. PREPARE
za pripremu iskaza za izvrsenje, DEALLOCATE PREPARE za dealokaciju
vec pripremljenog SQL iskaza, EXECUTE za pridruzivanje parametara i
izvrsenje pripremljenog iskaza, EXECUTE IMMEDIATE za jednokratnu
pripremu i izvrsenje, DESCRIBE za opis ulaznih parametara i rezultujucih
kolona pripremljenog iskaza, DECLARE ili ALLOCATE CURSOR za definisanje dinamickog kursora nad pripremljenim iskazom, OPEN za otvaranje
i pridruzivanje parametara dinamickom kursoru, ALLOCATE / DEALLOCATE / GET / SET DESCRIPTOR za manipulisanje prostorom za ulazne
1 Do
citanja nepostoje
cih podataka dolazi kada transakcija T1 a
zurira podatak koji zatim, pre
okon
canja transakcije T1 , druga transakcija T2
cita, a onda transakcija T1 ponisti svoje a
zuriranje.
2 Do neponovljivog
citanja dolazi kada transakcija T1 pro
cita podatak koji zatim, pre okon
canja
transakcije T1 , druga transakcija T2 promeni ili izbrise, a onda transakcija T1 ponovo pokusa da
pro
cita isti podatak; do fantomskih redova dolazi kada transakcija T1 pro
cita skup podataka koji
zadovoljavaju zadati uslov, zatim, pre okon
canja transakcije T1 , druga transakcija T2 promeni
taj skup, a onda transakcija T1 ponovo pro
cita podatke po istom uslovu, pri
cemu nailazi na
promenjen skup.

136

5 Standardi SQL-a
parametre pripremljenog iskaza i za rezultujuce vrednosti dinamickog FETCH
ili SELECT iskaza.
mogucnost dinamickog izvrsenja odredenih

SQL2 predvida
grupa SQL iskaza,
kao sto su:
manipulativni iskazi (SELECT, DELETE, INSERT, UPDATE),
iskazi definisanja (CREATE, ALTER, DROP),
iskazi transakcija, itd.

5.2

Pitanja i zadaci

1. Navesti karakteristike nacrta standarda SQL3.


novo donosi standard SQL2 u oblasti domena?
2. Sta
3. Objasniti resenja standarda SQL2 u oblasti integriteta.
4. Koje su nove mogucnosti manipulisanja podacima ukljucene u SQL2?
5. Konstruisati u SQL2 primer tabela i upita u kome se koristi spoljasnje spajanje, i opisati rezultat izvrsavanja tog upita.
6. Uporediti resenja SQL2 vezana za aplikativni SQL sa odgovarajucim resenjima
dijalekta DB2 SQL.

Upitni jezik QUEL


QUEL (QUEry Language) je upitni jezik RSUBP INGRES (INteractive Graphics and Retrieval System), razvijenog na Kalifornijskom univerzitetu u Berkliju,
SAD ([23], [59]). QUEL je zasnovan na relacionom racunu n-torki, i ima najvise
zajednickih svojstava sa jezikom DL/ALPHA (Data Language ALPHA), koji je
konstruisao Codd 1971. godine kao jednu implementaciju relacionog racuna ([15]).
Pored upitnog jezika QUEL, koji je primarni (i originalni) upitni jezik sistema
INGRES, komercijalni INGRES (razvijen u kompaniji RTI, Kalifornija) podrzava i
relacioni upitni jezik SQL. Bez obzira na znacaj koji je dobio SQL kao standard, kao
i na razloge za usvajanje SQL standarda, dobri poznavaoci oba upitna jezika smatraju QUEL tehnicki superiornim u odnosu na SQL, jer je QUEL lakse i efikasnije
implementirati, uciti i koristiti.

6.1

Interaktivni QUEL

6.1.1

Definisanje podataka

Iskazi definisanja podataka u QUEL-u ukljucuju iskaze za kreiranje i uklanjanje


baze podataka, i za kreiranje i uklanjanje tabele, tj. redom,
CREATEDB
DESTROYDB
CREATE
DESTROY

ime-baze-podataka
ime-baze-podataka
ime-bazne-tabele ( def-kolone {, def-kolone})
ime-bazne-tabele

Definicija kolone, def-kolone, ima oblik


ime-kolone = tip-kolone [ definisanost],
a definisanost se odnosi na dopustanje nedostajucih vrednosti (WITH NULL),
zabranu nedostajucih vrednosti (NOT NULL), odnosno njihovu zamenu specificnim
137

138

6 Upitni jezik QUEL

vrednostima odgovarajuceg tipa (NOT NULL WITH DEFAULT, sto se i podrazumeva ako se nista ne navede).
Na primer, iskaz
CREATE I (I SIF
NAZIV
STATUS
DRZAVA

=
=
=
=

C6,
C20,
I2,
C20)

kreira tabelu I sa tri kolone tipa niske znakova (I SIF, NAZIV, DRZAVA) i sa
jednom kolonom tipa kratkog celog broja (STATUS).

6.1.2

Manipulisanje podacima

U svom manipulativnom delu upitni jezik QUEL ima iskaz deklarisanja n-torne
promenljive oblika
RANGE OF lista-promenljivih IS ime-tabele
Na primer, RANGE OF IX IS I.
Svaka n-torna promenljiva iz liste promenljivih uzima za svoje vrednosti vrste
tabele ime-tabele.
Iskazi pomocu kojih QUEL komunicira sa bazom jesu iskazi pretrazivanja (RETRIEVE), unosenja (APPEND), brisanja (DELETE) i zamene (REPLACE). Opsti
oblik ovih iskaza je
iskaz [[INTO | TO] ime-rezultata]
[WHERE logicki-izraz]

( ciljna-lista)

gde je iskaz RETRIEVE [UNIQUE], APPEND, DELETE ili REPLACE.


Za RETRIEVE i APPEND iskaze, ime-rezultata je ime tabele kojoj se dodeljuju
pretrazene n-torke, odnosno u koju se unose nove n-torke; u iskazu RETRIEVE
tada se navodi i rezervisana rec INTO, a u iskazu APPEND rezervisana rec
TO. Za REPLACE i DELETE, ime-rezultata je ime n-torne promenljive koja, kroz
logicki-izraz, identifikuje n-torke koje ce se modifikovati ili brisati (INTO/TO se ne
navodi). Ako se u iskazu RETRIEVE ime-rezultata izostavi, pretrazene n-torke se
izdaju na ekran (stampac). Opcija UNIQUE uz iskaz RETRIEVE ima isti efekat
kao opcija DISTINCT u SQL-u.
Ciljna-lista je sastavljena od elemenata dodele oblika
kolona-rezultata = QUEL izraz
Ovde kolona-rezultata jeste kolona rezultujuce tabele, koja treba da dobije vrednost
odgovarajuceg QUEL izraza. Ukoliko QUEL izraz jednoznacno imenuje kolonu
rezultujuce tabele, kolona-rezultata i znak jednakosti se ne navode. U DELETE
iskazu nema ciljne liste.

6.1 Interaktivni QUEL

139

QUEL izraz sastavljen je od indeksiranih promenljivih (promenljivih oblika


t.A, gde je t n-torna promenljiva, a A atribut pripadne relacije), konstanti i
operacija. Vrednost izraza je tipa kolone-rezultata.
Primer 6.1 Za svaku izdatu knjigu, naci sifru knjige, sifru izdavaca i tiraz u hiljadama primeraka.
RETRIEVE (KI.K SIF, KI.I SIF, OBJASNJ. = Tiraz u hiljadama primeraka,
TuH = KI.TIRAZ/1000)
Rezultat:
K SIF
k1
k2
k3
k4
k5
k6
k6

I SIF
i1
i1
i1
i1
i2
i3
i4

OBJASNJ.
Tiraz u hiljadama
Tiraz u hiljadama
Tiraz u hiljadama
Tiraz u hiljadama
Tiraz u hiljadama
Tiraz u hiljadama
Tiraz u hiljadama

primeraka
primeraka
primeraka
primeraka
primeraka
primeraka
primeraka

TuH
10
7
10
10
5
3
5

Primer 6.2 Naci parove sifara izdavaca iz iste drzave.


RANGE OF PRVI IS I
RANGE OF DRUGI IS I
RETRIEVE (PRVI.I SIF, DRUGI.I SIF)
WHERE PRVI.DRZAVA = DRUGI.DRZAVA AND PRVI.I SIF < DRUGI.I SIF
Za svaku n-tornu promenljivu koja se javlja u WHERE liniji a ne pojavljuje
se u ciljnoj listi, podrazumeva se da je egzistencijalno kvantifikovana. Agregatna
funkcija ANY, koja vraca vrednost 0 ako je njen argument prazan skup, a 1 u
da se upotrebi za modeliranje egzistencijalnog kvantifikasuprotnom, moze takode
tora (ANY(. . . ) = 0 je analogon negacije SQL kvantifikatora NOT EXISTS, v.
primer 6.8).
Primer 6.3 Izmeniti status izdavaca sa sifrom i1 na 20.
REPLACE I (STATUS = 20)
WHERE
I.I SIF = i1

Primer 6.4 Izbrisati izdavaca sa sifrom i4.


DELETE I WHERE I.I SIF = i4

140

6 Upitni jezik QUEL

Primer 6.5 Dodati tabeli K BC (koja ima iste atribute kao i tabela K) sve vrste
tabele K cija je sifra K SIF jednaka k1 ili k3.
APPEND TO K BC (K SIF = K.K SIF, NASLOV = K.NASLOV,
OBLAST = K.OBLAST)
WHERE K.K SIF = k1 OR K.K SIF = k3

6.1.3

Agregatne operacije i funkcije

QUEL podrzava agregatne funkcije (u terminologiji QUEL-a agregatne operacije)


COUNT, AVG, MAX, MIN, SUM, ANY, COUNTU, AVGU i SUMU (u poslednje
tri operacije U oznacava jedinstvenost, engl. unique, sto realizuje efekat opcije
DISTINCT u SQL-u). Za razliku od SQL-a, u QUEL-u je dopustena upotreba
agregatnih operacija i u WHERE liniji (sto cini upotrebu HAVING linije nepotrebnom). Argument agregatne operacije moze biti kvalifikovan WHERE linijom ili
BY opcijom, pri cemu agregatna operacija u QUEL-u postaje agregatna funkcija.
Primer 6.6 Naci prosecni status jugoslovenskih izdavaca.
RETRIEVE (Z = AVG(I.STATUS WHERE I.DRZAVA = Jugoslavija))
Primer 6.7 Naci sifre izdavaca koji su izdali vise od 10 izdanja.
RETRIEVE (KI.I SIF)
WHERE COUNT(KI.K SIF BY KI.I SIF) > 10
Sve n-torne promenljive koje se navode unutar agregatne funkcije su lokalne za
agregatnu funkciju, osim promenljivih u BY opciji koja se ponasa slicno GROUP
BY liniji u SQL-u. Zato se u BY opciji navode n-torne promenljive koje imaju
znacenje izvan agregatne funkcije, a koje mogu da ucestvuju i u logickom izrazu
WHERE linije agregatne funkcije. Sledeci primer to dobro ilustruje.
ca.
Primer 6.8 Naci nazive izdavaca koji su izdali sve knjige Branka Copi
Ovaj upit je razmatran u odeljku 2.1 kao ilustracija operacije deljenja, i u
primeru 3.26 glave 3. Pretpostavimo da je tabela K BC vec kreirana i da se u njoj
ca. Tada se upit pretrazivanja u QUEL-u
nalaze sve (i samo) knjige Branka Copi
izrazava primenom agregatne funkcije ANY na sledeci nacin:
RETRIEVE (I.NAZIV)
WHERE ANY (K BC.K SIF BY I.I SIF
WHERE ANY (KI.K SIF BY K BC.K SIF, I.I SIF
WHERE KI.I SIF = I.I SIF AND
KI.K SIF = K BC.K SIF ) = 0 ) = 0
Argument agregatne funkcije moze biti i druga agregatna funkcija.

6.1 Interaktivni QUEL

141

Primer 6.9 Naci prosecni ukupni tiraz izdavaca.


RETRIEVE (Z = AVG(SUM(TIRAZ BY KI.I SIF)))
Ovo je primer upita koji se ne moze izraziti jednim SQL iskazom. Mogu se konstruisati i razne druge vrste takvih primera.

6.1.4

Relaciona kompletnost QUEL-a

Upitni jezik QUEL je relaciono kompletan, sto se jednostavno dokazuje sledecim


razmatranjem.
1. Skupovna operacija unije relacija R(A1 , . . . , An ), S(B1 , . . . , Bm ), za m = n,
moze se izraziti sledecim QUEL iskazima (pretpostavlja se da je vec kreirana
tabela T sa n atributa C1 , C2 , . . . , Cn ):
RANGE
RANGE
APPEND
APPEND

OF r IS R
OF s IS S
TO T (C1 = r.A1 , . . . , Cn = r.An )
TO T (C1 = s.B1 , . . . , Cn = s.Bn )

(slicno za operacije preseka i razlike).


2. Skupovna operacija Dekartovog proizvoda relacija R, S moze se izraziti
sledecim QUEL iskazima:
RANGE
RANGE
APPEND

OF r IS R
OF s IS S
TO T (C1 = r.A1 , . . . , Cn = r.An ,
Cn+1 = s.B1 , . . . , Cn+m = s.Bm )

3. Operacija restrikcije relacije R po logickom uslovu moze se izraziti QUEL


iskazom:
RANGE
OF r IS R
APPEND TO T (C1 = r.A1 , . . . , Cn = r.An )
WHERE
( je logicki izraz u QUEL sintaksi).
4. Operacija projekcije relacije R na atribute Ai1 , . . . , Aik moze se izraziti QUEL
iskazom:
RANGE
OF r IS R
APPEND TO T (C1 = r.Ai1 , . . . , Ck = r.Aik )
5. Operacija slobodnog -spajanja relacija R, S po paru atributa Ai , Bj moze
se izraziti QUEL iskazom:
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 )
WHERE r.Ai s.Bj

142

6 Upitni jezik QUEL

6. Operacija prirodnog spajanja relacija R, S po paru atributa Ai , Bj moze se


izraziti QUEL iskazom:
RANGE
RANGE
APPEND

OF r IS R
OF s IS S
TO T (C1 = r.A1 , . . . , Cn = r.An , Cn+1 = s.B1 ,
. . . , Cn+j1 = Bj1 , Cn+j = Bj+1 , . . . , Cn+m1 = s.Bm )
WHERE r.Ai = s.Bj

7. Operacija deljenja relacije R(A1 , A2 ) po atributu A2 , relacijom S(B1 ), moze


se izraziti QUEL iskazom:
RANGE
RANGE
RANGE
APPEND

6.1.5

OF r1 IS R
OF r2 IS R
OF s IS S
TO T (C1 = r1 .A1 )
WHERE ANY(s.B1 BY r1 .A1
WHERE ANY(r2 .A1 BY s.B1 , r1 .A1
WHERE r2 .A1 = r1 .A1 AND r2 .A2 = s.B1 ) = 0) = 0

Iskazi DEFINE i MODIFY

Definisanje pogleda u QUEL-u je veoma slicno definisanju pogleda u SQL-u. Iskaz


definisanja pogleda ima oblik
DEFINE VIEW ime-pogleda ( ciljna-lista) WHERE logicki-izraz
Nad pogledom se mogu izvrsavati operacije analogne operacijama nad pogledima u
SQL-u. S obzirom na znatno sistematicniju sintaksu QUEL-a, u QUEL-u se mogu
izvrsavati neke operacije pretrazivanja pogleda koje ne mogu u SQL-u. U slucaju
azuriranja pogleda, ovi jezici ponasaju se slicno.
Za definisanje fizicke reprezentacije relacije i metoda pristupa, QUEL ukljucuje
iskaz izmene fizicke reprezentacije relacije
MODIFY ime-relacije TO struktura [UNIQUE] ON

atr 1, . . . , atr k

gde struktura moze biti HEAP (gomila, sekvencijalna neuredena


reprezentacija),
ISAM (sortirana, indeks-sekvencijalna reprezentacija), HASH (direktna, hes reprezentacija), BTREE (dinamicka indeksna reprezentacija), HEAPSORT (sekven
cijalna uredena
reprezentacija), kao i odgovarajuce komprimovane reprezentacije
(CHEAP, CISAM, CHASH, CBTREE, CHEAPSORT) (o fizickoj organizaciji podataka uopste bice vise reci u delu ??). Na primer,
MODIFY I TO BTREE UNIQUE ON I SIF
QUEL poseduje i iskaz za definisanje sekundarnih indeksa koji se odnose na
indeksnu organizaciju sa vise negrupisucih indeksa (v. glavu 12),

6.2 Aplikativni QUEL

143

INDEX ON ime-relacije IS ime-indeksa (atr 1, . . . , atr k)


Na primer,
INDEX ON I IS INDNAZIV (NAZIV).
Integritetni deo relacionog modela u QUEL-u se ostvaruje iskazom
DEFINE INTEGRITY ON n-torna-promenljiva IS logicki-izraz
Ovim iskazom mogu se zadati samo uslovi integriteta koji ukljucuju logicki izraz
tipa restrikcije, tj. logicki izraz moze da ukljuci samo n-tornu promenljivu iz ovog
iskaza. Na primer, DEFINE INTEGRITY ON I IS I.STATUS > 0. Postupkom
modifikacije upita svaka izmena nad tabelom I dopunjuje se uslovom integriteta
definisanim nad tom tabelom.
Integritet entiteta je u QUEL-u podrzan CREATE iskazom, dok referencijalni integritet nije podrzan (osim posredno, kroz neke od komercijalnih INGRES

sumeda).

6.2

Aplikativni QUEL

Kao i SQL, i QUEL ima svoju aplikativnu varijantu. To je EQUEL (Embedded QUEL), QUEL ugnjezden u programski jezik C (kao i u jezike Ada, BASIC,
COBOL, FORTRAN, PL/I, Pascal).
Osnovni princip EQUEL-a je princip dualnosti, tj. princip da se svaki QUEL
iskaz koji se moze izvrsiti interaktivno, moze upotrebiti i u aplikativnom (EQUEL)
programu; obrat ne vazi, tj. postoji niz iskaza koji se mogu upotrebiti u aplikativnom, ali ne i u interaktivnom radu.
Osnovne karakteristike EQUEL jezika mogu se sumirati na sledeci nacin:
obradu kroz prekompilator, koji izvrsne
EQUEL program mora da prode
QUEL iskaze zamenjuje pozivima (u maticnom jeziku) izvrsnog EQUEL sistema. Zato sve linije aplikativnog programa koje treba da obradi prekompilator pocinju znakom ## u prve dve zauzete kolone; to su linije koje sadrze
QUEL iskaze, ali i deklaracije maticnog jezika (npr. C) kojima se deklarisu
programske promenljive koje ce se navesti u nekom QUEL iskazu.
Izvrsni QUEL iskazi u EQUEL programu mogu se pojaviti na svakom mestu
gde mogu i izvrsni iskazi maticnog jezika.
Programske promenljive mogu se koristiti u ciljnoj listi RETRIEVE iskaza,
kao imena n-tornih promenljivih, kao imena tabela i kolona, unutar QUEL
izraza i logickih izraza.
EQUEL program moze pristupiti samo jednoj bazi podataka u jednom
trenutku; za pristup bazi, odnosno za kraj rada sa bazom, koriste se EQUEL
iskazi otvaranja odnosno zatvaranja baze podataka:

144

6 Upitni jezik QUEL


## INGRES ime-baze-podataka
## EXIT
Programske promenljive i kolone tabela mogu imati isto ime, ali onda imenu
kolone prethodi znak #. Na primer,
## RETRIEVE (STAT = I.STATUS, DRZAVA = I.#DRZAVA)
##
WHERE I.I SIF = DATA SIFRA
(STAT, DRZAVA i DATA SIFRA su programske promenljive prethodno
deklarisane u skladu sa tipom kolona STATUS, DRZAVA i I SIF).

Od svih QUEL iskaza, jedini koji se u aplikativnoj varijanti koncepcijski raz


likuje od interaktivne jeste iskaz RETRIEVE. Problem predstavlja razlika izmedu
skupovno orijentisanog QUEL-a (objekat pretrazivanja i rezultat pretrazivanja je
tabela, dakle skup vrsta) i slogovno orijentisanog programskog jezika. Jedan od
nacina za resavanje ovog problema su, kao i u SQL-u, kursori. Drugi nacin je

RETRIEVE petlja. Tako se RETRIEVE iskaz bez navodenja


rezultujuce tabele,
koriscenjem RETRIEVE petlje moze predstaviti kao:
## RETRIEVE ( ciljna-lista)
##
[WHERE logicki-izraz]
##{
programski-blok
##}
Ovaj iskaz izvrsava se tako sto se programski-blok izvrsava po jedanput za svaku
vrstu za koju je logicki-izraz tacan.
Primer 6.10 Uneti u tabelu K vrstu sa vrednostima atributa koje su u programskim promenljivim K SIF, NASLOV i OBL.
## APPEND TO K (#K SIF = K SIF, #NASLOV = NASLOV, OBLAST = OBL)
Primer 6.11 Izbrisati sva izdanja izdavaca cija je drzava data u programskoj
promenljivoj DRZAVA.
## DELETE KI
## WHERE KI.I SIF = I.I SIF AND I.#DRZAVA = DRZAVA
Primer 6.12 Uvecati status svih jugoslovenskih izdavaca za vrednost programske
promenljive DOD.
## REPLACE I (STATUS = I.STATUS + DOD)
##
WHERE I.DRZAVA = Jugoslavija

6.3 Pitanja i zadaci

145

Primer 6.13 Program na EQUEL-u za citanje (sa ulaza) naziva izdavaca i


stampanje njegovog statusa moze imati sledeci oblik:
main()
{
## char NAZIVIZD[20];
## int ST;
while (READ( NAZIVIZD ) )
{
##
RANGE OF IX IS I
##
RETRIEVE (ST = IX.STATUS)
##
WHERE IX.NAZIV = NAZIVIZD
##{
printf("Status izdavaca %s", NAZIVIZD, "je %i", ST);
##}
}
}
Za svaku n-torku relacije I za koju je logicki izraz tacan, C promenljivoj ST
dodeljuje se vrednost atributa STATUS te n-torke, i izvrsava se iskaz stampanja
printf.
Detaljnije informacije o EQUEL-u mogu se naci u [23], [51].

6.3

Pitanja i zadaci

1. Napisati QUEL iskaze za kreiranje tabela K, P, KI, KP iz odeljka 1.2.


2. Neka je dat upit: Naci sve podatke o izdavacima i broju njihovih izdanja. Da
li je sledeci QUEL iskaz korektan zapis ovog upita?
RETRIEVE (I.ALL, X = COUNT( KI.IZDANJE BY I.I SIF ) )
Obrazloziti.
3. QUEL iskazima formulisati upite iz zadatka 10 glave 2.
4. QUEL iskazima formulisati upite iz zadatka 7 glave 3.
5. Kojim se QUEL iskazom ostvaruje integritet?
6. Napisati QUEL iskaz kojim se ostvaruju sledece radnje:
Promeniti oblast svim romanima u beletristiku.
Izbrisati sve podatke o izdavacima koji nisu izdali nijednu knjigu.
Uvecati tiraz svim izdanjima ciji je tekuci tiraz manji od najmanjeg
tiraza izdavaca i3.

146

6 Upitni jezik QUEL


Uneti novog izdavaca sa sifrom k5, nazivom Nolit, statusom 30 i drzavom
Jugoslavija.
Konstruisati novu tabelu sa imenom JK koja sadrzi podatke o knjigama
ciji je bar jedan autor jugoslovenski drzavljanin ili ih je izdao bar jedan
jugoslovenski izdavac.
Izbrisati sve izdavace iz Amerike i njihova izdanja.

7. Koje su osnovne karakteristike EQUEL jezika?


8. Koristeci izdavacku bazu podataka napisati EQUEL program koji stampa sve
sifre pisaca. Za sifrom pisca treba da slede svi podaci o izdavacima koji izdaju
knjige tog pisca.

Optimizacija upita
7.1

Katalog

U ovom odeljku, na pocetku izlaganja o optimizaciji upita, bice reci o sistemskom


katalogu kao sistemskoj bazi podataka o bazama podataka. Potreba za ovim izlaganjem postoji zbog vaznosti uloge koju katalog ima u procesu optimizacije upita.
Katalog, kao sistemska baza podataka (ili njen deo), sadrzi informacije o raznim
objektima u sistemu kao sto su bazne tabele, pogledi, indeksi, baze podataka,
planovi izvrsavanja upita (planovi aplikacije, tj. pristupni paketi, v. glavu 18),
ovlascenja za pristup objektima, itd. Katalog se razlikuje od sistema do sistema
(INGRES, SYSTEM R, DB2, ORACLE), jer ukljucuje informacije vezane za sistem. Karakteristicno za katalog je da obicno ukljucuje tabelu koja sadrzi po jednu
n-torku za svaku tabelu u sistemu, ukljucujuci i sistemske tabele, zatim tabelu
svih atributa svih tabela u sistemu, tabelu svih indeksa svih tabela u sistemu, kao
i tabele pogleda, baza podataka, uslova integriteta, stranih kljuceva, autorizacije,
optimizovanih upita, sinonima, itd. Ove tabele sadrze informacije o imenu objekta
(npr. tabele, atributa, indeksa, baze, pogleda), vlasniku, broju atributa (tabele),
tabeli za koju je (atribut, indeks) vezan, tipu atributa, itd.
S obzirom da je sistemski katalog relacionog sistema relaciona baza podataka,
ona se moze pretrazivati istim upitnim jezikom kao i korisnicke baze podataka (npr.

SQL, QUEL). Medutim,


tabele kataloga ne mogu se azurirati iskazima azuriranja
upitnog jezika, jer to moze da bude vrlo opasno po podatke u bazi i pristup podacima. Tako, ako bi se iz tabele o atributima u katalogu izbrisala n-torka koja
se odnosi na neki atribut u nekoj baznoj tabeli, onda bi taj atribut postao nepoznat sistemu, i ne bi mu se moglo vise pristupiti, iako bi njegove vrednosti fizicki
postojale u bazi. Azuriranje sistemskih tabela u katalogu vrsi se sistemski
automatski, pri izvrsavanju iskaza kreiranja i uklanjanja baznih tabela, pogleda
i indeksa, odnosno pri izvrsavanju iskaza modifikovanja strukture baznih tabela i
indeksa.
Katalog sistema DB2 sadrzi vise desetina sistemskih baznih tabela i pogleda
147

148

7 Optimizacija upita

u sistemskoj bazi podataka ([24]). Navedimo neke od tih pogleda sa njihovom


delimicnom strukturom.

SYSSTAT.TABLES (TABSCHEMA, TABNAME, DEFINER, TYPE, TBSPACE,


COLCOUNT, CARD, NPAGES, PARENTS, CHILDREN, ... )
Za svaku tabelu u sistemu, baznu ili pogled, ova tabela sadrzi n-torku u kojoj
registruje niz svojstava (vise od 30) te tabele: ime tabele (TABNAME), ime
sheme (TABSCHEMA), identifikator vlasnika tabele (DEFINER), tip tabele
(TYPE bazna tabela, pogled, drugo ime alias), ime prostora tabela kome
pripada tabela (TBSPACE), broj kolona (COLCOUNT), ukupan broj n-torki
tabele (CARD), ukupan broj stranica na kojima se pojavljuju n-torke tabele
(NPAGES), itd.

SYSSTAT.COLUMNS (TABSCHEMA, TABNAME, COLNAME, COLCARD, ... )


Za svaku kolonu svake tabele u sistemu ova tabela sadrzi n-torku u kojoj registruje niz svojstava te kolone: ime kolone (COLNAME), ime
tabele kojoj kolona pripada (TABNAME), ime sheme kojoj tabela pripada(TABSCHEMA), broj razlicitih vrednosti u koloni (COLCARD), itd.

SYSSTAT.INDEXES (INDSCHEMA, INDNAME, FIRSTKEYCARD, COLCOUNT,


FULLKEYCARD, NLEAF, NLEVELS, ... )
Za svaki indeks u sistemu ova tabela sadrzi n-torku u kojoj registruje ime
indeksa (INDNAME), shema indeksa (INDSCHEMA) broj kolona u indeksu (COLCOUNT), broj razlicitih vrednosti prve navedene kolone indeksa
(FIRSTKEYCARD), broj razlicitih vrednosti indeksa (po svim njegovim
kolonama, FULLKEYCARD), broj listova u strukturi indeksa (NLEAF), broj
nivoa indeksnog drveta (NLEVELS), i niz drugih svojstava.

Osim ovih tabela ciji je znacaj prepoznatljiv, DB2 katalog sadrzi i grupe tabela
sa informacijama o strukturama (bazama podataka u sistemu, prostorima tabela,
izvornim definicijama pogleda, planovima izvrsavanja pristupnim paketima), o
autorizaciji (pravima pristupa kolonama, bazama podataka, planovima izvrsavanja,
sistemskim funkcijama, fizickim strukturama), kao i tabele o oporavku, integritetu
(primarnim, stranim kljucevima), itd.
Pretrazivanje tabela sistemskog kataloga moze se vrsiti SQL iskazima.
primer, iskaz

Na

SELECT TABNAME, TABSCHEMA


FROM
SYSSTAT.COLUMNS
WHERE COLNAME = I SIF
daje imena svih tabela (u ovom slucaju I, KI) i shema u kojima su kreirane, koje
imaju kolonu (atribut) I SIF. SYSSTAT je ime sheme u kojoj se nalaze ovi kataloski
pogledi.

7.2 Sistematski pristup optimizaciji

7.2

149

Sistematski pristup optimizaciji

Optimizacija upita je komponenta procesora upitnog jezika koja je neophodna,


bar kod velikih sistema i za velike baze podataka, da bi sistem uopste mogao da
zadovolji trazenu efikasnost. Posebnu pogodnost kod optimizacije upita pruzaju
relacioni sistemi, s obzirom na dovoljno apstraktni nivo relacionih izraza kojima se
upiti zadaju.
Kod nerelacionih sistema optimizaciju sprovodi korisnik, a ne sistem, jer nerelacioni modeli ne ostvaruju dovoljnu meru razdvajanja logickog od fizickog nivoa
podataka i pristupa podacima; tako vec u formulaciji upita mora biti sadrzana i informacija o pristupnom putu i nacinu izvrsavanja upita. Automatska optimizacija,
osim sto je kod relacionih sistema moguca a kod nerelacionih nije, daje znacajne
prednosti u kvalitetu, jer covek cesto nije u mogucnosti da postigne kvalitet optimizacije koji postize sistem. Ova prednost sistema nad covekom je posledica
cinjenice da sistem ima uvid u vrednosti podataka (a ne samo u njihovu strukturu) koji covek korisnik nema, kao i, s obzirom na brzinu rada sistema, posled
ica mogucnosti proizvodenja
veceg broja alternativnih nacina izvrsavanja upita i
procene njihove efikasnosti.
Cilj optimizacije kod upitnih jezika je izbor strategije za izracunavanje datog
relacionog izraza, koja bi, kao i u slucaju programskih jezika, omogucila izvesna
poboljsanja u odnosu na neoptimizovanu varijantu, a ne izbor optimalne strategije
u smislu teorije upravljanja i optimizacije.
Dve osnovne vrste optimizacije koje se srecu u procesorima upitnih jezika jesu
strategija algebarske transformacije upita i strategija procene cene. Prva ne zavisi
od specificnih podataka u bazi, dok druga zavisi. Tako bi, na primer, jedno pravilo algebarske transformacije, koje je skoro uvek dobro primeniti, bilo: primeniti
restrikciju sto je moguce ranije u izvrsenju upita. Strategije procene cene koriste,
na primer, informaciju (iz sistemskog kataloga) o postojanju indeksa nad tabelom
iz upita.
Primer 7.1 Posmatrajmo upit kojim se traze nazivi izdavaca koji izdaju knjigu
sa sifrom k2; takav upit se u SQL-u moze izraziti sledecim SELECT blokom:
SELECT DISTINCT I.NAZIV
FROM
I, KI
WHERE I.I SIF = KI.I SIF AND KI.K SIF = k2
Neka baza podataka sadrzi 100 izdavaca (vrsta u tabeli I) i 10000 izdanja (vrsta
u tabeli KI), od kojih se 20 odnosi na izdanja knjige sa sifrom k2. Jedan nacin
izvrsavanja ovog upita, bez primene optimizacije, mogao bi se sastojati u sledecem
nizu radnji.
1. Izracunati Dekartov proizvod tabela I i KI; pri tom se cita 10100 vrsta sa
diska i konstruise se privremena tabela sa 1000000 vrsta, koja, zbog velicine, mora
da se upise na disk.
takode

150

7 Optimizacija upita

2. Izvrsiti restrikciju dobijene privremene tabele po WHERE logickom uslovu,


tj. po logickom izrazu I.I SIF = KI.I SIF AND KI.K SIF = k2; ona ukljucuje
sekvencijalno citanje 1000000 vrsta sa diska i konstrukciju privremene tabele sa
samo 20 vrsta, koja se moze zadrzati u unutrasnjoj memoriji.
3. Projektovati privremenu tabelu dobijenu u koraku 2 na atribut NAZIV, cime
se dobija najvise 20 podataka.
Jasno je da je ovaj postupak, mada neposredno diktiran sintaksom upita, najmanje efikasan. Znatno efikasnije izvrsavanje upita dao bi sledeci postupak.
1. Izvrsiti restrikciju tabele KI po uslovu KI.K SIF = k2, cime se sekvencijalno
cita 10000 vrsta i proizvodi privremena tabela sa 20 vrsta koja se moze zadrzati u
unutrasnjoj memoriji.
2. Spojiti privremenu tabelu dobijenu u koraku 1 sa tabelom I po jednakim
vrednostima atributa I SIF; time se cita 100 vrsta tabele I sa diska i proizvodi
privremena tabela sa 20 vrsta koja ostaje u unutrasnjoj memoriji.
3. Projektovati privremenu tabelu dobijenu u koraku 2 na atribut NAZIV.
Ako se broj ulazno/izlaznih operacija nad diskom (broj citanja stranica sa diska
odnosno upisa stranica na disk) uzme kao mera efikasnosti (sto je realno s obzirom
da te operacije oduzimaju najveci deo vremena), onda je drugi postupak 200 puta
efikasniji od prvog. Ako je jos tabela KI indeksirana (ili hesirana, v. glavu 13) po
atributu K SIF, broj citanja u koraku 1 je 20 a ne 10000. Indeks ili hes algoritam
mogli bi da pomognu i u koraku 2, tako sto bi se broj citanja sa diska smanjio sa
100 na najvise 20.
Prethodni primer je izuzetno jednostavan, pa se zato odmah uocavaju adekvatni

elementi optimizacije. U opstem slucaju, medutim,


potreban je sistematski pristup
optimizaciji, koji ukljucuje sledece faze.
I Prevesti upit u internu reprezentaciju koja bi ga ucinila neosetljivim na detalje
specificne sintakse.
II Prevesti internu reprezentaciju upita u kanonicku formu, kojom bi se anulirale
semanticki ekvivalentnih (v. definiciju 7.2) a sintaksno razlicitih
razlike izmedu
formulacija upita.
III Izabrati kandidate za procedure niskog nivoa kojima se mogu realizovati pojedine operacije sadrzane u upitu.
IV Generisati planove izvrsavanja kompletnih upita i izabrati najjeftiniji.
Opisimo nesto detaljnije navedene faze.

I Prevodenje
upita u internu reprezentaciju podrazumeva njegovo ciscenje od
specificne sintakse i predstavljanje nekim formalizmom interne reprezentacije. Taj
formalizam mora biti dovoljno bogat da omoguci predstavljanje svih upita upitnog
jezika i sto je moguce neutralniji da ne bi uticao na kasnije odluke optimizatora.
Najcesci formalizmi interne reprezentacije jesu neki oblik drveta apstraktne sintakse
(DAS) i odabrana sintaksa relacione algebre. Tako se polazni upit sa pocetka ovog
odeljka moze predstaviti DAS-om na slici 7.1 ili izrazom relacione algebre

7.2 Sistematski pristup optimizaciji

151

(( I KI )[ K SIF = k2 ])[ NAZIV ].


rezultat

projekcija (NAZIV)

restrikcija (K SIF = k2)

spajanje (I.I SIF = KI.I SIF)

I
KI
Slika 7.1: Drvo apstraktne sintakse (DAS) upita

II Vecina upitnih jezika omogucuje da se proizvoljni upit predstavi na mnogo


(manje ili vise) razlicitih nacina. Tako, trivijalna razlika se sastoji u promeni strana
operanada komutativnih operacija (npr. jednakosti, konjunkcije ili disjunkcije). Netrivijalne razlike bile bi u promenjenom redosledu operacija. Na primer, prethodni
upit ((I KI) [K SIF=k2]) [NAZIV] mogao bi se postaviti i relacionim izrazom (I
(KI [K SIF = k2])) [NAZIV]. Zbog tih sintaksnih razlika u postavljanju semanticki
ekvivalentnih upita, interna reprezentacija se prevodi u kanonicku formu.
Definicija 7.1 (kanoni
cka forma) Neka je dat skup Q objekata i relacija ek objektima. Tada se podskup C Q zove skup kanonickih formi
vivalencije medu
skupa Q pri izabranoj relaciji ekvivalencije ako je svaki objekat q Q ekvivalentan
nekom (tacno jednom) objektu c C. Objekat c zove se kanonicka forma objekta
q.
U kontekstu optimizacije upita, skup Q je skup upita, a relacija ekvivalen objektima je relacija ekvivalencije medu
upitima. Smisao definicije 7.1
cije medu
je da omoguci da se proucavanjem nekog podskupa C kanonickih formi, umesto
proucavanjem skupa Q svih upita, dokazu bitna svojstva celog skupa Q.
upitima prirodno je definisati kao semanticku ekviRelaciju ekvivalencije medu
valenciju upita.
Definicija 7.2 (semanti
cka ekvivalentnost) Upiti q1 i q2 su semanticki ekvivalentni ako za svaki izbor sadrzaja tabela nad kojima su definisani, oba proizvode
isti rezultat.
Relaciju semanticke ekvivalencije upita potrebno je sintaksno opisati, sto je
veoma slozen zadatak. Nacin da se to ucini je definisanje pravila transformacije
upitima, relaciju sintaksne
upita koja definisu drugu relaciju ekvivalencije medu
ekvivalencije. Pri tome se za sintaksno ekvivalentne proglasavaju svi oni upiti koji

152

7 Optimizacija upita

se tim pravilima mogu transformisati u isti oblik; taj transformisani oblik je njihova
kanonicka forma. Optimalno bi bilo da se klase semanticke i sintaksne ekvivalencije
poklapaju. Obavezno je pak da svi sintaksno ekvivalentni upiti budu i semanticki
ekvivalentni, tj. da svaka klasa sintaksne ekvivalencije bude podskup neke klase
semanticke ekvivalencije, za sta je odgovorna semanticka valjanost pravila transformacije. Naime, ni jednim pravilom transformacije upit ne sme da promeni svoju
klasu semanticke ekvivalencije. Od kompletnosti skupa pravila transformacije zavisi koliko ce klasa sintaksne ekvivalencije biti sadrzano u jednoj klasi semanticke
ekvivalencije, a prakticni cilj je da taj broj bude sto manji.
Ako je skup objekata Q skup svih mogucih upita interne reprezentacije, skup
pravila transformacije upita u kanonicku formu mogao bi da ukljuci sledeca pravila:
logicke izraze restrikcije prevesti u konjunktivnu normalnu formu, tj. u kon

junkciju prostih poredenja


i/ili disjunkcija prostih poredenja.
Na primer,
izraz
p OR (q AND r) treba zameniti izrazom
(p OR q) AND (p OR r);
operacijama restrikcije dati visi prioritet (zagradama) u odnosu na operacije
spajanja, tj. izraz oblika
(R S)[restrikcija-nad-S] treba zameniti izrazom
(R(S[restrikcija-nad-S])), a izraz
(R S)[restrikcija-nad-R AND restrikcija-nad-S] treba zameniti izrazom
(R[restrikcija-nad-R])(S[restrikcija-nad-S]);
niz restrikcija kombinovati u jednu restrikciju, tj. izraz oblika
(R[restrikcija-1])[restrikcija-2] treba zameniti izrazom
R[restrikcija-1 AND restrikcija-2];
u nizu projekcija cije su liste atributa, zdesna ulevo, u relaciji inkluzije, eliminisati sve projekcije osim poslednje, tj. izraz oblika
(R[lista-atributa-1])[lista-atributa-2], ako je lista-atributa-2 lista-atributa-1
zameniti izrazom
R[lista-atributa-2];
restrikciju projekcije zameniti projekcijom restrikcije, tj. izraz oblika
(R[lista-atributa-1])[restrikcija-1] zameniti izrazom
(R[restrikcija-1])[lista-atributa-1].
Lista pravila nije kompletna, i razliciti sistemi je dopunjuju pravilima za koja
se teorijskim i prakticnim istrazivanjima pokazuje da su korisna. Tako je jedno,
uvek korisno pravilo, na primer, sledece:

7.2 Sistematski pristup optimizaciji

153

ako je S.A strani kljuc koji se odnosi na primarni kljuc R.A, onda se izraz
(S R)[A] moze zameniti izrazom S[A]; na primer, izraz (KI K)[K SIF] moze da
se zameni izrazom KI[K SIF].
Sistem INGRES primenjuje i pravilo koje prosirenjem restrikcije smanjuje obim

relacije medurezultata,
sto je ilustrovano sledecim primerima:
izraz A.F1 > B.F2 AND B.F2 = 3 moze se zameniti izrazom A.F1 > B.F2
AND B.F2 = 3 AND A.F1 > 3;
izraz I.DRZAVA > P.DRZAVA AND P.DRZAVA > Amerika,
moze se zameniti izrazom
I.DRZAVA > P.DRZAVA AND P.DRZAVA > Amerika AND I.DRZAVA >
Amerika.
III Posto je upit transformisan u svoju kanonicku formu (bez obzira na to kojim pravilima pojedini sistem realizovao tu transformaciju), sledeci korak treba da
odgovori na pitanje kako izracunati transformisani upit. Na ovom nivou razmatraju se pristupni putevi kao sto su indeksi ili hes algoritmi, distribucija vrednosti
podataka, fizicko grupisanje slogova, itd. Upitni izraz u kanonickoj formi posmatra se kao niz operacija niskog nivoa spajanja, restrikcije, itd. Za svaku od tih
operacija optimizator ima na raspolaganju skup unapred definisanih procedura za
njihovu implementaciju, u zavisnosti od svojstava relacija argumenata operacije.
Na primer, optimizator ima na raspolaganju skup procedura za izvrsavanje restrikcije: jednu za = restrikciju na jedinstvenom atributu, drugu za indeksirani atribut
restrikcije, trecu za grupisuci atribut restrikcije, itd. Uz svaku od procedura postoji i informacija o njenoj ceni, tj. o prostoru i vremenu potrebnom za njeno
izvrsenje.
Upotrebom informacija iz sistemskog kataloga o tekucem stanju baze podataka
(na primer, o kardinalnosti relacija i pristupnim putevima), optimizator bira jednu
ili vise procedura kandidata za svaku od operacija u upitnom izrazu. Ovaj proces
se nekada zove izbor pristupnog puta.
IV Poslednja faza u procesu optimizacije je konstrukcija skupa upitnih planova
(planova izvrsavanja upita), sa izborom najboljeg (na primer, najjeftinijeg). Svaki
upitni plan je kombinacija procedura od kojih svaka odgovara po jednoj operaciji u
upitu. Broj mogucih planova je obicno suvise veliki, pa je pozeljno koriscenje neke
heuristike koja ogranicava broj planova koji se generisu. Izbor se vrsi na osnovu cene
plana, a formula cene je najcesce broj operacija ulaza/izlaza sa diska, mada se nekad
u formulu cene ukljucuje i koriscenje centralnog procesora. Treba napomenuti da
je procena cene veoma tezak zadatak jer svi upiti (osim najjednostavnijih) generisu

tabele medurezultate
koje treba upisati na disk (i citati sa diska), a ciji je obim
tesko proceniti jer je neposredno zavisan od vrednosti registrovanih u bazi. U
sledecim odeljcima ove glave bice izlozene metode optimizacije koje se primenjuju
u dva sistema: prvom kompletnom prototipskom relacionom sistemu, SYSTEM R
([56]), i najpoznatijem akademskom relacionom sistemu INGRES ([70]).

154

7 Optimizacija upita

7.3

Optimizacija u SYSTEM R

SYSTEM R je prvi kompletni prototipski RSUBP. To je kompilatorski sistem, sto


znaci da se jednom optimizovani upit moze izvrsiti veliki broj puta, sve dok se
ne promene parametri na osnovu kojih je optimizovani upitni plan sacinjen. Ova
mogucnost znacajno opravdava optimizaciju i njenu cenu. Metoda optimizacije
sistema SYSTEM R sa manjim izmenama primenjena je i u svim komercijalnim
proizvodima razvijenim iz njega, kao sto su DB2 i SQL/DS. Zato ce u ovom odeljku
biti opisan postupak optimizacije u SYSTEM R.
U prvom koraku optimizator sistema odlucuje o redosledu izvrsenja SELECT
blokova ugnjezdenih jedan u drugi; u SYSTEM R izabran je redosled od unutrasnjeg, redom, ka spoljasnjim blokovima. Zatim se bira najjeftiniji upitni plan
za svaki od blokova. Prvi korak sluzi kao heuristika koja redukuje broj mogucih
planova, i ciji nedostaci su razmatrani u [40]. Oni se pre svega odnose na cinjenicu
da svaki SQL upit koji sadrzi ugnjezdene blokove moze da se transformise u upit
spajanja bez ugnjezdenih blokova, pa takva transformacija daje bolje rezultate u
optimizaciji celog upita.
Za dati upitni blok, postoje dva slucaja:
a) Ako je upit jednorelacioni (ne ukljucuje spajanje), za konstrukciju upitnog
plana optimizator koristi statisticke informacije iz sistemskog kataloga, for
mule za procenu velicine medurezultata
i cene operacija niskog nivoa. Sistem izracunava, na osnovu informacija dobijenih iz kataloga, cenu svakog od
konacno mnogo nacina za izvrsavanje upita, i odabira najpovoljniji.
Statisticke informacije u sistemskom katalogu ukljucuju:
broj n-torki u svakoj relaciji
broj stranica koje zauzima svaka relacija
procenat stranica koje svaka relacija zauzima u odnosu na ukupan broj
relevantnih stranica u bazi podataka
broj razlicitih vrednosti za svaki indeks
broj stranica koje zauzima svaki indeks.
Ovi podaci su staticki i azuriraju se posebnim usluznim programom koji je
potrebno izvrsiti posle svakog znacajnijeg azuriranja baze. U SYSTEM R
poziv tog programa je UPDATE STATISTICS. U sistemu DB2 poziv odgovarajuceg programa je RUNSTATS u kome se, kao parametar, navodi objekat
(tabela, indeks, prostor tabela, itd.) cije ce se statisticke ocene izracunati i
upisati u sistemski katalog.
Podaci iz sistemskog kataloga imaju presudnu ulogu u izgradnji plana upita.
Neka je potrebno izvrsiti jednorelacioni upit za koji je iz sistemskog kataloga
dobijen broj n-torki (B) i broj stranica koje zauzima relacija (S). Upit se
izvrsava tako sto se primenjuje jedan po jedan uslov restrikcije (koja je oblika

7.3 Optimizacija u SYSTEM R

155

konjunktivne normalne forme), pri cemu se u svakom koraku primenjuje, na

prethodno dobijeni medurezultat,


najjeftiniji moguci od sledecih postupaka
([66]):

oblika A = c, gde je A atribut a c konstanta,


Ako je uslov poredenje
primeniti grupisuci indeks nad A (ako postoji) da bi se dobile n-torke
koje zadovoljavaju uslov. Ako je I broj razlicitih vrednosti indeksa, onda
je cena ovog koraka (broj obracanja disku) S/I.

Ako je uslov poredenje


oblika Ac, gde je {<, , >, }, primeniti
grupisuci indeks nad A (ako postoji) da bi se dobio odgovarajuci podskup relacije. Cena ovog koraka je S/2 jer se pretrazi priblizno polovina

relacije. (Poredenje
6= nije ukljuceno, jer se ne ocekuje znacajna selektivnost; gotovo sve n-torke moraju biti pretrazene).

Ako je uslov poredenje


oblika A = c, primeniti negrupisuci indeks nad
A (ako postoji) da bi se dobile n-torke koje zadovoljavaju uslov. Cena
koraka je B/I jer je, s obzirom da je indeks negrupisuci, polozaj n-torki
nezavisan.
Ako nema indeksa, relacija se moze citati redom, primenjujuci sve uslove
restrikcije, sto ima cenu proporcionalnu sa S.

Ako je uslov poredenje


oblika Ac, gde je {<, , >, }, primeniti
negrupisuci indeks nad A (ako postoji). Cena ovog koraka je B/2.
b) Ako upit ukljucuje dve ili vise relacija koje treba da se spoje, optimizator prvo
odabira pristupni put za svaku od relacija na nacin opisan pod a), a zatim

odlucuje o redosledu izvodenja


spajanja. Ove dve radnje su zavisne, jer se
strategija za pristup pojedinacnoj relaciji bira uzimajuci u obzir i karakteristike rezultata koje su od znacaja za operaciju spajanja (npr. sortiranost neke
od relacija rezultata koje ucestvuju u spajanju). Niz spajanja odvija se strogo
sekvencijalno, tj. izraz A B C D izvrsava se kao izraz (((A B) C) D),
predstavlja jednu od heuristika kojima se smanjuje broj mogucih
sto takode
planova upita.
Za izvrsenje specificne operacije spajanja, npr. A B, SYSTEM R koristi jednu od dve metode: metodu ugnjezdenih petlji ili metodu sortiranja/spajanja. Izbor metode se vrsi na osnovu formula cene.
Metoda ugnjezdenih petlji moze se opisati sledecim algoritmom:
BEGIN
FOR svaku n-torku relacije A DO
FOR svaku n-torku relacije B DO
IF n-torke i imaju jednake vrednosti na atributima spajanja
THEN konstruisati spojenu (, )-torku
END
Razna poboljsanja metode postizu se koriscenjem indeksa (grupisuceg
ili negrupisuceg) po atributima spajanja.

156

7 Optimizacija upita
Metoda sortiranja/spajanja sastoji se od sortiranja relacija A, B po vrednostima atributa spajanja, i spajanja sortiranih relacija po jednakosti
atributa. Pristup torkama relacija A i B u fizickom redosledu sada je
najefikasniji, a sam algoritam se moze realizovati tako da se spajanje
dveju relacija obavi jednim citanjem svake od njih (v. odeljak 11.3).

U slucaju visestrukog spajanja, npr. (A B) C, obe metode dopustaju da se


svaka proizvedena n-torka relacije A B preda procesu koji je spaja sa n-torkama

relacije C, bez proizvodenja


cele relacije A B.
Detaljne formule cene optimizacije viserelacionih upita u SYSTEM R mogu se
naci u [66]. Prema autorima sistema ([56]), cena optimizacije kompleksnih upita u
sistemu SYSTEM R je samo nekoliko hiljada bajtova memorije i nekoliko desetih
delova sekunde na IBM/370 sistemu, sto je zanemarljivo u slucaju da se jednom
optimizovani upit izvrsi veci broj puta.
Sistem DB2 koristi i dodatne tehnike optimizacije u odnosu na svoj prototip.
Tako, na primer, upit koji se odnosi na broj n-torki u tabeli I koje zadovoljavaju
uslov STATUS = 20,
SELECT COUNT(*)
FROM
I
WHERE STATUS = 20
DB2 izvrsava bez pristupa samoj tabeli, brojanjem elemenata podataka indeksa
atributa STATUS (za vrednost 20) ako takav indeks postoji.

7.4

Optimizacija u INGRES-u

Relacioni sistem INGRES primenjuje zanimljiv i efikasan algoritam obrade upita


koji se zove dekompozicija upita ([70]). Algoritam se sastoji od razlaganja
upita nad vise n-tornih promenljivih u niz podupita nad pojedinacnim n-tornim
promenljivim, primenom postupaka razdvajanja i supstitucije n-torki .
Razdvajanje je proces uklanjanja komponente upita koja ima tacno jednu zajednicku promenljivu sa ostatkom upita. U tekstu koji sledi prikazan je postupak
razdvajanja na primeru upita naci nazive izdavaca iz Jugoslavije koji su izdali bar
jednu knjigu poezije u tirazu ne manjem od 5000. Upitnim jezikom QUEL taj
upit bi se izrazio na sledeci nacin:
RANGE OF
RANGE OF
RANGE OF
(1) RETRIEVE

I IS I
K IS K
KI IS KI
(I.NAZIV) WHERE I.DRZAVA = Jugoslavija AND
I.I SIF = KI.I SIF AND KI.TIRAZ >= 5000 AND
KI.K SIF = K.K SIF AND K.OBLAST = poezija

7.4 Optimizacija u INGRES-u

157

U upitu su prisutne tri n-torne promenljive I, K i KI. Svaka jednopromenljiva


komponenta upita (deo logickog izraza upita koji se odnosi samo na jednu n-tornu
promenljivu) zadovoljava uslov razdvajanja, pa se moze ukloniti iz upita izdvajanjem u posebni upit. Primenjeno na promenljivu K, na primer, razdvajanje proizvodi
sledeca dva upita, ekvivalentna polaznom upitu (1):
(2) RETRIEVE INTO K(K.K SIF) WHERE K.OBLAST = poezija
(3)

RETRIEVE (I.NAZIV) WHERE I.DRZAVA = Jugoslavija AND


I.I SIF = KI.I SIF AND KI.TIRAZ >= 5000 AND
KI.K SIF = K.K SIF

Slicno se iz upita (3), razdvajanjem po promenljivoj KI, dobija sledeci par upita
ekvivalentan upitu (3):
(4) RETRIEVE INTO KI(KI.I SIF, KI.K SIF) WHERE KI.TIRAZ

>= 5000

(5) RETRIEVE (I.NAZIV) WHERE I.DRZAVA = Jugoslavija AND


I.I SIF = KI.I SIF AND KI.K SIF = K.K SIF
Na kraju, iz upita (5), razdvajanjem po promenljivoj I dobija se sledeci par upita
ekvivalentan upitu (5):
(6) RETRIEVE INTO I(I.I SIF, I.NAZIV) WHERE I.DRZAVA=Jugoslavija
(7) RETRIEVE (I.NAZIV) WHERE I.I SIF=KI.I SIF AND KI.K SIF=K.K SIF
Posto nema vise jednopromenljivih komponenti u dobijenom upitu (7), postupak
se nastavlja razdvajanjem po dvopromenljivom upitu koji ukljucuje promenljive KI
i K. Tako je upit (7) ekvivalentan sledecem paru upita:
(8)

RETRIEVE INTO KI(KI.I SIF) WHERE KI.K SIF = K.K SIF

(9)

RETRIEVE (I.NAZIV) WHERE I.I SIF = KI.I SIF

Dakle, polazni upit (1) dekomponovan je u tri jednopromenljiva upita (2),


(4) i (6), i dva dvopromenljiva upita (8) i (9). Jednopromenljivi upiti (2), (4)
i paralelno. Upiti (8) i (9)
i (6) mogu se obraditi u bilo kom redosledu, a takode
ne mogu se dalje dekomponovati razdvajanjem, pa se do njihove dekompozicije na
jednopromenljive upite dolazi drugim postupkom supstitucijom n-torki.
Supstitucija n-torki je postupak zamene jedne promenljive u upitu, redom, jednom po jednom n-torkom relacije koja odgovara toj promenljivoj. Taj postupak se
u razmatranom primeru primenjuje na sledeci nacin.
Ako, na primer, skup vrednosti atributa K SIF u relaciji K jeste {k2, k6},
onda se dvopromenljivi upit (8) zamenjuje jednopromenljivim upitom u kome obe
vrednosti iz tog skupa zamenjuju, redom, komponentu K.K SIF. Tako se upit (8)
zamenjuje upitom
RETRIEVE INTO KI(KI.I SIF) WHERE KI.K SIF=k2 OR KI.K SIF=k6

158

7 Optimizacija upita

Slicno, kako skup vrednosti atributa I SIF u relaciji KI jeste {i1, i4}, dvopromenljivi upit (9) zamenjuje se jednopromenljivim u kome svaka od dve vrednosti
iz tog skupa zamenjuje, redom, komponentu KI.I SIF. Tako se upit (9) zamenjuje
upitom
RETRIEVE (I.NAZIV) WHERE I.I SIF = i1

OR I.I SIF = i4

Slika 7.2 predstavlja drvo dekompozicije polaznog upita (1). Grana ciji je ulazni
cvor upit oblika (i) ima, kao svoj izlazni cvor, relaciju koja ucestvuje u izgradnji tog
upita. Grana ciji je izlazni cvor upit oblika (i) ima, kao svoj ulazni cvor, relaciju

rezultat tog upita. Cvor


koji ima jednu ulaznu granu predstavlja jednopromenljivi
upit (takvi su cvorovi (2), (4) i (6)), dobijen razdvajanjem po jednoj n-tornoj

promenljivoj. Cvor
koji ima vise od jedne ulazne grane predstavlja visepromenljivi
upit (takvi su cvorovi (8) i (9)), dobijen razdvajanjem po dve ili vise n-tornih
promenljivih; ovakav upit izvrsava se supstitucijom n-torki.

rezultat
6
-

razdvajanje

I
6

- (9)

supstitucija

KI
6
- (8)

KI
6

(6)
6

K
6

(2)
6

(4)
6

KI

Slika 7.2: Drvo dekompozicije upita


Prilikom primene postupka supstitucije n-torki, optimizator bira relacije na koje
ce primeniti supstituciju. INGRES takvu odluku donosi na osnovu kardinalnosti
relacija, pristupnih puteva (npr. indeksa), i uzimajuci u obzir koja se relacija (tj.
n-torna promenljiva) nalazi u ciljnoj listi.
Postupak supstitucije n-torki je manje efikasan od postupka razdvajanja, i
sprovodi se samo kad razdvajanje vise nije moguce.
Optimizacija jednorelacionog upita u sistemu INGRES svodi se na statistike
sadrzane u katalogu, i slicna je optimizaciji u sistemu SYSTEM R.

7.5

Pitanja i zadaci

1. Definisati sledece pojmove:

7.5 Pitanja i zadaci


katalog
algebarska transformacija upita
strategija procene cene
kanonicka forma

159
drvo apstraktne sintakse
dekompozicija upita
metoda sortiranja/spajanja
metoda ugnjezdenih petlji

2. Opisati strukturu vaznijih relacija sistemskog kataloga.


3. Nabrojati i opisati faze sistematske optimizacije upita.
4. Opisati optimizaciju upita u SYSTEM R i u sistemu INGRES.

Deo III

Logi
cko projektovanje

Pod logickim projektovanjem relacione baze podataka podrazumeva se projektovanje sheme relacione baze podataka, tj. grupisanje pojedinih atributa u posebne
entitetima u posebne relacije,
relacije, ili izdvajanje uocenih entiteta i odnosa medu
a sve to na osnovu analize informacionih zahteva i informacionog okruzenja. Znacaj
dobrog logickog projektovanja relacione baze podataka lezi u cinjenici da je takvu
bazu moguce najefikasnije odrzavati, i da je manipulisanje podacima u njoj najjednostavnije, najefikasnije i najpouzdanije.
Razlicite metodologije logickog projektovanja dolaze do sheme relacione baze
razlicitim postupcima, pri cemu se vec u opisu znacenja logickog projektovanja
uocavaju dva globalno razlicita postupka: jedan se zasniva na grupisanju atributa
svojstava informacionog okruzenja u posebne relacije, a drugi na izdvajanju
vezama
entiteta i odnosa u posebne relacije. Prvi je sintaksno orijentisan i voden

medu atributima izrazenim kroz koncepte zavisnosti (funkcionalnih, viseznacnih,


je vezama medu
enzavisnosti spajanja), a drugi je semanticki orijentisan i voden
titetima informacionog okruzenja. Metoda normalnih formi dosledno i kompletno
realizuje prvi postupak logickog projektovanja, dok razne metode semantickog
modeliranja realizuju drugi postupak.
Deo III sastoji se od tri glave:
U glavi 8, Teorija zavisnosti, razmatra se teorijska osnova metode normalnih formi teorija zavisnosti.
Glava 9, Normalne forme, uvodi pojmove normalnih formi viseg reda, i
prikazuje algoritme dekompozicije relacija u skupove normalizovanih relacija,
odnosno algoritam sinteze normalizovanih relacija.
U glavi 10, Semanti
cko modeliranje, izlazu se metode semantickog modeliranja zasnovane na prosirenom relacionom modelu, prosirenom modelu entiteta i odnosa i modeliranju apstrakcija.
Znacajno je napomenuti da svaka metoda koja se dobro i dosledno sprovede u
procesu logickog projektovanja, proizvodi kao rezultat dobro logicki projektovanu
bazu; stavise, rezultat takve primene razlicitih metoda najcesce je gotovo identican.

161

Teorija zavisnosti
8.1

Funkcionalne zavisnosti i dekompozicija

Kao sto je vec naglaseno u kratkom opisu integritetnog dela relacionog modela
(odeljak 1.4), funkcionalne zavisnosti (skraceno FZ) jesu najvazniji oblik specificnih
uslova integriteta relacije.
S druge strane, znacaj funkcionalnih zavisnosti lezi u cinjenici da one predstavljaju osnovni koncept na kome se zasniva jedna metoda logickog projektovanja baze

podataka metoda normalnih formi. Naime, postojanje odredene


funkcionalne zavisnosti u relaciji dovoljan je uslov za zamenu te relacije, bez gubljenja informa
cije, njenim dvema projekcijama, odredenim
tom funkcionalnom zavisnoscu. Bez
gubljenja informacije znaci da se pocetna relacija moze restaurisati primenom
operacije prirodnog spajanja na dobijene projekcije.
Na primer, neka u relaciji INSD = I [NAZIV, STATUS, DRZAVA] vazi
funkcionalna zavisnost NAZIV STATUS, DRZAVA, i neka je sadrzaj relacije I
isti kao u odeljku 1.2. Tada je sadrzaj relacije INSD sledeci:
INSD

NAZIV
Prosveta
Addison Wesley Publ. Comp.
Decje novine
Matica srpska

STATUS
30
20
10
30

DRZAVA
Jugoslavija
Amerika
Jugoslavija
Jugoslavija

Projektovanjem relacije INSD na parove atributa (NAZIV, STATUS), odnosno


(NAZIV, DRZAVA), dobijaju se sledece relacije:
INSD[NAZIV, STATUS]

162

NAZIV
Prosveta
Addison Wesley Publ. Comp.
Decje novine
Matica srpska

STATUS
30
20
10
30

8.1 Funkcionalne zavisnosti i dekompozicija


INSD[NAZIV, DRZAVA]

163

NAZIV
Prosveta
Addison Wesley Publ. Comp.
Decje novine
Matica srpska

DRZAVA
Jugoslavija
Amerika
Jugoslavija
Jugoslavija

Njihovim spajanjem dobija se polazna relacija INSD, tj. vazi


INSD = INSD[ NAZIV, STATUS ] INSD[ NAZIV, DRZAVA ].
U slucaju da u prethodnoj relaciji INSD atributi STATUS, DRZAVA ne zavise
funkcionalno od atributa NAZIV (sto znaci da izdavaci sa istim nazivom mogu biti
registrovani u raznim drzavama ili imati razlicite statuse), projektovanjem relacije
INSD na iste parove atributa moze doci do gubljenja informacije. Tako, ako se u
relaciji I nalazi i cetvorka (i5, Prosveta, 10, Srbija), onda se relaciji INSD dodaje
trojka (Prosveta, 10, Srbija), pa se projektovanjem relacije INSD na parove atributa
(NAZIV, STATUS) i (NAZIV, DRZAVA) dobijaju relacije
INSD[NAZIV, STATUS]

NAZIV
Prosveta
Addison Wesley Publ. Comp.
Decje novine
Matica srpska
Prosveta

STATUS
30
20
10
30
10

INSD[NAZIV, DRZAVA]

NAZIV
Prosveta
Addison Wesley Publ. Comp.
Decje novine
Matica srpska
Prosveta

DRZAVA
Jugoslavija
Amerika
Jugoslavija
Jugoslavija
Srbija

Njihovim spajanjem dobija se sledeca relacija:


NAZIV
Prosveta
Prosveta
Addison Wesley Publ. Comp.
Decje novine
Matica srpska
Prosveta
Prosveta

STATUS
30
30
20
10
30
10
10

DRZAVA
Jugoslavija
Srbija
Amerika
Jugoslavija
Jugoslavija
Jugoslavija
Srbija

164

8 Teorija zavisnosti

Dakle, u ovom slucaju INSD[ NAZIV, STATUS ] INSD[ NAZIV, DRZAVA ] 6=


INSD.

Prethodno neformalno tvrdenje


moze se formalizovati i dokazati na sledeci nacin.
Teorema 8.1 Neka je Atr(R) skup atributa relacije R. Ako u relaciji R za dva
neprazna podskupa X, Y Atr(R) vazi FZ X Y, tada vazi jednakost R =
R[XY ] R[XZ]1 , gde je Z = Atr(R) \ XY .
Dokaz: Razlikujemo tri slucaja:

1. Neka je Y X (trivijalna FZ vidi sledeci odeljak). Tada tvrdenje


vazi jer
je projekcija R[XZ] jednaka celoj relaciji R.
2. Neka su skupovi X i Y disjunktni. Dokazimo jednakost R = R[XY ] R[XZ].
Inkluzija R R[XY ] R[XZ] je trivijalna i vazi u svakoj relaciji, jer iz
definicije operacija projekcije i prirodnog spajanja sledi da za svaku n-torku
xyz R vazi da je xy R[XY ] i xz R[XZ], pa je xyz R[XY ] R[XZ].
Dokazimo obrnutu inkluziju, tj. da za svaku n-torku r R[XY ] R[XZ]
vazi da je r R. Neka je r = xyz, gde je x = r[X], y = r[Y ], z = r[Z].
Iz xyz R[XY ] R[XZ] sledi da postoje n-torke t1 , t2 R takve da je
t1 = xyz 0 i t2 = xy 0 z, za neke y 0 , z 0 . Iz FZ X Y sledi da za dve n-torke
xyz 0 R i xy 0 z R vazi da je y = y 0 . Zato je t2 = xyz, tj. r( t2 ) R.
Dakle, R[XY ] R[XZ] R, sto sa prethodnom (trivijalnom) inkluzijom daje
trazenu jednakost.
3. Neka Y 6 X i neka skupovi X i Y imaju neprazan presek. Tada se skup Y
moze predstaviti kao Y = Y 0 Y 00 , gde je Y 0 = X Y i Y 00 6= . Tada vazi i
FZ X Y 00 (po aksiomi F4, v. sledeci odeljak), pri cemu su skupovi X i Y 00
disjunktni. Na osnovu slucaja 2) sledi jednakost R = R[XY 00 ] R[XZ] (Z =
Atr(R) \ XY 00 ), a zbog XY 00 XY i jednakost R = R[XY ] R[XZ].

Dakle, tvrdenje
teoreme vazi u sva tri slucaja.
Ako u relaciji R vazi funkcionalna zavisnost X Y, onda se kaze da relacija R
zadovoljava tu funkcionalnu zavisnost.
Relacija R je dinamickog sadrzaja, sto znaci da njen sadrzaj u raznim momentima moze biti razlicit. Stanje r relacije R je njen sadrzaj u nekom momentu.
Kazacemo da stanje r relacije R zadovoljava FZ X Y ako ta funkcionalna zavisnost vazi u relaciji R u momemtu koji definise njeno stanje r. Sada se za relaciju R
moze reci da zadovoljava FZ X Y ako svako njeno stanje r zadovoljava tu FZ.
Vazenje funkcionalne zavisnosti X Y u stanju r relacije R moze se ispitati
sledecim algoritmom:
1 Ovde se, kao i u daljem tekstu, pod XY podrazumeva unija skupova atributa X i Y , bez
ponavljanja eventualnih zajedni
ckih atributa.


8.2 Aksiome izvodenja

165

Algoritam ZADOVOLJAVA
Ulaz: stanje r relacije R i FZ X Y ;

Izlaz: TACNO
ako r zadovoljava FZ X Y , NETACNO
u suprotnom;
ZADOVOLJAVA(r, X Y )
BEGIN
pregrupisati stanje r relacije R po vrstama tako da vrste sa jednakim
X-vrednostima budu zajedno;
i jednake
ako svaki skup vrsta sa jednakim X-vrednostima ima takode

Y -vrednosti, onda na izlazu izdati TACNO, a u suprotnom NETACNO


END.

8.2

Aksiome izvodenja

Za svako stanje r relacije R postoji skup funkcionalnih zavisnosti koje to stanje


zadovoljava. Problem sa odrzavanjem baze podataka nastaje u slucaju da jedno
stanje r relacije R zadovoljava jedan skup funkcionalnih zavisnosti, a da drugo
stanje r0 iste relacije ne zadovoljava taj skup funkcionalnih zavisnosti. Zato je
potrebno precizirati skup funkcionalnih zavisnosti F koje mora da zadovolji svako
stanje r relacije R.
Skup funkcionalnih zavisnosti koje zadovoljava stanje r relacije R je konacan,
jer je skup podskupova skupa Atr(R) konacan. Zato se za svaki skup funkcionalnih
zavisnosti F , primenom algoritma ZADOVOLJAVA, moze utvrditi da li stanje r

zadovoljava funkcionalne zavisnosti iz F ili ne. Medutim,


ovaj je postupak nedo
pustivo dug. Zbog toga je pozeljno imati mehanizam koji obezbeduje
sledece: ako
je poznato da stanje r relacije R zadovoljava neke funkcionalne zavisnosti F1 iz F ,
tada to stanje nuzno zadovoljava i ostale funkcionalne zavisnosti iz F (one se mogu
izvesti iz F1 ).
Za skup funkcionalnih zavisnosti F kaze se da povlaci funkcionalnu zavisnost
X Y (u oznaci F |= X Y, sa interpretacijom da je FZ X Y logicka posledica
od F ) ako svako stanje r relacije R koje zadovoljava funkcionalne zavisnosti iz F ,
zadovoljava i funkcionalnu zavisnost X Y .

Aksiome izvodenja
su pravila koja utvrduju
vazenje nekih funkcionalnih zavisnosti u relaciji R, na osnovu vazenja nekih drugih funkcionalnih zavisnosti u R.

Mada nazvana aksiomama, ova pravila su tvrdenja


koja se mogu dokazati polazeci
aksiomama izvodenja

od definicija FZ i operacija relacione algebre. Medu


karak
teristicne su sledece, poznate kao Armstrongove aksiome ([3]). Tvrdenja se navode
sa okosnicom dokaza, ali ne u izvornom obliku (kako ih je formulisao Armstrong),
vec u pogodnijem, prema [48]:
F1. Refleksivnost. Funkcionalna zavisnost X X uvek vazi u relaciji R, jer skup
R[X = x][X] sadrzi najvise jednu n-torku (v. definiciju FZ, odeljak 1.4).
F2. Prosirenje. Ako u relaciji R vazi FZ X Y i ako je Z Atr(R), onda vazi i
FZ XZ Y .

166

8 Teorija zavisnosti
Ako R zadovoljava FZ X Y , onda skup R[X = x][Y ] sadrzi najvise jednu
n-torku za svako x. Tada je R[XZ = xz] R[X = x], pa je i R[XZ =
xz][Y ] R[X = x][Y ]. Zato i skup R[XZ = xz][Y ] sadrzi najvise jednu
n-torku, tj. relacija R zadovoljava funkcionalnu zavisnost XZ Y .
Primer 8.1 Jedno stanje r relacije R(A, B, C, D) moze biti
r

A
a1
a2
a1
a3

B
b1
b2
b1
b3

C
c1
c1
c1
c2

D
d1
d1
d2
d3

i ono zadovoljava funkcionalnu zavisnost A B, a zbog F2 zadovoljava i


sledece FZ: AB B, AC B, AD B, ABC B, ABD B, ACD
B, ABCD B.
F3. Aditivnost. Ako u relaciji R vaze FZ X Y i X Z, onda u njoj vazi i FZ
X Y Z.
Naime, ako ne bi vazila FZ X Y Z, onda bi skup R[X = x][Y Z] sadrzao
vise od jedne n-torke, pa bi bar jedan od skupova R[X = x][Y ], R[X = x][Z]
imao vise od jedne n-torke, sto po pretpostavci nije slucaj. Dakle, vazi i FZ
X Y Z u relaciji R. Ova aksioma dopusta objedinjenje dve FZ s jednakim
levim stranama. U prethodnom primeru, stanje r relacije R zadovoljava FZ
A B i A C, pa prema aksiomi F3 sledi i vazenje FZ A BC.
F4. Projektivnost. Ako vazi FZ X Y Z u relaciji R, onda u njoj vaze i FZ
X Y i X Z.
Naime, zbog vazenja FZ X Y Z, skup R[X = x][Y Z] sadrzi najvise jednu
n-torku; zato i njegove projekcije na Y i Z, tj. skupovi R[X = x][Y Z][Y ](
R[X = x][Y ]) i R[X = x][Y Z][Z]( R[X = x][Z]) imaju najvise po jednu
n-torku, pa vaze FZ X Y i X Z. Tako u prethodnom primeru vazi
FZ A BC, pa prema aksiomi F4, vaze FZ A B i A C. U izvesnom
smislu aksioma projektivnosti je inverzna aksiomi aditivnosti.
F5. Tranzitivnost. Ako vaze FZ X Y i Y Z u relaciji R, onda u njoj vazi i
FZ X Z.
Naime, prema samoj definiciji FZ, za svake dve n-torke t1 , t2 R vaze implikacije
t1 [X] = t2 [X]
t1 [Y ] = t2 [Y ]

t1 [Y ] = t2 [Y ]
t1 [Z] = t2 [Z]

(zbog FZ X Y )
(zbog FZ Y Z),

pa zbog tranzitivnosti relacije jednakosti sledi i


8.2 Aksiome izvodenja

167

t1 [X] = t2 [X] t1 [Z] = t2 [Z].

Aksioma tranzitivnosti je jedna od dve najmocnije aksiome izvodenja


(druga
je F6 pseudotranzitivnost).
Primer 8.2 Sledece stanje r relacije R(A, B, C, D)
r

A
a1
a2
a3
a4

B
b1
b2
b1
b1

C
c2
c1
c2
c2

D
d1
d2
d1
d3

zadovoljava FZ A B i B C, pa prema aksiomi F5, i FZ A C.


F6. Pseudotranzitivnost. Ako vaze FZ X Y i Y Z W u relaciji R, onda u

njoj vazi i FZ XZ W . Ovo tvrdenje


moze se izvesti iz prethodnih aksioma
kroz sledece korake:
1)
2)
3)
4)
5)
6)
7)

Z
XZ
X
XZ
XZ
YZ
XZ

Z
Z
Y
Y
YZ
W
W

(prema F1)
(prema F2)
(pretpostavka)
(prema F2)
(prema F3, iz 2) i 4))
(pretpostavka)
(prema F5, iz 5) i 6)).

Kao posledice aksioma izvodenja


vaze i sledeca tvrdenja:
1. Za svaki par podskupova X, Y skupa atributa relacije R, za koji vazi Y X,
vazi FZ X Y . Ovo je trivijalna FZ, a njeno vazenje se dokazuje primenom
aksioma refleksivnosti i prosirenja.
2. Ako u relaciji R vaze FZ X Y i XY Z, onda u relaciji R vazi i FZ
X Z. Ova posledica se dokazuje primenom aksiome pseudotranzitivnosti.

Aksiome F1 F6 navedenog sistema aksioma izvodenja


nisu nezavisne, sto znaci
da su neke od njih posledica preostalih. Na primer, aksioma F5 je specijalni slucaj
aksioma F6 sledi iz aksioma F1, F2, F3 i F5, sto
aksiome F6, za Z = . Takode,
je upotrebljeno u njenom dokazu. S druge strane, moze se dokazati da je sistem
aksioma F1 F6 potpun u smislu da se svaka FZ koja je logicka posledica skupa
funkcionalnih zavisnosti F, moze dobiti primenom aksioma F1 F6 na skup F ([48],
[65]).
dokazati da jedan podskup skupa aksioma F1 F6, koji je
Moze se takode
istovremeno i potpun i nezavisan, jeste skup {F1, F2, F6}.

168

8 Teorija zavisnosti

Jedna od pretpostavki relacionog modela je pretpostavka o jedinstvenosti


funkcionalnih zavisnosti. Ne mogu, naime, postojati dve FZ f : X Y i
g : X Y , sa razlicitom semantikom. Na primer, nije dopusteno postojanje
FZ f : RADNIK SEKTOR sa znacenjem da jedan radnik radi tacno u jednom
sektoru i g: RADNIK SEKTOR sa znacenjem da jedan radnik ucestvuje u
upravnom odboru tacno jednog sektora.
Pojava nejedinstvenih funkcionalnih zavisnosti nije dopustena ni kao posledica
algebre funkcionalnih zavisnosti o kojoj je upravo bilo reci. Tako, na primer ([7]),
FZ f : SEKTOR DIREKTOR i g:{DIREKTOR, SPRAT} BROJ RADNIKA

mogu imati znacenje da sektor jednoznacno odreduje


direktora, i da direktor i sprat

jednoznacno odreduju
broj radnika jednog direktora na jednom spratu. Primenom
pseudotranzitivnosti moze se dobiti FZ {SEKTOR, SPRAT} BROJ RADNIKA,

koja odreduje
broj radnika direktora specificnog sektora na specificnom spratu (a
ne broj radnika specificnog sektora na specificnom spratu). Ako direktor moze da
upravlja vecim brojem sektora, onda dobijena FZ nije semanticki ista kao sintaksno
identicna FZ koja bi oznacavala broj radnika specificnog sektora na specificnom
spratu.
Problem nejedinstvenosti funkcionalne zavisnosti obicno se resava preimenovanjem atributa. U prvom primeru, atribut RADNIK iz FZ g moze se preimenovati
u atribut RADNIK UPRAVA, jer se semantika atributa RADNIK u FZ f, g bitno
razlikuje. U drugom primeru atribut BROJ RADNIKA iz FZ g trebalo bi preimenovati u BROJ RADNIKA DIREKTORA, pa bi se primenom pseudotranzitivnosti
dobila FZ {SEKTOR, SPRAT} BROJ RADNIKA DIREKTORA koja bi sada
bila i sintaksno razlicita od FZ {SEKTOR, SPRAT} BROJ RADNIKA.

8.3

Zatvorenje skupa funkcionalnih zavisnosti

Ako je zadat skup F funkcionalnih zavisnosti jedne relacije, niz pitanja koja se
postavljaju u vezi sa njim ukljucuje:
1. Kako konstruisati skup svih funkcionalnih zavisnosti koje se mogu izvesti iz
F po Armstrongovim aksiomama?
2. Da li je zadata FZ logicka posledica skupa F ?
3. Kako konstruisati najmanji (po broju FZ) skup FZ koji generise sve FZ kao
i F?
Prva dva pitanja odnose se na konstrukciju zatvorenja skupa FZ, a trece na
konstrukciju pokrivanja skupa FZ. Znacaj ovih konstrukcija je u povecanju efikasnosti odrzavanja integriteta baze podataka, kao i u logickom projektovanju baza
podataka.
Pored znacaja koji zatvorenje skupa FZ ima u logickom projektovanju baze

podataka (npr. u utvrdivanju


da li je neki skup atributa kandidat za primarni
kljuc), na ovom konceptu se neposredno zasniva i koncept pokrivanja.

8.3 Zatvorenje skupa funkcionalnih zavisnosti

169

Definicija 8.1 Neka je F neki skup FZ relacije R. Zatvorenje od F, u oznaci


F + , jeste najmanji skup FZ koji sadrzi F i takav da se primenom Armstrongovih
aksioma na F + ne dobija nijedna FZ koja vec nije u F + .
Skup F + je konacan i moze da se odredi primenom aksioma F1, F2 i F6 i
dodavanjem dobijenih FZ skupu F, ali je taj postupak jako dug. Zato se pitanje 1

zamenjuje pitanjem 2: kako konstruisati algoritam kojim se, bez odredivanja


celog
skupa F + , moze utvrditi da li je proizvoljna FZ X Y F + , tj. da li se ta FZ
moze izvesti iz F .
Definicija 8.2 Neka su X, Y neprazni skupovi atributa relacije R i neka je F neki
skup FZ te relacije. Kaze se da je Y zatvorenje od X nad F (u oznaci Y = X + )
ako postoji FZ X Y u F + i ako za svaku drugu FZ X Z iz F + vazi Y Z
(Y je maksimalni skup atributa funkcionalno zavisnih od X).
Zbog refleksivnosti, zatvorenje X + uvek sadrzi X.
Primer 8.3 Neka je F = {A D, AB DE, CE G, E H}. Tada je
(AB)+ = ABDEH.
Zatvorenje skupa atributa X nad skupom FZ F moze se odrediti u nizu iteracija
sledecim algoritmom:
Algoritam ZATVORENJE
Ulaz: skup atributa X i skup FZ F ;
Izlaz: zatvorenje od X nad F ;
ZATVORENJE(X, F )
BEGIN
stari := ; novi := X;
WHILE novi 6= stari DO
BEGIN
stari := novi;
FOR svaka FZ W Z u F DO
IF novi W THEN novi := novi Z
END;
RETURN(novi)
END.
Primer 8.4 Neka je F = {A D, AB E, BI E, CD I, E C}.
Izvrsenjem algoritma ZATVORENJE(AE, F ) promenljiva novi dobija, redom,
sledece skupove atributa kao svoje vrednosti:
novi = AE
novi = AEDC
novi = AEDCI = (AE)+ .

Koriscenjem algoritma ZATVORENJE moze se konstruisati i algoritam CLAN


+
kojim se ispituje da li zadata FZ pripada zatvorenju F skupa FZ F .

170

8 Teorija zavisnosti

Algoritam CLAN
Ulaz: skup FZ F i FZ X Y ;

Izlaz: TACNO
ako F |= X Y, NETACNO
u suprotnom;

CLAN(F , X Y )
BEGIN

IF Y ZATVORENJE (X, F ) THEN RETURN( TACNO


)

ELSE RETURN( NETACNO


)
END.

Primer 8.5 Za skup FZ F kao u primeru 8.4, i FZ AE I, algoritam CLAN


+
dace potvrdan odgovor o pripadnosti zadate FZ zatvorenju F skupa F .

8.4

Pokrivanje skupa funkcionalnih zavisnosti

Slozenost algoritama za kontrolu i odrzavanje integriteta baze podataka, zasnovanih


na funkcionalnim zavisnostima, bitno zavisi od broja FZ cije vazenje treba prove
ravati (i slozenost algoritma ZATVORENJE, pa i algoritma CLAN,
zavisi od broja
FZ u skupu F ). Zbog toga se prirodno postavlja pitanje da li se dati skup FZ F
moze predstaviti drugim (manjim) skupom FZ F 0 koji proizvodi isti skup FZ kao
0
i F (tj. za koji je F + = F + ). Na primer, svaka FZ koja se moze izvesti iz skupa
F = {A B, B C, A C, AB C, A BC}, moze se izvesti i iz skupa
F 0 = {A B, B C}.
Definicija 8.3 Dva skupa FZ F i F 0 relacije R su ekvivalentna (u oznaci F F 0 )
0
ako je F + = F + . Ako je F F 0 , onda je F pokrivanje za F 0 (F 0 je pokrivanje za
F ).
Mada definicija pokrivanja ne ukljucuje njegovu kardinalnost, podrazumevace
se pokrivanje specijalnog oblika koje ne sadrzi veci broj FZ od skupa koji pokriva.
0

Iz definicije 8.3 sledi da za svaku FZ X Y iz F + (pa, dakle, i za svaku FZ


X Y F 0 ) vazi F |= X Y . Kaze se da se skup FZ F 0 izvodi iz skupa F, tj.
da je F 0 logicka posledica od F , u oznaci F |= F 0 . Zbog simetricnosti ekvivalencije
skupova funkcionalnih zavisnosti vazi i F 0 |= F .
Primer 8.6 Skupovi FZ F = {A BC, A D, CD E} i G = {A BCE,
A ABD, CD E} su ekvivalentni, ali skup F nije ekvivalentan sa skupom
G0 = {A BCDE}, jer G0 6|= CD E.
Provera izvodivosti jednog skupa FZ iz drugog, odnosno provera njihove ekvivalentnosti, moze se sprovesti sledecim algoritmima:

8.4 Pokrivanje skupa funkcionalnih zavisnosti

171

Algoritam IZVODI
Ulaz: dva skupa FZ F, G;

Izlaz: TACNO
ako F |= G, NETACNO
u suprotnom;
IZVODI(F, G)
BEGIN

v := TACNO;
FOR svaka FZ X Y iz G DO

v := v AND CLAN(F,
X Y );
RETURN(v)
END.
Algoritam EKVIV
Ulaz: dva skupa FZ F, G;

Izlaz: TACNO
ako F G, NETACNO
u suprotnom;
EKVIV(F, G)
BEGIN
v := IZVODI(F, G) AND IZVODI(G, F );
RETURN(v)
END.
Iz istog razloga kao i pokrivanja uopste, od interesa su pokrivanja bez suvisnih
FZ (tj. bez onih FZ koje se mogu izvesti iz preostalih FZ istog skupa).
Definicija 8.4 Skup FZ F je neredundantan ako ne sadrzi pravi podskup F 0 F
takav da je F 0 F ; u suprotnom je skup F redundantan. Skup F je neredundantno
pokrivanje skupa FZ G ako je F pokrivanje skupa G i F je neredundantan skup
FZ.
Primer 8.7 Za dva skupa FZ
G = {AB C, A B, B C, A C} i
F = {AB C, A B, B C}
vazi F G, ali je F redundantan skup FZ jer je i skup F 0 = {A B, B C}
pokrivanje skupa G. Skup FZ F 0 jeste neredundantno pokrivanje skupa FZ G.
Sledeca definicija neredundantnog skupa ekvivalentna je definiciji 8.4, ali je operativnija od nje i koristi pojam suvisne funkcionalne zavisnosti:
Definicija 8.5 FZ X Y je suvisna u skupu FZ F ako F \ {X Y } |= X Y .
Skup FZ F je neredundantan ako u njemu nema suvisnih FZ.
Za svaki skup FZ G postoji neki podskup F G takav da je F neredundantno
pokrivanje od G. Ako je G neredundantan skup FZ, onda je F = G. Ako je G
redundantan skup, treba izbaciti iz njega sve suvisne FZ. Sledeci algoritam NERE
DUND izgraduje
jedno neredundantno pokrivanje F datog skupa FZ G:

172

8 Teorija zavisnosti

Algoritam NEREDUND
Ulaz: skup FZ G;
Izlaz: neredundantno pokrivanje F skupa G;
NEREDUND(G)
BEGIN
F := G;
FOR svaka FZ X Y iz G DO

IF CLAN(
F \ {X Y }, X Y ) THEN F := F \ {X Y };
RETURN (F )
END.
Primer 8.8 Neredundantno pokrivanje skupa FZ
G = {A B, B A, B C, A C},

odredeno
algoritmom NEREDUND(G), jeste skup
{A B, B A, A C}.

Rezultat algoritma je osetljiv na redosled navodenja


FZ u skupu G, pa je, tako,
NEREDUND({A B, A C, B A, B C}) = {A B, B A, B C}.
Dakle, skup FZ G moze da ima vise od jednog neredundantnog pokrivanja.
Od posebnog interesa je minimalno pokrivanje F skupa FZ G; ono se definise kao
pokrivanje skupa G koje ne sadrzi vise FZ od bilo kog drugog njemu ekvivalentnog
skupa.
Primer 8.9 Skup FZ G = {A BC, B A, AD E, BD J} je neredundantan, ali nije minimalan jer postoji skup FZ F = {A BC, B A, AD EJ}
takav da je F G i |F |2 < |G|. Skup F jeste minimalno pokrivanje skupa G.

Algoritam za odredivanje
minimalnog pokrivanja ima veliku vremensku slozenost
(eksponencijalnu), a sam problem je jedan od NP kompletnih problema ([48]). Al
goritam zahteva definisanje nekih novih pojmova kao sto su graf izvodenja
FZ i
relacije definisane nad takvim grafom.
Jedna vrsta neredundantnog pokrivanja koja se cesto koristi u procesu logickog
projektovanja baze podataka i dokazivanju korektnosti tog procesa, jeste kanonicko
pokrivanje.
Definicija 8.6 Kanonicko pokrivanje skupa FZ G je neredundantno pokrivanje F
koje zadovoljava sledeca dva uslova:
a) svaka FZ u skupu F je oblika X A, gde je A jedan atribut;

b) leva strana svake FZ iz F oslobodena


je nebitnih atributa, tj. atributa cije
udaljenje iz leve strane te FZ ne menja zatvorenje skupa FZ G.
2 Oznaka

|F | ozna
cava kardinalnost skupa F .

8.5 Viseznacne zavisnosti

173

Primer 8.10 Za skup FZ G = {A BCE, AB DE, BI J} kanonicko


pokrivanje je F = {A B, A C, A D, A E, BI J}.
U opstem slucaju, kanonicko pokrivanje datog skupa FZ G moze se odrediti u
tri koraka:
1. svaka FZ oblika X Y zameni se skupom FZ {X A | A Y } ;
2. za svaku FZ X A iz dobijenog skupa FZ, iz leve strane X te FZ uklanja
se svaki nebitni atribut B;
3. odredi se neredundantno pokrivanje F prethodno dobijenog skupa FZ.
Drugi pristup smanjenju slozenosti algoritama koji proveravaju vazenje FZ je
onaj koji, umesto smanjenja broja FZ, ide ka smanjenju broja atributa u njima.
Naime, ako je F neredundantan skup FZ, u njemu nema suvisnih FZ (ne moze
se smanjiti F udaljenjem neke FZ jer bi se dobio skup F 0 6 F.) Velicina skupa
F moze se smanjiti udaljenjem nebitnih atributa iz levih strana FZ, ali i iz desnih
strana FZ (atribut A u desnoj strani FZ X Y je nebitan ako vazi da je (F \{X
Y }) {X (Y \ {A})} |= X A, tj. ako se funkcionalna zavisnost X A moze
izvesti iz skupa FZ koji se dobije kada se FZ X Y zameni sa X (Y \ {A})).
Primer 8.11 U skupu FZ G = {A BC, B C, AB D}, atribut C je
nebitan u FZ A BC, a atribut B je nebitan u FZ AB D. Ovi atributi mogu
se ukloniti iz pripadnih FZ.
Ovaj pristup ima svoj cilj u definisanju optimalnog pokrivanja datog skupa FZ,
koje se odnosi na minimizaciju broja atributa u pokrivanju tog skupa FZ ([48]).
Dokazuje se da je optimalno pokrivanje istovremeno i minimalno pokrivanje bez
nebitnih atributa.

8.5

Vi
sezna
cne zavisnosti

atributima
Funkcionalne zavisnosti su specijalni slucaj opstijih logickih veza medu
relacije, koje se zovu viseznacne zavisnosti. Opstost ovog tipa logicke veze ogleda
se u sledecem: kod funkcionalne zavisnosti skupa atributa Y od skupa atributa

X (X Y ), vrednost skupa atributa X odreduje


jednu vrednost skupa atributa Y,

dok kod viseznacne zavisnosti Y od X, vrednost skupa atributa X odreduje


skup
vrednosti skupa atributa Y .
Ilustrujmo koncept viseznacne zavisnosti sledecim primerom:
Neka relacija PNR ima atribute PREDMET, NASTAVNIK, REFERENCA, sa
znacenjem da NASTAVNIK predaje PREDMET i pri tome koristi REFERENCU
atributima ove relacije vazi logicki uslov da jednu istu
kao literaturu. Ako medu
referencu koriste svi nastavnici koji predaju isti predmet, onda skup referenci koje

174

8 Teorija zavisnosti

se koriste u nastavi jednog predmeta zavisi samo od predmeta a ne i od nastavnika,


tj. atribut REFERENCA viseznacno zavisi od atributa PREDMET. Neka relacija
PNR ima sledeci sadrzaj:
PNR

PREDMET
p1
p1
p1
p1
p2
p2
p2

NASTAVNIK
n1
n1
n2
n2
n3
n3
n3

REFERENCA
r1
r2
r1
r2
r3
r4
r5

Predmet p2 predaje samo jedan nastavnik pa razmatranje vrednosti njegovih


referenci nije zanimljivo. Predmet p1 predaju nastavnici n1 i n2, i to oba nastavnika
po istoj literaturi {r1, r2}, tj. skup referenci za predmet p1 koje koristi nastavnik
n1 isti je kao i skup referenci za predmet p1 koje koristi nastavnik n2. Ova jednakost skupova referenci za jedan predmet, koje koriste razni nastavnici, oznacava
postojanje viseznacne zavisnosti atributa REFERENCA od atributa PREDMET
u relaciji PNR.
Viseznacna zavisnost moze se formalno definisati na sledeci nacin:
Definicija 8.7 Neka su X, Y, Z neprazni skupovi atributa relacije R, pri cemu je
Z = Atr(R)\XY i neka su x, z proizvoljni elementi projekcija relacije R na skupove
atributa X, Z, redom. Uvedimo oznaku
(
ako X Y = ,
def {y | y R[Y ] i xyz R}
Yxz =
{y | y R[Y ] i x yz R} ako X Y 6= .
( u x y oznacava prirodno spajanje torki x i y po jednakim vrednostima zajednickih atributa). U relaciji R vazi viseznacna zavisnost (krace: VZ) skupa Y
od skupa X, u oznaci X Y, ako vazi jednakost Yxz = Yxz0 za svako x R[X]
i z, z 0 R[Z] za koje su Yxz , Yxz0 oba neprazna. Kaze se da skup atributa X

viseznacno odreduje
skup atributa Y , tj. da skup atributa Y viseznacno zavisi od
skupa atributa X.
Prethodna definicija ima i sledece interpretacije. U relaciji R vazi VZ X Y
ako pripadnost n-torki xyz, xy 0 z 0 R, za x R[x], y, y 0 R[Y ], z, z 0 R[Z] (tj.
x yz, x y 0 z 0 R), povlaci i pripadnost n-torki xyz 0 , xy 0 z R (tj. x yz 0 ,
viseznacna zavisnost X Y vazi u R ako je skup Yxz
x y 0 z R). Takode,
vrednoscu x, tj. zavisi samo od x a ne i od z.
jednoznacno odreden
Dakle, Yxz je skup svih elemenata projekcije relacije R na skup atributa Y, koji
su u relaciji R sa x, z, tj. Yxz je projekcija na skup atributa Y restrikcije relacije
R po uslovu X = x i Z = z. Koristeci ovu oznaku, za skup vrednosti viseznacno
zavisnog atributa REFERENCA za predmet p1 dobijamo

8.6 Osnovne osobine viseznacnih zavisnosti

175

REFERENCAp1n1 = {r| (p1, r, n1) PNR} = {r1, r2},


REFERENCAp1n2 = {r| (p1, r, n2) PNR} = {r1, r2}.
U prethodnom primeru moze se uociti i sledece: ako vazi logicki uslov da skup
referenci koje jedan nastavnik koristi za jedan predmet zavisi samo od predmeta a ne
i od nastavnika (vazi viseznacna zavisnost PREDMET REFERENCA), onda

vazi i logicki uslov da skup nastavnika koji u nastavi jednog (odredenog)


predmeta

koriste jednu (odredenu) referencu zavisi takode samo od predmeta a ne i od reference (vazi viseznacna zavisnost PREDMET NASTAVNIK). To nije slucajno,
vec predstavlja jednu od osobina viseznacnih zavisnosti komplementarnost.

8.6

Osnovne osobine vi
sezna
cnih zavisnosti

osobinama viseznacnih zavisnosti isticu se sledece osnovne osobine iz kojih


Medu
se sve ostale mogu izvesti:
(a) komplementarnost: ako u relaciji R vazi viseznacna zavisnost X Y , gde
su X, Y neprazni podskupovi skupa Atr(R), onda u relaciji R vazi i viseznacna
zavisnost X Z, gde je Z = Atr(R) \ XY 6= ;
(b) prosirenje: ako u relaciji R vazi viseznacna zavisnost X Y (X, Y su
neprazni podskupovi skupa Atr(R)), onda za svaka dva podskupa V, W
Atr(R), takva da je V W , vazi viseznacna zavisnost W X V Y ;
(c) tranzitivnost: ako u relaciji R vaze VZ X Y i Y Z (X, Y, Z
Atr(R)), onda vazi i viseznacna zavisnost X Z (ako je Y Z = ),
odnosno X Z \ Y (ako je Y Z 6= ).
Osim osnovnih osobina viseznacnih zavisnosti, od znacaju su i sledece dve os funkcionalnih i viseznacnih zavisnosti:
obine veze izmedu
(a) Ako su X, Y neprazni podskupovi skupa atributa relacije R i ako u relaciji R
vazi FZ X Y , onda u relaciji R vazi i VZ X Y . Dakle, funkcionalne
zavisnosti su specijalni slucaj viseznacnih zavisnosti. Definicija funkcionalne
zavisnosti moze se dobiti modifikovanjem definicije viseznacne zavisnosti dodatnim zahtevom da skup Yxz , osim sto zavisi samo od x, sadrzi (najvise)
jedan element. Da su ova dva logicka uslova strogo inkluzivna pokazuje primer
iz prethodnog odeljka u kome vazi viseznacna ali ne vazi funkcionalna zavisnost.
(b) Ako u relaciji R vazi viseznacna zavisnost X Y (X, Y Atr(R) i X, Y 6=
) i ako za dva skupa atributa W, U Atr(R), takva da je U Y i W Y = ,
vazi funkcionalna zavisnost W U , onda u relaciji R vazi i FZ X U .
Sve osobine funkcionalnih i viseznacnih zavisnosti (F1 F6, (a) (c)) i osobine
veze funkcionalnih i viseznacnih zavisnosti (a), (b) mogu se dokazati polazeci od

176

8 Teorija zavisnosti

definicije funkcionalnih i viseznacnih zavisnosti; sve te osobine nazivaju se i aksiomama zavisnosti, a njihov znacaj ogleda se u zajednickom svojstvu potpunosti
koje se formulise sledecom teoremom.
Teorema 8.2 Za dati skup funkcionalniih i viseznacnih zavisnosti D u relaciji R sa
skupom atributa A, svojstva F1F6, (a)(c) i (a), (b), primenjena na zavisnosti

iz D, omogucuju izvodenje
skupa D+ svih zavisnosti (funkcionalnih i viseznacnih)
koje su logicka posledica skupa D.
Dokaz teoreme moze se naci u [48], [65].
Znacaj viseznacnih zavisnosti lezi u cinjenici da one daju potreban i dovoljan
uslov da se relacija moze dekomponovati u par svojih projekcija bez gubitka informacije, tj. da bude rezultat prirodnog spajanja svojih projekcija. Ovo svojstvo
viseznacnih zavisnosti je izuzetno vazno u metodologiji logickog projektovanja baze

podataka, i moze se formulisati sledecim tvrdenjem:


Teorema 8.3 Neka je R relacija i neka su X, Y, Z neprazni podskupovi skupa
Atr(R), pri cemu je Z = Atr(R) \ XY. Za relaciju R vazi jednakost
(1)

R = R[XY ] R[XZ]

ako i samo ako vazi viseznacna zavisnost X Y .


Dokaz. Razlikujemo tri slucaja:

vazi jer je projekcija R[XZ] jednaka celoj


1. Neka je Y X. Tada tvrdenje
relaciji R, a jednakost Yxz = Yxz0 je trivijalna.
2. Neka su skupovi X, Y disjunktni. Dokazimo prvo da je postojanje viseznacne
zavisnosti X Y dovoljan uslov za jednakost (1).
Kao sto je vec naglaseno u dokazu teoreme 8.1, inkluzija R R[XY ] R[XZ]
je trivijalna i uvek vazi. Suprotna inkluzija sledi iz sledeceg razmatranja.
Neka vazi viseznacna zavisnost X Y . Tada za svaku n-torku xyz
R[XY ] R[XZ] postoje y 0 R[Y ] i z 0 R[Z], takvi da xy 0 z, xyz 0 R. Zbog
viseznacne zavisnosti X Y vazi da je Yxz = Yxz0 , tj. y 0 Yxz0 i y Yxz ,
odakle sledi da xyz, xy 0 z 0 R. Dakle, ako je xyz R[XY ] R[XZ], onda je
i xyz R.
Da bismo dokazali da je postojanje viseznacne zavisnosti potreban uslov za
jednakost (1), pretpostavimo da vazi jednakost (1) i da su xyz, xy 0 z 0 dve
proizvoljne n-torke iz R (x R[X], y, y 0 R[Y ], z, z 0 R[Z]). Tada su,
zbog jednakosti (1), i n-torke xy 0 z, xyz 0 R, sto znaci da vazi implikacija
y Yxz , y 0 Yxz0 y Yxz0 , y 0 Yxz , tj. jednakost Yxz = Yxz0 . Kako ova
jednakost vazi za proizvoljne x, z, z 0 za koje su oba skupa Yxz , Yxz0 neprazna,
to u relaciji R vazi, po definiciji, viseznacna zavisnost X Y .

8.7 Zavisnosti spajanja

177

3. Neka Y 6 X i neka skupovi atributa X i Y imaju neprazan presek. Tada


se skup Y moze predstaviti kao Y = Y 0 Y 00 , gde je Y 0 = X Y i Y 00 6= .
Tada VZ X Y vazi ako i samo ako vazi VZ X Y 00 (u jednom smeru
po definiciji VZ, u drugom po osobini prosirenja VZ), pri cemu su skupovi

X, Y 00 disjunktni. Na osnovu tvrdenja


teoreme u slucaju 2, druga VZ vazi
ako i samo ako je R = R[XY 00 ] R[XZ] (Z = Atr(R) \ XY 00 ), tj. ako i samo
ako je R = R[XY ] R[XZ] (zbog XY 00 XY ).

Dakle, tvrdenje
teoreme vazi u sva tri slucaja.
Ako se definicija viseznacne zavisnosti modifikuje tako da skup atributa Z moze
biti prazan, dolazi se do definicije trivijalne viseznacne zavisnosti:
Definicija 8.8 Trivijalne viseznacne zavisnosti u relaciji R(X, Y ) sa disjunktnim,
nepraznim podskupovima X, Y skupa Atr(R) jesu zavisnosti X , X Y .

Motivacija za ovakvu definiciju trivijalnih VZ je cinjenica da je u zavisnosti


X skup zavisnih atributa prazan pa je i skup njihovih vrednosti prazan,
dok je VZ X Y uvedena zbog osobine komplementarnosti, modifikovane za
slucaj praznog skupa atributa. Ovako definisane trivijalne viseznacne zavisnosti
vaze u svakoj relaciji.

8.7

Zavisnosti spajanja

atributima relacije, u odnosu na viseznacne zaviOpstiji oblik logicke veze medu


snosti, predstavlja tzv. zavisnost spajanja ([65]). Definicija ovog oblika logicke
veze zasniva se na uopstenju svojstva funkcionalnih odnosno viseznacnih zavisnosti da predstavljaju dovoljan odnosno potreban i dovoljan uslov za binarnu
dekompoziciju relacije (dekompoziciju u dve projekcije) bez gubljenja informacije.
Zavisnost spajanja se definise upravo ovim svojstvom, ali prosirenim na konacnu
dekompoziciju relacije. Naime, postoje primeri relacija koje se ne mogu binarno
dekomponovati bez gubljenja informacije, ali se mogu konacno dekomponovati (v.
odeljak 9.6).
Definicija 8.9 Neka je {X1 , . . . , Xm } skup podskupova skupa atributa Atr(R)
relacije R takav da je X1 X2 Xm = Atr(R). U relaciji R vazi zavisnost
spajanja, u oznaci {X1 , . . . , Xm } ako je
R = R[X1 ] R[X2 ] R[Xm ].
Zavisnost spajanja je trivijalna ako je Xi = Atr(R) za neko i {1, 2, . . . , m}.
Ovako definisana trivijalna zavisnost spajanja vazi u svakoj relaciji.

178

8 Teorija zavisnosti

Opstost zavisnosti spajanja u odnosu na prethodno definisane zavisnosti ogleda


viseznacnih zavisnosti i zavisnosti spajanja:
se u sledecoj osobini veze izmedu
(a) U relaciji R sa tri neprazna podskupa skupa atributa X, Y, Z (Z =
Atr(R) \ XY ) vazi zavisnost spajanja {XY, XZ} ako i samo ako u relaciji R
vazi viseznacna zavisnost X Y .

8.8

Pitanja i zadaci

1. Definisati sledece pojmove:


funkcionalna zavisnost (FZ)
trivijalna FZ

aksiome izvodenja
zatvorenje skupa atributa
zatvorenje skupa FZ
pokrivanje skupa FZ
neredundantno pokrivanje skupa FZ

kanonicko pokrivanje skupa FZ


nebitan atribut
suvisna FZ
viseznacna zavisnost (VZ)
trivijalna VZ
zavisnost spajanja (ZS)
trivijalna ZS

2. Formulisati i dokazati vezu FZ i dekompozicije relacije u skup projekcija.

3. U cemu je znacaj aksioma izvodenja?


4. Dokazati da refleksivnost, prosirenje i pseudotranzitivnost cine potpun sistem
aksioma.

5. Objasniti algoritme ZADOVOLJAVA, ZATVORENJE, CLAN,


NEREDUND, IZVODI, EKVIV, kao i njihov znacaj u teoriji zavisnosti.
6. Konstruisati algoritam REDUND koji ispituje da li je dati skup FZ redundantan. Preformulisati algoritam NEREDUND tako da, umesto algoritma

CLAN,
koristi algoritam REDUND.
7. Navesti osnovne osobine viseznacnih zavisnosti.
8. Formulisati i dokazati vezu VZ i dekompozicije relacije u skup projekcija.
9. Neka je relacija R stepena n. Odrediti najveci broj funkcionalnih zavisnosti
koje relacija R moze da zadovoljava.
10. Odrediti zatvorenje skupa atributa {A, B} nad skupom FZ F = {AB C,
B D, CD E, CE GH, G A}.
11. Odrediti zatvorenje F + skupa FZ F = {AB C, C B}.
12. Odrediti neredundantno pokrivanje sledeceg skupa FZ relacije R(A,B,C,D,E,I):
A C
C DI
EC AB

AB C
CD I
EI C

8.8 Pitanja i zadaci

179

13. Neka relacija BIBLIOTEKA ima sledece atribute:


BIBLIOTEKA BR
MESTO
NAZIV
K SIF
I SIF

IZDANJE
BR PRIMERAKA
KAT BROJ
ZAUZETOST
DATUM IZD

Torka (bb, mesto, naziv, k sif, i sif, izd, br pr, kat br, zauz, dat) je element
relacije BIBLIOTEKA ako biblioteka sa maticnim brojem bb i nazivom naziv
u mestu mesto poseduje primerak pod kataloskim brojem kat br knjige sa
sifrom k sif, u izdanju izd izdavaca sa sifrom i sif ; primerak je jedan od br pr
primeraka te knjige u toj biblioteci, a moze biti zauzet (zauz je 1) sa datumom
izdavanja dat, ili slobodan (zauz je 0 a dat je NULL). Koje funkcionalne zavisnosti zadovoljava relacija biblioteka?
14. Neka relacija UCENIK ima sledece atribute:
UCENIK BR
IME

DATUM RODENJA
SKOLA
SMER

RAZRED
ODELJENJE
RAZREDNI STARESINA
PREDMET
OCENA

Atributi imaju uobicajeno znacenje. Odrediti skup zavisnosti koje zadovoljava relacija UCENIK.
15. Neka relacija RASPORED CASOVA ima sledece atribute:
D dan u nedelji (15)
SP sat pocetka predavanja (819)
SZ sat zavrsetka predavanja (920)

U broj ucionice
N ime nastavnika
P naziv predmeta

Torka (D:d, SP:sp, SZ:sz, U:u, N:n, P:p) pripada relaciji RASPORED CASOVA
ako u vreme (D:d, SP:spSZ:sz) nastavnik N:n drzi predavanje iz predmeta
P:p u ucionici U:u. Koje funkcionalne (i druge) zavisnosti vaze u relaciji
RASPORED CASOVA?

Normalne forme

Logicko projektovanje moze, kao jednim kriterijumom, da bude vodeno


pravilima
atributima. Za
o grupisanju atributa u relacije na osnovu logickih veza medu
relacije koje se dobiju primenom pojedinih takvih pravila kaze se da se nalaze u
odgovarajucim normalnim formama. Zbog toga su normalne forme cisto sintaksna
svojstva zasnovana na algebri zavisnosti (funkcionalnih, viseznacnih i zavisnosti
spajanja).
Za sve relacije relacionog modela pretpostavlja se da imaju jednostavne domene
atributa. Za takve relacije kaze se da su u prvoj normalnoj formi, u oznaci 1NF.
Vise normalne forme zahtevaju da je relacija u 1NF i da zadovoljava dodatne
atribuuslove vezane za funkcionalne, viseznacne odnosno zavisnosti spajanja medu
tima relacije. Ovi uslovi se namecu da bi se prevazisle teskoce u radu sa relacijama,
poznate kao anomalije unosenja, brisanja i azuriranja.

9.1

Druga normalna forma

Pre nego sto damo definiciju druge normalne forme i algoritam dekompozicije
relacije u skup relacija koje su u drugoj normalnoj formi, navescemo primer relacije
koja ispoljava anomalije unosenja, brisanja i azuriranja, i objasniti uzrok anomalija
kao i nacin njihovog otklanjanja.
Primer 9.1 Neka je data relacija R sa sledecim sadrzajem:
R

180

I SIF
i1
i3
i3
i4
i5
i5

K SIF
k1
k2
k3
k1
k1
k2

NAZIV
Prosveta
Decje novine
Decje novine
Matica srpska
Prosveta
Prosveta

9.1 Druga normalna forma

181

Znacenje atributa relacije R je isto kao u odeljku 1.2. Neka u relaciji R vazi
funkcionalna zavisnost I SIF NAZIV, i neka je to jedina funkcionalna zavisnost u toj relaciji. Dakle, NAZIV 6 I SIF, I SIF 6 K SIF , K SIF 6 I SIF. U
relaciji R jedini kljuc, pa i primarni kljuc jeste par atributa (I SIF, K SIF).
Anomalija unosenja u relaciju R ogleda se u nemogucnosti unosenja podataka
o sifri i nazivu izdavaca dok se ne unese i podatak o bar jednoj knjizi koju taj
izdavac izdaje (atribut K SIF ne moze imati nedostajucu vrednost s obzirom da je
deo primarnog kljuca).
Anomalija brisanja ogleda se u cinjenici da se brisanjem informacije o izdanju
neke knjige moze izbrisati, bez takve namere, i informacija o nazivu odgovarajuceg
izdavaca. Tako, iskljucenje knjige k1 iz izdanja izdavaca i4 moze se izvrsiti samo
brisanjem trojke (i4, k1, Matica srpska), cime se brise i informacija o nazivu izdavaca sa sifrom i4.
Anomalija azuriranja ogleda se u nemogucnosti nezavisnog azuriranja vrednosti
atributa NAZIV (izdavaca). Na primer, ako je potrebno promeniti naziv izdavaca
sa sifrom i5, sa Prosveta na Nova Prosveta, onda se taj podatak ne moze
promeniti (azurirati) u jednoj trojci relacije, vec se to mora uciniti u svakoj
trojci koja se odnosi na izdavaca sa sifrom i5, tj. onoliko puta koliko izdanja ima
taj izdavac.
Uzrok anomalija koje ispoljava relacija R je u cinjenici da su tom relacijom
tipa entiteta IZ i jedan odnos izmedu
predstavljeni jedan tip entiteta IZDAVAC
i tipa entiteta KNJIGA. Entitet IZDAVAC
moze se predstaviti relacijom
DAVAC
IZDAVAC sa atributima I SIF, NAZIV, itd, a odnos relacijom IZDANJA sa
atributima I SIF, K SIF, itd. Ovaj semanticki uzrok anomalija sintaksno se moze
prepoznati u funkcionalnoj zavisnosti atributa NAZIV od atributa I SIF koji je
pravi podskup primarnog kljuca. Ovakva funkcionalna zavisnost zove se parcijalna,
njeno postojanje cini da relacija R nije u drugoj normalnoj formi, a anomalije koje
prouzrokuje eliminisu se pravilom po kome se relacija R zamenjuje svojim projekcijama na parove atributa (I SIF, NAZIV), (I SIF, K SIF):
R [I SIF, NAZIV] = IZDAVAC

I SIF
i1
i3
i4
i5

NAZIV
Prosveta
Decje novine
Matica srpska
Prosveta

R [I SIF, K SIF] = IZDANJA

I SIF
i1
i3
i3
i4
i5
i5

K SIF
k1
k2
k3
k1
k1
k2

182

9 Normalne forme

Dobijene relacije nemaju pomenute anomalije, a njihovim prirodnim spajanjem


po atributu I SIF dobija se prvobitna relacija R. Dakle, dekompozicija relacije
R u dve projekcije IZDAVAC i IZDANJA je korektna, bez gubitka informacije (s
obzirom na FZ I SIF NAZIV, v. teoremu 8.1), sto je prvi i obavezni uslov pri
bilo kojoj transformaciji podataka.
Definicija 9.1 Za funkcionalnu zavisnost X Y kaze se da je potpuna ako za
svaki pravi podskup X 0 od X vazi X 0 6 Y . Ako za neki skup X 0 X vazi
X 0 Y , funkcionalna zavisnost X Y zove se parcijalna.
Definicija 9.2 Atribut A relacije R je sporedan u toj relaciji ako ne ucestvuje ni
u jednom kljucu te relacije; u suprotnom je atribut A kljucni atribut. Neka je X
skup svih sporednih atributa relacije R. Relacija R je u drugoj normalnoj formi, u
oznaci 2NF, ako svaki atribut iz X potpuno funkcionalno zavisi od svakog kljuca
relacije R.
Teorema 9.1 (2NF normalizacija) Ako relacija R(A1 , . . . , An ) nije u 2NF,
onda postoji dekompozicija relacije R u skup njenih projekcija koje su u 2NF, a
iz kojih se operacijom prirodnog spajanja moze ponovo dobiti relacija R.
Dokaz: Dokaz teoreme se izvodi konstrukcijom sledeceg algoritma dekompozicije.
Algoritam 2NF normalizacije
Ulaz: relacija R sa atributima {A1 , . . . , An } i skupom FZ F ;
Izlaz: skup R1 , . . . , Ri (i 1) projekcija relacije R, koje su sve u 2NF i za koje
vazi: ako je i = 1, onda je R1 R; ako je i > 1, onda je R = R1 R2 Ri ;
BEGIN
i := 1;
WHILE relacija R nije u 2NF DO
BEGIN
uociti parcijalnu FZ X A, (X Atr(R), A Atr(R))
sporednog atributa A od kljuca X;
neka je X = X 0 X 00 , gde je X 0 A potpuna FZ;
neka je Z = Atr(R) \ (X {A});
zameniti relaciju R njenim projekcijama R[XZ], R[X 0 A];
Ri := R[X 0 A];
i := i + 1;
R := R[XZ]
END;
Ri := R
END.
Spajanjem projekcija R[X 0 A], R[XZ] kojima je zamenjena relacija R moze se
opet dobiti relacija R (zbog FZ X 0 A, prema teoremi 8.1). Relacija R[X 0 A] je u

9.2 Treca normalna forma

183

2NF (lako se dokazuje), a ako druga projekcija R[XZ] nije u 2NF, ona se posmatra
kao nova relacija R i sa njom se ponavlja isti postupak dekompozicije po parcijalnoj
funkcionalnoj zavisnosti koju sadrzi. Svaka projekcija dobijena dekompozicijom u
nekom prolazu pridruzuje se skupu relacija koje su u 2NF a cijim se spajanjem
moze dobiti polazna relacija. Postupak je konacan jer se broj atributa relacija
do binarne
projekcija smanjuje pa se, ako ne pre, postupak zavrsava kada se dode
relacije (relacije sa dva atributa) koja je uvek u 2NF. Naime, ako su oba atributa
binarne relacije u kljucu, onda ona nema sporednih atributa, a ako je samo jedan
atribut u kljucu, onda nema parcijalne zavisnosti od kljuca; u svakom od ovih
slucajeva relacija je u 2NF.

Dakle, algoritam 2NF normalizacije je korektan, tj. tvrdenje


teoreme je
dokazano.
Prethodni algoritam se moze uciniti efikasnijim tako sto se relacija R dekomponuje u projekcije R[X 0 Y ], R[Atr(R) \ Y ] (umesto R[X 0 A], R[XZ]), gde je sada
Y skup svih sporednih atributa koji su parcijalno zavisni od kljuca X i potpuno
zavisni od skupa X 0 .

9.2

Tre
ca normalna forma

Kriterijum koji definise drugu normalnu formu nije dovoljno strog, pa relacija koja
je u 2NF i dalje moze da ispoljava anomalije unosenja, brisanja i azuriranja. Tada
su anomalije posledica drugih nepozeljnih oblika funkcionalnih zavisnosti koje treba
otkloniti dekompozicijom relacije bez gubljenja informacije, u skup projekcija koje
su u tzv. trecoj normalnoj formi (v. definiciju 9.3).
Primer 9.2 Neka je relacijom S( P SIF, I SIF, DRZAVA) predstavljen tip entiteta
(sa atributima I SIF i DRZAVA) i odnos tog tipa entiteta sa tipom
IZDAVAC
entiteta PISAC koji je predstavljen jedinstvenim identifikatorom P SIF. Neka je
u relaciji S primarni kljuc atribut P SIF, i neka u njoj vaze FZ P SIF I SIF i
I SIF DRZAVA, dok I SIF 6 P SIF i DRZAVA 6 I SIF (jedan pisac moze imati
samo jednog izdavaca, dok jedan izdavac moze izdavati dela veceg broja pisaca). Iz
ovih funkcionalnih zavisnosti proisticu sve ranije pomenute anomalije. Na primer,
ne moze se uneti informacija o drzavi u kojoj je registrovan novi izdavac dok se
ne unese sifra bar jednog pisca cija dela taj izdavac izdaje; brisanjem poslednjeg
pisca cija dela izdaje neki izdavac gubi se i informacija o drzavi u kojoj je izdavac
registrovan; promena drzave datog izdavaca mora se izvrsiti u svakoj trojci koja se
odnosi na nekog pisca tog izdavaca. Sintaksno gledano, anomalije su posledica tzv.
tranzitivne zavisnosti sporednog atributa DRZAVA od kljucnog atributa P SIF, a
mogu se otkloniti zamenom relacije S njenim projekcijama S[P SIF, I SIF], S[I SIF,
DRZAVA].
Za novodobijene relacije vazi da se njihovim spajanjem moze dobiti relacija S
(zbog FZ I SIF DRZAVA), pri cemu u njima nema tranzitivne zavisnosti pa su
u tzv. trecoj normalnoj formi.

184

9 Normalne forme

Definicija 9.3 Neka su X, Y, Z skupovi atributa relacije R(A1 , . . . , An ). Kaze se


da skup atributa Z tranzitivno zavisi od X ako vazi X Y, Y 6 X, Y Z.
Relacija R je u trecoj normalnoj formi (u oznaci 3NF) ako je u 1NF i nijedan njen
sporedni atribut ne zavisi tranzitivno ni od jednog njenog kljuca.
Lako se pokazuje da, ako je relacija R u 3NF, onda je ona i u 2NF. Naime, ako
relacija R nije u 2NF, onda postoji sporedni atribut Ai koji je parcijalno zavisan
od kljuca X, ali je onda sporedni atribut Ai i tranzitivno zavisan od kljuca X jer
postoji takav skup X 0 X da je X X 0 , X 0 6 X, X 0 Ai . Dakle, relacija R
tada nije ni u 3NF.
Teorema 9.2 (3NF normalizacija) Ako relacija R(A1 , . . . , An ) nije u 3NF,
onda postoji dekompozicija relacije R u skup njenih projekcija koje jesu u 3NF,
koje cuvaju sve polazne FZ relacije R, a iz kojih se operacijom prirodnog spajanja
moze ponovo dobiti relacija R.
Dokaz: Slicno dokazu teoreme o 2NF normalizaciji, dokaz teoreme se izvodi konstrukcijom sledeceg algoritma dekompozicije.
Algoritam 3NF normalizacije
Ulaz: relacija R sa atributima {A1 , . . . , An } i skupom FZ F ;
Izlaz: skup R1 , . . . , Rm (m 1) projekcija relacije R, koje su sve u 3NF i za koje
vazi: ako je m = 1, onda je R1 R; ako je m > 1, onda je R = R1 R2 Rm ;
BEGIN
i := 1;
WHILE relacija R nije u 3NF, DO
BEGIN
uociti tranzitivnu zavisnost X Y, Y A, Y 6 X sporednog atributa
A od kljuca X, za koju je Y A potpuna funkcionalna zavisnost;
neka je Z = Atr(R) \ (X {A});
zameniti relaciju R projekcijama R[Y A], R[XZ];
Ri := R[Y A];
i := i + 1;
R := R[XZ]
END;
Ri := R
END.
Algoritam 3NF normalizacije zasniva se na dekompoziciji. Spajanjem projekcija
R[Y A], R[XZ] moze se dobiti relacija R (zbog FZ Y A). Za projekciju R[Y A]
lako se dokazuje da je u 3NF. Ako je i projekcija R[XZ] u 3NF, postupak se
zavrsava, a ako nije, isti postupak 3NF normalizacije primenjuje se na tu projekciju
kao novu relaciju R.

9.2 Treca normalna forma

185

Kao i kod 2NF normalizacije, postupak je konacan jer se broj atributa relacija
do bina projekcija smanjuje pa se, ako ne pre, postupak zavrsava kada se dode
rne relacije koja je uvek u 3NF (nad dva atributa ne moze postojati tranzitivna
zavisnost sporednog atributa od kljuca).

Dakle, algoritam 3NF normalizacije je korektan, tj. tvrdenje


teoreme je
dokazano.
I ovaj se algoritam moze modifikovati tako da postane efikasniji, ako se relacija
R dekomponuje u projekcije R[Y W ], R[Atr(R) \ W ] (umesto R[Y A], R[XZ]), gde
je W skup svih sporednih atributa koji tranzitivno zavise od kljuca X i potpuno
zavise od skupa Y ([65]).
Prethodni algoritmi normalizacije polaze od pretpostavke da je polazna relacija
neka vrsta univerzalne relacije ([65]). To je imaginarna relacija koja obuhvata sva
svojstva (atribute) informacionog okruzenja koje se modelira, i sve podatke baze
podataka. Postojanje univerzalne relacije znatno bi pojednostavilo upitni jezik, jer
bi se upiti odnosili samo na atribute, a ne i na relacije kojima atributi pripadaju.
sa bazom podataka se de facto odnose na univerzalnu
Sve prirodnojezicke sumede
relaciju, a upite postavljene na prirodnom jeziku sistem onda prevodi u upite nad
postojecim relacijskim shemama.
Osim za potrebe komunikacije, koncept univerzalne relacije koristi se i u kontekstu logickog projektovanja. Univerzalna relacija ima pridruzene logicke veze koje
impliciraju kljuceve i sporedne atribute. Iz nje treba, na osnovu uocenih logickih
atributima, izdvojiti dobre relacije bez anomalija. Prethodno naveveza medu
deni algoritmi 2NF i 3NF normalizacije su konceptualno najjednostavniji, ali imaju
niz losih svojstava. Jedno od tih svojstava je da rezultuju nepotrebno velikim
brojem relacija, tj. nepotrebno usitnjenim relacijama cije odrzavanje (prostorno i
vremenski) moze biti skupo, a manipulisanje njima komplikovano.
Algoritam kojim se formalizuje 3NF normalizacija i prevazilaze nedostaci 3NF
atribudekompozicije polazi samo od zadatog skupa funkcionalnih zavisnosti medu
tima (ne ukljucuje pojam univerzalne relacije i predefinisanih kljuceva); to je algoritam sinteze relacija koje su u trecoj normalnoj formi. Dokazuje se da je
broj sintetizovanih relacija dobijenih ovim algoritmom minimalan ([7]). Algoritam se zasniva na algebri funkcionalnih zavisnosti, Armstrongovim aksiomama,
pojmu zatvorenja i pokrivanja skupa funkcionalnih zavisnosti i pretpostavci o jedinstvenosti funkcionalne zavisnosti (v. glavu 8).
Algoritam sinteze 3NF relacija iz zadatog skupa funkcionalnih zavisnosti
Ulaz: skup F funkcionalnih zavisnosti;
Izlaz: minimalni skup relacija {R1 , . . . , Rm } koje su u 3NF i koje zadovoljavaju
sve funkcionalne zavisnosti iz F ;
koraci:
1. Eliminacija nebitnih atributa: eliminisati nebitne atribute iz levih strana FZ
iz F ; neka je G tako dobijeni skup FZ.

186

9 Normalne forme

2. Nalazenje pokrivanja: naci neredundantno pokrivanje H skupa G.

3. Particioniranje: particionirati skup H u particije H1 , . . . , Hk tako da sve


funkcionalne zavisnosti u jednoj particiji imaju identicne leve strane.

4. Spajanje ekvivalentnih kljuceva: za svaki par particija Hi , Hj sa levim


stranama X, Y , redom, takvim da postoje obe FZ X Y, Y X u H + ,
spojiti particije Hi i Hj i dodati FZ X Y, Y X skupu dvostranih FZ
J. Iz H izbrisati svaku FZ oblika X A za A Y , i svaku FZ oblika Y B
za B X.

5. Eliminacija tranzitivnih zavisnosti: naci skup FZ H 0 H takav da je (H 0


J)+ = (H J)+ , i da nijedan pravi podskup od H 0 nema to svojstvo. Dodati
svaku FZ iz J odgovarajucoj particiji iz H 0 .

6. Konstruisanje relacija: za svaku particiju FZ iz H 0 konstruisati relaciju koja


sadrzi sve atribute te particije. Leva strana svake funkcionalne zavisnosti je
jedan kljuc relacije, a svaki takav kljuc zove se sintetizovani kljuc.

Moze se dokazati da sve relacije dobijene prethodnim algoritmom jesu u 3NF


i da skup dobijenih relacija zadovoljava sve polazne funkcionalne zavisnosti skupa
se moze dokazati da je broj dobijenih relacija isti bez obzira od kog
F . Takode
tj. da je broj dobijenih
se neredundantnog pokrivanja (kojih moze biti vise) pode,
relacija minimalan. Neredundantno pokrivanje moze se odrediti primenom algoritma NEREDUND, a tranzitivne zavisnosti mogu se eliminisati primenom algo
ritma CLAN
(glava 8). Slozenost algoritma je kvadratna u odnosu na duzinu niske

kojom se zadaju funkcionalne zavisnosti polaznog skupa F . Dokaz ovih tvrdenja


moze se naci u [7].

Primer 9.3 Neka je dat skup FZ F = {A B, A C, B C, B D, D B,


ABE F }. Primena algoritma sinteze 3NF relacija odvija se u sledecim koracima:

9.3 Boyce-Codd normalna forma

187

(eliminacija suvisnih atributa):


G = {A B, A C, B C, B D, D B, AE F };
(nalazenje pokrivanja):
H = {A B, B C, B D, D B, AE F };
(particioniranje):

H1
H2
H3
H4

= {A B}
= {B C, B D}
= {D B}
= {AE F };

(spajanje ekvivalentnih kljuceva):


H1 = {A B}
H2 = {B C}
H3 = {AE F }
J = {B D, D B}
(eliminacija tranzitivnih zavisnosti): H 0 = H
H10 = {A B}
H20 = {B C, B D, D B}
H30 = {AE F }
(konstruisanje relacija):

9.3

R1 (A, B)
(kljuc A),
R2 (B, C, D) (kljuc B; kljuc D),
R3 (A, E, F ) (kljuc {A, E}).

Boyce-Codd normalna forma

Anomalije unosenja, brisanja i azuriranja javljaju se i kod nekih relacija koje su u


3NF, kada mogu biti posledica tranzitivne zavisnosti kljucnih atributa od kljuca.
Sledeci primer ilustruje takav slucaj.
Primer 9.4 Neka u relaciji R(I SIF, NAZIV, K SIF, TIRAZ) (znacenje atributa
je isto kao u odeljku 1.2) vaze funkcionalne zavisnosti {I SIF, K SIF} TIRAZ;
I SIF NAZIV; NAZIV I SIF; {NAZIV, K SIF} TIRAZ. Jedan kljuc
relacije R je par atributa (I SIF, K SIF), a drugi kljuc (kandidat za kljuc) je par
atributa (NAZIV, K SIF). Relacija R je u 3NF, ali ispoljava anomalije. Na primer,
promena naziva izdavaca sa datom sifrom mora se izvrsiti u onoliko n-torki koliko
knjiga taj izdavac izdaje. Anomalije su posledica tranzitivne zavisnosti kljucnog
atributa NAZIV od kljuca (I SIF, K SIF) (tj. funkcionalne zavisnosti I SIF
NAZIV na cijoj levoj strani nije ceo kljuc). Zamenom relacije R njenim projekcijama R[ I SIF, NAZIV ], R[ I SIF, K SIF, TIRAZ ] uklanjanju se anomalije, a njihovim spajanjem dobija se relacija R. Dobijene projekcije su u tzv. Boyce-Coddovoj normalnoj formi.

188

9 Normalne forme

Definicija 9.4 Relacija R(A1 , . . . , An ) je u Boyce-Codd-ovoj normalnoj formi (u


oznaci BCNF) ako egzistencija FZ X Y , gde je X, Y {A1 , . . . An } i X Y = ,
povlaci egzistenciju FZ X Ai , za svako i = 1, 2, . . . , n.
Sintaksna interpretacija definicije BCNF je sledeca: sve FZ u relaciji koja je u
BCNF jesu posledice kljuca. Semanticka interpretacija je da nijedan entitet nije
sadrzan, kao pravi podskup, u datoj relaciji; takav entitet bi se odrazio postojanjem
FZ X Y , gde X nije kljuc relacije. Ako relacija sadrzi takav entitet, njega treba
izdvojiti u postupku projektovanja, sto se postize dekompozicijom relacije u niz
projekcija koje su u BCNF.
Teorema 9.3 (BCNF normalizacija)
Ako relacija R(A1 , . . . , An ) nije u
BCNF, onda postoji dekompozicija relacije R u skup njenih projekcija koje su
u BCNF, a iz kojih se operacijom prirodnog spajanja moze ponovo dobiti relacija
R.
Dokaz: Slicno dokazu teoreme o 3NF normalizaciji, dokaz teoreme izvodi se konstrukcijom algoritma dekompozicije.
Algoritam BCNF normalizacije
Ulaz: relacija R sa atributima {A1 , . . . , An } i skupom FZ F ;
Izlaz: skup R1 , . . . , Rm (m 1) projekcija relacije R, koje su sve u BCNF i za koje
vazi: ako je m = 1, onda je R1 R; ako je m > 1, onda je R = R1 R2 Rm ;
BEGIN
IF relacija R nije u BCNF, THEN
BEGIN
uociti funkcionalnu zavisnost X Y, u kojoj leva strana X nije
kljuc relacije R i X Y = ;
neka je Z = Atr(R) \ XY ;
zameniti relaciju R njenim projekcijama R[XY ], R[XZ];
ponoviti rekurzivno algoritam za relaciju R[XY ];
ponoviti rekurzivno algoritam za relaciju R[XZ]
END
ELSE
izdati relaciju R na izlazu
END.
Razmatranje analogno onom u dokazu teoreme 9.2 dokazuje korektnost algo
ritma, cime je tvrdenje
teoreme dokazano.
Sve relacije dobijene algoritmom BCNF normalizacije jesu u BCNF, njihovim
spajanjem se dobija polazna relacija R, ali ovaj algoritam ne garantuje ocuvanje
svih funkcionalnih zavisnosti polazne relacije.

9.4 Dobre i lose dekompozicije

189

Primer 9.5 U relaciji SPN( STUDENT, PREDMET, NASTAVNIK ) vaze FZ


{STUDENT,PREDMET }
NASTAVNIK
PREDMET

NASTAVNIK,
PREDMET, ali
6NASTAVNIK,

sa sledecim znacenjem: jedan student slusa jedan predmet kod jednog nastavnika,
jedan nastavnik predaje jedan predmet, jedan predmet moze da predaje veci broj
nastavnika. Primarni kljuc relacije je par atributa (STUDENT, PREDMET), i
relacija je u 3NF, ali nije u BCNF. Njenom dekompozicijom prema BCNF algoritmu
dobile bi se projekcije
SPN[ STUDENT, NASTAVNIK ],
SPN[ NASTAVNIK, PREDMET ],
koje su u BCNF. Jedina netrivijalna funkcionalna zavisnost u ovim projekcijama
je FZ NASTAVNIK PREDMET, a iz nje se ne moze izvesti funkcionalna zavisnost {STUDENT, PREDMET} NASTAVNIK koja vazi u polaznoj relaciji.
Zato se dobijene projekcije ne mogu nezavisno azurirati. Ovo je primer nepozeljne
dekompozicije, jer se BCNF normalizacijom ne resavaju problemi zbog kojih se ona
i sprovodi. Neopravdanost BCNF dekompozicije ima objasnjenje i u semantickoj
cinjenici da relacija SPN, iako ne sasvim normalizovana, ne sadrzi u sebi, kao pravi
entiteta.
podskup, nijedan entitet niti odnos izmedu

Odnos 2NF, 3NF i BCNF moze se izraziti sledecim tvrdenjem


koje se jednostavno dokazuje.

Teorema 9.4 Neka je 2NFRel oznaka za skup relacija koje su u 2NF, slicno
3NFRel, BCNFRel. Tada vaze inkluzije BCNFRel 3NFRel 2NFRel. Ove
inkluzije su stroge (kao sto pokazuju uvodni primeri za definicije 3NF i BCNF).

9.4

Dobre i lo
se dekompozicije

Relacija se cesto na vise nacina moze zameniti skupom relacija (njenih projekcija)
koje su u 3NF ili BCNF. Neke od tih dekompozicija su dobre, neke su nekorisne, a
neke su pogresne i stoga neprimenljive. Na primer, ako u relaciji IZDAVAC(I SIF,
STATUS, DRZAVA) vaze FZ I SIF DRZAVA, DRZAVA STATUS, onda u
toj relaciji vazi i FZ I SIF STATUS (prema aksiomi tranzitivnosti). Relacija
IZDAVAC nije u 3NF upravo zbog tranzitivne zavisnosti atributa STATUS od
kljuca I SIF, a njena dekompozicija u skup relacija koje jesu u 3NF moze se izvrsiti
na jedan od sledeca tri nacina:

190

9 Normalne forme
A:

I1( I SIF, DRZAVA )


I2( DRZAVA, STATUS )

=
=

IZDAVAC[ I SIF, DRZAVA ]


IZDAVAC[ DRZAVA, STATUS ]

B:

I1( I SIF, DRZAVA )


I3( I SIF, STATUS )

=
=

IZDAVAC[ I SIF, DRZAVA ]


IZDAVAC[ I SIF, STATUS ]

C:

I2( DRZAVA, STATUS )


I3( I SIF, STATUS )

=
=

IZDAVAC[ DRZAVA, STATUS ]


IZDAVAC[ I SIF, STATUS ].

Sve tri dekompozicije dovode do binarnih relacija koje su u BCNF. Dekompozicije A i B su bez gubitka informacije (zbog FZ DRZAVA STATUS po kojoj
je sprovedena dekompozicija A, odnosno zbog FZ I SIF STATUS po kojoj je
sprovedena dekompozicija B). Ipak, dekompozicija A je bolja jer ona cuva obe polazne funkcionalne zavisnosti. Pri dekompoziciji B ne moze se izvesti polazna FZ
DRZAVA STATUS. To dovodi do anomalija jer je razbijen entitet DRZAVA
sa svojim atributom STATUS na dve relacije, pa se ne moze uneti informacija o
statusu neke drzave dok se neki izdavac ne pridruzi toj drzavi. Zato je dekompozicija B nekorisna. Dekompozicija C je pogresna jer nije sprovedena po FZ koja bi
obezbedila ocuvanje informacije; spajanjem projekcija I2 i I3 ne bi se mogla dobiti polazna relacija IZDAVAC, u sta je lako uveriti se analizom primera njenog
moguceg sadrzaja.
Uopste, pri dekompoziciji relacije u njene dve projekcije vazno je postovati dva
pravila:
1. zajednicki atributi projekcija moraju biti kljuc u bar jednoj od projekcija (da
bi se informacija sacuvala);
2. potrebno je da se sve FZ polazne relacije mogu izvesti iz FZ u projekcijama
dobijenim dekompozicijom.
Kada su zadovoljena oba pravila, dobijene projekcije su nezavisne u smislu da
se mogu nezavisno azurirati; u slucaju da se drugo pravilo ne moze primeniti (kao
u nekim slucajevima BCNF dekompozicije), dekompozicija je nekorisna.

9.5

Cetvrta
normalna forma

Uzrok anomalija u jednoj relaciji mogu da budu, pored raznih vrsta funkcionalnih
zavisnosti, i viseznacne zavisnosti. U tom slucaju relacija se dekomponuje u niz
projekcija koje su u tzv. cetvrtoj normalnoj formi.
Definicija 9.5 Relacija R(A1 , . . . , An ) je u cetvrtoj normalnoj formi (u oznaci
4NF) ako za svaku netrivijalnu VZ X Y , gde su X, Y Atr(R), vazi i
FZ X Ai , za svako i = 1, 2, . . . , n.
Jedna interpretacija relacije u 4NF je sledeca: ona je u 3NF i sve VZ u njoj su u
stvari specijalni slucaj FZ. Drugim recima, relacija je u 4NF ako su sve zavisnosti
u njoj kljucne, tj. na levoj strani imaju ceo kljuc te relacije.

9.6 Peta normalna forma

191

Ako relacija nije u 4NF, postupkom dekompozicije ona se moze zameniti skupom
svojih projekcija koje su u 4NF i cijim spajanjem se dobija polazna relacija. Algoritam je slican algoritmu BCNF normalizacije, s tim sto se u relaciji R koja nije u
4NF uocava VZ X Y (i, zbog komplementarnosti, VZ X Atr(R) \ XY ),
pa se relacija R zamenjuje projekcijama R[XY ], R[X, Atr(R) \ XY ], sa kojima se
ponavlja isti postupak ako nisu u 4NF.
Na primer, u relaciji PNR( PREDMET, NASTAVNIK, REFERENCA ) iz glave
8 vaze VZ PREDMET NASTAVNIK i PREDMET REFERENCA, pa
ona nije u 4NF. Relacija PNR moze se zameniti svojim projekcijama na parove
atributa (PREDMET, NASTAVNIK) i (PREDMET, REFERENCA), koje su u
4NF i cijim spajanjem se dobija relacija PNR.
Ceo postupak BCNF i 4NF normalizacije je ponekad nepozeljan, jer anomalije
prouzrokovane tranzitivnim zavisnostima kljucnih atributa od kljuca, i viseznacnim
zavisnostima, cesto jesu deo semantike realnosti koja se modelira a ne anomalije
u pravom smislu reci. Drugi razlog zbog kojeg BCNF i 4NF normalizacija mogu
biti nepozeljne je to sto dobijene dekompozicije ne cuvaju sve polazne zavisnosti,
pa se dobijene projekcije ne mogu nezavisno azurirati. Preveliko usitnjavanje nor da bude razlog protiv ovih zavrsnih
malizovanih relacija projekcija moze takode
oblika normalizacije. Zato se postupak normalizacije u praksi obicno zavrsava na
trecoj normalnoj formi; ona predstavlja rezultat logickog projektovanja kome teze
i metode semantickog modeliranja.

9.6

Peta normalna forma

Postoje slucajevi kada posmatrana relacija predstavlja veci broj entiteta ili njihovih
odnosa (vise od dva). Ako je svaki od tih entiteta i odnosa predstavljen samo
skupovima svojih kljucnih atributa, onda nije moguce dekomponovati relaciju u
samo dve njene projekcije bez gubljenja informacije, ali je moguca njena dekompozicija u vise projekcija. Na primer, relaciju
R

A
a1
a1
a3
a4
a5
a6

B
b1
b2
b3
b3
b5
b6

C
c1
c2
c3
c4
c5
c5

nije moguce dekomponovati samo u dve njene projekcije bez gubitka informacije,
ali je moguce dekomponovati je u sledece tri binarne projekcije (cijim se spajanjem
dobija upravo relacija R):

192

9 Normalne forme
R[A, B]

A
a1
a1
a3
a4
a5
a6

B
b1
b2
b3
b3
b5
b6

R[A, C]

A
a1
a1
a3
a4
a5
a6

C
c1
c2
c3
c4
c5
c5

R[B, C]

B
b1
b2
b3
b3
b5
b6

C
c1
c2
c3
c4
c5
c5

Ovo svojstvo relacije R oznacava prisustvo zavisnosti spajanja koja je zamenom


relacije R njenim trima projekcijama eliminisana, a same projekcije su u tzv. petoj
normalnoj formi. Ova normalna forma se jos zove i normalna forma projektovanja/spajanja (engl. projection/join normal form, PJNF), a definise se na sledeci
nacin ([32]):
Definicija 9.6 Relacija R je u petoj normalnoj formi (u oznaci 5NF) ako ne sadrzi
netrivijalne zavisnosti spajanja, tj. ako za svaku ZS {X1 , . . . , Xm } vazi da je
Xi = Atr(R) za neko 1 i m.
Kao i za prethodne normalne forme, postoji algoritam dekompozicije relacije
koja nije u 5NF u skup njenih projekcija koje jesu u 5NF i cijim spajanjem se dobija
polazna relacija. Relacija se sada dekomponuje prema uocenoj ZS {X1 , . . . , Xm },
i proizvodi se m projekcija u jednom koraku, R[X1 ], . . . , R[Xm ], sa kojima se nastavlja isti postupak ukoliko nisu u 5NF.
Za relaciju u 5NF vazi da je istovremeno i u svim nizim normalnim formama.

Stavi
se, peta normalna forma je najjaca normalna forma sintaksno zasnovanog

logickog projektovanja vodenog


zavisnostima i algebrom zavisnosti (funkcionalnih,
viseznacnih i zavisnosti spajanja), i prakticno je ostala u domenu teorijskih razmatranja.
U neizvesnosti da li postoje drugi mehanizmi ogranicenja vrednosti atributa,
osim funkcionalnih, viseznacnih i zavisnosti spajanja, ucinjen je pokusaj da se
definise normalna forma koja bi iskljucila anomalije bilo kog uzroka ([33]). To
je tzv. domen/kljuc normalna forma (engl. domain/key normal form, DKNF)
koja zahteva da su sva ogranicenja vrednosti atributa posledica kljuca ili domena.
Definicija je neoperacionalizovana, pa se samo za pojedinacne primere relacija, koje
su vec u nekoj od dobro definisanih normalnih formi, moze utvrditi da su i u DKNF.
Normalne forme ukljucuju samo jedan, sintaksno orijentisan kriterijum logickog
projektovanja, koji se u drugim, pretezno semantickim metodama logickog projektovanja, cesto zanemaruje. U sledecoj glavi bice reci o takvim metodama logickog
projektovanja.

9.7

Pitanja i zadaci

1. Definisati sledece pojmove:

9.7 Pitanja i zadaci

193

prva normalna forma


parcijalna zavisnost
druga normalna forma
tranzitivna zavisnost

treca normalna forma


Boyce-Codd normalna forma
cetvrta normalna forma
peta normalna forma

2. Opisati algoritme 2NF, 3NF i BCNF normalizacije. Proceniti njihovu vremensku slozenost.
3. Koje su prednosti a koji nedostaci normalizacije dekompozicijom?
4. Navesti primer relacije koja se ne moze korisno (tj. sa ocuvanjem polaznih
FZ) dekomponovati u BCNF projekcije.
5. Opisati algoritam sinteze 3NF relacija iz zadatog skupa funkcionalnih zavisnosti.
6. Neka je dat sledeci skup funkcionalnih zavisnosti:
AB
B C
C D

B D
B A
ABD E

Algoritmom sinteze 3NF relacija konstruisati shemu relacione baze podataka.


7. Na slici 9.1 prikazana je hijerarhijska (nenormalizovana) reprezentacija podataka u bazi podataka jedne kompanije. Slika se interpretira na sledeci
nacin:
sektor

radnik

projekat

posao

kancelarija

telefon

istorija
primanja

Slika 9.1: Nenormalizovana shema


kompanija ima vise sektora;
svaki sektor ukljucuje skup radnika, skup projekata i skup kancelarija;

194

9 Normalne forme
za svakog radnika postoji opis svih poslova koje je radio; za svaki takav
posao postoji i istorija primanja radnika dok je radio taj posao;
svaka kancelarija ima skup (jedan ili vise) telefona.
Baza podataka sadrzi sledece podatke.
za svaki sektor: jedinstveni broj sektora, sredstva i jedinstveni broj
rukovodioca;
za svakog radnika: jedinstveni broj radnika, broj projekta na kome je
baza sadrzi i naziv
angazovan, broj kancelarije i broj telefona; takode,
svakog posla koji je radnik obavljao, kao i datum i iznos svakog primanja
na tom poslu;
za svaki projekat: jedinstveni broj projekta i sredstva;
za svaku kancelariju: jedinstveni broj kancelarije, povrsinu (u kvadratnim metrima) i brojeve svih telefona u toj kancelariji.
Projektovati relacijske sheme relacija koje su u 3NF i koje prikazuju ove podatke. Formulisati pretpostavke o odnosu uvedenih atributa, kao i zavisnosti
koje formalizuju te pretpostavke.

8. Neka fakultetska baza podataka o nastavi sadrzi podatke o nastavnicima,


predmetima, mestu i vremenu odrzavanja predavanja.
Potrebno je ukljuciti sledece podatke:
za svaki predmet: sifru predmeta, naziv predmeta, smer na kome se
predaje, semestar u kome se predaje i fond casova;
za svakog nastavnika: jedinstveni licni broj, ime, zvanje, naucni stepen;
za svako predavanje: jedinstveni broj nastavnika, sifru predmeta, vreme
odrzavanja i broj sale.
Definisati atribute kojima se opisuju ovi podaci, formulisati pretpostavke o
odnosu uvedenih atributa, kao i zavisnosti koje formalizuju te pretpostavke.
Projektovati relacijske sheme relacija koje su u 3NF i koje prikazuju ove
podatke.

10

Semanti
cko modeliranje
Sistemi zasnovani na tradicionalnim modelima hijerarhijskom, mreznom i relacionom, imaju tendenciju da u znacajnoj meri razgranicavaju unutrasnji (fizicki)
nivo podataka od konceptualnog (logickog) i spoljasnjeg, ali ne u dovoljnoj meri i
spoljasnji nivo od konceptualnog. Osim toga, ovi modeli ne podrzavaju semantiku
podataka, vec je ona prepustena korisniku.
Tako, na primer, relacioni sistemi ne prepoznaju da su naslov knjige i
drzava semanticki razliciti atributi, pa je moguce, ako su definisani na istom
domenu (niske simbola), izvrsiti operaciju spajanja nad njima. Ovi modeli ne
prepoznaju ni da je, na primer, tip entiteta programer specijalni slucaj tipa
entiteta radnik, a da je ovaj specijalni slucaj tipa entiteta osoba, odnosno
da je ta vrsta hijerarhije tipova entiteta na bilo koji nacin specificna u odnosu
na opste pravilo referencijalnog integriteta (hijerarhija koju podrzava hijerarhijski
model je sasvim drugacijeg znacenja). Tako se dolazi do potrebe za prosirenjem
postojecih modela semantickim aspektom podataka, tj. do stvaranja novih modela
koji ukljucuju semanticku komponentu.
Predstavljanje znacenja podataka modelom podataka zove se semanticko modeliranje. Osnovni cilj semantickog modeliranja je da se sistemi zasnovani na novim
modelima ponasaju inteligentnije od sistema za upravljanje bazama podataka zasnovanih na klasicnim modelima. Svaki od modela do kojih se na taj nacin dolazi
poseduje manju ili vecu moc predstavljanja semantike podataka (izvesnu moc te

vrste poseduju i klasicni modeli), pa je svaki od njih u odredenoj


meri semanticki
model .
konceptima koji karakterisu semanticku komponentu podataka, i koji
Medu
imaju specificnu (logicku) reprezentaciju u svakom od semantickih modela, od
entitetima kao sto
znacaja su sledeci: entitet, svojstvo (atribut) i odnosi medu
ensu asocijacija, podtip i nadtip. Postupci kojima se uspostavljaju odnosi medu
titetima su agregacija, generalizacija i specijalizacija. Svaki od tih modela i dalje
poseduje skupove operacija za manipulisanje reprezentacijama semantickih koncepata i pravila integriteta nad tim reprezentacijama.
195

196

10 Semanticko modeliranje

Semanticki koncepti i modeli, cak i kada nemaju kompletnu podrsku operacijama i/ili pravilima integriteta, predstavljaju izuzetno znacajan okvir za logicko
projektovanje, s obzirom da prevazilaze osnovni nedostatak sintaksno orijentisane
metode normalizacije nedostatak semanticke komponente.
U daljem tekstu ovog poglavlja bice prvo detaljnije predstavljeni osnovni koncepti semantickih modela, a zatim ce biti prikazana tri modela koji mogu da ponesu
epitet semantickih prosireni relacioni model , model entiteta i odnosa i semanticki
model baze podataka.
Entitet, kao osnovni pojam koji se ne definise, a cije je znacenje stvar, bice,
od znacaja, koji se moze jednoznacno identifikovati, moze da popojava, dogadaj
stoji na razlicitim nivoima samostalnosti. Tako, samostalni entitet karakterise
njegova egzistencijalna nezavisnost od drugih entiteta u bazi, tj. on je od interesa
(u specificnoj bazi) sam za sebe. S druge strane, opisni entitet (ili zavisni entitet)
karakterise njegova egzistencijalna zavisnost od drugog entiteta u bazi, tj. on
opisuje, kao svojstvo, neki drugi entitet. Tako je u bazi o zaposlenima u nekom preduzecu, entitet RADNIK samostalni entitet, a entitet DETE RADNIKA opisni
entitet. Svaka od ovih vrsta entiteta ima sopstvena svojstva (u terminima raznih
modela atribute, karakteristike). Potreba za izdvajanjem opisnih entiteta nastaje
atributima
zbog strogo viseznacnih zavisnosti (onih koje nisu funkcionalne) medu
nekih entiteta (v. odeljak 8.5 o viseznacnim zavisnostima).
dva tipa entiteta (ili vise tipova entiteta), koji
Asocijacija je odnos M:N izmedu
moze imati i svoja sopstvena svojstva (oznaka M:N oznacava da jedan entitet
prvog tipa moze biti pridruzen vecem broju entiteta drugog tipa, i obratno). Tako se
entiteta tipa RADNIK i PREDUZECE
moze uspostaviti odnos asocijacija
izmedu
ZAPOSLENJE, sa svojstvima kao sto su datum zaposlenja, status, polozaj, prihod
tipova entiteta, ona se moze posmatrati
itd. Osim sto je asocijacija odnos izmedu
i kao entitet specificnog tipa asocijativni entitet.
dva tipa entiteta X i Y vazi odnos podtip/nadtip ako je svaki entitet tipa
Izmedu
X obavezno i entitet tipa Y . U ovom odnosu, tip entiteta X je podtip, a tip entiteta
Y je nadtip. Pri tome, tip entiteta Y moze biti nadtip za veci broj tipova entiteta
X1 , . . . , Xn u datom odnosu podtip/nadtip, dok je tip entiteta X podtip samo
tipa entiteta Y u tom odnosu podtip/nadtip. Stoga se odnos podtip/nadtip moze
posmatrati kao preslikavanje nadtipa u uniju podtipova. Na primer, tip entiteta
OSOBA moze biti nadtip za tipove entiteta RADNIK, STUDENT, PENZIONER,
NEZAPOSLENO LICE, dok su pobrojani tipovi podtipovi tipa entiteta OSOBA.
Nad istim parom tipova entiteta X, Y moze biti definisan veci broj odnosa tipa
podtip/nadtip, pa se svaki takav odnos imenuje znacenjem preslikavanja nadtipa u
uniju podtipova. Tako bi navedeni odnos mogao da se zove PO ZANIMANJU JE
(npr. osoba o1 je po zanimanju radnik), dok bi drugi odnos podtip/nadtip nad

JE PO ZANIMANJU (npr.
istim tipovima entiteta mogao da bude SUPRUZNIK
suprug(a) osobe o1 je po zanimanju radnik).
Pri izgradnji asocijativnog tipa entiteta, kao i pri izgradnji podtipa (nadtipa)
entiteta, od znacaja je, pre svega, nacin na koji iz jednog skupa tipova entiteta

10 Semanticko modeliranje

197

nastaje drugi skup tipova entiteta, a zanemaruju se specificnosti pojedinih tipova


entiteta (njihova svojstva). Tako se udruzivanjem dva ili vise tipova entiteta

dobija novi asocijativni tip entiteta (tipovi entiteta RADNIK i PREDUZECE


udruzuju se u tip entiteta ZAPOSLENJE), uopstavanjem veceg broja tipova
entiteta dobija se jedan novi tip entiteta njihov nadtip, a preciziranjem jednog
tipa entiteta dobija se veci broj novih tipova entiteta njegovih podtipova.
Pogled na bazu podataka u kome se neki detalji namerno zanemaruju zove se
dva ili
apstrakcija te baze podataka ([58]). Apstrakcija kojom se odnos izmedu
vise tipova entiteta definise kao entitet nove vrste zove se agregacija, a apstrakcija
kojom se skup slicnih tipova entiteta posmatra kao jedan genericki tip entiteta zove
se generalizacija; ti slicni tipovi entiteta su podtipovi generickog tipa. Apstrakcija
koja je inverzna generalizaciji zove se specijalizacija.
I u okviru klasicnih modela podataka (u nekom bolje, u nekom losije) moguce
je predstaviti prethodno opisane semanticke koncepte. Zato oni, pre svega, sluze
kao sredstvo za modeliranje dela stvarnosti koji se prikazuje bazom podataka, tj.
kao elementi semantickih metoda logickog projektovanja (relacione, hijerarhijske
ili mrezne) baze podataka. Tako, na primer, samostalni entitet RADNIK i njegov
opisni entitet DETE RADNIKA mogu se predstaviti hijerarhijskom strukturom kao
na dijagramu na slici 10.1, ili, na primer, nenormalizovanom relacijom
RADNIK( IME, DOHODAK, DETE( IME, GODINE ) ).

RADNIK

?
DETE
Slika 10.1: Samostalni i opisni entitet
U relacionom modelu ova dva tipa entiteta se predstavljaju dvema relacijama:
RADNIK
DETE

(IME, DOHODAK)
(IME, GODINE, IME RODITELJA)

(primarni kljucevi relacija su podvuceni; entitet DETE je, osim sto je egzistencijalno zavisan od entiteta RADNIK, i identifikaciono zavisan od njega, jer atribut
IME RODITELJA, koji ima isto znacenje kao atribut IME relacije RADNIK, ulazi
u primarni kljuc relacije DETE).
Asocijacija PREDAVANJE nad tipovima entiteta NASTAVNIK i PREDMET
moze se graficki (tzv. mreznom strukturom) predstaviti kao na dijagramu na slici
10.2 (jedno predavanje ukljucuje tacno jednog nastavnika i tacno jedan predmet,

198

10 Semanticko modeliranje

dok jedan nastavnik moze ucestvovati u vecem broju predavanja; isto vazi i za
predmet).
NASTAVNIK

PREDMET
@
S1
@
R
@

S2

PREDAVANJE

Slika 10.2: Asocijativni entitet

Ista asocijacija bi
NASTAVNIK
PREDMET
PREDAVANJE

se relacionim modelom predstavila trima relacijama:


(IME, ZVANJE)

(NAZIV, FOND CASOVA)


(IME, NAZIV, VREME, SALA)

(primarni kljucevi su podvuceni; asocijativni entitet PREDAVANJE nastao je agregacijom entiteta NASTAVNIK i PREDMET, pa je i primarni kljuc tog asocijativnog
entiteta skup primarnih kljuceva entiteta od kojih je nastao (IME, NAZIV). Ovi
atributi u relaciji PREDAVANJE su i strani kljucevi).
Generalizacija ukljucuje sledeci opsti uslov integriteta: za svaki primerak entiteta podtipa mora u bazi postojati i odgovarajuci primerak entiteta nadtipa.
Tako se generalizacija sa nadtipom OSOBA i podtipovima RADNIK, STUDENT,
PENZIONER, NEZAPOSLENO LICE moze u relacionom modelu predstaviti sa
nekoliko relacija. Jedna relacija odgovara nadtipu i sadrzi zajednicke atribute svih
podtipova, a po jedna relacija odgovara svakom podtipu i, osim primarnog kljuca
relacije nadtipa, sadrzi samo jos specificne atribute za taj podtip. Tako nas
primer moze imati sledecu relacionu reprezentaciju:
OSOBA (MLB, IME, ADRESA, ZANIMANJE)
RADNIK (MLB, STRUKA, PREDUZECE, RADNO MESTO)
STUDENT (MLB, FAKULTET, STATUS, GODINA, BR IND)
PENZIONER (MLB, STATUS, STAZ, IZNOS)
NEZAPOSLENO LICE (MLB, STATUS, NAKNADA).
Opsti uslov integriteta generalizacije bi se u relacionom sistemu mogao zadati
koriscenjem odgovarajuceg iskaza, npr. u jeziku SQL2,
CREATE ASSERTION GEN1 CHECK
( NOT EXISTS
( SELECT * FROM RADNIK
WHERE NOT EXISTS
( SELECT * FROM OSOBA
WHERE OSOBA.MLB = RADNIK.MLB ) ) )

10.1 Prosireni relacioni model RM/T

199

(ne postoji n-torka relacije RADNIK za koju ne postoji n-torka relacije OSOBA sa
istim maticnim licnim brojem). Slicne uslove integriteta treba zadati i za relacije
STUDENT, PENZIONER, NEZAPOSLENO LICE.
Generalizacijom se u relacionom modelu izbegava druga vrsta nedostajuce vrednosti neprimenljivo svojstvo (npr. svojstvo BR IND za radnika, kada bi sve osobe
bile predstavljene samo jednom relacijom sa unijom atributa prethodnih relacija).
Druga strategija za predstavljanje generalizacije u relacionom modelu su
pogledi. Tako relaciona baza moze da se sastoji od relacija koje odgovaraju
podtipovima i sadrze sve atribute odgovarajucih podtipova:
RADNIK (MLB, IME, ADRESA, STRUKA, PREDUZECE, RADNO MESTO)
STUDENT (MLB, IME, ADRESA, FAKULTET, STATUS, GODINA, BR IND)
PENZIONER (MLB, IME, ADRESA, STATUS, STAZ, IZNOS)
NEZAPOSLENO LICE (MLB, IME, ADRESA, STATUS, NAKNADA).
Sada se relacija koja odgovara nadtipu koji ukljucuje samo zajednicke atribute
podtipova moze realizovati pogledom (u SQL2):
CREATE VIEW OSOBA AS
SELECT MLB, IME,
FROM RADNIK
UNION
SELECT MLB, IME,
FROM STUDENT
UNION
SELECT MLB, IME,
FROM PENZIONER
UNION
SELECT MLB, IME,
FROM NEZAPOSLENO

ADRESA

ADRESA

ADRESA

ADRESA
LICE

Jedan od prvih rezultata na razvoju semantickih modela jeste Osnovni semanticki model ([54]). On prepoznaje razne nivoe samostalnosti entiteta kao i
odnos asocijacije, ustanovljava pravila integriteta koja se odnose na egzistencijalnu
zavisnost asocijativnog entiteta od komponentnih entiteta, i ostaje u okviru strukture n-arnih relacija relacionog modela.

10.1

Pro
sireni relacioni model RM/T

Prvu verziju prosirenog relacionog modela RM/T definisao je Codd u radu [18]
(T u oznaci modela nema znacenje vezano za prirodu modela, vec dolazi od
geografskog pojma Tasmanija, gde je autor boravio u vreme rada na prosirenom

200

10 Semanticko modeliranje

relacionom modelu). To je kompletan model jer poseduje sva tri neophodna dela
modela.
Strukturni deo modela, koji je vrlo precizno definisan, bogat je i sadrzi veci

broj semanticki razlicitih tipova relacija. Model ne pravi nepotrebne razlike izmedu
entiteta i odnosa, vec se odnos posmatra kao specijalna vrsta entiteta. Integritetni
precizno definisan kroz niz pravila za ocuvanje integriteta,
deo modela je takode
njima. Najzad,
koja se odnose na pojedinacne tipove relacija (entiteta) i veze medu
RM/T ima specificni skup operacija za manipulisanje relacijama, kojima je prosiren
skup operacija osnovnog relacionog modela.

10.1.1

Strukturni deo modela

Prema klasifikacionoj shemi RM/T modela, svi entiteti su podeljeni u tri klase:
osnovni entiteti (odgovaraju samostalnim entitetima u ranijem smislu);
opisni entiteti (u ranijem smislu);
asocijativni entiteti (u ranijem smislu), koji se mogu graditi nad osnovnim,
opisnim ili asocijativnim tipovima entiteta.
raznim tipovima entiteta mogu postojati razliciti odnosi
Osim toga, kako medu
(asocijacija, podtip/nadtip), RM/T ukljucuje i formalnu katalosku strukturu kojom
se ti odnosi mogu registrovati u sistemu.
U osnovnom relacionom modelu, entiteti predstavljeni n-torkama relacije jednoznacno se identifikuju pomocu primarnog kljuca koji definise korisnik. U modelu
RM/T entiteti se identifikuju pomocu surogata, primarnih kljuceva koje generise
i kontrolise sistem. Dakle, svi primarni i strani kljucevi u RM/T su surogati.
Surogati su jedinstvene reprezentacije entiteta; to su nepromenljive i neponovljive
vrednosti, od kojih svaka odgovara pojedinacnoj n-torci relacije i koje se generisu
pri unosenju n-torki kojima se predstavljaju entiteti.
Entiteti svih klasa predstavljeni su dvema vrstama relacija: E-relacije i Prelacije.
Svakom tipu entiteta (bez obzira na njegovu klasu) odgovara jedna E-relacija.
E-relacija za dati tip entiteta je unarna relacija (sa jednom kolonom) koja sadrzi
surogate svih entiteta tog tipa, predstavljenih u bazi. Sa druge strane, svakom
tipu entiteta odgovara jedna ili vise P-relacija, od kojih svaka sadrzi po dva ili
vise atributa: jedan od atributa je surogat odgovarajuceg tipa entiteta, a ostali
atributi su neki (moze i svi) atributi tog tipa entiteta. Dakle, E-relacija registruje
egzistenciju entiteta, a P-relacije registruju njegova svojstva. Na primer, tip entiteta RADNIK sa atributima MLB, IME, ADRESA, STRUKA moze se predstaviti
jednom E-relacijom
RADNIK( RADNIK$)
i trima P-relacijama:

10.1 Prosireni relacioni model RM/T

201

RADNIKBI( RADNIK$, MLB, IME ),


RADNIKA ( RADNIK$, ADRESA ),
RADNIKS ( RADNIK$, STRUKA ).
Izbor nacina za grupisanje svojstava u P-relacije vrsi projektant baze (mogu se
i svi atributi prikazati jednom P-relacijom), a krajnosti pri ovom izboru (binarne
P-relacije ili sva svojstva u jednoj relaciji) odgovaraju opredeljenju za nesvodive
(binarne) modele odnosno normalizovane modele.
svojstvima odgovarajucih P-relacija
U slucaju asocijativnog tipa entiteta, medu
naci ce se sistemski primarni kljucevi (surogati) tipova entiteta komponenti asocijativnog entiteta, a ne njihovi korisnicki primarni kljucevi. Tako bi za asocijativni
nad entitetima tipa RADNIK i PROJEKAT, u
S
CE
koji je izgraden
entitet UCE
svaku njegovu P-relaciju usao atribut surogat RADNIK$ (a ne primarni kljuc
MLB), i slicno za tip entiteta PROJEKAT. Asocijativni entiteti mogu imati svoje
opisne entitete, i mogu ucestvovati u drugim asocijativnim entitetima.
S obzirom na odnos podtip/nadtip koji je podrzan modelom RM/T, svaki entitet
ima bar jedan tip, ali moze imati i vise tipova koji preko ovog odnosa obrazuju hijerarhiju. Tako je svaki entitet tipa LEKAR ujedno i entitet tipa RADNIK odnosno i
entitet tipa OSOBA (ako su ti tipovi entiteta predstavljeni u bazi). Za predstavljanje podtipa odnosno nadtipa vazi isti mehanizam kao i za svaki tip entiteta: jedna
E-relacija i jedna ili vise P-relacija. P-relacija podtipa registruje samo specificna
svojstva tog podtipa, dok su sva svojstva odgovarajuceg nadtipa automatski primenljiva i na taj podtip. Ova primenljivost, kao i vazenje odgovarajucih pravila

integriteta u slucaju da relacije predstavljaju nadtip/podtip odnos, obezbedeni


su
registrovanjem ovakvog odnosa u sistemskom katalogu RM/T.

10.1.2

Integritetni deo modela

Osim dva opsta pravila integriteta koja vaze za osnovni relacioni model (integritet
entiteta i referencijalni integritet), RM/T poseduje jos niz opstih pravila integriteta:
Integritet entiteta u RM/T : E-relacije ne prihvataju nedostajuce vrednosti;
nad E-relacijama moguce je vrsiti operacije unosenja i brisanja, ali ne i operacije azuriranja.
Integritet svojstva: Ako n-torka t postoji u nekoj P-relaciji, onda odgovarajuca E-relacija mora imati registrovano postojanje entiteta koji t opisuje,
tj. sistemski primarni kljuc (surogat) n-torke t mora postojati u odgovarajucoj E-relaciji.
Integritet opisnog entiteta: Ako opisni entitet postoji u bazi, onda u bazi
mora postojati i entitet koji taj opisni entitet opisuje.
Integritet asocijacije: Asocijativni entitet moze postojati u bazi (kao i njegov
surogat u odgovarajucoj E-relaciji), cak i ako je jedan ili vise entiteta koji
ucestvuju u toj asocijaciji nepoznato. U tom slucaju surogat E- (surogat

202

10 Semanticko modeliranje
nedostajuce vrednosti) oznacava da je entitet ucesnik nepoznat. Ovo pravilo
ne vazi u slucaju da postoji eksplicitni uslov integriteta koji to zabranjuje.

Integritet podtipa: Ako surogat s pripada E-relaciji za tip entiteta S, onda s


mora da pripada E-relaciji svakog tipa entiteta ciji je S podtip.

10.1.3

RM/T katalog

RM/T katalog je struktura relacija o relacijama, atributima i domenima u bazi


podataka, koja olaksava koriscenje i transformaciju informacija. Mada bi svaka
specificna implementacija dopunila ovu strukturu dodatnim atributima i relacijama, minimalni projekat RM/T kataloga ukljucio bi sledece dve grupe relacija
(zanemareno je razdvajanje na E i P-relacije, o cemu bi svaka implementacija povela
racuna):
I

DOMENI
RELACIJE
ATRIBUTI
REL ATR
ATR DOM

(
(
(
(
(

D$, DOM IME, TIP PODATAKA, UREDENJE


)
R$, REL IME, REL TIP )
A$, ATR IME )
RA$, R$, A$, KLJUC )
AD$, A$, D$ ).

Prve tri relacije opisuju sve domene, relacije i atribute u bazi, i sadrze po jednu
n-torku za svaki domen, relaciju odnosno atribut, redom. Druge dve relacije predstavljaju veze relacija i pripadnih atributa, odnosno atributa i pripadnih domena.
Znacenje pojedinih atributa (onih za koje to nije ocevidno) je sledece:

UREDENJE
u relaciji DOMENI ukazuje na to da li je nad datim domenom
definisana relacija poretka > (DA/NE);
REL TIP je vrsta relacije E-relacija (osnovna, opisna ili asocijativna,
podtip), P-relacija ili kataloska relacija;
KLJUC ukazuje na ucesce atributa u korisnicki definisanom kljucu odgovarajuceg entiteta (DA/NE).

Druga grupa relacija odnosi se na predstavljanje razlicitih veza koje postoje


relacijama u bazi podataka (tzv. grafovske relacije, s obzirom da se odgomedu
varajuce veze mogu predstaviti grafom). To su:

10.1 Prosireni relacioni model RM/T


II

203

PE (PE$, P-ime-relacije, E-ime-relacije)


(veza E-relacije i svih odgovarajucih P-relacija);
OS (OS$, Opis-E-ime-relacije, Osn-E-ime-relacije)
(veza E-relacija opisnog i njemu pripadnog osnovnog entiteta);
AS (AS$, Asoc-E-ime-relacije, Asoc-P-ime-atr, Komp-E-ime-relacije)
(veza E-relacije asocijacije i E-relacije komponente; za svaku komponentu svake asocijacije u bazi postoji jedna n-torka relacije AS koja,
osim imena E-relacija asocijativnog i komponentnog entiteta, sadrzi
jos i ime atributa asocijativnog entiteta (Asoc-P-ime-atr) koji identifikuje taj komponentni entitet (u ranijem primeru, atribut RADNIK$
identifikuje komponentni entitet RADNIK u asocijativnom entitetu
S
CE);

UCE
PN ( PN$, Podtip-E-ime-relacije, Nadtip-E-ime-relacije, Kriterijum)
(veza E-relacija svakog podtipa i nadtipa u bazi; uz imena ovih
relacija, u svakoj n-torci relacije PN prisutan je kriterijum specijalizacije nadtip/podtip; npr. POSAO bi mogao da bude kriterijum specijalizacije nadtipa RADNIK u podtip LEKAR).

10.1.4

Manipulativni deo modela

specificnim operacijama RM/T modela (kako su definisane u [18]), isticu se


Medu
sledece:
PROPERTY unarna operacija koja, za zadati tip entiteta kao operand,
objedinjuje sve odgovarajuce P-relacije u jednu relaciju, eliminisuci surogate,
i proizvodi relaciju osnovnog relacionog modela koja odgovara tom tipu entiteta;
DENOTE unarna operacija koja, za zadato ime relacije kao operand, vraca
samu relaciju kao rezultat;
APPLY binarna operacija ciji su operandi unarna operacija f koja preslikava
relaciju u relaciju (npr. restrikcija), i neki skup relacija Z = {Z1 , . . . , Zk };
rezultat je skup relacija dobijenih primenom operacije f na svaku od relacija
iz Z, tj. {f (Z1 ), . . . , f (Zk )};
COMPRESS binarna operacija ciji je jedan operand binarna asocijativna
i komutativna operacija f koja preslikava par relacija u relaciju (npr. spajanje), a drugi operand je neki skup relacija Z = {Z1 , . . . , Zk }; rezultat operacije COMPRESS je relacija dobijena uzastopnom primenom operacije f
na relacije iz Z, tj. f (f (. . . f (f (Z1 , Z2 ), Z3 ), . . . ), Zk ).
Na primer, neka na osnovu E-relacije i skupa P-relacija tipa entiteta RADNIK
treba konstruisati jedinstvenu n-arnu relaciju RADNIK sa skupom svih atributa

204

10 Semanticko modeliranje

tog tipa entiteta, iskljucujuci surogat. Rezultat bi se u RM/T modelu dobio primenom operacije PROPERTY na tip entiteta RADNIK, tj. rezultat je vrednost
izraza PROPERTY( RADNIK ). Ova operacija zamenjuje citav sledeci niz operacija
osnovne relacione algebre i drugih operacija RM/T prosirenja:
1. izvrsiti restrikciju kataloske relacije PE po uslovu E-ime-relacije = RADNIK
(dobiju se n-torke koje se odnose na E i P relacije tipa entiteta RADNIK);
2. projektovati rezultat koraka 1 na atribut P-ime-relacije (dobijaju se imena
svih P-relacija koje odgovaraju tipu entiteta RADNIK);
3. rezultatu koraka 2 dodati i ime E-relacije tipa entiteta RADNIK (unija);
4. izvrsiti spoljasnje prirodno spajanje (v. tacku 2.1.3 Prosirena relaciona
algebra) svih relacija cija su imena u skupu koji je rezultat koraka 3;
5. eliminisati iz rezultata koraka 4 atribut RADNIK$.
Od operacija koje ne pripadaju osnovnoj relacionoj algebri, u realizaciju ovog
primera trebalo bi ukljuciti dve operacije: DENOTE (posle koraka 3 da bi se od
skupa imena pripadnih relacija dobio skup samih relacija) i operaciju COMPRESS
sa prvim operandom OUTER NATURAL JOIN (spoljasnje prirodno spajanje) i
drugim operandom skupom relacija dobijenih prethodnom primenom operacije
DENOTE.
Prosireni relacioni model ukljucuje i jednu vrstu nedostajucih vrednosti i sve
operacije koje se na njih odnose (v. tacku 2.1.3).

10.2

Pro
sireni model entiteta i odnosa (PMEO)

Model entiteta i odnosa definisao je Peter Chen u radu [13]. To i nije u pravom
smislu model, jer ne poseduje manipulativni deo, dok je integritetni deo implicitno
podrzan. Uz model je razvijena i dijagramska tehnika za predstavljanje entiteta
njima, sa svim njihovim karakteristikama. Bez obzira na nekomi odnosa medu
pletnost ovog modela, on je doziveo veliku popularnost, zahvaljujuci semantickim
konceptima koje podrzava, kao i dijagramskoj tehnici koja svojom preglednoscu
pojednostavljuje predstavljanje entiteta i odnosa u modelu i olaksava razumevanje
njihovog znacenja.
Posebnu primenu model entiteta i odnosa ima u realizaciji efikasne i produktivne semanticke metode logickog projektovanja. Shema baze podataka koja se
dobije ovom metodom obicno se (automatski) preslikava u shemu relacione baze
podataka, na koju se primenjuje neki od relacionih jezika za definisanje i manipulisanje podacima. Zato ([27]), model entiteta i odnosa predstavlja samo tanki
sloj nad relacionim modelom. Ako je proces projektovanja, zasnovan na modelu
entiteta i odnosa, korektno sproveden, tj. ako su uoceni svi bitni entiteti i pravilno

10.3 Strukturni deo PMEO

205

njima, onda dobijena relaciona baza podataka ima svouspostavljeni odnosi medu
jstvo da su joj, gotovo uvek, sve relacije u nekoj od visih normalnih formi (bar u
3NF).
Model entiteta i odnosa je vec dugi niz godina najzastupljenija metoda logickog
projektovanja baze podataka. Doziveo je veci broj razlicitih prosirenja i modifikacija (u odnosu na Chen-ovu varijantu), tako da je i danas u upotrebi veci broj
verzija tog modela. Ovde ce biti prikazana jedna od tih verzija, prosireni model
entiteta i odnosa, onako kako je izlozen u [62].

10.3

Strukturni deo PMEO

Entitet, u smislu u kome je ranije uveden, opisuje se svojim znacajnim, u datom


kontekstu, atributima.
Klasa entiteta je skup entiteta sa istim skupom atributa (npr. klasa STUDENT predstavlja skup entiteta {S1, S2, S3, S4}). Klasa se moze opisati tipom
entiteta sa svojstvima (npr. broj indeksa, ime, godina studija, prosecna ocena).
Svaki pojedinacni entitet (npr. student) je primerak datog tipa, tj. element date
klase (npr. klase STUDENT). U dijagramskoj tehnici prosirenog modela entiteta i
odnosa (PMEO), klasa entiteta (tj. tip entiteta) predstavlja se pravougaonikom sa
upisanim imenom, a atribut elipsom ili zaobljenim pravougaonikom.
Atribut je preslikavanje skupa entiteta datog tipa u domen atributa (skup
mogucih vrednosti). Ako je ovo preslikavanje 11, atribut je identifikator (primarni
kljuc) i oznacava se zvezdicom (slika 10.3; mlb je oznaka za maticni licni broj). Ako
vise atributa ima svojstvo identifikatora, jedan se bira za primarni kljuc.

ZAPOSLENI

mlb

ime

Slika 10.3: Entitet i atributi u PMEO


Odnos prikazuje povezanost i kriterijum povezanosti pojedinih entiteta. I
kod odnosa postoje koncepti klase, tipa i primerka odnosa. Klasa odnosa je u
matematickom smislu relacija nad nekim skupom klasa entiteta, i u dijagramskoj
tehnici predstavlja se rombom. U ovom prosirenju modela entiteta i odnosa dozvoljeni su samo binarni odnosi (odnosi nad dva tipa entiteta). Ostali tipovi odnosa se
realizuju preko agregiranih entiteta (termin koji odgovara asocijativnom entitetu u
ranijem smislu).

206

10 Semanticko modeliranje

dve klase entiteta E1 i E2 definise dva imenovana preslikaSvaki odnos izmedu

vanja iz E1 u E2 i iz E2 u E1. Ime se obicno odreduje


kao uloga klase entiteta
koja je domen preslikavanja.
Kardinalnost preslikavanja iz E1 u E2 je par (DG, GG), gde je DG (donja
granica) najmanji moguci, a GG (gornja granica) najveci moguci broj dodeljenih
elemenata klase E2 jednom elementu klase E1 (DG {0, 1, konstanta > 1}, GG
{1, konstanta > 1, M}; M je celobrojna promenljiva).
Primer predstavljanja odnosa u PMEO dat je dijagramom na slici 10.4.

ZAPOSLENI

H
HHH
radi -
Hzapo
sljava
HZAPOSLENJE

(1,2)
(1,M)
HH

PREDUZECE

Slika 10.4: Odnos u PMEO


Odnos se moze uspostaviti i nad jednim tipom entiteta, kao na slici 10.5.

RADNIK

muz
(0,1)

@
- BRAK @
@

@
6
zena
(0,1)

Slika 10.5: Odnos nad jednim tipom entiteta u PMEO

Pri izboru tipova entiteta vodi se racuna o tome da svaki atribut moze imati
najvise jednu vrednost u jednom primerku entiteta (primerak entiteta odgovara
n-torci relacije relacionog modela). To se ponekad postize proglasavanjem atributa
starog i novog entiteta. Na primer,
za novi entitet i uspostavljanjem odnosa izmedu
jedno svojstvo tipa entiteta KNJIGA je IME AUTORA, ali, kako jedna knjiga moze
imati vise autora, uvodi se novi tip entiteta AUTOR i odnos KNJIGA-AUTOR sa
preslikavanjima napisana (1,M) i napisao (0,M) (slika 10.6).
Regularni (nezavisni) entitet je termin koji odgovara samostalnom entitetu u
ranijem smislu i koji se moze identifikovati pomocu sopstvenih atributa (npr. entitet
ZAPOSLENI(mlb, ime)).
Slabi entitet je termin koji odgovara opisnom entitetu u ranijem smislu; on se
ne moze identifikovati samo pomocu sopstvenih atributa, vec se moraju koristiti

10.3 Strukturni deo PMEO

207

H
HHH

HH napisao
napisana
- KNJIGA-AUTOR

(1,M) HH
(0,M)

HH

H
H

KNJIGA

AUTOR

Slika 10.6: Atribut u funkciji entiteta u PMEO

odnosi sa drugim entitetima. Pri tome se koriste samo funkcionalni odnosi (jedno
preslikavanje definisano odnosom ima kardinalnost (1,1)), a identifikovanje pomocu
do regularnog entiteta.
odnosa moze se primeniti i rekurzivno, dok se ne dode
Ovi odnosi se predstavljaju specificno, bez romba. Slabi entitet je egzistencijalno
(i identifikaciono) zavisan od entiteta pomocu kojeg se identifikuje, pa proizvodi
anomalije brisanja i unosenja, samo sto to sada nisu anomalije vec karakteristike
znacenja podataka. Primer slabog entiteta DETE RADNIKA sa atributima ime i
prezime, starost, predstavljen je na slici 10.7.

RADNIK

starost

?
DETE

ime i prez.

Slika 10.7: Regularni i slabi entitet u PMEO

Generalizacija i specijalizacija su dva smera odnosa podtip/nadtip. Postupak


generalizacije predstavlja se preslikavanjem PODTIP NADTIP cija je kardinalnost (1,1). Primerci podtipa su egzistencijalno i identifikaciono zavisni od primeraka
nadtipa (ova zavisnost se predstavlja strelicom, kao i kod slabog entiteta).
Specijalizacija, kao i ranije, je postupak definisanja podtipova za neki tip entiteta. U primeru u kome se tip entiteta OSOBA (nadtip) specijalizuje tipovima entiteta RADNIK, STUDENT, PENZIONER, NEZAPOSLENO LICE (podtipovi),
ovi drugi imaju zajednicke atribute npr. mlb, ime, starost, adresu, i zajednicke
operacije npr. preseljenje lica. Tip entiteta RADNIK se moze dalje specijali
zovati u podtipove DAKTILOGRAF, LEKAR, MATEMATICAR,
sa specificnim
atributima i operacijama. Specijalizacija se predstavlja preslikavanjem NADTIP
UNIJA PODTIPOVA, koje moze biti razlicite kardinalnosti (obavezno se navodi).
Odnos podtip/nadtip predstavlja se rombom sa oznakom S (engl. subtype
podtip).

208

10 Semanticko modeliranje

Kardinalnost preslikavanja koje karakterise specijalizaciju odreduje


vrstu specijalizacije. Ekskluzivna specijalizacija je ona sa kardinalnoscu GG=1 (npr. jedan
radnik moze imati najvise jednu struku u kojoj radi). Neekskluzivna specijalizacija
je ona sa kardinalnoscu GG>1 (npr. jedna osoba moze biti i student i radnik).
Ne mora se svaki primerak nadtipa specijalizovati (moze biti DG=0). Na primer,
ucenik je osoba ali se ne specijalizuje ni u jedan od postojecih podtipova. Kriterijum specijalizacije je naziv preslikavanja NADTIP UNIJA PODTIPOVA (takvih

kriterijuma i preslikavanja moze biti vise), a pri prevodenju


u relacioni model taj
kriterijum postaje jedan atribut u relaciji koja odgovara nadtipu. Kardinalnost
preslikavanja PODTIP NADTIP se ne oznacava jer je ona uvek (1,1). Primer
odnosa nadtip podtip (tj. generalizacija/specijalizacija) predstavljen je na slici
10.8.
OSOBA
zanimanje
(0,M)
?
@

@
S
@

@
?
j
?
?

?
STUDENT

RADNIK
struka
(1,1)
?
@

@
S
@

@
?
j
?

?
DAKTILOGRAF

LEKAR

PENZIONER

?
NEZAP.LICE

MATEMATICAR

Slika 10.8: Generalizacija/specijalizacija u PMEO

Agregacija je termin koji odgovara asocijaciji u ranijem smislu. Asocijativni


entitet koji se dobija u slucaju da odnos asocijacije ima sopstvene atribute, zove

10.3 Strukturni deo PMEO

209

se u PMEO agregirani entitet, ili mesovit tip entitet odnos. Agregirani entitet
predstavlja se rombom u pravougaoniku.
Inverzni postupak agregaciji je dekompozicija. Tipovi entiteta nad kojima je
agregirani entitet zovu se komponente agregacije. Agregirani entitet je
izgraden
egzistencijalno zavisan od komponenata, i njegovo preslikavanje u komponentni tip
je uvek (1,1); zato se ovo preslikavanje i njegova kardinalnost na dijagramu ne
oznacavaju. Kardinalnost preslikavanja komponente u agregirani entitet se mora
navesti jer moze biti proizvoljna.
Primer agregiranog entiteta je tip entiteta PREDAVANJE, dobijen iz tipova
entiteta NASTAVNIK i PREDMET (to su komponente agregacije), sa sopstvenim
atributima mesto i vreme (slika 10.9).

vreme
mesto

PREDMET

Q
-PREDAVANJEQ
Q
(0,4)
(0,3)
Q

NASTAVNIK

Slika 10.9: Agregirani entitet u PMEO

Primarni kljuc agregiranog entiteta sastoji se od primarnih kljuceva komponentnih entiteta, inace se agregirani entitet ponasa kao i svaki drugi entitet, tj. moze
da bude u odnosu sa nekim drugim entitetom, moze da se specijalizuje itd.
Agregirani entitet (moze i bez sopstvenih atributa) koristi se i kada je potrebno
veceg broja tipova entiteta (vise od dva, slika 10.10).
predstaviti odnos izmedu
Skup tipova entiteta i odnosa kojima se u prosirenom modelu entiteta i odnosa
modeliraju podaci iz baze podataka, zajedno sa njihovim atributima, primarnim
kljucevima, preslikavanjima koja definisu i kardinalnoscu tih preslikavanja, obrazuje
shemu baze podataka prosirenog modela entiteta i odnosa. Ova se shema najpreglednije predstavlja dijagramom PMEO.

Pravila logickog projektovanja relacione baze podataka, tj. pravila prevodenja


sheme baze podataka PMEO u shemu relacione baze podataka, su sledeca:
regularni entitet se prevodi u relaciju sa svim njegovim atributima;
slabi entitet se prevodi u relaciju koja sadrzi sve njegove atribute i primarni
kljuc entiteta od kojeg zavisi;

210

10 Semanticko modeliranje

PREDMET

STUDENT

ispit-iz
(0,M)
?
Q
Q

Q ispitivao

polagao
- POLAGANJE Q
(0,M)
(0,M) QQ

Q
Q

NASTAVNIK

Slika 10.10: Visestruki odnos u PMEO

agregirani entitet se prevodi u relaciju koja sadrzi sve njegove atribute i primarne kljuceve komponenata;
podtip nekog nadtipa entiteta prevodi se u relaciju koja sadrzi njegove
specificne atribute i primarni kljuc odgovarajuceg nadtipa;
odnos se prevodi u relaciju koja sadrzi primarne kljuceve entiteta koji grade
odnos;
ako se u nekom odnosu jedan tip entiteta preslikava u drugi tip entiteta preslikavanjem kardinalnosti (1,1), onda se prvom tipu entiteta kao atribut do njih se ne prevodi
deljuje primarni kljuc drugog tipa entiteta; odnos izmedu
u posebnu relaciju.

10.3.1

Primer logi
ckog projektovanja

Razmotrimo uporedni primer logickog projektovanje baze podataka koja se odnosi


na univerzitetsku nastavu, metodom normalnih formi i primenom prosirenog modela entiteta i odnosa.
Neka baza podataka sadrzi podatke o predavanjima, sa informacijama o predavacu (licni broj, ime, zvanje, naucni stepen), predmetu (sifri predmeta, nazivu,
smeru, godini predavanja, fondu casova), vremenu i mestu odrzavanja. Logicko projektovanje relacione baze metodom normalnih formi polazi od univerzalne relacije
koja sadrzi sve navedene informacije kao svoje atribute i koja je u 1NF (atributi
primarnog kljuca su podvuceni):
predavanje( predavac#, ime, zvanje, stepen, sifra predmeta, naziv,
sifra smera, naziv smera, godina, fond casova, vreme, br.sale,
sprat)
(atribut vreme ulazi u primarni kljuc jer se predavanja iz jednog predmeta kod
jednog predavaca mogu odrzavati vise puta nedeljno).

10.3 Strukturni deo PMEO

211

Funkcionalne zavisnosti u ovoj relaciji su:


1. predavac# ime, zvanje, stepen
2. sifra predmeta naziv
3. sifra predmeta, sifra smera godina, fond casova
4. sifra predmeta, sifra smera, predavac#, vreme br.sale, sprat
5. sifra smera naziv smera
6. br.sale sprat.
Iz funkcionalnih zavisnosti pod brojem 1, 2, 3 i 5, sledi parcijalna zavisnost
sporednih atributa ime, zvanje, stepen, naziv, godina, fond casova i naziv smera,
od primarnog kljuca. Prema ovim zavisnostima, polazna relacija predavanje moze
se zameniti sledecim skupom relacija (svojih projekcija) koje su u 2NF:
predava
c
predmet
predmet-smer
smer
predavanje2

(predavac#, ime, zvanje, stepen )


(sifra predmeta, naziv)
(sifra predmeta, sifra smera, godina, fond casova )
(ova se relacija moze nazvati i nastavni plan)
(sifra smera, naziv smera )
(predavac#, sifra predmeta, sifra smera, vreme, br.sale, sprat)

Relacije predava
c, predmet, predmet-smer i smer su i u 3NF. U relaciji
predavanje2 prisutna je tranzitivna zavisnost sporednog atributa sprat od primarnog kljuca ( {predavac#, sifra predmeta, sifra smera, vreme} br.sale; br.sale
sprat). Zato se relacija predavanje2 moze zameniti, bez gubljenja informacije,
sledecim relacijama koje su u 3NF:
sala
( br.sale, sprat)
predavanje3 ( predavac#, sifra predmeta, sifra smera, vreme, br.sale).
Dakle, shema relacione baze podataka dobijena metodom normalnih formi sastoji se od relacijskih shema za relacije (koje su u 3NF):
predava
c, predmet, predmet-smer, smer, sala, predavanje3.
Logicko projektovanje relacione baze zasnovano na prosirenom modelu entiteta
i odnosa polazi od uocavanja entiteta i njihovih odnosa, koje treba predstaviti.
Uocimo regularne tipove entiteta (sa atributima):
predava
c:
predmet:
smer:
sala:

predavac#, ime, zvanje, stepen


sifra predmeta, naziv
sifra smera, naziv smera
br.sale, sprat

212

10 Semanticko modeliranje

i agregirane tipove entiteta:


predavanje nad komponentnim tipovima entiteta predava
c, predmet,
smer i sala, sa sopstvenim atributom vreme, i
predmet-na-smeru (nastavni plan) nad komponentnim tipovima entiteta
smer i predmet, sa sopstvenim atributima godina, fond casova.
Atribut vreme agregiranog entiteta predavanje uzima vise vrednosti za
jedan primerak tog entiteta, pa se izdvaja u entitet koji je sa entitetom predavanje u odnosu odrzavanje, predstavljenom kljucnim atributima tih entiteta.
Odnos odrzavanje, posmatran kao agregirani entitet, u odnosu je (1,1) prema
entitetu sala; taj odnos se moze nazvati mesto (slika 10.11).

sifra
naziv

predmet


br.sale
sprat

sala

@
-
@
mesto
@

@
6

(0,M)

predaje se-na-smeru
(1,N)

godina
Q

Q
Q
predmet Q predaje se
Q

Q
- predavanje Q (1,3)
Q

Q na-smeru (0,M)

Q
Q

Q
Q
fond.c.

6
6
?
Q

(M,N)
sadrzi
smer

(0,M)
predaje

predavac
zvanje


sifra
naziv


pred#
ime

(1,1)
Q

Q
- odrzavanje Q
Q

Q
6


stepen

(0,M)
vreme

Slika 10.11: PMEO dijagram baze podataka o nastavi

Do sheme relacione baze podataka moze se sada doci primenom pravila za transformaciju entiteta i odnosa u relacije. Tako, samostalni entiteti predava
c, predmet, smer i sala, predstavljaju se relacijama sa sopstvenim atributima.

10.4 Semanticki model baze podataka

213

se predstavlja posebnom relaciAgregirani entitet predmet-na-smeru takode


jom, sa atributima primarnim kljucevima komponentnih entiteta predmet i
smer, i sopstvenim atributima.
Dalje, kako entitet vreme ima samo jedan atribut, ne predstavlja se posebnom relacijom, vec ulazi u relaciju kojom se predstavlja odnos (agregirani entitet)
odrzavanje. S druge strane, odnos odrzavanje sadrzi sve atribute agregiranog
entiteta predavanje (jer su svi u primarnom kljucu), pa se ni agregirani entitet
predavanje ne predstavlja relacijom.
Kako je agregirani entitet odrzavanje u odnosu (1,1) prema entitetu sala,
primarni kljuc entiteta sala ulazi kao atribut u relaciju koja predstavlja entitet
odrzavanje, a odnos mesto ne predstavlja se posebnom relacijom.
Tako se dolazi do sheme relacione baze podataka:
predmet
predava
c
smer
sala
predmet na smeru
odr
zavanje

(sifra, naziv )
(predavac#, ime, zvanje, stepen )
(sifra, naziv )
(br.sale, sprat )
(sifra predmeta, sifra smera, godina, fond casova)
(sifra predmeta, sifra smera, predavac#, vreme, br.sale).

Moze se uociti da su projektovane sheme relacione baze podataka identicne. Nije


do normalizovanih
slucajno sto se metodom semantickog modeliranja doslo takode
relacija. To je i najcesce slucaj kada se projektovanje prosirenim modelom entiteta
i odnosa, odnosno metodom normalnih formi, sprovodi korektno i precizno, prema
pravilima odgovarajuce metode.

10.4

Semanti
cki model baze podataka

Semanticki model baze podataka (SDM A Semantic Database Model, [36]) moze
se smatrati jednim od prvih modela podataka iz nove generacije generacije objektnih modela ([43]). To je formalizam visokog nivoa za struktuiranje i opisivanje

baze podataka, zasnovan na semantici podataka u bazi, koji se izgraduje


nad po klasama i
jmovima klase, entiteta, atributa klase i atributa entiteta, veza medu
klasama.
posebno veza nadklasa/podklasa medu
Osnovni principi organizacije baze podataka u skladu sa semantickim modelom
SDM su sledeci:
1. Baza podataka se sastoji od entiteta koji odgovaraju stvarnim objektima koji

se obraduju
aplikacijom.
2. Entiteti su organizovani u klase, koje predstavljaju skupove entiteta koji nose

odredeno
znacenje. Struktura i organizacija SDM baze podataka zadaje se
SDM shemom, kojom se identifikuju klase u bazi podataka. Klasa ima ime
(ili vise sinonimnih imena) i skup clanova entiteta, homogene strukture.

214

10 Semanticko modeliranje

3. Klase nisu logicki nezavisne, vec su medusobno


povezane vezama razlicitih
klasama u SDM: jedna definise
vrsta. Postoje u osnovi dve vrste veza medu
podklase (analogon generalizaciji), a druga podrzava grupisanje klasa (analogon agregaciji). Klasa moze biti bazna ili ne-bazna. Bazna klasa je ona koja
se definise nezavisno od drugih klasa u bazi (odgovara joj pojam samostalnog
tipa entiteta u prethodnom razmatranju). Ne-bazna klasa je ona koja se
definise u terminima drugih klasa u bazi, i koja nema nezavisno postojanje,
klasa. Na primer, klasa koja je podvec ima pridruzenu jednu vezu izmedu
klasa druge klase (u smislu inkluzije pripadnog skupa entiteta), jeste ne-bazna
klasa predstavljaju blokove za izgradnju slozenijih (izveklasa. Veze izmedu
klasama, kao i mogucnost razlicitih
denih) atributa i slozenijih veza medu
pogleda na iste informacije.
4. Entiteti i klase imaju atribute koji opisuju njihova svojstva i povezuju ih
sa drugim entitetima u bazi. Vrednost atributa moze biti izvedena iz drugih
vrednosti u bazi. Za jednu klasu vezane su dve vrste atributa: atributi clanova
klase i atributi klase. Prvi opisuju svojstva pojedinog entiteta (npr. naziv
knjige za klasu KNJIGA), dok drugi opisuju svojstva klase kao celine (npr.
broj entiteta klase KNJIGA). Svaka bazna klasa poseduje listu grupa atributa
clanova od kojih svaka jednoznacno identifikuje clan klase (analogoni kandidata za kljuceve u relacionom modelu).
Semanticki model SDM, mada poseduje semanticke koncepte objektnog modela
podataka (v. dodatak A), u velikoj meri je vezan za osnovne principe relacionog
modela. Ova dualnost je osnova jednog od pravaca u kojima se vidi razvoj sistema
baza podataka nove generacije ([20]), sto daje novu dimenziju znacaju SDM-a.

10.5

Pitanja i zadaci

1. Definisati sledece pojmove:


semanticko modeliranje
asocijativni entitet
agregacija

podtip/nadtip
generalizacija
specijalizacija

2. Kako se u relacionom modelu modeliraju apstrakcije agregacija i generalizacija? Navesti primere.


3. Kojim sredstvima prosireni relacioni model RM/T realizuje koncepte semantickog modeliranja?
4. Opisati operacije manipulativnog dela RM/T modela.
5. Koja su opsta pravila integriteta RM/T modela?

10.5 Pitanja i zadaci

215

6. Opisati strukturu RM/T kataloga.


7. Opisati elemente strukturnog dela prosirenog modela entiteta i odnosa.
8. Kako se dijagramom entiteta i odnosa predstavljaju regularni entitet, slabi entitet, agregirani entitet, nadtip/podtip? Kakva je kardinalnost preslikavanja
koja definise agregacija odnosno generalizacija/specijalizacija?
tri
9. Kako se u prosirenom modelu entiteta i odnosa predstavlja odnos izmedu
ili vise tipova entiteta?
10. Navesti pravila transformacije sheme baze podataka prosirenog modela entiteta i odnosa u shemu relacione baze podataka.
11. Nacrtati dijagram entiteta i odnosa PMEO modela baze podataka kompanije
iz zadatka 7 glave 9.
12. Neka baza podataka sadrzi podatke o trgovackim predstavnicima, oblastima
prodaje i proizvodima. Svaki predstavnik zaduzen je za jednu ili vise oblasti,
i za jedan ili vise proizvoda. Za svaku oblast i za svaki proizvod zaduzen je
po jedan ili vise predstavnika. Svaki se proizvod prodaje u svakoj oblasti, ali
ni u jednoj oblasti dva ili vise predstavnika ne prodaju isti proizvod. Svaki
predstavnik prodaje isti skup proizvoda u svakoj oblasti za koju je zaduzen.
Nacrtati dijagram entiteta i odnosa koji predstavlja shemu opisane baze podataka u PMEO modelu. Prevesti dobijenu shemu u shemu relacione baze
podataka.

Deo IV

Fizi
cka organizacija podataka

Deo IV odnosi se na fizicku reprezentaciju podataka baze podataka, i na


metode pristupa podacima i obrade podataka nad tim reprezentacijama. Fizicka
reprezentacija podataka je nacin predstavljanja podataka strukturama podataka
u spoljasnjoj memoriji, obicno na disku. Strukture podataka (razliciti tipovi datoteka), zajedno sa metodama pristupa i obrade podataka, zovu se fizicka organizacija podataka.
Osnovna motivacija za izucavanje razlicitih fizickih organizacija je cinjenica da
je vreme pristupa disku mnogo vece (za cetiri do pet redova velicine) nego vreme pristupa unutrasnjoj memoriji. Zato izbor fizicke organizacije ima za cilj minimizaciju
broja pristupa disku pri radu sa podacima.
Ne postoji optimalna fizicka organizacija, jer se razlicite fizicke organizacije
pokazuju manje ili vise efikasnim u razlicitim aplikacijama. Zato sistemi za upravljanje bazama podataka obicno podrzavaju veci broj fizickih organizacija, tako da
se za razne delove baza podataka mogu koristiti najpogodnije strukture i algoritmi.
Deo IV sastoji se od tri glave:
U glavi 11, Strukture podataka i algoritmi, daje se pregled razlicitih
fizickih organizacija i prikazuju dve najjednostavnije fizicke organizacije
sekvencijalna i indeks-sekvencijalna.
Glava 12, Indeksna organizacija, prikazuje ovu, najcesce koriscenu i cesto
najefikasniju fizicku organizaciju. Razmatra se struktura balansiranog drveta
kojom se realizuje indeks, i izlazu se algoritmi pristupa podacima i indeksu.
Glava 13, Direktna organizacija, odnosi se na strukture datoteka kojima
se pristupa primenom funkcije direktnog pristupa (hes funkcije), kao i na
algoritme obrade takvih struktura.

217

11

Strukture podataka i
pristupne metode
Najnizi nivo ANSI/SPARC arhitekture sistema baza podataka je unutrasnji nivo.
To je fizicka reprezentacija (obicno na disku) cele baze podataka, niskog nivoa, koja
se sastoji od velikog broja fizickih slogova (ili, krace, slogova1 ) razlicitih tipova.
Fizicki slogovi su prema svom tipu, s tacke gledista SUBP, grupisani u datoteke
koje imaju jedinstvene identifikatore.
Fizicki slog odgovara logickom slogu koji predstavlja (npr. n-torci specificne
relacije), ima jedinstveni identifikator i sastoji se od niza bajtova. Prvih nekoliko
bajtova sadrzi informaciju o tipu fizickog sloga, sledecih nekoliko bajtova je rezervisano za duzinu sloga u bajtovima ako je tip sloga promenljive duzine, a zatim
slede oznake i vrednosti fizickih polja.
Zadatak SUBP je da zahteve koje korisnik postavlja na konceptualnom nivou
nad logickim tipovima podataka (npr. relacijama i n-torkama) preslika, na unutrasnjem nivou, u zahteve nad datotekama i fizickim slogovima (preslikavanje
skupa relacija u skup datoteka ne mora biti 11; v. sledeci odeljak). Zahtevi koje
SUBP moze da proizvede na unutrasnjem nivou su sledeci:
1. pronaci fizicki slog s iz datoteke d;
2. izmeniti fizicki slog s u datoteci d;
3. dodati novi fizicki slog datoteci d i dobiti njegov identifikator;
4. izbrisati fizicki slog s iz datoteke d;
5. kreirati novu datoteku d;
6. ukloniti datoteku d.
1 Terminologija,

kao i resenja pojedinih problema u ovoj oblasti bitno se razlikuju od sistema


do sistema, ali principi fizi
cke reprezentacije i pristupa podacima uglavnom su standardni.

218

11 Strukture podataka i pristupne metode

219

Da bi se ovi zahtevi izvrsili, SUBP u svojstvu korisnika operativnog sistema


koristi funkcionalnost komponente operativnog sistema upravljaca tekama (engl.

file manager), a upravljac tekama svoju funkcionalnost izgraduje


koristeci funkcije
komponente operativnog sistema nizeg nivoa upravljaca diskom.
Opisimo, ukratko, ove dve komponente operativnog sistema.
Upravljac diskom ima informacije o svim fizickim adresama na disku, i odgovoran je za sve fizicke ulazno/izlazne operacije sa diskom (slika 11.1, [27]). Za upravljac diskom (kao i za upravljac tekama), struktura fizickog sloga nije od interesa
i on predstavlja samo niz bajtova na specificnim adresama.
Upravljac tekama vidi disk kao skup blokova fiksne velicine koji se zovu stra
nice. Stranice su numerisane tako da linearno uredenje
skupa stranica odgovara
njihovom fizickom redosledu. Velicina stranice je obicno izrazena brojem bajtova,
tj. brojem znakova. Stranice su logicki grupisane u grupe stranica od kojih svaka
ima svoj redni broj (tj. identifikator). Stranice (odnosno grupe stranica) su, s tacke
gledista upravljaca tekama, dalje grupisane u disjunktne stranicne skupove (engl.
page sets). Svaki stranicni skup ima jedinstveni identifikator. Jedan stranicni skup
moze da sadrzi fizicke slogove jednog ili raznih tipova, odnosno moze da ukljuci i
fizicke slogove koji, s tacke gledista SUBP, pripadaju razlicitim datotekama.

SUBP
zahtev za
fiz.slogom

6 nadeni
fiz.slog
?
upravljac

tekama

6 nadena
zahtev za
stranicom ?
stranica
upravljac
U/I operacija
nad diskom

diskom
6 procitani
podaci
?
podaci
na disku

Slika 11.1: SUBP, upravljac tekama i upravljac diskom

220

11 Strukture podataka i pristupne metode

Preslikavanje stranice u fizicke adrese na disku koje odgovaraju toj stranici, ostvaruje upravljac diskom (slika 11.1). Zato je upravljac tekama u mogucnosti da
postavi (a upravljac diskom da izvrsi) sledece vrste zahteva:
1. pretraziti stranicu p iz stranicnog skupa st;
2. izmeniti stranicu p u stranicnom skupu st;
3. dodati novu stranicu stranicnom skupu st i dobiti broj te stranice, p;
4. ukloniti stranicu p iz stranicnog skupa st.
Preslikavanje datoteke u stranicne skupove ostvaruje upravljac tekama. Tako se
zahtevi koji se odnose na fizicki slog, a koje SUBP postavlja na unutrasnjem nivou

ANSI arhitekture, realizuju pozivom upravljaca tekama. On odreduje


broj stranice
koja sadrzi trazeni fizicki slog i poziva upravljac diskom koji realizuje ulazno/izlazne
operacije nad podacima koji odgovaraju trazenoj stranici (slika 11.1).
Mada ne mora da ucestvuje u upravljanju stranicama, SUBP mora da zna
za njihovo postojanje, da bi izborom odgovarajuce fizicke reprezentacije povecao
efikasnost pristupa podacima (v. sledeci odeljak).
nacina na koje upravljac tekama i SUBP vide podatke na
Odnos izmedu
disku ilustrovan je slikom 11.2. Stranice sa brojem 1 i 3 (sa ove slike) pripadaju
jednom stranicnom skupu, a stranice sa brojem 2, 4 i sve ostale stranice drugom
stranicnom skupu, npr. skupu slobodnih stranica. Oznake f.k1 f.k5 odnosno
f.i1 f.i10 oznacavaju fizicke slogove kojima su predstavljene na disku n-torke
relacije K sa vrednostima k1 k5 atributa K SIF, odnosno n-torke relacije I sa
vrednostima i1 i10 atributa I SIF. Stranice diska (kako ih vidi upravljac tekama)
obelezene su brojevima 1, 2, 3, 4, itd. Isti stranicni skup na unutrasnjem nivou
SUBP vidi se kao dve datoteke, a na konceptualnom nivou kao dve relacije.
Mada upravljac tekama postoji kao komponenta operativnog sistema, veci broj

SUBP izgraduje
svoj sopstveni upravljac tekama da bi povecao efikasnost pristupa
podacima.
Pored fizicke reprezentacije podataka, fizicka organizacija podrazumeva i algoritme obrade podataka. Zato ce u ovoj glavi, osim elemenata fizicke reprezentacije,
biti skicirani i odgovarajuci algoritmi obrade.

11.1

Fizi
cka reprezentacija relacije

Jedna relacija moze imati fizicku reprezentaciju koja se sastoji od veceg broja datoteka (s tacke gledista SUBP), tj. od veceg broja stranicnih skupova (s tacke
gledista operativnog sistema). U tekstu koji sledi bice razmatrana samo fizicka
reprezentacija s tacke gledista SUBP koji ukljucuje funkcije upravljaca tekama.
Fizicka reprezentacija jedne relacije ukljucuje, obavezno, datoteku podataka, u
oznaci DP, koja sadrzi fizicke slogove koji odgovaraju podacima koji se vide na

11.1 Fizicka reprezentacija relacije

221

SUBP
(konceptualni nivo):
i1
i2
i3
i4
i5
i6
i7
i8
i9
i10

k1
relacija-1
(K)

k2
k3

relacija-2
(I)

k4
k5
SUBP
(unutrasnji nivo):

datoteka-1:

f.k1

f.i1
f.i3

2
f.i2
f.i4

f.k4

4
...

f.k5

f.k2
f.k3
1

datoteka-2:

f.i5

f.i6

f.i7
f.i9

f.i8
f.i10

...

TEKAMA:
UPRAVLJAC
stranicni-skup-1 HH
1

2
3
H
j
4
f.k1
f.k4
f.i1 f.i2
f.i5 f.i6
...
f.i3 f.i4
f.k5
f.k2
f.i7 f.i8
f.k3
f.i9 f.i10
:

H
YH
*

H stranicni-skup-2

Slika 11.2: Razlike u predstavljanju podataka: SUBP i upravljac tekama

222

11 Strukture podataka i pristupne metode

logickom nivou (npr. n-torkama relacije). Medutim,


da bi se postigla sto veca
efikasnost obrade podataka u datoteci podataka, u zavisnosti od prirode podataka
i vrste obrade, fizicka reprezentacija moze da ukljuci i druge datoteke datoteku
promena, datoteku prekoracenja, u koje moze da se siri datoteka podataka, i datoteke koje ubrzavaju pristup podacima u datoteci podataka i koje se zovu indeksne
datoteke. Tako se, uz odgovarajuce algoritme obrade podataka, dolazi do razlicitih
fizickih organizacija podataka sekvencijalne, indeks-sekvencijalne, indeksne, direktne.
Efikasnost pojedine fizicke organizacije podataka izrazava se vremenom obrade
trazenog fizickog sloga, a to vreme ukljucuje vreme pristupa grupi stranica, vreme
pristupa stranici unutar grupe (koja sadrzi trazeni slog), vreme donosenja odabrane
stranice sa diska u unutrasnju memoriju odnosno vreme upisa stranice iz unutrasnje
memorije na odabranu poziciju, kao i vreme obrade sloga u unutrasnjoj memoriji.
Vreme pristupa grupi stranica i vreme pristupa stranici unutar grupe zavisi od

karakteristika uredaja
(brzina pomeranja glava diska), i nece se uzimati u obzir
pri daljem razmatranju. Zato ce se vreme citanja, odnosno upisa stranice smatrati
vreme obrade stranice u unutrasnjoj
jednakim za sve stranice na disku. Takode,
memoriji je za nekoliko redova velicine manje od vremena citanja, odnosno upisa
stranice na disk, pa se ni ono nece uzimati u obzir. Tako ce jedina mera efikasnosti
pojedine fizicke organizacije biti broj stranica koje je potrebno upisati, odnosno
procitati sa diska, u realizaciji upita pri toj fizickoj organizaciji.
Razmotrimo sledeci primer. Neka datoteka podataka sadrzi n slogova grupisanih
u stranice, od kojih svaka moze da primi po m slogova. Dakle, datoteka podataka
sadrzi (logicki, jer stranicni skup koji joj odgovara moze da sadrzi i slogove drugog
tipa) n/m stranica. Neka je vreme citanja, odnosno upisa pojedine stranice jednako t. Pretpostavimo da je potrebno obraditi sve slogove iz te datoteke podataka.
Ako se slogovima pristupa serijski (redom, kako su upisani), za obradu svih slogova
potrebno je vreme (n/m) t, tj. vreme obrade pojedinacnog sloga pri ovakvom
pristupu je ((n/m) t)/n = t/m. Ako postoji mogucnost direktnog pristupa slogu
(po nekom svojstvu tog sloga), i ako slogovi nisu grupisani po tom svojstvu, re
alna je pretpostavka da se dva sloga koja se obraduju
jedan za drugim nalaze na
razlicitim stranicama. Tada je za obradu cele datoteke podataka potrebno vreme
n t, tj. vreme obrade pojedinacnog sloga pri ovakvom pristupu je n t/n = t.
Ovo razmatranje dovodi do zakljucka da, kada je potrebno obraditi veliki broj slogova iz datoteke podataka, vreme obrade po slogu, pa i celokupno vreme obrade
svih slogova daleko je manje u slucaju da se slogovima pristupa sekvencijalno
u fizickom redosledu stranica, nego u slucaju da je pristup stranicama slobodan
(preko reda).
Indeksna datoteka, u oznaci ID, sa logicke tacke gledista odgovara funkciji koja

za datu vrednost iz domena skupa atributa odreduje


skup slogova u datoteci podataka DP sa datom vrednoscu tih atributa (ili neki nadskup tog skupa slogova).
Dakle, za A {A1 , A2 , . . . , An } indeksna datoteka ID predstavlja logicki sledece
preslikavanje:

11.2 Sortiranje sekvencijalne datoteke

223

ID : dom(A) P(DP).
(P je oznaka za partitivni skup).
Indeksna datoteka ID moze predstavljati indeks kod indeks-sekvencijalne reprezentacije ili indeks kod indeksne reprezentacije. U prvom slucaju, indeksna datoteka

ID, tj. indeks izgraduje


se nad primarnim kljucem relacije i predstavlja (logicki)

tabelu koja sadrzi uredene


parove oblika
(redni-broj-stranice, maksimalna-vrednost-kljuca-u-stranici).
U drugom slucaju indeks ID moze se izgraditi nad bilo kojim atributom relacije
(ne samo nad primarnim kljucem) ili nad kombinacijom atributa. Logicki, on

predstavlja tabelu u kojoj je odredenoj


kombinaciji vrednosti indeksnih atributa
pridruzen skup rednih brojeva stranica u kojima se nalaze slogovi sa tom kombinacijom vrednosti indeksnih atributa. Dakle, indeks je u ovom slucaju (logicki)

tabela koja sadrzi uredene


parove oblika
(vrednost-indeksnih-atributa, {r-br-stranice1 , . . . , r-br-stranicek }).
Umesto indeksne datoteke, za pristup slogovima datoteke podataka moze se
koristiti i algoritam direktnog pristupa hes algoritam (engl. hash), koji transformise vrednost nekog atributa (atribut direktnog pristupa, hes atribut) u redni
broj stranice sloga sa datom vrednoscu tog atributa. Algoritam direktnog pristupa
zadaje se analiticki; to je funkcija f koja preslikava domen atributa direktnog pristupa (ili proizvod domena skupa atributa direktnog pristupa) u datoteku podataka,
tj. u odgovarajuci stranicni skup.
Ova glava posvecena je razmatranju jednostavnih fizickih organizacija koje se

izgraduju
nad razlicitim fizickim reprezentacijama podataka, kao i metoda pristupa
i algoritama obrade. Naredne dve glave bice posvecene sofisticiranijim i efikasnijim
fizickim organizacijama.
Razliciti algoritmi obrade datoteke podataka, pri razlicitim fizickim organizacijama, podrazumevaju sortiranost datoteke podataka po nekom atributu (atribut
sortiranja). S obzirom da je to datoteka na disku, za njeno sortiranje primenjuje se neki od algoritama spoljasnjeg sortiranja. U sledecem odeljku bice opisan
jedan jednostavan ali dosta efikasan algoritam algoritam spoljasnjeg sortiranja
balansiranim spajanjem ([55], [1]).

11.2

Sortiranje sekvencijalne datoteke

Sekvencijalna datoteka je datoteka u koju se slogovi upisuju redom, jedan za drugim


dva vec upisana sloga), i u kojoj se slogovima
(ne moze se upisati slog izmedu

224

11 Strukture podataka i pristupne metode

pristupa redom kojim su upisani (jednom slogu se moze pristupiti samo tako sto se
prethodno pristupi svim slogovima, od pocetka datoteke, koji mu prethode).

Algoritam sortiranja balansiranim spajanjem polazi od neuredene


(nesortirane)
sekvencijalne datoteke podataka DP i njenog atributa sortiranja A (ili kombinacije
atributa), i sastoji se od unutrasnjeg sortiranja delova datoteke DP i spoljasnjeg
spajanja tih sortiranih delova. Algoritam koristi dva skupa sekvencijalnih pomocnih
datoteka, P1 , P2 , . . . , Pn i Pn+1 , Pn+2 , . . . , P2n . Pretpostavlja se da je u unutrasnjoj memoriji, s obzirom na njen kapacitet i velicinu slogova, moguce sortirati po
m slogova.
Prvi korak u radu algoritma zove se pocetna distribucija sekvenci. Sastoji se od
citanja iz datoteke DP, redom, po m slogova u unutrasnju memoriju, gde se sortiraju
po atributu A nekom od metoda unutrasnjeg sortiranja, i od upisa tako sortiranih
nizova slogova sekvenci duzine m, kruzno, u prvi skup pomocnih datoteka P1 ,
P2 , . . . , Pn . Naredni koraci algoritma predstavljaju ponavljanje sledeceg postupka:
odgovarajuce (prve, druge, itd.) sekvence iz pomocnih datoteka prvog skupa se
spajaju i dobijene sekvence se kruzno distribuiraju u pomocne datoteke drugog
skupa; zatim se sadrzaj drugog skupa pomocnih datoteka prepise u prvi. Postupak
se zove spajanje sa distribucijom sekvenci i ponavlja se sve dok se ne dobije jedna
jedina sortirana sekvenca u pomocnoj datoteci P1 (ostale su prazne).
Graficki se koraci algoritma mogu predstaviti kao na slici 11.3

DP@
@
@
R
@

P1
P2
..
.
Pn

a) pocetna distribucija

P1

P2 P @

PP@
P
q
P
R
@

..
@

.
@

@
@
R
Pn

Pn+1

- P1

Pn+2

- P2
..
.

..
.
P2n

- Pn

b) spajanje, distribucija i prepisivanje

Slika 11.3: Spoljasnje sortiranje balansiranim spajanjem

Na primer, pretpostavimo da sekvencijalna datoteka DP sadrzi slogove sa vrednostima atributa sortiranja 1, 5, 31, 7, 9, 3, 13, 6, 17, 8, 25, 27, 2, 10, da unutrasnja
memorija moze da sortira tri sloga, i da je na raspolaganju sest pomocnih sekvencijalnih datoteka. Tada se postupak sortiranja datoteke DP odvija kroz sledece faze
(u datotekama DP, P1 , . . . , P6 oznacavaju se samo vrednosti atributa sortiranja,
ali se u njih u stvari upisuju celi slogovi sa tim vrednostima atributa sortiranja):

11.2 Sortiranje sekvencijalne datoteke

225

po
cetna distribucija:
P1 : 1, 5, 31, 8, 25, 27
P2 : 3, 7, 9, 2, 10
P3 : 6, 13, 17
spajanje i distribucija:
P4 : 1, 3, 5, 6, 7, 9, 13, 17, 31
P5 : 2, 8, 10, 25, 27
P6 :
prepisivanje drugog u prvi pomo
cni skup:
P1 : 1, 3, 5, 6, 7, 9, 13, 17, 31
P2 : 2, 8, 10, 25, 27
P3 :
spajanje i distribucija:
P4 : 1, 2, 3, 5, 6, 7, 8, 9, 10, 13, 17, 25, 27, 31
P5 :
P6 :
prepisivanje drugog u prvi pomo
cni skup:
P1 : 1, 2, 3, 5, 6, 7, 8, 9, 10, 13, 17, 25, 27, 31
P2 :
P3 :
DP := P1 .
Dakle, posle dve primene spajanja sa distribucijom, datoteka DP postaje sortirana.
Globalni algoritam sortiranja sekvencijalne datoteke balansiranim spajanjem
moze se opisati sledecim pseudoprogramom:
Algoritam sortiranja balansiranim spajanjem
ulaz: sekvencijalna datoteka DP, atribut sortiranja A;
izlaz: sortirana datoteka DP;
pomo
cne strukture: sekvencijalne datoteke P1 , . . . , P2n ;
BEGIN
izvrsiti pocetnu distribuciju sekvenci iz DP u P1 , . . . , Pn ;
REPEAT
izvrsiti spajanje sekvenci iz datoteka P1 , . . . , Pn

226

11 Strukture podataka i pristupne metode

i njihovu distribuciju u datoteke Pn+1 , . . . , P2n ;


(algoritmom spajanja sa distribucijom sekvenci)
prepisati datoteke {Pn+1 , . . . , P2n } u {P1 , . . . , Pn };
isprazniti datoteke {Pn+1 , . . . , P2n }
UNTIL u P1 samo jedna sekvenca, a ostale pomocne datoteke prazne;
prepisati sadrzaj datoteke P1 u datoteku DP
END.

Globalni algoritmi pocetne distribucije, odnosno spajanja sa distribucijom, koji


se koriste u prethodnom algoritmu, mogu se opisati sledecim pseudoprogramima
([55], [1]):

Algoritam po
cetne distribucije sekvenci
ulaz: sekvencijalna datoteka DP, atribut sortiranja A i kapacitet memorije m;
izlaz: sekvencijalne datoteke P1 , . . . ,Pn koje sadrze sekvence datoteke DP;
BEGIN
pripremiti datoteku DP za citanje i datoteke P1 , . . . ,Pn za upis;
i := 1; /*indeks pomocne datoteke*/
REPEAT
ucitati sledeci niz od m slogova iz datoteke DP u unutrasnju memoriju
(ili k < m ako je ostalo samo k),
sortirati ga i sortiranu sekvencu upisati u datoteku Pi ;
i := (i mod n) + 1
UNTIL kraj datoteke DP
END.

11.2 Sortiranje sekvencijalne datoteke

227

Algoritam spajanja sa distribucijom sekvenci


ulaz: niz sekvencijalnih datoteka P1 , . . . , Pn , atribut sortiranja A;
izlaz: niz sekvencijalnih datoteka Pn+1 , . . . , P2n koje sadrze spojene nizove
(od po n) sekvenci ulaznog niza datoteka;
BEGIN
broj sekvenci u izlaznom nizu datoteka je 0;
otvoriti ulazne datoteke P1 , . . . , Pn za citanje ;
otvoriti izlazne datoteke Pn+1 , . . . , P2n za upis;
postaviti indeks izlazne datoteke, i, na n + 1;
REPEAT
spojiti sledece sekvence iz P1 , . . . , Pn (po jednu iz svake datoteke do
cijeg se kraja jos nije doslo)
i upisati rezultujucu sekvencu u izlaznu datoteku Pi ;
broj sekvenci u izlaznom nizu datoteka uvecati za 1;
indeks sledece izlazne datoteke, i, postaviti na (i mod n) + n + 1
UNTIL kraj svih ulaznih datoteka P1 , . . . , Pn
END.

Spajanje niza od n sekvenci, koje se koristi u algoritmu spajanja sa distribucijom


sekvenci (spojiti ), moze se izvrsiti jednim citanjem sekvenci, i to prema algoritmu
sekvencijalnog spajanja sledeceg (globalnog) oblika:

228

11 Strukture podataka i pristupne metode

Algoritam sekvencijalnog spajanja


ulaz: n sekvenci s1 , . . . , sn ;
izlaz: sekvenca s koja se sastoji od slogova sekvenci s1 , . . . , sn ;
pomo
cne strukture: niz tekucii , i = 1, . . . , n, slogova, po jedan za svaku ulaznu
sekvencu; tekucii sadrzi tekuci slog sekvence si ako nije kraj te sekvence,
inace sadrzi indikator kraja;
BEGIN

b := 0; /* broj obradenih
(procitanih i spojenih) sekvenci ulaznog niza */
FOR svaku sekvencu si , i = 1, . . . , n, DO
IF sekvenca si prazna
THEN tekucii := prvi slog sekvence si
ELSE
BEGIN
tekucii := indikator kraja;
b := b +1
END;

WHILE b < n 1 DO /* dok su bar dve sekvence neobradene*/


BEGIN
odrediti 1 k n tako da je tekucik = min {tekucii , i = 1, . . . , n};
/* slogovi se porede po vrednosti atributa sortiranja, */
/* i to samo oni koji ne sadrze indikator kraja */
dodati slog tekucik izlaznoj sekvenci s;
IF nije kraj sekvence sk
THEN tekucik := sledeci slog sekvence sk
ELSE
BEGIN
tekucik := indikator kraja;
b := b +1
END
END;

upisati u s sve neupisane slogove neobradene


sekvence (ako postoji)
END.
Vreme potrebno za sortiranje balansiranim spajanjem sekvencijalne datoteke
DP sa n slogova je proporcionalno sa n2 ([55]). Postoje poboljsanja ovog algoritma
koja se pre svega odnose na broj potrebnih pomocnih datoteka, ali se slozenost
algoritma ne moze bitno popraviti.

11.3

Sekvencijalna organizacija

Sekvencijalna organizacija podataka karakterise se iskljucivo sekvencijalnim (rednim) pristupom slogovima u datoteci podataka. Ova organizacija ima dve varijante

11.3 Sekvencijalna organizacija

229

neuredenu,
koja se zove i gomila (engl. heap), i uredenu
varijantu. U prvoj
varijanti fizicka reprezentacija relacije ukljucuje samo jednu datoteku datoteku
podataka (DP), u koju se slogovi unose hronoloskim redom u redosledu kojim
stizu. U drugoj varijanti, slogovi datoteke podataka su sortirani u redosledu nekog
atributa sortiranja. Slogovi koji se unose posle pocetnog sortiranja unose se u drugu
datoteku tzv. datoteku promena (DPR), i to hronoloski, kao i u prvoj varijanti.
Slogovi koje treba brisati ne izbacuju se (ni u jednoj varijanti), vec se obelezavaju
nevazecim, sve do povremene reorganizacije kada se fizicki izbacuju svi obelezeni
slogovi. Pri reorganizaciji se, u drugoj varijanti, i objedinjuju i sortiraju datoteka
podataka i datoteka promena.

11.3.1

Efikasnost izvr
savanja jednorelacionih upita

Izbor pojedinacnog sloga iz datoteke DP (DPR) sa n slogova,


Pretra
zivanje.
u obe varijante sekvencijalne organizacije, zahteva u proseku pretrazivanje pola
te datoteke u slucaju uspeha, i cele datoteke u slucaju neuspeha. Ako stranica
prima m slogova, onda je vreme pretrazivanja pojedinacnog sloga proporcionalno
sa tn/2m, tj. vreme je O(tn/m) proporcionalno sa brojem stranica u datoteci
(t je, kao i ranije, vreme pristupa stranici). Dakle, organizacija je neadekvatna za
pretrazivanje pojedinacnog sloga.
Primer ovakvog izbora je upit: naci status i drzavu izdavaca sa sifrom i2. Ovaj
upit se u SQL-u izrazava sledecim SELECT blokom:
SELECT STATUS, DRZAVA
FROM
I
WHERE I SIF = i2
Obrada svih slogova datoteke DP (DPR) u proizvoljnom redosledu, u obe varijante sekvencijalne organizacije, zahteva u proseku samo dva puta duze vreme
od uspesne obrade pojedinacnog sloga, pa je vreme obrade svih slogova istog reda
velicine, tj. O(t n/m). Sekvencijalna organizacija je adekvatna ako je grupna
obrada u proizvoljnom redosledu najcesca obrada podataka.
Primer grupne obrade je upit: prikazati naziv i status svih izdavaca. U SQL-u,
SELECT NAZIV, STATUS
FROM
I
U ovom primeru obrada je pretrazivanje (obrada moze biti i azuriranje,
unosenje, brisanje), i ukljucuje samo operaciju projekcije. Zato ovaj upit predstavlja specijalni slucaj opstijeg jednorelacionog upita grupnog pretrazivanja koji
moze da ukljuci i restrikciju. Algoritam po kome se izvrsava grupna sekvencijalna
restrikcija i projekcija ukljucuje sekvencijalni prolaz kroz sve slogove datoteke DP
(DPR) i, za svaki slog koji zadovoljava uslov restrikcije, projektovanje na atribute
projekcije.

230

11 Strukture podataka i pristupne metode

Primer upita grupne obrade sa restrikcijom je: naci nazive jugoslovenskih izdavaca ciji status nije manji od 20. Ovaj upit u SQL-u ima oblik:
SELECT NAZIV
FROM
I
WHERE STATUS >= 20 AND DRZAVA = Jugoslavija
Grupna obrada slogova u zadatom redosledu zadatog atributa zahteva sortiranje

DP datoteke u neuredenoj
varijanti, odnosno DP i DPR datoteka (zajedno), u

uredenoj varijanti, i to u zadatom redosledu zadatog atributa. Uredena


varijanta
ima znacajne prednosti u slucaju da je datoteka podataka vec sortirana po atributu

koji odreduje
redosled, jer se onda zahteva samo sortiranje datoteke promena i
sekvencijalno spajanje dve sortirane datoteke (v. prethodni odeljak).
Na primer, upit prikazati naziv i status svih izdavaca u abecednom poretku
naziva predstavlja grupnu obradu u zadatom redosledu:
SELECT NAZIV, STATUS
FROM
I
ORDER BY NAZIV
Za sortiranje DP datoteke, odnosno DP i DPR datoteka, koje se odnose na
relaciju I, moze se koristiti neki od algoritama spoljasnjeg sortiranja (v. odeljak
11.2).
Izbor sloga, tj. operacija pretrazivanja, potrebna je pri izvrsavanju svake od
operacija azuriranja odnosno brisanja. Zbog toga je efikasnost izvrsenja ovih operacija direktno zavisna od efikasnosti izbora (koja je razmotrena u ovom paragrafu). Sledeci paragraf odnosi se na razmatranje upravo tih operacija.

A
zuriranje, brisanje i uno
senje.
Azuriranje i brisanje sloga, odnosno grupe
slogova analogno je izboru, pa i vreme potrebno za azuriranje, odnosno brisanje
odgovara vremenu potrebnom za izbor. Umesto fizickog brisanja, slog se obelezava
nevazecim, s tim sto vreme potrebno za brisanje pojedinacnog sloga ukljucuje jos i
vreme periodicne reorganizacije (pri kojoj se slogovi de facto brisu), izracunato po
slogu.
Unosenje novog sloga realizuje se kao hronolosko dodavanje sloga datoteci po
dataka odnosno datoteci promena; u slucaju uredene
varijante, vreme unosenja
ukljucuje i vreme povremene reorganizacije, izracunato po pojedinacnom slogu,
kojom se datoteka podataka i datoteka promena objedinjuju u novu datoteku podataka, a datoteka promena prazni.

11.3 Sekvencijalna organizacija

11.3.2

231

Izvr
savanje vi
serelacionih upita

Svi viserelacioni upiti ukljucuju neki oblik operacije spajanja, a najcesce i neki
oblik restrikcije i projekcije. Zato osnovni algoritam izvrsavanja dvorelacionih upita
(analogno viserelacionih), za sekvencijalnu fizicku reprezentaciju relacija, ima dva
globalna koraka:
1. Sortirati obe datoteke podataka (i datoteke promena, ako postoje) po atributima spajanja; u prvom prolazu kroz datoteke pri sortiranju izvrsiti restrikcije
i projekcije na izlazne atribute i atribute spajanja;
2. Izvrsiti sekvencijalno prirodno spajanje sortiranih datoteka, uz istovremenu
projekciju na izlazne atribute.

Za relacije koje ne ucestvuju u prvom koraku (npr. kod uredene


varijante po
atributu spajanja), pripadne restrikcije vrse se u drugom koraku, istovremeno sa
spajanjem.
Prvi korak je izlozen u prethodnom odeljku. Drugi je predstavljen sledecim
algoritmom ([57], [1]):
Algoritam sekvencijalnog prirodnog spajanja po atributima sortiranja
ulaz: sortirane datoteke P1 i P2 ;
izlaz: sortirani rezultat operacije prirodnog spajanja datoteka P1 i P2 ;
BEGIN
otvoriti datoteke P1 i P2 za citanje;
procitati prvi slog s1 datoteke P1 i prvi slog s2 datoteke P2 ;
REPEAT
uporediti vrednosti atributa spajanja slogova s1 i s2 ;
IF vrednost atributa spajanja sloga s1 manja od
vrednosti atributa spajanja sloga s2
THEN
BEGIN
citati slogove iz P1 dok imaju istu vrednost atributa spajanja;
procitati sledeci slog s1 datoteke P1
END
ELSE IF vrednost atributa spajanja sloga s2 manja od
vrednosti atributa spajanja sloga s1
THEN BEGIN
citati slogove iz P2 dok imaju istu vrednost atributa spajanja;
procitati sledeci slog s2 datoteke P2
END
ELSE BEGIN
(jednaki su) spojiti sve slogove iz datoteka P1 , P2
sa istom vrednoscu atributa spajanja kao s1 (tj. s2 );
procitati sledeci slog s1 datoteke P1 i sledeci slog s2 datoteke P2

232

11 Strukture podataka i pristupne metode

END
UNTIL kraj jedne od datoteka P1 , P2
END.
Spajanje dva skupa slogova sa istom vrednoscu atributa spajanja (poslednji
korak prethodnog algoritma) je spajanje svakog sloga iz prvog skupa sa svakim
slogom iz drugog skupa. To je radnja koja se najcesce izvrsava bar delimicno u
unutrasnjoj memoriji, jer bi inace zahtevala vracanje kroz jedan od skupova, sto
nije karakteristicno za sekvencijalni pristup.
Na primer, u izvrsavanju upita
SELECT NAZIV, K SIF
FROM
I, KI
WHERE I.I SIF = KI.I SIF AND TIRAZ > 3000
pri cemu su obe relacije (I, KI) fizicki organizovane sekvencijalno, prvo bi se sortirala
datoteka podataka (i datoteka promena, ako postoji) relacije I, uz projektovanje
na atribute I SIF, NAZIV, odnosno datoteka podataka relacije KI, uz restrikciju
TIRAZ > 3000 i projekciju na atribute K SIF, I SIF; zatim bi se rezultati ovih
operacija sekvencijalno prirodno spojili uz projekciju na atribute NAZIV, K SIF.
Osim opisanog osnovnog algoritma spajanja sekvencijalnih datoteka prethodnim sortiranjem, moguce je operaciju spajanja izvrsiti i algoritmom ugnjezdenih
petlji. Prema ovom algoritmu, jedna sekvencijalna datoteka se cita jedanput, slog
po slog. Za svaki slog te datoteke citaju se, redom, svi slogovi druge sekvencijalne
datoteke, svaki se poredi sa slogom prve datoteke i, ako ispunjava uslov spajanja,
spaja se sa njim.
Algoritam koji ce se primeniti u konkretnom slucaju bira se na osnovu procene
cene, uzimajuci u obzir ucestalost promena sekvencijalnih datoteka. Ako su datoteke sporopromenljive, tj. ako se veci broj operacija spajanja nad tim da dva azuriranja, cena sortiranja (izracunata po jednom spatotekama izvrsi izmedu
svaka dva spajanja sadrzaj
janju) je opravdana i prihvatljiva. Ako se pak izmedu
relacija promeni, sortiranje moze biti neopravdano skupa operacija.

Prednost uredene
varijante u izvrsavanju dvorelacionih (i viserelacionih) upita
postoji samo u slucaju da je atribut spajanja bas atribut sortiranja bar jedne od
relacija koje ucestvuju u tom upitu, jer ta relacija ne prolazi kroz korak sortiranja.
Moze se zakljuciti da su u slucaju sekvencijalne reprezentacije potrebna cesta

sortiranja, cak i kada se radi o uredenoj


varijanti, s obzirom da je u njoj jedan od
atributa privilegovan.

11.4 Indeks-sekvencijalna organizacija

11.4

233

Indeks-sekvencijalna organizacija

Indeks-sekvencijalna organizacija podrazumeva reprezentaciju podataka koju


karakterise, sa jedne strane, sortiranost datoteke podataka po primarnom kljucu
i mogucnost sekvencijalnog pristupa slogovima u poretku primarnog kljuca, a
sa druge strane, postojanje indeksa po primarnom kljucu, koji omogucuje brz
pristup slogu na osnovu vrednosti primarnog kljuca (otuda i naziv indekssekvencijalna). Ove dve bitne karakteristike indeks-sekvencijalne organizacije realizuju se specificnom strukturom indeksa i algoritmima za odrzavanje datoteke
podataka i indeksne datoteke.
Indeks kod ove reprezentacije zadat je datotekom sa slogovima oblika2
(redni-broj-stranice, maksimalna-vrednost-kljuca-u-stranici),
i sortiran je po primarnom kljucu.
Mada svojstvo sekvencijalnog pristupa i sortiranost po jednom atributu ovde

primarnom kljucu, podseca na uredenu


varijantu sekvencijalne organizacije, indekssekvencijalna organizacija primenjuje drugi algoritam unosenja novih slogova, i
time povecava efikasnost pristupa odnosno izbora. Naime, posle pocetnog unosenja
slogova u datoteku podataka (u poretku primarnog kljuca), novi slogovi se unose u stranice datoteke podataka, u poretku primarnog kljuca, ili (kada je odgovarajuca stranica puna) u posebnu datoteku koja se u ovoj organizaciji zove zona
prekoracenja, u oznaci ZP. Poslednji slog u stranici datoteke podataka i svi slogovi
u zoni prekoracenja koji su tamo uneti zbog prekoracenja kapaciteta te stranice datoteke podataka, povezuju se pokazivacima u poretku primarnog kljuca (v. tacku
11.4.1, paragraf Azuriranje, brisanje i unosenje). Tako se pokazivacima realizuje
funkcija
DP P(ZP)
Niz slogova povezanih pokazivacima, od kojih je jedan u datoteci podataka a
ostali u zoni prekoracenja, zove se lanac prekoracenja.
Zbog moguceg produzavanja lanaca prekoracenja, koje znacajno degradira
efikasnost pristupa slogu po vrednosti primarnog kljuca, periodicno se nad ovom
reprezentacijom vrsi reorganizacija, koja objedinjuje datoteku podataka i zonu
prekoracenja u jedinstvenu sortiranu datoteku podataka, a zonu prekoracenja
prazni.
Osim specificne strukture indeksa, za indeks kod indeks-sekvencijalne organi dve
zacije je karakteristicno da je staticki, tj. da se ne menja u periodu izmedu
reorganizacije. Ovaj indeks tek u procesu reorganizacije postaje potpuno azuran i
samo do prve izmene baze potpuno odrazava njeno stanje.
2 Ovakav indeks zove se i redak indeks (engl. nondense), jer u njemu, za razliku od gustog
indeksa (v. slede
cu glavu), nisu prisutne sve vrednosti atributa indeksiranja.

234

11 Strukture podataka i pristupne metode

Mada indeksna datoteka ima mnogo manje slogova, a slogovi manje polja nego
datoteka podataka, i za njeno sekvencijalno pretrazivanje potrebno je vreme koje
moze da postane nezanemarljivo. Zbog toga je pozeljno i nad indeksnom datotekom
imati indeks koji bi omogucio efikasni pristup slogu (odnosno stranici) u indeksnoj datoteci. Poboljsanje efikasnosti indeks-sekvencijalne reprezentacije postize se
fizickim grupisanjem delova (stranica) datoteke podataka, zone prekoracenja i indeksne datoteke, pri cemu se deo indeksa u grupi, koji se odnosi na stranice datoteke
podataka i zone prekoracenja u grupi, zove indeks grupe. Grupe se obicno realizuju
po cilindrima diska. Pored indeksa grupa, postoji i glavni indeks (glavna indeksna
datoteka) koji sadrzi parove oblika

(redni-broj-grupe, maksimalna-vrednost-kljuca-u-grupi)

11.4 Indeks-sekvencijalna organizacija

235

(slika 11.4; GI je oznaka za glavni indeks; IG1 IGk su indeksi grupa G1 Gk ;


DP je datoteka podataka; ZP je zona prekoracenja, a njeni delovi koji pripadaju
grupama G1 Gk su ZP1 ZPk ; redni brojevi grupa odnosno stranica u indeksu su,
radi preglednosti, predstavljeni pokazivacima; pk je oznaka za vrednost primarnog
kljuca).
IG1

DP
..
.

7
pkmax12 .
..

str11

..
.

..
.

IGk
pkmaxk . XXX
X
X
z pk

maxk
1

..
.

str12

pkmax1 .
..
.

ZP1 :

G1 :
-

GI

ZP

..
.

..
.

Gk : strk1

ZPk :

strk2
..
.

?
-

Slika 11.4: Glavni indeks i indeksi grupa kod indeks-sekvencijalne reprezentacije

11.4.1

Efikasnost izvr
savanja jednorelacionih upita

Pretra
zivanje.
Izbor pojedinacnog sloga u ovoj reprezentaciji efikasna je operacija samo u slucaju izbora po primarnom kljucu, inace indeks nije od koristi. U
slucaju izbora po primarnom kljucu, izbor se sastoji od sledecih radnji:
pretraziti glavni indeks; naci slog sa najmanjom vrednoscu primarnog kljuca

koja nije manja od vrednosti primarnog kljuca koja se trazi; iz nadenog


sloga
procitati redni broj grupe;
pretraziti indeks grupe; naci slog sa najmanjom vrednoscu primarnog kljuca

koja nije manja od vrednosti primarnog kljuca koja se trazi; iz nadenog


sloga
procitati redni broj stranice;
procitati stranicu iz datoteke podataka i naci trazeni slog ako je na njoj;
eventualno procitati jednu ili vise stranica iz zone prekoracenja (prateci
do trazenog sloga ili uspokazivace u lancu prekoracenja), dok se ne dode
tanovi da ga nema.

236

11 Strukture podataka i pristupne metode

Od velicine glavnog indeksa i indeksa grupe zavisi broj stranica koje treba
do stranice u datoteci podataka. Od duzine lanaca
procitati dok se ne dode
prekoracenja zavisi broj stranica koje treba procitati od stranice datoteke podataka
do stranice u zoni prekoracenja koja sadrzi trazeni slog. Indeks je sortiran ali se
pretrazuje sekvencijalno, pa vreme pretrazivanja indeksa (uspesnog ili neuspesnog)
jeste 12 t Bs, gde je Bs broj stranica indeksa (glavnog odnosno indeksa grupe),
a t vreme citanja (odnosno upisa) proizvoljne stranice na disku.
Obrada svih slogova (ili velike grupe njih) u proizvoljnom redosledu ne zahteva
upotrebu indeksa i odvija se po odgovarajucem algoritmu grupne obrade sekvencijalne datoteke.
Obrada svih slogova u redosledu primarnog kljuca je efikasna (bez upotrebe indeksa), dok se u slucaju redosleda po bilo kom drugom atributu zahteva sortiranje
datoteke podataka i zone prekoracenja u redosledu tog atributa. Obrada svih slo
gova u redosledu primarnog kljuca je efikasnija nego kod uredene
varijante sekvencijalne reprezentacije, jer su i slogovi u zoni prekoracenja povezani pokazivacima sa
odgovarajucim slogovima iz datoteke podataka.
Posebno karakteristican za ovu reprezentaciju je algoritam restrikcije tipa intervala, koji predstavlja puni izraz efikasnosti ove reprezentacije, s obzirom da koristi
oba njena koncepta sadrzana u nazivu: indeks i sekvencijalnost. Ovaj algoritam je
kombinacija izbora pojedinacnog (tj. prvog iz intervala) sloga uz pomoc indeksa,
i sekvencijalnog pretrazivanja datoteke podataka i zone prekoracenja po algoritmu
grupne obrade. Da bi se izbor pojedinacnog sloga mogao izvrsiti pomocu indeksa,
potrebno je da uslov restrikcije bude zadat nad primarnim kljucem relacije.
Primer upita tipa intervalne restrikcije je: izdati nazive i statuse jugoslovenskih
izdavaca sa sifrom od i500 do i1000. U SQL-u upit se moze izraziti SELECT
upitnim blokom
SELECT NAZIV, STATUS
FROM I
WHERE I SIF >= i500 AND I SIF <= i1000 AND DRZAVA

= Jugoslavija

Restrikcija tipa intervala, uz projektovanje na izlazne atribute, kod indekssekvencijalne reprezentacije sastoji se iz dva koraka. Prvi je pronalazenje (po indeksu) sloga sa najmanjom vrednoscu primarnog kljuca koja nije manja od donje
granice intervala. Drugi je sekvencijalna obrada svih slogova sa vrednoscu primarnog kljuca koja je manja ili jednaka gornjoj granici intervala; obrada sloga
ukljucuje proveru ostalih uslova restrikcije i, ukoliko su ispunjeni, projekciju na
izlazne atribute.

11.4 Indeks-sekvencijalna organizacija

237

A
zuriranje, brisanje i uno
senje.
Operacija brisanja se sastoji od izbora
i obelezavanja sloga nevazecim, jer se slog, zbog indeksa i lanaca prekoracenja,
fizicki ne izbacuje.
Novi slog se unosi na odgovarajuce mesto u sortirani niz slogova, u stranicu
datoteke podataka ili u lanac prekoracenja zone prekoracenja. Zbog unosenja sloga
u punu stranicu datoteke podataka moze se dogoditi da slog sa prethodno najvecom
vrednoscu primarnog kljuca (koja je i u indeksu pridruzena stranici) bude premesten
iz stranice datoteke podataka u zonu prekoracenja.
Operacija unosenja sastoji se od sledecih radnji:
pronaci stranicu datoteke podataka u koju treba uneti slog (pretrazivanjem
glavnog indeksa i indeksa grupe, kao kod operacije pretrazivanja);
AKO je vrednost primarnog kljuca sloga koji se unosi veca od najvece vrednosti primarnog kljuca u stranici, ONDA
1. upisati slog u prvu nepopunjenu stranicu zone prekoracenja;
2. pretraziti niz stranica zone prekoracenja iste grupe, preko lanca prekoracenja, radi lociranja sloga prethodnika po vrednosti primarnog kljuca;
3. u novi slog postaviti pokazivac na slog na koji pokazuje locirani slog
prethodnik;
4. u slog prethodnik postaviti pokazivac na novi upisani slog;

INACE
1. sortirati slogove stranice datoteke podataka zajedno sa slogom koji se
unosi;
2. upisati sortirani sadrzaj stranice u datoteku podataka;
3. AKO je doslo do prekoracenja kapaciteta stranice, ONDA
uneti slog koji je izazvao prekoracenje u prvu nepopunjenu stranicu zone prekoracenja iste grupe;
poslednjeg sloga u
povezati ga u lanac prekoracenja, izmedu
stranici datoteke podataka i sloga na koji je prethodno pokazivao poslednji slog u stranici datoteke podataka.
Vrednosti atributa koji nisu u primarnom kljucu azuriraju se izborom sloga
i izmenom vrednosti u samom slogu u datoteci podataka ili zoni prekoracenja.
Vrednost primarnog kljuca se azurira kao dvoetapna operacija brisanja sloga koji
se azurira (tj. njegovog obelezavanja nevazecim) i unosenja novog sloga u zonu
prekoracenja, uz uvezivanje u odgovarajuci lanac prekoracenja.
Kada se prepuni zona prekoracenja ili kada se zbog obelezenih a neizbacenih
slogova, ili predugih lanaca prekoracenja, suvise degradira efikasnost organizacije,
vrsi se reorganizacija. Ona se odvija bez koriscenja indeksa, a sortirana (DP, ZP)
datoteka postaje nova DP datoteka. Kreira se nova indeksna datoteka, a zona
prekoracenja postaje prazna.

238

11 Strukture podataka i pristupne metode

11.4.2

Izvr
savanje vi
serelacionih upita

Kljucna operacija kod algoritama izvrsavanja viserelacionih upita je operacija spajanja, pa je i efikasnost izvrsavanja upita zavisna od efikasnosti izvrsavanja ove
operacije.
Kada se relacije spajaju po primarnim kljucevima relacija u indeks-sekvencijalnoj
reprezentaciji, operacija se izvodi po algoritmu sekvencijalnog prirodnog spajanja

po atributima sortiranja, kao kod uredene


varijante sekvencijalne datoteke (v.
odeljak 11.3)
U slucaju da je u jednoj relaciji sa indeks-sekvencijalnom reprezentacijom
atribut spajanja primarni kljuc a da u drugoj nije, relacije se spajaju prema algoritmu indeksnog spajanja koji ce biti izlozen u okviru glave o indeksnoj organizaciji
(v. odeljak 12.2)
Ako se spajanje relacija (fizicki organizovanih indeks-sekvencijalno) vrsi po
atributima koji nisu primarni kljuc ni u jednoj relaciji, indeksi nisu od koristi,

pa se spajanje izvodi kao kod neuredene


varijante sekvencijalne organizacije.

11.5

Pitanja i zadaci

1. Definisati sledece pojmove:


unutrasnji nivo ANSI arhitekture
fizicki slog
datoteka
stranicni skup
stranica

spoljasnje sortiranje
fizicka reprezentacija podataka
fizicka organizacija podataka
sekvencijalna organizacija
indeks-sekvencijalna organizacija

2. Opisati softverske komponente koje ucestvuju u pristupu podacima u bazi


podataka.
3. Proceniti vremensku slozenost algoritama koji ulaze u sastav algoritma
spoljasnjeg sortiranja balansiranim spajanjem.
4. Implementirati u programskom jeziku algoritam spoljasnjeg sortiranja balansiranim spajanjem.
5. Kako se izvrsavaju jednorelacioni upiti nad sekvencijalnom reprezentacijom?
6. Opisati algoritam sekvencijalnog prirodnog spajanja po atributima sortiranja
i proceniti njegovu vremensku slozenost.
7. Koje su glavne karakteristike indeks-sekvencijalne reprezentacije?
8. Opisati postupak pretrazivanja kod indeks-sekvencijalne reprezentacije.

11.5 Pitanja i zadaci

239

9. Opisati postupak unosenja novog sloga kod indeks-sekvencijalne reprezentacije.


10. Implementirati u programskom jeziku algoritam unosenja kod indeks-sekvencijalne reprezentacije.
11. Sekvencijalna reprezentacija je cesto zadovoljavajuca fizicka reprezentacija
podataka u bazi podataka. Za koju vrstu upita su algoritmi obrade sekvencijalne reprezentacije efikasniji od algoritama obrade indeks-sekvencijalne
reprezentacije?
12. Za koje vrste upita je indeks-sekvencijalna organizacija efikasnija od sekvencijalne? Navesti primere.
13. Indeks kod indeks-sekvencijalne reprezentacije moguce je izgraditi i kao
skup parova oblika
ureden
(redni-broj-stranice, minimalna-vrednost-kljuca-u-stranici).
Kako bi se u tom slucaju modifikovali algoritmi pretrazivanja i unosenja nad
ovom reprezentacijom?

12

Indeksna organizacija
Indeksna organizacija dobila je ime po pristupnoj datoteci u sastavu fizicke
reprezentacije indeksu. Nad jednom relacijom (na fizickom nivou nad datotekom
podataka) moze da postoji jedan ili vise indeksa. Indeksi imaju specificnu strukturu i karakteristike u odnosu na indeks kod indeks-sekvencijalne reprezentacije.
ove dve vrste indeksa je u tome sto su u ovom indeksu
Osnovna razlika izmedu
za razliku
prisutne sve vrednosti atributa nad kojim se gradi indeks.1 Takode,
od statickog indeksa kod indeks-sekvencijalne reprezentacije, indeks kod indeksne
reprezentacije je dinamicki i neposredno odrazava sve promene nad datotekom
podataka.
Logicki, indeks I nad atributom (ili skupom atributa) A relacije R u indeksnoj
reprezentaciji ostvaruje preslikavanje
dom(A) P(R)
(fizicka organizacija indeksa bice opisana u odeljku 12.3). Atribut A zove se atribut
indeksiranja.2
Indeksna organizacija je, zbog efikasnosti pristupa po raznim grupama atributa,
najzastupljenija fizicka organizacija relacija u svim sistemima za upravljanje
bazama podataka.
indeksima izgradenim

Medu
nad jednom datotekom podataka, najvise jedan in nad atributom
deks moze biti grupisuci (engl. clustering), sto znaci da je izgraden

po kome su uredeni
fizicki slogovi datoteke podataka, kao kod indeks-sekvencijalne
reprezentacije. Ostali indeksi su obicni, negrupisuci, i po njima je moguc efikasan
1 Ovakav

indeks zove se i gust indeks (engl. dense).


logi
ckom nivou indeks se definise nad atributom (ili skupom atributa) indeksiranja neke

relacije, u cilju efikasnog pristupa n-torkama te relacije; na fizi


ckom nivou indeks je izgraden
nad fizi
ckim poljem indeksiranja (koje odgovara atributu indeksiranja) odgovaraju
ce datoteke
podataka, i koristi se za efikasan pristup fizi
ckim slogovima; u kontekstu u kome razgrani
cenje
nivoa nije bitno, parovi odgovaraju
cih termina (atribut indeksiranja, polje indeksiranja) i (relacija,
datoteka podataka) upotrebljavaju se u sinonimnom zna
cenju.
2 Na

240

12.1 Efikasnost izvrsavanja jednorelacionih upita

241

nad primarnim kljucem.


pristup slogovima. Grupisuci indeks ne mora biti izgraden
To je privilegovan indeks, omogucuje vrlo efikasnu obradu (restrikciju, spajanje)

koja ukljucuje atribut indeksiranja, i izgraduje


se u slucaju da je takva obrada
relacije najcesca (v. sliku 12.1; grupisuci indeks (GI) i jedan negrupisuci indeks

(NGI) izgradeni
su nad atributom K SIF, odnosno atributom TIRAZ datoteke po
dataka (DP) relacije KI). Odrzavanje fizickog uredenja
u slucaju grupisuceg indeksa
zahteva, kao kod indeks-sekvencijalne reprezentacije, koriscenje posebne datoteke
zone prekoracenja za unosenje elemenata posle pocetnog sortiranja datoteke po
dataka po atributu indeksiranja. Medutim,
za razliku od indeks-sekvencijalne organizacije, indeks kod indeksne organizacije omogucuje neposredan pristup svakom
od slogova (odnosno svakoj stranici) i iz zone prekoracenja, bez koriscenja lanaca
prekoracenja.
GI
K SIF
k1
k2
k3
k4
k5
k6

DP (KI)

.
.
.
.
.
. XX

NGI

K SIF
. . . TIRAZ
TIRAZ
. 3000
k1
10000 b
b

. 5000
`b
k2
7000 `
`b
"
`b
``

"
`
` . 7000

``` b
k3
10000 `
"b

`
"``

b
`
. 10000
"
k4
10000 "

"
k5
5000 "

k6
3000
XX
XXX k6

5000
X
Grupisuci (GI) i negrupisuci (NGI) indeks
Slika 12.1: Indeksna reprezentacija

Ako postoji indeks nad primarnim kljucem PK relacije R, onda on (logicki)


realizuje preslikavanje dom(PK) R. Isti je slucaj i sa bilo kojim drugim indeksom
cijim razlicitim vrednostima iz domena atributa indeksiranja odgovaraju razlicite
n-torke relacije (tzv. jedinstveni indeks).

12.1

Efikasnost izvr
savanja jednorelacionih upita

12.1.1

Pretra
zivanje

Indeks kod indeksne reprezentacije moze se koristiti samo za pristup slogovima


po vrednosti atributa indeksiranja (inace je pristup sekvencijalan). Indeksna
reprezentacija relacije efikasna je samo u slucaju izbora pojedinacnog sloga, dok
je u slucaju obrade svih (ili velike grupe) slogova, u bilo kom redosledu, sekvencijalni pristup slogovima efikasniji nego pristup preko indeksa.

242

12 Indeksna organizacija

Kako operacija restrikcije vrsi izbor jednog ili grupe slogova po vrednosti
atributa, efikasnost ove operacije u slucaju indeksne reprezentacije zavisi od tipa
restrikcije i od atributa po kojima postoje indeksi. Tip restrikcije ukazuje na
kolicinu slogova ciji se izbor vrsi tom restrikcijom, i moze biti intervalna (po uslovu
{<, <=, >, >=}) ili specificna (po uslovu =).
Primer 12.1 Upit kojim se iz relacije P (pisac) dobijaju imena jugoslovenskih
pisaca sa vise od 10 naslova, moze se SQL-om izraziti kao:
SELECT IME
FROM
P
WHERE DRZAVA = Jugoslavija AND BR NASLOVA > 10
indeks po atributu DRZAVA,
Ako je nad datotekom podataka relacije P izgraden
prethodna restrikcija ce se izvrsiti kao izbor svih slogova sa vrednoscu atributa
DRZAVA = Jugoslavija, za kojim sledi provera intervala za atribut BR NASLOVA.
Dakle, potrebno je pretraziti indeks da bi se dobio skup svih rednih brojeva stranica
na kojima su slogovi cija je vrednost atributa DRZAVA Jugoslavija. U slucaju
da je indeks negrupisuci, moze se pretpostaviti da je svaki takav slog na posebnoj
stranici; ako je broj takvih slogova (i stranica) veliki, ovakva restrikcija je skupa
operacija. Ako je indeks grupisuci, svi slogovi (bar iz datoteke podataka) sa istom
vrednoscu atributa DRZAVA nalaze se zajedno na stranici ili susednim stranicama,
pa je pristup znatno efikasniji.
Ako nad relacijom P postoji indeks po atributu BR NASLOVA, a ne postoji indeks po atributu DRZAVA, upotreba indeksa je dobra samo ako je indeks grupisuci.
Indeks se koristi za nalazenje prvog sloga iz odgovarajuce datoteke podataka, sa
vrednoscu atributa BR NASLOVA vecom od 10, a zatim se pretrazivanje datoteke
podataka nastavlja sekvencijalno (sa lancima prekoracenja u zoni prekoracenja) do
kraja. Restrikcija se u ovom slucaju izvodi prema algoritmu intervalne restrikcije
kao kod indeks-sekvencijalne organizacije.
Ako nad relacijom P nema nijednog od ovih indeksa, pretrazuju se svi slogovi
datoteka DP i ZP, uz ispitivanje uslova restrikcije za svaki slog.

12.1.2

A
zuriranje, uno
senje i brisanje

Unosenje sloga pri indeksnoj organizaciji u slucaju da nad datotekom podataka


postoji grupisuci indeks razlikuje se od slucaja kada su svi indeksi negrupisuci.
Ako postoji grupisuci indeks, unosenje se sastoji od sledecih koraka:
1. novi slog se unosi u prvu slobodnu stranicu zone prekoracenja;
2. pretrazivanjem grupisuceg indeksa pronalazi se element podataka par (vrednost atributa indeksiranja, {redni broj stranice}), koji se odnosi na slog sa
istom ili prvom manjom vrednoscu atributa indeksiranja od odgovarajuce
vrednosti unetog sloga;

12.1 Efikasnost izvrsavanja jednorelacionih upita

243

3. ako vrednost atributa indeksiranja u indeksu vec postoji, dodaje se broj stra
nice novog unetog sloga skupu brojeva stranica u nadenom
elementu podataka; u suprotnom, unosi se u indeks novi element podataka koji se odnosi
na novi uneti slog (v. odeljak 12.3, Struktura indeksa);
4. novi slog se uvezuje u odgovarajuci lanac prekoracenja (kao kod indekssekvencijalne organizacije) iza poslednjeg sloga sa istom (ili prvom manjom)
vrednoscu atributa indeksiranja (njegova adresa je dobijena u koraku 2);
5. pretrazivanjem svakog od negrupisucih indeksa pronalazi se mesto za upis
novog elementa podataka (kao u koraku 2), i element podataka (ili samo
redni broj stranice zone prekoracenja) se tamo upisuje.
U slucaju da ne postoji grupisuci indeks, nema ni zone prekoracenja, vec je
datoteka podataka jedina koja sadrzi fizicke slogove koji odgovaraju n-torkama
relacije; unosenje novog sloga u tom slucaju sastoji se od upisa novog sloga u
datoteku podataka (odgovara koraku 1 prethodnog postupka) i upisa odgovarajuceg
elementa podataka u svaki od negrupisucih indeksa (korak 5).
Brisanje sloga (slogova) sa zadatom vrednoscu nekog atributa sastoji se od
sledecih radnji:
1. nalazenje sloga (preko indeksa, ako postoji nad datim atributom, ili sekvencijalnim pretrazivanjem);
2. obelezavanje sloga nevazecim ili fizicko brisanje sloga sa uklanjanjem sloga iz
odgovarajuceg lanca prekoracenja (u slucaju postojanja grupisuceg indeksa);
3. za svaki postojeci indeks nad datotekom podataka, brisanje sloga koji se
odnosi na slog izbrisan iz datoteke podataka, uz dodatne neophodne izmene
na indeksnim datotekama.
Azuriranje sloga sastoji se od sledecih radnji:
1. nalazenje sloga (najbolje preko grupisuceg indeksa, ali moze i preko nekog
drugog indeksa);
2. azuriranje sloga i upis azurirane stranice (ako atribut indeksiranja grupisuceg
indeksa nije azuriran), odnosno obelezavanje sloga nevazecim i upis novog
sloga sa azuriranim atributima (ako se azurira i atribut indeksiranja
grupisuceg indeksa);
3. za svaki indeks, odgovarajuce azuriranje indeksa.

244

12.2

12 Indeksna organizacija

Izvr
savanje vi
serelacionih upita

Algoritmi izvrsavanja dvorelacionih, pa i viserelacionih upita koji se na njima zasnivaju, zavise od pristupnih indeksnih datoteka nad relacijama koje ucestvuju u
upitu.
Primer 12.2 Za relacije P i KP (pisac i autor, glava 1), upit naci imena svih
jugoslovenskih pisaca koji se pojavljuju kao drugi autor neke knjige, koji se u
SQL-u izrazava kao SELECT blok
SELECT IME
FROM
P, KP
WHERE P.P SIF = KP.P SIF AND P.DRZAVA = Jugoslavija
AND KP.R BROJ = 2
izvrsice se na razne nacine za razlicite indekse nad relacijama P i KP. Tako, ako
postoje indeksi po atributima specificne restrikcije P.DRZAVA i KP.R BROJ,
a ne postoje indeksi po atributima spajanja P SIF ni u jednoj relaciji, upit se
izvrsava tako sto se prvo vrsi indeksna restrikcija (relacije P po uslovu P.DRZAVA
= Jugoslavija i relacije KP po uslovu KP.R BROJ = 2), a zatim sortiranje (ako
je potrebno) uz preostale restrikcije, i sekvencijalno prirodno spajanje (po P SIF)
dobijenih sortiranih datoteka, uz projektovanje na atribute projekcije (IME).
Ako pak postoji indeks po atributu specificne restrikcije jedne relacije (npr.
po atributu P.DRZAVA) i indeks po atributu spajanja druge relacije (npr. po
atributu KP.P SIF), onda se upit izvrsava u dva koraka. U prvom koraku izvrsava
se indeksna restrikcija (relacije P po uslovu P.DRZAVA = Jugoslavija). U drugom
koraku datoteka rezultat te restrikcije sekvencijalno se pretrazuje, i svaki njegov
slog, koriscenjem indeksa po atributu spajanja druge relacije (KP), spaja se sa
odgovarajucim n-torkama te druge relacije, tj. sa slogovima odgovarajuce datoteke.
U drugom koraku izvode se i preostale restrikcije (npr. relacije KP po uslovu
KP.R BROJ = 2), kao i projekcija na atribute projekcije (IME).
Spajanje koje je opisano prethodnim postupkom zove se indeksno spajanje. Objasnimo njegov algoritam nesto detaljnije.
Indeksno spajanje je prirodno spajanje dve datoteke koje odgovaraju dvema
relacijama, od kojih jedna (npr. prva) ima indeks po atributu spajanja. Fizicko
polje slogova datoteke, koje odgovara atributu spajanja, zvacemo polje spajanja.
Datoteke se spajaju tako sto se druga datoteka cita sekvencijalno, i za svaki njen
slog, tj. njegovu vrednost polja spajanja, pristupa se, koriscenjem indeksa, slogovima prve datoteke koji imaju istu vrednost polja spajanja kao slog iz druge datoteke.
Slog druge i odgovarajuci slogovi prve datoteke se spajaju.

12.3

Struktura indeksa

Indeks nad atributom (ili skupom atributa) A relacije R u indeksnoj reprezentaciji


fizicki je predstavljen datotekom ID cije stranice obrazuju strukturu drveta ([55]).

12.3 Struktura indeksa

245

Listovi tog drveta su stranice koje sadrze skupove slogova sortiranih po vrednostima iz domena atributa indeksiranja. Ovakva struktura cini pretrazivanje indeksa
maksimalno efikasnom radnjom.
Struktura indeksnog drveta ciji su cvorovi stranice, vrlo je specificna, kao
i struktura i druga svojstva samih stranica. Zato cemo prvo podsetiti na opstu
definiciju strukture grafa i drveta kao specificne strukture grafa, a zatim cemo
uvesti definicije specificnih struktura drveta, i posebno B-drveta kao jedne fizicke
reprezentacije indeksa.

par (A, r), gde je A konacni


Definicija 12.1 (Graf ) Usmereni graf je uredeni
skup a r binarna relacija nad skupom A. Elemente skupa A zovemo cvorovi,
a elemente skupa r potezi. Ako je (ai , aj ) r poteg, kaze se da je cvor ai
neposredni prethodnik cvora aj , a da je cvor aj neposredni sledbenik cvora ai ;
cvor ai je izlazni cvor potega (ai , aj ), a cvor aj je ulazni cvor potega
takode,
(ai , aj ). Ulazni red cvora ai je broj potega kojima je taj cvor ulazni cvor, a
izlazni red cvora ai je broj potega kojima je taj cvor izlazni cvor. Putanja duzine
n od cvora ai do cvora ak u grafu je niz cvorova (ai , ai+1 , . . . , ai+n ), takvih da je
ai+n = ak i (aj , aj+1 ) r za svako j = i, i + 1, . . . , i + n 1. Putanja od cvora ai
do cvora ak , duzine vece od 1, za koju vazi da je ai = ak , zove se ciklus.
Definicija 12.2 (Drvo) Graf je drvo ako zadovoljava sledece uslove:
ulazni red svakog cvora (osim jednog) je 1;
ulazni red jednog cvora je 0, i taj cvor se zove koren drveta;
izlazni red svakog cvora je 0 i konacan;
graf ne sadrzi cikluse.
Pri tome,
cvorovi bez neposrednih sledbenika zovu se listovi drveta (izlazni red svakog
lista je 0);
visina drveta je maksimalna duzina putanje od korena do nekog lista drveta.

Posebno pozeljna osobina drveta, kada je u pitanju efikasnost njegovog pretrazivanja, jeste balansiranost koja oznacava da je duzina puta od korena do svakog
lista jednaka. Jedna specificna struktura balansiranog drveta, poznata kao B-drvo,
posluzila je kao osnov za izgradnju niza struktura podataka koje se koriste u implementaciji indeksa. U daljem tekstu bice izlozena struktura B-drveta kao i osnovni
algoritmi za unosenje u B-drvo i pretrazivanje B-drveta.

246

12 Indeksna organizacija

Definicija 12.3 (B-drvo) B-drvo je balansirano drvo sa sledecim dvema grupama


karakteristika:
I struktura drveta:
cvorovi drveta su stranice;
visina balansiranog drveta je h 0;
svaka stranica, osim korena i listova, ima najmanje n + 1 neposrednih sledbenika (n > 0); koren je ili list ili ima najmanje dva neposredna sledbenika;
svaka stranica ima najvise 2n + 1 neposrednih sledbenika.
II struktura stranice cvora drveta:
svaka stranica koja nije list predstavlja niz
(p0 , (k1 , p1 ), (k2 , p2 ), . . . , (km , pm )),

gde je uredeni
par (ki , pi ) indeksni element, koji se sastoji od vrednosti iz
domena atributa indeksiranja (ki ) i pokazivaca na stranicu neposrednog sledbenika (pi ), i = 1, 2, . . . , m. Pokazivac na stranicu neposrednog sledbenika
je i p0 ;
svaka stranica koja nije list, osim korena, ima najmanje n indeksnih elemenata, a koren koji nije list najmanje jedan. Svaka stranica koja nije list ima
najvise 2n indeksnih elemenata;
za svaku vrednost ki iz indeksnog elementa vazi sledece: pokazivac koji joj
prethodi (pi1 ) pokazuje na poddrvo u kome za svaku vrednost kj iz domena
atributa indeksiranja vazi kj ki ; pokazivac koji za njom sledi (pi ) pokazuje
na poddrvo u kome za svaku vrednost kj iz domena atributa indeksiranja vazi
kj > k i ;
stranice listovi sadrze niz elemenata podataka parova oblika (ki , di ), gde
su ki kao i u indeksnom elementu, a di pridruzeni podaci. Na primer, di
moze biti skup adresa slogova sa vrednoscu atributa indeksiranja ki (ili skup
rednih brojeva stranica na kojima su ti slogovi). List sadrzi najmanje n0 , a
najvise 2n0 (n0 > 0) elemenata podataka;
elementi stranice (indeksni i elementi podataka) sortirani su u rastucem redosledu vrednosti iz domena atributa indeksiranja.
Na primer, za h = 2, n = 2, n0 = 1, graficki izgled jednog B-drveta predstavljen
je slikom 12.2.
Osnovne radnje nad indeksom su:

12.3 Struktura indeksa

247

10 .
@

@
@
@
R

. 4 . 7 .
@

. 17 . 25 .

2 d01 4 d02

5 d001 7 d002

@
R
@

000
9 d000
1 10 d2

iv
13 div
1 17 d2

@
@
@
@
R

19 . . . 25 . . . 27 . . . 29 . . .

Slika 12.2: Primer B-drveta

pretrazivanje indeksa: pronalazenje podataka d (npr. adresa slogova) koji


odgovaraju datoj vrednosti atributa indeksiranja k;

unosenje u indeks (odnosno brisanje i azuriranje): dodavanje para (k, d) indeksu (odnosno uklanjanje iz indeksa, izmena); d je podatak koji odgovara
datoj vrednosti k iz domena atributa indeksiranja.

Ove radnje ne obavlja korisnik baze podataka, vec su one ugradene


u algoritme
koje SUBP primenjuje u obradi podataka.

12.3.1

Pretra
zivanje indeksa

Ako je indeks predstavljen strukturom B-drveta, onda se trazeni podatak nalazi


u stranici listu do kojeg se dolazi putanjom preko odgovarajucih indeksnih elemenata; podatak koji treba da se unese, unosi se u stranicu list, pri cemu se
unose (ili modifikuju) i indeksni elementi koji leze na putanji koja vodi do tog lista.
Algoritam pretrazivanja indeksa opisuje se sledecim pseudoprogramom.

248

12 Indeksna organizacija

Pretra
zivanje indeksa
ulaz: vrednost k iz domena atributa indeksiranja;
izlaz: skup podataka d pridruzen vrednosti k ako par (k, d) postoji u indeksu,
inace poruka u indeksu ne postoji vrednost k;
BEGIN
neka je tekuca stranica koren B-drveta;
WHILE tekuca stranica nije list DO
BEGIN pretraziti tekucu stranicu;
IF za neko i, k ki , THEN
BEGIN
neka je i0 najmanje takvo i;
tekuca stranica neka je stranica na koju pokazuje pokazivac pi0 1
END
ELSE tekuca stranica neka je stranica na koju pokazuje pokazivac pm
END;
pretraziti list drveta;
par (k, d) THEN rezultat je d
IF pronaden
ELSE poruka u indeksu ne postoji vrednost k
END.
Na primer, ako iz prethodnog drveta treba naci podatak d koji odgovara vrednosti k = 13 atributa indeksiranja, izvrsavanje prethodnog algoritma se odvija kroz
sledece korake:
tekuca stranica je koren;
kako ne postoji i za koje je k(= 13) < ki , tekuca stranica postaje stranica sa
sadrzajem .17.25. jer na nju pokazuje pokazivac pm ( p1 );
kako je na tekucoj stranici k(= 13) < ki za i = 1, tekuca stranica postaje
stranica na koju pokazuje pokazivac pi1 ( p0 ), tj. stranica sa sadrzajem
iv
(13, div
1 ; 17, d2 );
tekuca stranica je list; njenim pretrazivanjem pronalazi se element podataka
iv
savanja algoritma.
par (13, div
1 ), pa je podatak d1 rezultat izvr

12.3.2

Uno
senje u indeks, brisanje i a
zuriranje

B-drvo je dinamicki indeks. U toku azuriranja baze podataka, u njega se podaci


unose i iz njega brisu. Ako je potrebno uneti novi par (k, d) u indeks, koji oznacava

da podatak d odreduje
polozaj slogova sa vrednoscu atributa indeksiranja k, onda se
prethodnim algoritmom locira stranica u indeksu u koju treba uneti novi element
podataka. Ako u toj stranici nema mesta (stranica je maksimalno popunjena),
primenjuje se algoritam cepanja stranice, tj. dodeljivanje nove indeksne stranice

12.3 Struktura indeksa

249

locirane i nove straniB-drvetu i ravnomerna podela elemenata podataka izmedu


ce. Sada treba azurirati stranicu prethodnika unosenjem novog indeksnog elementa
koji se odnosi na novu stranicu, pri cemu sa cepanjem stranica moze da se nastavi
(ako na stranici prethodniku nema mesta za unosenje novog indeksnog elementa).
Cepanje stranice moze da se nastavi sve do korena drveta, kada se povecava visina
drveta. Algoritam unosenja novog elementa podataka moze se naci u [67], [65], [1],

a ovde ce biti ilustrovan primerom. Algoritam obezbeduje


popunjenost stranice od
50% do 100% (u proseku 75%), i podlozan je mnogim prostornim i vremenskim
poboljsanjima.
Primer 12.3 U prethodno B-drvo uneti element podataka (6, d).
Algoritmom pretrazivanja drveta locira se stranica sa sadrzajem (5, d001 ), (7, d002 )
kao stranica na koju treba smestiti novi element podataka. Kako je ta stranica maksimalno popunjena (sadrzi 2n0 elementa podataka, za n0 = 1), stranica se cepa

tako sto se uvodi nova stranica; na staroj stranici ostaju dva (uredena)
elementa
podataka (5, d001 ), (6, d), a na novoj stranici jedan element podataka (7, d002 ). U
opstem slucaju na staroj stranici ostavlja se n0 + 1 (oko 50%) elemenata po se u stranicu prethodnik
dataka, a ostalih n0 se upisuje na novu stranicu. Takode
(stranicu sa sadrzajem .4.7.) dodaje novi indeksni element, pa njen sadrzaj postaje
.4.6.7. Tako se dobija novo B-drvo indeksa, graficki predstavljeno na slici 12.3.

10 .
@

. 4 . 6 . 7 .
@

. 17 . 25 .
@

@
@
R

2 d01 4 d02

000
9 d000
1 10 d2

?
5 d001 6 d

@
@
@
R

iv
13 div
1 17 d2

@
@
@
@
R

19 . . . 25 . . . 27 . . . 29 . . .

?
7 d002

Slika 12.3: Cepanje stranice lista B-drveta

U slucaju da je u prethodnom primeru parametar B-drveta n bio n = 1, stranica


sa sadrzajem .4.7. sadrzi maksimalni broj indeksnih elemenata, 2n. Pri pokusaju

250

12 Indeksna organizacija

da se u tu stranicu unese indeksni element 6. javila bi se potreba za cepanjem i te


stranice. Cepanje stranice koja nije list unekoliko se razlikuje od cepanja stranice
lista, i odvija se po sledecem postupku:
neka je s stranica koja nije list a koja se cepa; u nasem primeru to je
stranica sa sadrzajem .4.7.;
u unutrasnjoj memoriji sortirati skup vrednosti indeksa iz 2n + 1 indeksnog
elementa: 4,6,7;
formirati novu stranicu s0 ; u stranici s ostaviti pokazivac p0 i prvih n indeksnih
elemenata iz sortiranog niza (u nasem primeru .4.); u stranicu s0 uneti (n+1)vi pokazivac (pn+1 ) i indeksne elemente od (n + 2)-og do poslednjeg (u nasem
primeru .7.);
u prethodnika stranice s uneti (n + 1)-vu vrednost (u nasem primeru 6), i
pokazivac p0 na stranicu s0 .
Graficki, unosenje u ovom primeru moze se predstaviti kao na slici 12.4.
. 6 . 10 .

@
R

. 4 .

. 7 .

. 17 . 25 .
@

2 d01 4 d02

000
9 d000
1 10 d2

?
5 d001 6 d

iv
13 div
1 17 d2

@
@
R
@

19 . . . 25 . . . 27 . . . 29 . . .

?
7 d002

Slika 12.4: Cepanje stranice B-drveta koja nije list

Slican postupak se sprovodi u slucaju da je potrebno cepati korenu stranicu.


Tada se visina drveta povecava za 1.
Pri brisanju vrednosti iz indeksa primenjuje se inverzni postupak koji moze
dovesti do spajanja stranica. Vrednost atributa indeksiranja azurira se u indeksu
parom operacija (brisanje, unosenje).

12.4 Pitanja i zadaci

251

Postoje dva problema sa osnovnom strukturom B-drveta, zbog kojih se cesce koriste neke modifikacije te strukture. Jedan problem je nedovoljna popunjenost stranica. Naime, nedovoljno popunjeno indeksno drvo produzuje vreme pretrazivanja,
i zato popunjenost stranice od 75% (u proseku) ne zadovoljava. Resenje ovog
susednih stranica,
problema nalazi se u prelivanju elemenata podataka izmedu
umesto cepanja stranice. Tako se susedne stranice, ako je to moguce, dodatno
popunjavaju, a nova stranica (koja je popunjena samo sa 50%) uvodi se samo kada
je to zaista neophodno.
Drugi problem sa osnovnom strukturom B-drveta je nemogucnost pretrazivanja
datoteke podataka u redosledu vrednosti atributa indeksiranja, a sto je cesto veoma
pozeljno. Modifikacija koja omogucuje ovakvo pretrazivanje je povezivanje stranica listova B-drveta u listu koja odrazava sortiranost atributa indeksiranja,

i obezbeduje
pristup slogovima datoteke podataka po rastucim (ili opadajucim)
vrednostima atributa indeksiranja.

12.4

Pitanja i zadaci

1. Koje su karakteristike indeksa kod indeksne organizacije?


je grupisuci indeks?
2. Sta
3. Opisati postupak unosenja sloga kod indeksne organizacije.
4. Kako se vrsi operacija spajanja kod indeksne organizacije?
5. Napisati pseudoprogram za algoritam restrikcije kod indeksne organizacije.
6. Napisati pseudoprogram za algoritam indeksne restrikcije.
7. Definisati graf, drvo i balansirano drvo.
8. Opisati strukturu B-drveta.
9. Objasniti algoritam pretrazivanja indeksa.
10. Napisati skup programskih procedura za implementaciju algoritma pretrazivanja indeksa. Uvesti neophodne pretpostavke i ogranicenja.
11. Objasniti algoritam unosenja u indeks.
12. Konstruisati algoritam brisanja iz indeksa.
13. Koje su prednosti indeksne organizacije?
14. Koji bi atribut (ili grupa atributa) bio najpogodniji kao atribut indeksiranja
relacije KI (glava 1)? Obrazloziti.

252

12 Indeksna organizacija

15. Neka relacija KI sadrzi 50000 n-torki i neka njen sadrzaj ima sledecu strukturu: u relaciji je 10000 razlicitih knjiga; svaku knjigu izdalo je u proseku 2.5
izdavaca; svaki izdavac izdao je jednu istu knjigu u proseku u po 2 izdanja.
Neka je relacija KI predstavljena indeksnom reprezentacijom sa indeksom
po atributu K SIF, tako da polje K SIF u indeksu zauzima 5 bajtova, koliko zauzima i pokazivac na odgovarajuci slog u datoteci podataka. Neka je
element podataka oblika (K SIF, pokazivac) i neka je velicina stranice 1024
bajta. Izracunati broj stranica indeksa potrebnih za elemente podataka i broj
stranica indeksa potrebnih za indeksne elemente. Izracunati visinu indeksnog
drveta.

13

Direktna organizacija
Potpuno drugaciji pristup fizickoj organizaciji relacije, u odnosu na indekssekvencijalnu i indeksnu organizaciju, predstavlja direktna (hes, rasejana, rasuta)
organizacija (engl. hash).
Odlike direktne organizacije su:
specificnom slogu se pristupa uz pomoc algoritma koji se zove algoritam direktnog pristupa ili hes algoritam

algoritam direktnog pristupa sastoji se u izvodenju


aritmetickih transformacija date vrednosti nekog atributa A (atribut direktnog pristupa, hes atribut),
tj. polja u slogu (polje direktnog pristupa, hes polje), u broj stranice na kojoj
se slog nalazi; tako algoritam direktnog pristupa ostvaruje preslikavanje
H: dom(A) skup-brojeva-stranica
algoritmom direktnog
svaki slog smesta se na stranicu ciji je broj odreden
pristupa; sam broj stranice zove se adresa direktnog pristupa ili hes adresa (ili
samo adresa, u kontekstu u kome se znacenje tog termina moze jednoznacno
razlikovati od fizicke adrese na disku);
jedna relacija moze imati vise indeksnih atributa, ali samo jedan atribut direktnog pristupa.
Na primer, neka je relacija I (I SIF, NAZIV, STATUS DRZAVA) predstavljena
fizicki direktnom reprezentacijom, i neka atribut I SIF uzima vrednosti i100, i200,
i300, i400, i500. Neka je algoritam direktnog pristupa zadat funkcijom (funkcija
direktnog pristupa, hes funkcija)
broj stranice(I SIF) = num (I SIF) mod 13,
253

254

13 Direktna organizacija

gde num oznacava numericki deo vrednosti atributa I SIF, a mod je funkcija
izracunavanja ostatka pri celobrojnom deljenju. Prethodna funkcija proizvodi
sledece brojeve stranica datoteke podataka, u koje ce se upisati slogovi sa navedenim
vrednostima atributa I SIF: 9, 5, 1, 10, 6. Ta hes funkcija je jedna modifikacija
najcesce koriscene hes funkcije, tzv. kolicnik/ostatak hes funkcije: h(v) = v mod
M. Ovom funkcijom se izracunava adresa direktnog pristupa sloga sa vrednoscu hes
atributa v, pri velicini datoteke podataka od M stranica.
Ako se zna da su vrednosti atributa direktnog pristupa razliciti celi brojevi od 1
do N, slog sa vrednoscu atributa direktnog pristupa i mogao bi da se upise na i-tu
stranicu datoteke podataka. Hesiranje (direktna reprezentacija) je uopstenje ovog
postupka kada ne postoji tako specificno znanje o vrednostima atributa direktnog
pristupa. Naime, domen atributa direktnog pristupa po pravilu ima mnogo vise
elemenata od broja stranica u datoteci DP, pa funkcija direktnog pristupa h nije
injektivna, tj. moze biti h(v1 ) = h(v2 ) i za v1 6= v2 . U prethodnom primeru,
ako postoji izdavac sa sifrom I SIF=i1400, broj stranice na koju ce se smestiti
slog sa tom vrednoscu atributa I SIF je 1400 mod 13 = 9, a to je ista stranica na
koju se smesta i slog sa vrednoscu atributa I SIF=i100. Ova pojava kod direktne
reprezentacije zove se kolizija.
Dakle, prvi korak u izgradnji direktne reprezentacije je izracunavanje hes
funkcije koja transformise vrednost atributa direktnog pristupa u broj stranice.
Ne postoji savrsena hes funkcija, i uvek moze da se dogodi da dve ili vise razlicitih
vrednosti atributa direktnog pristupa dovedu do kolizije. Drugi korak u izgradnji
direktne reprezentacije je razresavanje kolizije.
Jedna od metoda razresavanja kolizije koristi povezane liste (ulancavanje) i
pogodna je u nekim dinamickim situacijama kada broj razlicitih vrednosti atributa
direktnog pristupa nije poznat unapred. U nasem primeru, ako na stranici 9 ima
mesta za oba sloga, oni ce se tamo upisati bez problema. Ako nema mesta na
stranici (npr. svaki slog zauzima celu stranicu), bira se prva slobodna stranica
pomocne datoteke zone prekoracenja (u ovom slucaju stranica broj 13), tamo se
upisuje slog i povezuje se pokazivacem sa stranicom datoteke podataka ciji je broj
dupliran (u nasem primeru sa stranicom 9). Dalji slogovi sa istom adresom
ulancavaju se kao kod indeks-sekvencijalne datoteke.
Direktna reprezentacija je dobar primer nagodbe oko prostora i vremena. Ako
nema ogranicenja memorije (velicine datoteke podataka), onda svako pojedinacno
pretrazivanje sloga moze da se izvede u jednom koraku, koriscenjem vrednosti
atributa direktnog pristupa kao adrese (hes funkcija h je identitet). Kada ne bi
bilo vremenskog ogranicenja, mogla bi se primeniti sekvencijalna reprezentacija
uz koriscenje minimuma memorije. Direktna reprezentacija omogucuje upotrebu
razumne kolicine prostora i vremena. Osnovni princip metode hesiranja je efikasno
koriscenje raspolozive memorije i brz pristup memoriji.
Tako se, koriscenjem hes atributa I SIF relacije I, efikasno izvrsavaju upiti sa
specificnom restrikcijom oblika

13.1 Funkcija direktnog pristupa

255

SELECT *
FROM
I
WHERE I SIF = i2000
dok se taj hes atribut ne moze iskoristiti u upitima sa intervalnom restrikcijom
oblika
SELECT *
FROM
I
WHERE I SIF > i500
Da bi se smanjila frekvencija kolizije (u slucaju da se ostavi mali broj stranica),
a i da bi se smanjilo nepotrebno trosenje stranica (kada se ostavi mnogo stranica),
obicno se za smestaj slogova ostavlja oko 20% vise prostora u datoteci podataka i
zoni prekoracenja, nego sto je to potrebno s obzirom na broj i velicinu slogova.
Metode direktne reprezentacije i direktnog pristupa, bilo da se odnose na trajne
strukture kao sto su spoljasnje datoteke baza podataka, ili na memorijske strukture kao sto su razne vrste tabela i njihovo efikasno pretrazivanje, dosta dobro su
istrazene, ukljucujuci oba problema: hes funkcije i metode razresavanja kolizije. U
sledecim odeljcima bice vise reci o ovim problemima i njihovom resavanju.

13.1

Funkcija direktnog pristupa

Kod direktne fizicke organizacije relacija, definisanje i izracunavanje funkcije direktnog pristupa predstavlja prvi problem realizacije ove organizacije. Funkcija
treba da transformise vrednosti atributa direktnog pristupa (obicno cele brojeve
ili kratke niske znakova) u cele brojeve iz intervala 0..M1, gde je M broj stranica
datoteke podataka. Problem sa hes funkcijom je u tome sto ona treba da preslika
veliki domen mogucih vrednosti hes atributa u mali skup brojeva stranica. Pri
tome kolizija treba da se izbegne ili da se minimizuje.
Nalazenje idealne hes funkcije bez kolizije, cak i kada ona teorijski postoji,
vrlo je tezak posao. Na primer, ako imamo trideset slogova sa jedinstvenim vred i ako na jednu stranicu moze da stane tacno jedan slog a na
nostima polja KLJUC,
raspolaganju je 40 stranica datoteke podataka (40 raznih adresa), onda ima 4030
nacina da se izracunaju adrese tih 30 slogova, tj. ima 4030 razlicitih hes funkcija.
Od tog broja, samo 40 39 11 = 40!
cite adrese za razlicite
10! funkcija daje razli
Dakle, jedna od oko 10 miliona funkcija je idealna
vrednosti hes polja KLJUC.
i ne proizvodi koliziju. Zbog toga se dobrom hes funkcijom smatra ona koja se
lako izracunava i aproksimira slucajnu funkciju: za proizvoljni argument, svaki
je rezultat podjednako moguc.
Prvi korak u izracunavanju funkcije direktnog pristupa je transformacija vrednosti atributa direktnog pristupa u broj (jer su funkcije aritmeticke). Drugi korak
je samo izracunavanje adrese direktnog pristupa, pri cemu se cesto koristi metoda
izbora prostog broja M za broj raspolozivih stranica datoteke podataka, i neka
modifikacija hes funkcije h(v) = v mod M.

256

13 Direktna organizacija

13.2

Re
savanje kolizije posebno ulan
cavanje

Sustina najjednostavnije metode za resavanje problema kolizije je u odrzavanju


povezane liste slogova za svaku stranicu datoteke podataka; u takvu listu ce se
ulancati svi slogovi koji se hes funkcijom preslikavaju u broj te stranice datoteke
podataka, a za koje nema mesta u toj stranici. Tom prilikom dodeljena stranica
zone prekoracenja moze se koristiti za unosenje slogova sa razlicitim hes adresama, a
nova stranica zone prekoracenja se ne dodeljuje sve dok se vec dodeljena ne popuni,
ili ne popuni do neke unapred zadate granice (slika 13.1).
str1 :

str2 :

strk :

DP
glava . XX str1 :
XXX
X
z ...
...
*

...

glava . str2 :
...
...
..
.
glava .

ZP
..
.

..
.
..
.
..
.

strl : - . . .
...

sled.
sled.
sled.
sled.
sled.

sled.
sled.

..
.
Slika 13.1: Razresavanje kolizije posebno ulancavanje sa listama slogova
Svaka stranica datoteke podataka, u ovom slucaju, ima pokazivac glava na
prvi slog u zoni prekoracenja sa istom hes adresom, a svaki slog stranice zone
prekoracenja ima pokazivacko polje sled na sledeci slog u odgovarajucoj listi (na
istoj ili razlicitoj stranici zone prekoracenja).
Ilustrujmo sledecim primerom postupak unosenja kod direktne reprezentacije
sa posebnim ulancavanjem.
Primer 13.1 Neka u relaciji R atribut direktnog pristupa jeste SLOVO sa
domenom skupom velikih slova abecede. Neka je i-to slovo u abecedi predstavljeno brojem i i neka se koristi hes funkcija h(v) = v mod M (M je broj
stranica datoteke podataka). Tada se za zadati skup vrednosti atributa SLOVO i
M=11 dobijaju sledece hes adrese:

13.2 Resavanje kolizije posebno ulancavanje


SLOVO: P R I M E
i:
22 23 13 18 9
hes:
0 1 2 7 9

R P R E
23 22 23 9
1 0 1 9

257
T R A
26 23 1
4 1 1

I
Z
V A
30 13 28 1
8 2 6 1

NJ A
20 1
9 1

Ako se slogovi sa ovim vrednostima hes polja SLOVO redom unose u datoteku
podataka koja je na pocetku prazna, stranice datoteke podataka sa brojevima od
0 do 10 treba da sadrze slogove sa sledecim vrednostima polja SLOVO:
0 1 2 3 4 5 6 7 8 9 10
E
P R I
T
V M Z
P R I
E
R
NJ
R
A
A
A
Ako stranica datoteke podataka moze da primi najvise dva sloga, onda se za
upis treceg sloga sa istom hes adresom dodeljuje (ili bira nepopunjena) stranica
zone prekoracenja ZP, u nju se upisuje taj slog, a u odgovarajucu stranicu datoteke
podataka postavlja se pokazivac na upisani slog. Ostali slogovi, za koje nema mesta
u stranici datoteke podataka, upisuju se u vec dodeljenu (ili novu) stranicu zone
prekoracenja, pri cemu se postavljaju pokazivaci na sledeci slog u lancu.
Neka su tri dodeljene stranice zone prekoracenja stranice sa brojevima 15, 23,
27. Tada se fizicka reprezentacija relacije R moze predstaviti slikom 13.2. Stranica
sa brojem 23 dodeljuje se tek kada je stranica sa brojem 15 popunjena; slicno vazi
i za stranicu sa brojem 27. Stranica sa brojem 27 sadrzi slogove sa razlicitim hes
adresama.

stranice datoteke podataka: 0


P
P

1
R
R

stranice zone prekoracenja:

15
R
R

2
I
I

4
T

23
-A
A

6
V

7
M

9
E
E

27
-A

10

NJ

Slika 13.2: Primer razresavanja kolizije posebnim ulancavanjem

258

13 Direktna organizacija

Globalni algoritmi unosenja i pretrazivanja kod direktne organizacije sa posebnim ulancavanjem u razresavanju kolizije mogu se predstaviti sledecim pseudoprogramima.

Algoritam he
s uno
senja sa posebnim ulan
cavanjem
ulaz: slog s sa vrednoscu v hes atributa A;
slog s;
izlaz: adresa stranice x na koju je unet slog s, ili na kojoj je naden
BEGIN
x := h(v);
slog s THEN
IF na stranici(x) naden
izdati poruku da je slog vec zapisan na stranici(x)
ELSE IF stranica(x) popunjena THEN
BEGIN
WHILE postoji sledeci slog, s slog, u lancu prekoracenja, DO
BEGIN
x := adresa stranice sloga s slog;
na stranici(x))
IF s slog = s THEN EXIT(slog s naden
END;
IF stranica(x) popunjena THEN
naci nepopunjenu stranicu u zoni prekoracenja ZP
i njenu adresu dodeliti x;
uneti slog s na stranicu x;
IF slog s prvi slog u lancu prekoracenja THEN
stranica(h(v)).glava neka pokazuje na slog s
ELSE s slog.sled neka pokazuje na slog s
END
ELSE uneti slog s na stranicu x;
vratiti adresu stranice x
END.

Algoritam he
s pretra
zivanja sa posebnim ulan
cavanjem
ulaz: hes atribut A i vrednost v tog atributa;
izlaz: skup brojeva stranica x1 , x2 , . . . , xn koje sadrze slogove
sa vrednoscu v hes atributa; za neuspesno pretrazivanje poruka;

13.2 Resavanje kolizije posebno ulancavanje

259

BEGIN

i := 0;
/*broj pronadenih
slogova*/
x := h(v);
IF stranica(x) sadrzi slog sa vrednoscu v atributa A THEN
BEGIN i := 1; x1 := x END;
IF stranica(x) popunjena
THEN WHILE postoji sledeci slog, s slog, u lancu prekoracenja DO
BEGIN
x := adresa stranice sloga s slog;
IF s slog.A = v i xi <> x
/* za i > 0 */
THEN BEGIN i := i + 1; xi = x END
END;
IF i = 0 THEN izdati poruku o neuspesnom pretrazivanju
ELSE vratiti i, (xj , j = 1, 2, . . . , i)
END.
Vreme pretrazivanja datoteke podataka i zone prekoracenja, izrazeno brojem

procitanih stranica, zavisi od duzine lista stranica. Uredenost


slogova unutar lista je
manje vazna nego kod sekvencijalnog pretrazivanja jer su liste krace. Za neuspesno
pretrazivanje, vreme je jednako prosecnom broju stranica lista slogova (ali ne manje
od 1), sto u primeru 13.1 daje (1+4+1+0+1+0+1+1+1+2+0)/11 = 12/11 = 1.091.

Ako su liste uredene,


ovo vreme se skracuje na polovinu. Za uspesno pretrazivanje
u primeru 13.1, 12 slogova bi se naslo u prvom koraku (citanjem jedne stranice),
3 sloga u drugom koraku (citanjem dve stranice), 2 u trecem, 1 u cetvrtom, pa je
vreme jednako (121+32+23+14)/18 = 1.555. Ako je N (ukupni broj slogova)
mnogo vece od M, i ako na stranicu datoteke (DP i ZP) staje k slogova, onda je
srednja duzina liste aproksimirana sa N/(Mk). To skracuje vreme sekvencijalnog
pretrazivanja za faktor M.
Umesto odrzavanja povezanih lista slogova, posebnim ulancavanjem mogu se
odrzavati povezane liste stranica. Svakoj stranici datoteke podataka odgovara po
jedna takva lista, u koju se ulancavaju sve stranice sa slogovima koji se funkcijom direktnog pristupa preslikavaju u broj te stranice datoteke podataka. U tom
slucaju svakoj stranici datoteke podataka dodeljuje se, po potrebi, skup stranica
zone prekoracenja koje mogu da prime samo slogove sa hes adresom jednakom
adresi stranice datoteke podataka (slika 13.3).
Za ovaj slucaj mogu se prilagoditi i prethodno opisani algoritmi pretrazivanja
i unosenja sa posebnim ulancavanjem, i to tako da svaka stranica (i datoteke podataka i zone prekoracenja) ima pokazivac na sledecu stranicu u lancu, dok sami
slogovi nemaju takve pokazivace. Novi slog se unosi u poslednju stranicu u lancu
koji odgovara njegovoj hes adresi, a trazi se samo u lancu stranica koji odgovara
toj adresi. Stranice u lancu pretrazuju se sekvencijalno.
U slucaju da se lanac slogova (ili stranica) za neku stranicu datoteke podataka
suvise produzi, moguce je na slogove tog lanca primeniti novu (bolju) hes funkciju.
To je ideja metode virtuelnog hesiranja, koja podrazumeva premestanje izvesnog

260

13 Direktna organizacija

str1 :
str2 :

DP
glava .

str1:

ZP
sled .
sled .

str2 :
glava . H
HH
HH
H
j
..
.

sled .

strl :

sled .

sled .

..
.
Slika 13.3: Razresavanje kolizije posebno ulancavanje sa listama stranica

broja (ali ne svih) slogova na nove adrese.

13.3

Re
savanje kolizije otvoreno adresiranje

Ako je moguce proceniti broj slogova N, onda odrzavanje lista stranica, odnosno
slogova, moze biti neefikasno. U tom slucaju koriste se metode koje smestaju svih
N slogova u datoteku podataka. Velicina datoteke podataka je M stranica, gde je M
> N/k, a k je kapacitet stranice izrazen brojem slogova koje moze da primi. Prazne
stranice ili prazna mesta u stranicama datoteke podataka pomazu pri koliziji. Ove
metode se zovu metode hesiranja sa otvorenim adresiranjem.
Najjednostavnija od tih metoda je linearni pokusaj: kada se pojavi kolizija,
pokusati sa sledecom (susednom) stranicom u datoteci podataka. Ako se trazena
u toj stranici, pretrazivanje je uspesno i slog sa tom vrednoscu
vrednost nade
atributa direktnog pristupa je rezultat pretrazivanja (pretrazivanje se moze nastaviti do pronalazenja svih takvih slogova). Ako ta stranica nije popunjena a

trazena vrednost na njoj nije nadena,


pretrazivanje je neuspesno. Ako je stran
ica popunjena a trazena vrednost na njoj nije nadena,
pretrazivanje se nastavlja
na sledecoj stranici. U slucaju neuspesnog pretrazivanja, slog sa datom vrednoscu
moze se uneti na prvu nepopunjenu stranicu.
Algoritmi unosenja i pretrazivanja koji realizuju direktnu organizaciju primenom metode linearnog pokusaja, opisuju se sledecim pseudoprogramima; primer
13.2 ilustruje algoritam unosenja.

13.3 Resavanje kolizije otvoreno adresiranje

261

Algoritam uno
senja sa otvorenim adresiranjem
ulaz: slog s sa vrednoscu v hes atributa A;
slog s;
izlaz: broj stranice x na koju je unet ili na kojoj je naden
BEGIN
x := h(v);
IF stranica(x) sadrzi slog s
THEN izdati poruku o postojanju sloga s
ELSE BEGIN
WHILE stranica(x) popunjena DO
BEGIN x := (x + 1) mod M;
IF stranica(x) sadrzi slog s THEN
na strnici x)
EXIT(slog s naden
END;
upisati slog s u stranicu x
END;
vratiti x
END.

Primer 13.2 Za skup vrednosti atributa SLOVO kao u primeru 13.1, ista hes
funkcija (h(v) = v mod M) za M=23 proizvodi sledece hes adrese:

SLOVO: P R
adresa: 22 0

I
M E
13 18 9

R
0

P R
22 0

E
9

T
3

R
0

A
1

Z
7

I
V
13 5

A
1

NJ A
20 1

Ako na jednu stranicu staje samo jedan slog (k=1), sledeca tabela prikazuje
postupno unosenje slogova sa navedenim vrednostima atributa SLOVO, u stranice
datoteke podataka sa naznacenim brojem:

262

13 Direktna organizacija

0 1
R
R
R
R
R
R
R
R
R
R
R
R
R
R
R
R
R

R
R
R
R
R
R
R
R
R
R
R
R
R

P
P
P
P
P
P
P
P
P
P
P
P

R
R
R
R
R
R
R
R
R
R
R

T
T
T
T
T
T
T
T
T

R
R
R
R
R
R
R
R

A
A
A
A
A
A
A

V
V
V
V

E
E
E
E
E
E
E
E
E
E
E
E
E
E

10 11 12 13 14 15 16 17 18 19 20 21 22
P
P
I
P
I
M
P
I
M
P
I
M
P
I
M
P
I
M
P
E
I
M
P
E
I
M
P
E
I
M
P
E
I
M
P
E
I
M
P
E
I I
M
P
E
I I
M
P
E A
I I
M
P
E A
I I
M
NJ
P
E A A I I
M
NJ
P

Algoritam he
s pretra
zivanja sloga sa otvorenim adresiranjem
ulaz: hes atribut A i vrednost tog atributa v;
izlaz: skup brojeva stranica x1 , . . . , xi datoteke podataka koje sadrze slog sa
vrednoscu v hes atributa; za neuspesno pretrazivanje poruka;
BEGIN
i := 0; x := h(v);
IF stranica(x) sadrzi slog sa vrednoscu atributa A =v THEN
BEGIN i := i + 1; xi := x END;
WHILE stranica(x) popunjena DO
BEGIN x := (x + 1) mod M;
IF stranica(x) sadrzi slog sa vrednoscu atributa A =v THEN
BEGIN i := i + 1; xi := x END
END;
IF i = 0 THEN izdati poruku da slog sa datom vrednoscu v
atributa A ne postoji
ELSE vratiti x1 , . . . , xi
END.
Nedostatak metode linearnog pokusaja je sto se pri trazenju sloga sa datom
vrednoscu hes atributa ne prelazi samo preko vrednosti koje se preslikavaju u istu
hes adresu, vec i preko drugih vrednosti, narocito kad rezervisani skup stranica

13.3 Resavanje kolizije otvoreno adresiranje

263

pocne da se popunjava. Tako, ako se pretrazuju podaci uneti u primeru 13.2, pri
koji nemaju istu hes adresu. Unosenje
trazenju V-a prelazi se i preko R, A, Z,
sloga sa jednom vrednoscu hes adrese moze drasticno da uveca vreme pretrazivanja
slogova sa drugom vrednoscu hes adrese. Umetanje na stranicu 2 u primeru 13.2
znacajno uvecava vreme pretrazivanja sloga cija je hes adresa 1. Ovo je problem
grupisanja (clustering) kod linearnog pokusaja, koji se resava drugom metodom
otvorenog adresiranja, dvostrukim hesiranjem. Umesto ispitivanja svake naredne
stranice za stranicom u koliziji, uvodi se druga hes funkcija za fiksni korak (engl.
increment) nad adresama, u := h2 (v); pri tome se dodela x := (x + 1) mod M (u
algoritmima unosenja i pretrazivanja sa otvorenim adresiranjem) zamenjuje dodelom x := (x + u) mod M. Funkcija h2 mora da se izabere pazljivo. Prvo, u mora
biti razlicito od nule. Zatim, M i u treba da su uzajamno prosti (inace su moguci
ciklusi).
Sledeci primer ilustruje metodu dvostrukog hesiranja.
Primer 13.3 Neka je na skup vrednosti atributa SLOVO iz primera 13.1 i 13.2
primenjena osnovna hes funkcija h(v)=v mod M, i druga hes funkcija h2 (v) =M2
v mod (M-2). Za M=23, sledece dve tabele prikazuju h i h2 hes adrese, odnosno
redosled unosenja slogova na stranice datoteke podataka:
SLOVO: P R I M E R P R E T R A
h:
22 0 13 18 9 0 22 0 9 3 0 1
h2 :
20 19 8 3 12 19 20 19 12 16 19 20

0 1
R
R
R
R
R
R
R
R
R
R
R
R
R
R
R
R
R

A
A
A
A
A
A
A

T
T
T
T
T
T
T
T
T

V
V
V
V

I
I
I
I
I

E
E
E
E
E
E
E
E
E
E
E
E
E
E

I
Z
V A NJ A
7 13 5 1 20 1
12 8 14 20 1 20

10 11 12 13 14 15 16 17 18 19 20 21 22
P
P
I
P
I
M
P
I
M
P
I
M R
P
I
P
M R
P
I
R P
M R
P
I
R P
M R
E P
I
R P
M R
E P
R
I
R P
M R
E P
R
I
R P
M R
E P
R
I
R P
M R
E P
R
I
R P
M R
E P
R
I
R P
M R
E P
R A I
R P
M R
E P
R A I
R P
M R NJ E P
R A I
R P A M R NJ E P

264

13 Direktna organizacija

Broj rezervisanih stranica kod metoda otvorenog adresiranja veci je nego kod
posebnog ulancavanja, jer je M > N/k (u primerima 13.1 i 13.2, za k=1 i N=18,
kod posebnog ulancavanja potrebno je tacno 18 stranica, a kod otvorenog adresir
anja 23). Medutim,
ukupna potrosena memorija manja je nego kod posebnog
ulancavanja jer nema pokazivaca.
Broj zauzetih stranica datoteke podataka kod metode dvostrukog hesiranja
isti je kao i kod metode linearnog pokusaja. Isto vazi i za prosecnu popunjenost (tzv. faktor opterecenja, a) stranice datoteke podataka. U primerima
13.2 i 13.3, za M=23, N=18, k=1, a=18/23/1100 = 78%. Vreme potrebno za
uspesno pretrazivanje kod metode dvostrukog hesiranja je krace; u primeru 13.3
ono iznosi 43/18=2.4, dok u primeru 13.2 (metodom linearnog pokusaja) ono iznosi
62/18=3.44. Hes funkcije treba da obezbede dobro vreme za uspesno pretrazivanje
pri popunjenosti datoteke podataka i do 90%. Ipak, tako pun skup stranica treba
izbegavati.
Metode otvorenog adresiranja mogu se primeniti i u slucaju da se broj slogova
ne moze predvideti. Tada je moguce povremeno ponovno hesiranje u vecu datoteku
podataka.
Za poboljsanje efikasnosti pretrazivanja (i unosenja) kod otvorenog adresiranja,
bez obzira da li se koristi metoda linearnog pokusaja ili dvostrukog hesiranja, mogu
u stranici sa njese primeniti i ulancavanja. Tako, u slucaju da se slog ne nade
govom hes adresom, a da je stranica puna, trazenje ne mora da se nastavi u svim
narednim stranicama. Neka slog koji se trazi ima hes adresu a. Tada slog moze da
se trazi u lancu slogova (odnosno stranica) povezanih pokazivacima, koji pocinje
od hronoloski prvog sloga sa istom hes adresom a. Naime, nijedan slog sa hes
adresom a ne mora da bude na stranici sa adresom a (u vreme unosenja takvih
slogova stranica je mogla da bude vec popunjena slogovima sa hes adresama razlicitim od a). Zato svaka stranica datoteke podataka (npr. stranica sa brojem
x) ima jedan pokazivac na hronoloski prvi slog cija je hes adresa jednaka x; taj
pokazivac mozemo da oznacimo sa stranica(x).prvi. Svaki slog koji odgovara ntorci relacije sa vrednoscu hes atributa v sadrzi pokazivac na sledeci slog (na istoj
ili razlicitoj stranici) sa istom hes adresom h(v); taj pokazivac mozemo da oznacimo
sa slog(v).sled.
Algoritam pretrazivanja za slucaj ulancavanja kod otvorenog adresiranja predstavlja analogon algoritma pretrazivanja kod posebnog ulancavanja; za razliku od
tog algoritma, ovaj algoritam koristi jednu fizicku datoteku datoteku podataka,

sa unapred odredenim
skupom stranica. Slicno vazi i za algoritam unosenja.
Sledeci pseudoprogrami prikazuju ova dva globalna algoritma.
Algoritam pretra
zivanja kod otvorenog adresiranja sa ulan
cavanjem
ulaz: hes atribut A i vrednost v atributa A;
izlaz: skup brojeva stranica x1 , x2 , . . . , xn datoteke podataka, koje sadrze
slogove sa vrednoscu v atributa A; za neuspesno pretrazivanje poruka;

13.4 Efikasnost izvrsavanja operacija

265

BEGIN
i := 0;
x := h(v);
uzeti pokazivac stranica(x).prvi na hronoloski prvi slog sa hes adresom x;
WHILE postoji sledeci slog u lancu DO
/* u prvom prolazu sledeci znaci prvi */
BEGIN broj stranice slog-a dodeliti x;
IF vrednost atributa A slog-a = v i x <> xi /* za i > 0 */
THEN /*stranica nije vec uzeta u obzir */
BEGIN i := i + 1; xi := x END
END;
IF i = 0 THEN izdati poruku o neuspesnom pretrazivanju
ELSE vratiti x1 , . . . , xi
END.

Algoritam uno
senja sloga kod otvorenog adresiranja sa ulan
cavanjem
i kontrolom duplikata
ulaz: slog s sa vrednoscu v hes atributa A;
slog s;
izlaz: broj stranice x na koju je unet ili na kojoj je naden
BEGIN
x := h(v); /* hes funkcija */
uzeti pokazivac stranica(x).prvi na hronoloski prvi slog sa hes adresom x;
WHILE postoji sledeci slog u lancu DO
BEGIN broj stranice slog-a dodeliti x;
IF slog = s
na stranici x)
THEN EXIT(slog s naden
END;
WHILE stranica(x) popunjena DO x := (x + 1) mod M;
uneti slog s na stranicu sa brojem x;
postaviti polje sled poslednjeg slog-a u lancu (ili polje stranica(h(v)).prvi,
ako je s prvi slog sa hes adresom h(v)) da pokazuje na slog s;
vratiti x
END.

13.4

Efikasnost izvr
savanja operacija

Izbor pojedinacnog sloga kod direktne reprezentacije je vrlo efikasna operacija (jedina efikasna operacija nad ovom reprezentacijom), i to u slucaju da se izbor vrsi po
hes atributu. Hes atribut moze biti ma koji atribut ili kombinacija atributa relacije.
To ne mora biti primarni kljuc, niti vrednosti hes atributa moraju biti jedinstvene
unutar relacije. Ipak, pozeljno je za hes atribut izabrati sto je moguce jedinstveniji atribut. Na primer, atribut POL neke relacije, sa vrednostima {muski,

266

13 Direktna organizacija

zenski}, nije dobar kandidat za hes atribut, dok licni broj to svakako jeste. Zato
je vazno maksimalno uskladiti izbor hes atributa sa atributom specificne restrikcije
koja se najcesce javlja u kvalifikaciji upita. Najcesce se za hes atribut bira primarni
kljuc relacije.
Ako je faktor opterecenja a = N/(Mk) (N je broj slogova, M broj stranica
datoteke podataka, k kapacitet stranice u slogovima), onda se analiticki izrazi za
vreme utroseno pri neuspesnom i uspesnom pretrazivanju kod direktne organizacije
mogu prikazati na sledeci nacin ([44], [55]):
neuspesno

uspesno

posebno ulancavanje:

1+

a
2

(a+1)
2

linearni pokusaj:

1
2

1
2(1a)2

1
2

dvostruko hesiranje:

1
(1a)

1
2(1a)

ln(1a)
a

U slucaju posebnog ulancavanja moze biti a > 1, dok u slucaju otvorenog adresiranja (linearni pokusaj i dvostruko hesiranje) mora biti a < 1.
Za malo a, pokazuje se da se svi navedeni izrazi za utroseno vreme svode na osnovni rezultat oko 1+N/(Mk) za neuspesno i 1+N/(2Mk) pokusaja za uspesno
pretrazivanje. Kada je a blisko jedinici, tj. pri velikoj popunjenosti stranica,
otvoreno adresiranje daje veoma lose rezultate.
Iz efikasnosti izbora proistice efikasnost i svih ostalih operacija nad direktnom
reprezentacijom.
Grupna obrada (ili obrada svih slogova) u proizvoljnom ili specificnom redosledu

vrsi se na isti nacin kao kod neuredene


varijante sekvencijalne datoteke.
Novi slog se unosi prema nekom od prethodnih algoritama (u zavisnosti od
varijante direktne reprezentacije).
Brisanje sloga u slucaju posebnog ulancavanja svodi se na izbor i stvarno
brisanje, uz izmene nad lancem pokazivaca. Brisanje sloga u slucaju otvorenog
adresiranja mora biti pazljivo izvedeno. Nije dozvoljeno prosto obrisati slog
zbog moguce promene karakteristike stranice koja se pretrazuje algoritmom pretrazivanja: popunjena postaje nepopunjena, sto moze da sugerise neuspesno pretrazivanje slogova sa drugim vrednostima hes atributa; zbog toga se u ovoj varijanti
direktne reprezentacije mora postaviti neki indikator poluslobodne lokacije.
Vrednost ne-hes atributa azurira se na isti nacin na koji se vrsi i izbor. Vrednost
hes atributa se azurira operacijom brisanja sloga za kojom sledi unosenje.
Prirodno spajanje dveju direktnih reprezentacija vrsi se ili kao i kod sekvencijalne datoteke, pri cemu se zahteva sortiranje po atributima spajanja uz obavljanje
restrikcije i projekcije, ili indeksnim spajanjem ako je to moguce, pri cemu se umesto

13.5 Pitanja i zadaci

267

indeksa koristi hes algoritam za transformaciju vrednosti atributa direktnog pristupa u adresu, kada je taj atribut ujedno i atribut spajanja.
Vreme pristupa slogu kod direktne reprezentacije moze biti vrlo malo, u srednjem je dosta dobro (narocito u slucaju dovoljno velike datoteke podataka, skoro
konstantno vreme), ali u najgorem slucaju moze biti i vrlo veliko (kada se veliki broj
vrednosti hes atributa preslikava hes funkcijom u jednu istu adresu); prethodno
navedena tabela sa analitickim rezultatima vezanim za vreme pristupa to dobro
ilustruje. Zbog toga se direktna reprezentacija smatra nestabilnom reprezentacijom. Poseban nedostatak direktne reprezentacije predstavlja cinjenica da su slogovi
u datoteci podataka DP u proizvoljnom redosledu (nesortiranom, nehronoloskom,
onom koji diktira hes funkcija), i da nema fizickog grupisanja slogova pogodnog
za grupne operacije. Ako ovi nedostaci nisu od velike vaznosti za aplikaciju koja
intenzivno pretrazuje relaciju po specificnim vrednostima nekog atributa, onda je
hesiranje po tom atributu pravi izbor fizicke reprezentacije relacije.
Najbolju metodu hesiranja u konkretnoj situaciji je tesko odabrati, ali cesto
svaka od metoda radi dovoljno dobro. Svaka od metoda podrzana je citavim nizom

tehnika ([44]) koje mogu biti adekvatne pod odredenim


uslovima. Navedene formule
vremena pretrazivanja ne opravdavaju izbor posebnog ulancavanja u odnosu na
dvostruko hesiranje. Ipak, u principu se na relacije nepredvidive velicine primenjuje neka od tehnika metode posebnog ulancavanja, a na relacije predvidive velicine
neka od metoda otvorenog adresiranja (na primer, dvostruko hesiranje).

13.5

Pitanja i zadaci

1. Opisati karakteristike direktne organizacije.


je hes funkcija i koji su problemi u njenom konstruisanju?
2. Sta
3. Opisati postupak razresavanja kolizije posebnim ulancavanjem.
4. Navesti primer primene algoritma pretrazivanja sa posebnim ulancavanjem.
5. U cemu se sastoji postupak otvorenog adresiranja?
6. Navesti primer primene algoritma unosenja kod otvorenog adresiranja.
7. Koje su prednosti otvorenog adresiranja sa ulancavanjem?
8. Diskutovati efikasnost operacija nad direktnom reprezentacijom.
9. Direktna reprezentacija moze da koristi i skup atributa direktnog pristupa
(umesto jedinstvenog hes atributa). Tada se hes adresa sloga izracunava
primenom hes funkcije na kombinaciju vrednosti skupa atributa direktnog
pristupa.
Neka relacija KI ima istu strukturu i sadrzaj kao u zadatku 15 prethodne
glave, i neka je predstavljena direktnom reprezentacijom sa parom (K SIF,

268

13 Direktna organizacija
I SIF) kao skupom atributa direktnog pristupa. Konstruisati hes funkciju
za ovu reprezentaciju i diskutovati prednosti i nedostatke razlicitih metoda
razresavanja kolizije.

Deo V

Upravljanje transakcijama

Deo V odnosi se na komponente sistema za upravljanje bazama podataka koje


omogucuju istovremno, korektno i bezbedno izvrsavanje zahteva veceg broja korisnika. Skup radnji koje predstavljaju logicku jedinicu posla zove se transakcija.
Tako bi, na primer, u sistemu baza podataka jedne banke, prenosenje novca sa
jednog racuna na drugi predstavljalo jednu transakciju. Ona se sastoji od bar dve
radnje: isplate sa jednog i uplate na drugi racun, ali su te radnje logicki nedeljive i
tek se obe zajedno smatraju jednim poslom. Na efekte transakcije ne sme da utice
eventualno istovremeno izvrsenje druge transakcije, ili nestanak struje.
Deo V sastoji se od dve glave:
U glavi 14, Transakcija, integritet i konkurentnost, prvo se uvodi pojam
transakcije kao niza radnji koji ispunjava uslove integriteta baze podataka.
Zatim se daje pregled problema koji nastaju pri istovremenom (konkurentnom) izvrsavanju skupa transakcija, kao i nacina za resavanje tih problema.
Glava 15, Oporavak, odnosi se na restauriranje podataka baze podataka
do greske u transakciji, u sistemu ili u mediju (disku).
u slucaju da dode
Razmatraju se aktivnosti koje komponenta SUBP upravljac oporavkom
preduzima da bi oporavljeni (restaurirani) sadrzaj baze podataka zadovoljio
(privremeno narusene) uslove integriteta baze.

270

14

Transakcija, integritet i
konkurentnost
14.1

Transakcija i integritet

Transakcija je logicka jedinica posla pri radu sa podacima. Ona predstavlja niz, tj.
sekvencijalnu kompoziciju radnji koja ne narusava uslove integriteta. Po izvrsenju
kompletne transakcije stanje baze1 treba da je konzistentno, tj. da su ispunjeni
uslovi integriteta. Dakle, posmatrana kao jedinica posla, transakcija prevodi jedno

konzistentno stanje baze u drugo takvo stanje baze, dok u medukoracima


transakcije konzistentnost podataka moze biti i narusena. Transakcija tako predstavlja i
bezbedno sredstvo za interakciju korisnika sa bazom.
Transakcija se karakterise sledecim vaznim svojstvima (poznatim kao ACID
svojstva):
atomicnost (engl. atomicity): transakcija se izvrsi u celosti ili se uopste ne
izvrsi (ni jedna njena radnja);
konzistentnost (engl. consistency): transakcija prevodi jedno konzistentno
stanje baze u drugo konzistentno stanje baze;
izolacija (engl. isolation): efekti izvrsenja jedne transakcije su nepoznati
drugim transakcijama sve dok se ona uspesno ne kompletira;
trajnost (engl. durability): svi efekti uspesno kompletirane transakcije su
trajni, tj. mogu se ponistiti samo drugom transakcijom.
Primer 14.1 Neka je relacija KI (odeljak 1.2) prosirena atributom VR IZDANJA
koji se odnosi na vrednost jednog izdanja (u dinarima) jedne knjige jednog izdavaca,
1 Stanje beze podataka je sadr
zaj baze u jednom momentu, kao sto je i stanje relacije sadr
zaj
relacije u jednom momentu, v. glavu 8.

271

272

14 Transakcija, integritet i konkurentnost

i neka je relacija I prosirena atributom VREDNOST koji se odnosi na vrednost (u


dinarima) svih izdanja jednog izdavaca. Sada uslov integriteta baze moze biti uslov
da je vrednost atributa VREDNOST relacije I, za svakog pojedinacnog izdavaca,
jednaka zbiru vrednosti svih izdanja svih knjiga tog izdavaca u relaciji KI. Kako se
izdavac identifikuje vrednoscu atributa I SIF, ovaj uslov integriteta se moze izraziti
kao zahtev da je vrednost atributa VREDNOST relacije I, za svaku pojedinacnu
vrednost atributa I SIF, jednaka zbiru vrednosti atributa VR IZDANJA svih izdanja u relaciji KI koja odgovaraju toj vrednosti atributa I SIF.
Navedeni uslov integriteta moze se eksplicitno zadati u SQL2 iskazom (koji u
sistemu DB2 nije podrzan)
CREATE ASSERTION PROVERA CHECK
(NOT EXISTS ( SELECT *
FROM
I
WHERE VREDNOST <> ( SELECT SUM (VR IZDANJA)
FROM
KI
WHERE I SIF = I.I SIF) ) )
Ako se aktivira SET CONSTRAINT iskazom, ovako zadat uslov integriteta se

proverava i mora da vazi na kraju svake transakcije. Obezbedenje


njegovog vazenja
postize se odgovarajucom strukturom i sadrzajem transakcije. Sledeci primer daje
strukturu jedne transakcije.
Primer 14.2 Neka je transakcija T1 promena vrednosti atributa VR IZDANJA
drugog Prosvetinog izdanja knjige sa sifrom k1 u relaciji KI, kao i odgovarajuca
promena vrednosti atributa VREDNOST u relaciji I. U nekim SQL dijalektima
ova transakcija moze se izraziti na sledeci nacin (sintaksa transakcije u sistemu
DB2 je nesto drugacija):
(A)

(B)

BEGIN TRANSACTION
UPDATE KI
SET VR IZDANJA = VR IZDANJA + 4000
WHERE K SIF = k1 AND I SIF = i1 AND IZDANJE = 2;
UPDATE I
SET VREDNOST = VREDNOST + 4000
WHERE I SIF = i1;
END TRANSACTION

U toku izvrsavanja transakcije dozvoljena je privremena nekonzistentnost baze.


Tako se transakcija ponasa kao jedinstvena radnja sa tacke gledista uslova integriteta, sto ne vazi za njene pojedinacne radnje.
U sistemu DB2, za sadrzaj transakcije i proveru uslova integriteta odgovoran je

programer, tj. vazenje uslova integriteta obezbeduje


aplikacija. Uobicajeno je da u
radu sa transakcijama SUBP koristi usluge drugog sistema upravljaca transakcija.

Sistem za upravljanje transakcijama obezbeduje


da se, bez greske, upisuju u bazu

14.2 Konkurentnost

273

podataka efekti izvrsenja svih radnji od kojih se transakcija sastoji, ili nijedne, sto
je jedan aspekt kontrole konzistentnosti baze.
RSUBP DB2 koristi dve radnje upravljaca transakcija, COMMIT i ROLLBACK (to su i iskazi SQL-a), od kojih svaka oznacava i kraj transakcije: COMMIT oznacava uspesan kraj transakcije i trajan upis efekata svih radnji transakcije
u bazu, dok ROLLBACK oznacava neuspesan kraj transakcije i ponistenje svih
efekata koje su proizvele radnje te transakcije. Tako je u sistemu DB2 transakcija deo aplikacije od pocetka programa do prve radnje COMMIT ili ROLLBACK,
dve susedne takve radnje u programu, odnosno od poslednje takve
odnosno izmedu
radnje do kraja programa. Ako se nijedna od radnji COMMIT, ROLLBACK ne
ukljuci u program, onda citav program predstavlja jednu transakciju; na kraju
programa se sistemski generise jedna komanda COMMIT ako je kraj programa
uspesan, odnosno jedna komanda ROLLBACK ako je kraj programa neuspesan.
Ugnjezdene transakcije u sistemu DB2 nisu moguce.
Deo programa u aplikativnom SQL-u, koji realizuje prethodnu transakciju u
sistemu DB2 i koji odrazava zadati uslov integriteta nad relacijama KI, I, moze
imati sledeci izgled:
EXEC SQL WHENEVER SQLERROR GO TO PONISTI;
EXEC SQL UPDATE KI
SET VR IZDANJA = VR IZDANJA + 4000
WHERE K SIF = k1 AND I SIF = i1 AND IZDANJE = 2;
EXEC SQL UPDATE I
SET VREDNOST = VREDNOST + 4000
WHERE I SIF = i1;
EXEC SQL COMMIT;
GO TO ZAVRSENA;
PONISTI: EXEC SQL ROLLBACK;
ZAVRSENA: RETURN;

14.2

Konkurentnost

Kako bazu podataka koristi istovremeno veci broj korisnika, nad bazom podataka se
istovremeno moze izvrsavati vise transakcija. Mada svaka od njih moze ispunjavati
uslove integriteta baze podataka (dobro su definisane, kao sto je bio slucaj sa
transakcijom iz prethodnog primera), ponekad njihovo istovremeno izvrsenje moze
da narusi te uslove. Izvrsenje u kome se transakcije izvrsavaju jedna za drugom je
serijsko izvrsenje, i ono ispunjava uslove integriteta baze, tj. ostavlja bazu u konzistentnom stanju. Pod izvrsenjem skupa transakcija ovde se podrazumeva niz radnji
od kojih se te transakcije sastoje. U tom nizu redosled radnji iz svake transakcije
je nepromenjen, ali dve uzastopne radnje ne moraju pripadati istoj transakciji.
Pojedinacna radnja izvrsenja izvrsava se u jednom koraku.
Da bi se definisalo izvrsenje skupa transakcija koje ispunjava uslove integriteta
a koje nije serijsko, potrebno je preciznije definisati izvrsenje skupa transakcija i

274

14 Transakcija, integritet i konkurentnost

ekvivalentnost dva izvrsenja.


Primer 14.3 U ilustraciji definicija koje slede koristicemo, uz transakciju T1 iz
prethodnog primera, i transakciju T2 kojom se povecava vrednost svih izdanja
izdavaca i1 za 10%. Transakcija T2 se u SQL-u moze zapisati kao:
BEGIN TRANSACTION
UPDATE KI
SET VR IZDANJA = VR IZDANJA * 1.1
WHERE KI.I SIF = i1;
UPDATE I
SET VREDNOST = VREDNOST * 1.1
WHERE I.I SIF = i1;
END TRANSACTION

(A)

(B)

14.2.1

Izvr
senja skupa transakcija

Kao osnovne komponente transakcije posmatracemo objekte (npr. slogove) i dve


radnje: citanje i upis (tj. azuriranje) ([30], [1]). Dve radnje u ovom modelu su
konfliktne ako se obavljaju nad istim objektom a jedna od njih je radnja upisa.
To znaci da parovi konfliktnih radnji mogu biti samo parovi (citanje, upis) i (upis,
upis).2
Neformalno govoreci, dva izvrsenja datog skupa transakcija su ekvivalentna ako
imaju isti redosled izvrsavanja svakog para konfliktnih radnji. Intuitivno je jasno da
ce dva ekvivalentna izvrsenja proizvesti isti efekat na bazu, tj. da ce oba, polazeci
od stanja baze s, dovesti bazu u isto stanje s1 .
Sa jedne strane, potrebno je da izvrsenje skupa transakcija ostavi bazu u konzistentnom stanju (dakle, da proizvede efekat serijskog izvrsenja). Sa druge strane,
potrebno je da veci broj transakcija (odnosno korisnika baze) istovremeno, neserijski, pristupi podacima u bazi. Zbog toga su od posebnog interesa ona izvrsenja
skupa transakcija koja su ekvivalentna serijskom a razlicita od serijskog.
Za skup transakcija T, skup objekata O nad kojima transakcije obavljaju radnje, i neko izvrsenje I skupa transakcija T, redosled izvrsavanja konfliktnih radnji
karakterise se tzv. relacijom zavisnosti.
Definicija 14.1 Relacija zavisnosti izvrsenja I skupa transakcija T= {T1 , T2 }, u
oznaci Z(I), jeste podskup Dekartovog proizvoda TOT, koji sadrzi sve i samo
trojke (T, o, T) (za T, T {T1 , T2 } i oO), sa sledecim svojstvima:
1. u i-tom koraku izvrsenja I transakcija T obavlja citanje ili upis nad objektom
o, a u kasnijem koraku j (i < j) transakcija T obavlja citanje ili upis nad
tim istim objektom;
2. jedna od dve uocene radnje je upis;
2 Ovi

parovi su neuredeni,
tj. poredak komponenti je nebitan.

14.2 Konkurentnost

275

i-tog i j-tog koraka izvrsenja I nema radnje upisa nad objektom o.


3. izmedu
Analogno se definise relacija zavisnosti izvrsenja skupa transakcija T={T1 , T2 ,
. . . , Tn }.
Sada se relacija ekvivalencije na skupu izvrsenja skupa transakcija moze formalno definisati sledecom definicijom.
Definicija 14.2 Dva izvrsenja I1 , I2 skupa transakcija T su ekvivalentna ako su
im jednake relacije zavisnosti, tj. ako je Z(I1 ) = Z(I2 ).
Definicija 14.3 Izvrsenje I skupa transakcija T je linearizovano ako je ekvivalentno nekom serijskom izvrsenju.
Primer 14.4 U transakcijama T1 , T2 iz primera 14.2 i 14.3, radnje UPDATE (azuriranja) mogu se smatrati radnjama upisa. Za skup tih transakcija {T1 , T2 }
posmatrajmo sledeca tri izvrsenja:
I1 :
korak:
1.
2.
3.
4.

T1 :

I2 :
T2 :

T1 :

upis KI
upis KI
upis I

I3 :
T2 :

T1 :

upis KI
upis KI
upis I

upis I

upis I

T2 :
upis KI
upis I

upis KI
upis I

Relacije zavisnosti ovih izvrsenja su:


Z(I1 ) = {(T2 , KI, T1 ), (T2 , I , T1 )},
Z(I2 ) = {(T2 , KI, T1 ), (T1 , I , T2 )},
Z(I3 ) = {(T2 , KI, T1 ), (T2 , I , T1 )},
i pri tom vazi Z(I3 ) = Z(I1 ). Izvrsenje I1 je linearizovano jer je ekvivalentno
serijskom izvrsenju I3 . Izvrsenje I2 nema ekvivalentno serijsko, pa ono nije linearizovano.
Za serijsko (tj. linearizovano) izvrsenje I skupa transakcija T vazi da je njegova
relacija zavisnosti Z(I) antisimetricna, tj. da za proizvoljna dva objekta o1 , o2
vazi: (T1 , o1 , T2 ) Z(I) (T2 , o2 , T1 )
/ Z(I). Relacija zavisnosti takvog

izvrsenja definise na skupu transakcija T linearno uredenje


< na sledeci nacin:
T1 < T2 ako je (T1 , o, T2 ) Z(I) za neki objekat o.

276

14 Transakcija, integritet i konkurentnost

14.3

Problemi konkurentnosti

Pri konkurentnom (istovremenom) izvrsenju skupa transakcija mogu nastati sledeci


problemi.
1. problem: nekonzistentna analiza
Ako jedna transakcija (iz primera 14.2, 14.3) pocne po zavrsetku druge (redosled
radnji: A, B, A, B ili A, B, A, B), ili ako im se radnje izvrsavaju naizmenicno
(redosled radnji: A, A, B, B ili A, A, B, B), njihovo izvrsenje je serijsko ili
ekvivalentno serijskom izvrsenju T1 ;T2 (ili T2 ;T1 ). Posle tog izvrsenja baza ce biti
prve i
u konzistentnom stanju. Ako se jedna transakcija kompletno izvrsi izmedu
druge radnje druge transakcije (redosled radnji: A, A, B, B ili A, A, B, B), baza
ce se posle izvrsenja tog skupa transakcija naci u nekonzistentnom stanju.

Da bismo se uverili u ovo tvrdenje,


razmotrimo efekte koje na bazu proizvodi
redosled radnji A, A, B, B. Pretpostavimo, pri tom, da je vrednost 2. izdanja
knjige k1 izdavaca i1 jednaka a, a da je vrednost svih izdanja izdavaca i1 jednaka
b (i u relaciji I vrednost atributa VREDNOST, i u relaciji KI suma vrednosti
atributa VR IZDANJA za izdavaca i1). Da bi izvrsenje skupa transakcija {T1 , T2 }
ostavilo bazu u konzistentnom stanju, iznos b u obe relacije mora da se promeni za
istu vrednost. Modifikovanom sintaksom relacione algebre, promene nad relacijama
I i KI mozemo da posmatramo na sledeci nacin:
stanje baze pre izvrsenja transakcija T1 , T2 :
KI [K SIF=k1,I SIF=i1,IZDANJE=2][VR IZDANJA]
SUM (KI [VR IZDANJA]) za I SIF = i1
I [I SIF=i1] [VREDNOST]

= a;
= b;
= b;

posle izvrsenja radnje A:


KI [K SIF=k1,I SIF=i1,IZDANJE=2][VR IZDANJA]
SUM (KI [VR IZDANJA]) za I SIF = i1

= a+4000;
= b+4000;

posle izvrsenja radnje A:


KI [K SIF=k1,I SIF=i1,IZDANJE=2][VR IZDANJA]
SUM (KI [VR IZDANJA]) za I SIF = i1
(svim izdanjima izdavaca i1 vrednost je uvecana za 10%);
posle izvrsenja radnje B:
I [I SIF=i1] [VREDNOST] = b 1.1;
posle izvrsenja radnje B:
I [I SIF=i1] [VREDNOST] = b 1.1 + 4000.

=
=
=
=

(a + 4000) 1.1
a 1.1 + 4400
(b+4000)1.1
b 1.1 + 4400

14.3 Problemi konkurentnosti

277

Dakle, vrednost atributa VREDNOST relacije I za izdavaca sa sifrom i1 je


b1.1+4000, a zbir vrednosti svih izdanja (VR IZDANJA) tog izdavaca u relaciji KI
je b 1.1 + 4400. Prva vrednost (VREDNOST) uvecana je za 10% (zbog uvecanja
vrednosti svih izdanja tog izdavaca za 10%) i za 4000 dinara (jer je 2. izdanju
knjige k1 izdavaca i1 uvecana vrednost i za 4000) ali nije uvecana za 10% od tih
4000 dinara (mada je vrednost 2. izdanja knjige k1 izdavaca i1 porasla i za 10%
na uvecanje od 4000 dinara). Zato je vrednost atributa VREDNOST relacije I, za
izdavaca sa sifrom i1, manja za 400 dinara nego sto bi trebalo da bude.
2. problem: izgubljeno a
zuriranje
Neka se svaka od transakcija T1 , T2 sastoji od citanja i upisa istog sloga datoteke, pri cemu se prvo izvrse radnje citanja, redom, transakcija T1 i T2 , a zatim
radnje upisa u istom redosledu. Na primer, transakcija T1 moze da procita slog koji
se odnosi na izdavaca sa sifrom I SIF = i2, zatim transakcija T2 moze da procita
isti slog (obe transakcije citaju identicne podatke; posebno, za atribut STATUS,
obe citaju vrednost 20). Posle toga transakcija T1 moze da promeni vrednost
atributu STATUS tog sloga (sa 20 na 30) i da zavrsi sa radom, npr. da zatvori
datoteku, a zatim transakcija T2 moze da promeni vrednost atributu STATUS (sa
procitane vrednosti 20 na 40) i da zavrsi sa radom (npr. da zatvori svoju verziju
iste datoteke). U tom slucaju ostaju zapamcene samo promene transakcije T2 koja
je poslednja izvrsila upis i zatvorila datoteku (vrednost polja STATUS sloga o izdavacu i2 ostaje 40), a transakciji T1 se bez obavestenja ponistava efekat upisa, tj.
gubi se vrednost 30 polja STATUS posmatranog sloga.
3. problem: zavisnost od poni
stenog a
zuriranja
Pretpostavimo da transakcija T1 ukljucuje citanje nekog sloga r, a da transakcija
T2 ukljucuje upis (tj. azuriranje) istog sloga. Neka pri konkurentnom izvrsavanju
ovih transakcija prvo transakcija T2 azurira slog r, a zatim transakcija T1 procita
slog r i zavrsi svoje izvrsavanje. U nekom kasnijem trenutku, iz bilo kog razloga,
transakcija T2 ponisti sve efekte koje je do tog trenutka proizvela na bazu, tj.
ponisti azuriranje sloga r (slika 14.1 a)). U tom slucaju transakcija T1 procitala je
azuriranu vrednost sloga r koja nije ni trebalo da bude upisana u bazu.
Slicno, neka transakcija T1 ukljucuje azuriranje nekog sloga r, a transakcija
T2 se sastoji od istih radnji kao i u prethodnom slucaju. Pri istom redosledu
izvrsavanja radnji i ponistenju transakcije T2 (slika 14.1 b)) izgubilo bi se, bez
obavestenja, azuriranje transakcije T1 , jer bi ponistavanjem efekata transakcije T2
vrednost sloga r bila vracena na vrednost pre azuriranja (od strane transakcije T2 ).
Prva dva problema konkurentnosti vezana su za redosled konkurentnog izvrsavanja radnji dve ili vise transakcija. Treci problem je, osim za konkurentnost, vezan
i za oporavak baze podataka pri ponistavanju transakcije u konkurentnom izvrsenju
(v. sledecu glavu). Do ponistavanja transakcije moze doci, na primer, zbog greske
u transakciji ili zbog pada sistema.
Sva tri problema resavace se (i resavaju se u RSUBP) pomocu mehanizama za
kljucavanja. Ovi mehanizmi obezbeduju
konkurentno izvrsenje skupa transakcija

278

14 Transakcija, integritet i konkurentnost

T2 : azurira(r)

T1 : cita(r)

t1

t2

T2 : ponistava
t3

a)

T2 : azurira(r)

T1 : azurira(r)

T2 : ponistava

t1

t2

t3

b)
Slika 14.1: Zavisnost a) citanja b) azuriranja od ponistenog azuriranja

koje je ekvivalentno serijskom. Za serijsko izvrsenje vazi da ne narusava integritet


i konzistentnost baze ako to isto vazi za svaku pojedinacnu transakciju u posmatranom skupu transakcija.

14.4

Zaklju
cavanje

Problemi konkurentnosti opisani u prethodnom odeljku mogu se resiti mehanizmom

dinamickog zakljucavanja i otkljucavanja objekata, koji obezbeduje


linearizovanost
izvrsenja. Linearizovana izvrsenja, s obzirom da su ekvivalentna serijskim, ne poznaju ni jedan od pomenutih problema.
Moguce je realizovati razlicitu granularnost, tj. velicinu objekata zakljucavanja;
na primer, objekti zakljucavanja mogu biti cele relacije, pojedinacne n-torke
relacije, delovi n-torki, grupe atributa, skupovi n-torki koje zadovoljavaju zadati
uslov, itd.
Zakljucavanje objekta (postavljanje katanca na objekat) je postupak koji

obezbeduje
transakciji pristup objektu, i kojim transakcija istovremeno sprecava
druge transakcije da pristupe tom objektu. Svaka transakcija na kraju svog
izvrsavanja otkljucava sve objekte koje je sama zakljucala (a koje nije vec
otkljucala). Pretpostavimo da u jednostavnom modelu postoji samo jedna vrsta
katanca, i da pri izvrsenju skupa transakcija nijedna transakcija ne moze zakljucati vec zakljucani objekat. (U realnim modelima transakcija postoji vise vrsta
katanaca, od kojih su neki deljivi a neki ekskluzivni; pri tom vise transakcija moze
da postavi deljivi katanac na jedan objekat, ali najvise jedna moze da postavi
ekskluzivni katanac).

Svojstvo transakcija koje, koristeci mehanizam zakljucavanja, obezbeduje


linearizovanost izvrsenja skupa transakcija, jeste dvofaznost. Transakcija je dvofazna

14.4 Zakljucavanje

279

ako se sastoji od dve serijske faze: faze zakljucavanja objekata i faze otkljucavanja
objekata. U fazi zakljucavanja nema nijedne radnje otkljucavanja objekta, odnosno
u fazi otkljucavanja vise nema radnji zakljucavanja (naravno, obe ove faze ukljucuju
i druge operacije nad objektima kao sto su citanje, obrada, upis objekata). Faza
otkljucavanja objekata pocinje prvom radnjom otkljucavanja.
Teorema 14.1 Dovoljan uslov za linearizovanost izvrsenja I skupa transakcija
{T1 , T2 } je da su one dvofazne.
Dokaz: Pretpostavimo da za neki objekat o trojka (T1 , o, T2 ) jeste element
relacije zavisnosti izvrsenja I, tj. (T1 , o, T2 ) Z(I). Pokazacemo da je onda
izvrsenje I ekvivalentno serijskom T1 ; T2 , tj. da je linearizovano (sasvim analogno
se pokazuje da, ako je trojka (T2 , o, T1 ) Z(I), onda je izvrsenje I ekvivalentno
serijskom T2 ; T1 , tj. opet je linearizovano).
U suprotnom, neka postoji objekat o0 takav da je (T2 , o0 , T1 ) Z(I). To znaci
da:
1. zbog (T1 , o, T2 ) Z(I), postoje koraci k, m (k < m) izvrsenja I u kojima
transakcija T1 otkljucava objekat o (korak k), odnosno transakcija T2 zakljucava objekat o (korak m);
2. zbog (T2 , o0 , T1 ) Z(I), postoje koraci p, q (p < q) izvrsenja I u kojima
transakcija T2 otkljucava objekat o0 (korak p), odnosno transakcija T1 zakljucava objekat o0 (korak q);
3. iz dvofaznosti transakcija T1 i T2 sledi da je q < k i m < p;
4. iz 1) i 3) sledi q < k < m < p sto je u kontradikciji sa 2). To znaci da ne
postoji objekat o0 takav da je (T2 , o0 , T1 ) Z(I), tj. za svaki objekat o0
nad kojim operisu obe transakcije T1 , T2 vazi: (T1 , o0 , T2 ) Z(I). Dakle,
izvrsenje I je linearizovano.

Indukcijom se moze dokazati vazenje prethodnog tvrdenja


i za svaki konacan
skup transakcija {T1 , T2 , . . . , Tn }.
Dvofaznost skupa transakcija nije potreban uslov za linearizovanost proizvoljnog
izvrsenja, sto se moze jednostavno dokazati primerom.

Osim sto obezbeduje


linearizovanost, dvofaznost transakcija moze proizvesti i
nezeljeni efekat poznat kao uzajamno blokiranje transakcija (engl. deadlock).
Primer 14.5 Za dve dvofazne transakcije
T1 :

zakljucati KI
upisati KI
zakljucati I
upisati I
otkljucati KI
otkljucati I

T2 :

zakljucati I
upisati I
zakljucati KI
upisati KI
otkljucati I
otkljucati KI,

280

14 Transakcija, integritet i konkurentnost

jedno njihovo delimicno izvrsenje je:


T1 :
T1 :
T2 :
T1 :

zakljucati KI
upisati KI
zakljucati I
upisati I.

Nijedna transakcija ne moze da nastavi sa radom, pa se jedna transakcija nasilno

prekida uz ponistenje svih njenih radnji i oslobadanje


katanaca; zatim se ta transakcija ponovno aktivira.
Postoji niz specificnosti vezanih za realne modele transakcija i zakljucavanja u
odnosu na izlozeni jednostavni model. Na primer, za model zakljucavanja u sistemu
DB2 vazi sledece:
Zbog povecanja konkurentnosti, svojstvo izolovanosti transakcije (I u ACID)
sobom razlikuju po stepenu u kome
realizuje se u nekoliko nivoa koji se medu
operacije jedne transakcije mogu da uticu na izvrsenje operacija konkurentnih
transakcija, odnosno stepen u kome operacije drugih konkurentnih transakcija
mogu da uticu na izvrsenje operacija posmatrane transakcije. To su tzv. nivoi
izolovanosti transakcije (tj. celokupne aplikacije).
Najvisi nivo izolovanosti aplikacije (i njenih transakcija) u sistemu DB2
je nivo ponovljivog citanja RR (engl. repeatable read). Ovaj nivo

obezbeduje
zakljucavanje svih vrsta kojima se transakcija obraca (npr.
cele tabele), a ne samo onih vrsta koje zadovoljavaju uslov upita. Tako se
rezultat izvrsenja jednog upita (citanja) transakcije T ne moze promeniti
od strane druge transakcije pre nego sto se transakcija T zavrsi. S druge

strane, ovaj nivo izolovanosti obezbeduje


i da transakcija nema uvid u

nepotvrdene
promene drugih transakcija.
Sledeci nivo izolovanosti jeste nivo stabilnosti citanja RS (engl. read

stability). Za razliku od prethodnog, ovaj nivo izolovanosti obezbeduje


zakljucavanje samo onih vrsta koje zadovoljavaju uslov upita, tj. ne
dopusta promenu (od strane drugih transakcija) vrste koju je procitala
transakcija T , sve do zavrstka transakcije T . Mada ce, pri ovom nivou
izolovanosti, vrsta koju je procitala transakcija T ostati nepromenjena
od strane drugih transakcija sve do zavrstka transakcije T , rezultati
ponovljenih izvrsenja istog upita od strane transakcije T mogu da se
do dodavanja, od strane drugih transakcija,
razlikuju (moze da dode
vrsta koje ce zadovoljiti taj upit, tj. do fantomskih redova).

Nivo stabilnosti kursora CS (engl. cursor stability) obezbeduje


zakljucavanje samo one vrste koju transakcija T trenutno cita. Sve vrste
koje je transakcija T prethodno procitala (ali ne i menjala) otkljucane
su i mogu ih druge transakcije menjati i pre okoncanja transakcije T .
Transakcija T i dalje nema uvid u promene drugih transakcija pre okoncanja tih transakcija.

14.4 Zakljucavanje

281

Najslabiji nivo izolovanosti transakcije je nivo nepotvrdenog


citanja
UR (engl. uncommitted read). Ovaj nivo omogucuje transakciji T da

vidi (procita) nepotvrdene


promene drugih transakcija, kao i drugim
transakcijama da pristupe podacima koje transakcija T upravo cita.
Objekat koji transakcija sistemski zakljucava zavisi od nivoa izolovanosti
transakcije i operacije i moze biti razlicite granularnosti vrsta tabele, tabela,
prostor tabela. Jedini objekat koji korisnik moze eksplicitno da zakljuca
deljivim (S) ili iskljucivim (X) katancem (v. sledeci paragraf) jeste tabela
(LOCK TABLE iskaz); odrzavanje jednog kljuca nad celom tabelom je efikasnije od zakljucavanja pojedinacnih vrsta, ali smanjuje konkurentnost obrade;

zato je zakljucavanje cele tabele adekvatno u slucaju da transakcija obraduje


veliki broj slogova te tabele.
Dva najvaznija nacina upotrebe katanaca su deljivi katanac S-katanac (engl.
shared), koji se postavlja pri citanju objekta, i iskljucivi katanac X-katanac
(engl. exclusive), koji se postavlja pri upisu u objekat. Ovi se katanci mogu
postaviti kako na pojedinacnu vrstu tako i na celu tabelu. Takav je jos samo
tzv. katanac azuriranja U-katanac (engl. update), koji omogucuje menjanje objekta (tabele ili vrste) i podrazumeva dodelu X-katanca promenjenoj
vrsti. Neki katanci nad istim objektom su kompatibilni (moze ih istovremeno
postaviti vise transakcija), a neki nisu. Sledeca tabela ilustruje kompatibilnost S, U, X katanaca nad istim objektom od strane dve transakcije (jedna
poseduje katanac, druga ga trazi):

T2
T1
S
U
X

D
D
N

D
N
N

N
N
N

Postoje i druge vrste katanaca u sistemu DB2, koje izrazavaju nameru


transakcije da procita vrednost objekta, odnosno da promeni vrednost objekta (npr. namera da cita podatke iz tabele IS, engl. intent share, namera
da promeni vrednost u tabeli IX, engl. intent exclusive, citanje sa namerom
promene SIX, engl. shared with intent exclusive), pravo menjanja podataka
uz dopustenje drugim transakcijama da citaju podatke U, engl. update, pri
cemu svako menjanje proizvodi iskljucivi katanac na promenjenoj vrsti, itd.
[38].
Katanci se drze do kraja transakcije, tj. do njene potvrde ili ponistenja

(osim u slucaju nivoa izolovanosti koji ne obezbeduju


u potpunosti ACID
svojstva transakcija CS i UR). Pri ovakvom pristupu dvofaznost transakcija

282

14 Transakcija, integritet i konkurentnost


je ocita, ali je izvrsenje transakcija nad istim objektima gotovo serijsko (smanjena konkurentnost). Stoga se pribegava usitnjavanju transakcija, sto opet
povecava izglede za uzajamno blokiranje.

Transakcija dobija katance od sistema, automatski (bez eksplicitnog zahteva):


kad transakcija otvori kursor za citanje, automatski dobija IS katanac nad
odgovarajucom tabelom; kada uspesno obavi citanje vrste, automatski dobija
S-katanac na toj vrsti; kada otvori kursor za azuriranje, dobija IX ili U katanac
nad tabelom; kada uspesno obavi azuriranje vrste, dobija X-katanac na vrsti,
itd. Pojedinacne vrste mogu biti zakljucane samo S, U ili X katancima, dok
se katanci namere mogu postaviti samo na tabele ili prostore tabela.

14.4.1

Re
senje problema konkurentnosti

Primenom mehanizma zakljucavanja uz dvofaznost transakcija, resenja tri problema konkurentnosti mogu se graficki predstaviti na sledeci nacin (t predstavlja
vremensku osu):

Re
senje problema nekonzistentne analize:
T1 :
A: azurira KI
(X-katanac nad slogom sa
K SIF=k1, I SIF=i1, IZD.=2)

T2 :
t1

t2

A: ceka jer ne moze da dobije


katanac nad istim slogom

B: azurira I
(X-katanac nad slogom sa
I SIF=i1)

t3

ceka

COMMIT
katance)
(oslobada

t4

ceka

t5

A: azurira KI
(X-katanac nad svim slogovima
sa I SIF=i1)

t6

B: azurira I
(X-katanac nad slogom
sa I SIF=i1)

t7
?
t

COMMIT
katance)
(oslobada

14.4 Zakljucavanje

283

Re
senje problema izgubljenog a
zuriranja:
T1 :
cita I
(S-katanac nad slogom sa)
I SIF=i2)
azurira I
(trazi X-katanac nad slogom
sa I SIF=i2 i ceka)

T2 :
t1
t2

cita I
(S-katanac nad slogom sa)
I SIF=i2)

t3

t4
?
t

azurira I
(trazi X-katanac nad slogom sa
I SIF=i2 i ceka)

Dakle, doslo je do uzajamnog blokiranja, pa je resavanje problema izgubljenog


azuriranja dovelo do novog problema. Sistem DB2 resava problem uzajmnog blokiranja tako sto ga ne sprecava vec ga, kada se dogodi, detektuje. Tada izabira jednu
transakciju za zrtvu, ponistava je ili zahteva od nje da sama sebe ponisti, pri

cemu se oslobadaju
svi katanci koje je ta transakcija drzala.
Re
senje problema zavisnosti od poni
stenog a
zuriranja:
T1 :

T2 :
azurira slog r
(dobija X-katanac nad r)

t1
cita slog r
(trazi S-katanac nad r
i ceka)

t2

t3
?
t

ROLLBACK
(ponistava se azurirana vrednost
katanac)
i oslobada

Sledeci primer ilustruje problem uzajamnog blokiranja u realisticnoj situaciji


izvrsenja veceg broja transakcija nad vecim brojem objekata.
Primer 14.6 Neka se konkurentno izvrsavaju transakcije T1 , T2 , . . . , T12 nad slogovima obelezenim sa A,B,C,D,E,F,G,H. U sledecoj tabeli navedene su radnje koje

284

14 Transakcija, integritet i konkurentnost

ove transakcije izvrsavaju u navedenim vremenskim trenucima nad navedenim slogovima ([24]) (odgovarajuci katanci se dobijaju pri citanju odnosno azuriranju, a

oslobadaju
se samo pri uspesnom kompletiranju ili ponistenju transakcije).
vreme trans. radnja
vreme trans. radnja
t1 :
T1 :
citaj A
t19 :
T9 :
upisi G
t2 :
T2 :
citaj B
t20 :
T8 :
citaj E
t3 :
T1 :
citaj C
t21 :
T7 :
COMMIT
t4 :
T4 :
citaj D
t22 :
T9 :
citaj H
t5 :
T5 :
citaj A
t23 :
T3 :
citaj G
t6 :
T2 :
citaj E
t24 :
T10 :
citaj A
t7 :
T2 :
upisi E
t25 :
T9 :
upisi H
t8 :
T3 :
citaj F
t26 :
T6 :
COMMIT
t9 :
T2 :
citaj F
t27 :
T11 :
citaj C
t10 :
T5 :
upisi A
t28 :
T12 :
citaj D
t11 :
T1 :
COMMIT
t29 :
T12 :
citaj C
t12 :
T6 :
citaj A
t30 :
T2 :
upisi F
t13 :
T5 :
ROLLBACK
t31 :
T11 :
upisi C
t14 :
T6 :
citaj C
t32 :
T12 :
citaj A
t15 :
T6 :
upisi C
t33 :
T10 :
upisi A
t16 :
T7 :
citaj G
t34 :
T12 :
upisi D
t17 :
T8 :
citaj H
t35 :
T4 :
citaj G
t18 :
T9 :
citaj G
t36 :
...
...
Pitanje koje se postavlja je: da li u trenutku t36 ima uzajamnog blokiranja?
Iz analize transakcij
a sledi da su transakcije T1 , T7 i T6 uspesno zavrsile rad, a
da je transakcija T5 ponistena. Iz grafa preostalih transakcija i katanaca koje one
drze nad pojedinim slogovima (slika 14.2) sledi da u trenutku t36 nijedna od njih
ne radi nista korisno, tj. da su uzajamno blokirane.

14.5

Pitanja i zadaci

1. Definisati sledece pojmove i navesti primere:


transakcija
integritet
konkurentnost
izvrsenje skupa transakcija
relacija zavisnosti
ekvivalentna izvrsenja
serijsko izvrsenje

linearizovano izvrsenje
zakljucavanje
katanac
granularnost
dvofaznost transakcija
uzajamno blokiranje transakcija
graf cekanja

2. Objasniti ACID svojstva transakcija.


3. Formulisati i objasniti probleme konkurentnosti.

14.5 Pitanja i zadaci

285
T10

T11

A(X)

C(X)
?
T12
D(X)
?
T4
G(S)
?
T9
6
G(S)

H(X)

T8
E(S)
?
T2

T3
F(X)

Slika 14.2: Graf cekanja transakcija na X i S katance

4. Kako se resavaju problemi konkurentnosti?


5. Date su transakcije T1 ,
T1 : citaj r
T2 :
azur. r
citaj s
citaj t
azur. t

T2 i T 3 :
citaj s
citaj t
azur. t
citaj r

T3 :

citaj t
citaj s
azur. s
citaj r
azur. r

(r, s i t su slogovi).
Navesti sva moguca izvrsenja skupa transakcija {T1 , T2 , T3 } u slucaju da se
ne primenjuje mehanizam zakljucavanja. Koja su od tih izvrsenja linearizovana?
6. Neka su date transakcije kao u prethodnom primeru. Navesti moguca
izvrsenja (ili delimicna izvrsenja) tog skupa transakcija, ako se koriste deljivi
i ekskluzivni katanci. Koja od tih izvrsenja dovode do uzajamnog blokiranja?
Predloziti kriterijume ponistavanja kojima se razresava uzajamno blokiranje.
7. Konstruisati jedno linearizovano izvrsenje skupa transakcija od kojih bar
jedna nije dvofazna.

15

Oporavak
Oporavak podrazumeva aktivnost koju sistem preduzima u slucaju da se, u toku
izvrsenja jedne ili vise transakcija, otkrije neki razlog koji onemogucava njihovo
uspesno kompletiranje. Taj razlog moze biti:
u samoj transakciji, kao sto je prekoracenje neke od dozvoljenih vrednosti
(pad transakcije),
u sistemu, npr. prestanak elektricnog napajanja (pad sistema), ili
u disku na kome je baza podataka, npr. ostecenje glava diska (pad medija).
Kako je transakcija logicka jedinica posla, njene radnje moraju ili sve uspesno
da se izvrse ili nijedna, pa je u slucaju nemogucnosti uspesnog kompletiranja
neophodno ponistiti efekte parcijalno izvrsenih transakcija. Sa druge strane, moze
se dogoditi da u trenutku pada sistema neki efekti uspesno kompletiranih transakcija jos nisu upisani u bazu (npr. azurirani slogovi su jos u unutrasnjoj memoriji
u baferu podataka ciji se sadrzaj pri padu sistema gubi); zato moze postojati
potreba za ponovnim (delimicnim) izvrsenjem nekih prethodno uspesno kompletiranih transakcija. To ponistavanje odnosno ponovno izvrsavanje u cilju uspostavljanja konzistentnog stanja baze predstavlja sistemsku aktivnost oporavka od pada
transakcije ili sistema. Transakcija je, dakle, i logicka jedinica oporavka. U slucaju
pada medija, oporavak ukljucuje pre svega prepisivanje arhivirane kopije baze (npr.
sa trake) na ispravan medij, a zatim, eventualno, ponovno izvrsenje transakcija
kompletiranih posle poslednjeg arhiviranja a pre pada medija.
Ovako koncipiran oporavak nuzno se zasniva na postojanju ponovljenih (dupliranih) podataka i informacija na razlicitim mestima ili medijima, tj. na mogucnosti
rekonstrukcije informacije na osnovu druge informacije, ponovljeno smestene na
drugom mestu u sistemu. Kao drugo mesto u sistemu, na koje se (osim u bazu)
upisuju informacije o izvrsenim radnjama, obicno se koristi tzv. log datoteka (sistemski log, dnevnik azuriranja).
286

15 Oporavak

287

Komponenta SUBP odgovorna za oporavak baze podataka od pada transakcije,


sistema ili medija je upravljac oporavka. Njegova aktivnost se globalno sastoji od
sledecih radnji:
periodicno prepisuje (engl. dump) celu bazu podataka na medij za arhiviranje;
pri svakoj promeni baze podataka, upisuje slog promene u log datoteku, sa
tipom promene i sa novom i starom vrednoscu pri azuriranju, tj. sa novom
vrednoscu pri unosenju u bazu i starom vrednoscu pri brisanju iz baze;
u slucaju pada transakcije ili sistema, stanje baze podataka moze biti nekonzistentno; upravljac oporavka koristi informacije iz log datoteke da ponisti dejstva parcijalno izvrsenih transakcija odnosno da ponovo izvrsi neke kompletirane transakcije; arhivirana kopija baze podataka se ne koristi;
u slucaju pada medija (npr. diska na kome je baza podataka), najsvezija
arhivirana kopija baze podataka se prepisuje na ispravni medij (disk), a zatim se koriste informacije iz log datoteke za ponovno izvrsenje transakcija
kompletiranih posle poslednjeg arhiviranja a pre pada medija.
Da bi se omogucilo upravljacu oporavka da ponisti odnosno da ponovo izvrsi
transakcije, potrebno je obezbediti procedure kojima se ponistavaju odnosno
ponovo izvrsavaju pojedinacne radnje tih transakcija kojima se menja baza podataka. Baza podataka menja se operacijama azuriranja (u uzem smislu), unosenja
ili brisanja podataka, pa pored procedura za izvrsenje tih operacija, SUBP mora
biti snabdeven i odgovarajucim procedurama za ponistavanje odnosno ponovno
izvrsenje tih operacija, na osnovu starih odnosno novih vrednosti zapamcenih u
sistemskom logu. Drugim recima, SUBP poseduje, osim tzv. DO-logike (uradi),
i tzv. UNDO (ponisti) i REDO (ponovo uradi) logiku.
Pad sistema ili medija moze se dogoditi i u fazi oporavka od prethodnog
pada. Zato moze doci do ponovnog ponistavanja vec ponistenih radnji, odnosno
do ponovnog izvrsavanja vec izvrsenih radnji. Ova mogucnost zahteva da UNDO
i REDO logika imaju svojstvo idempotentnosti ([35]), tj. da je UNDO(UNDO(x))
UNDO(x) i REDO(REDO(x)) REDO(x) za svaku radnju x.
U log datoteci pokazivacima su povezani slogovi koji se odnose na jednu transakciju. To podrazumeva cuvanje log datoteke na mediju sa direktnim pristupom, npr.
na disku. S druge strane, kolicina podataka koji se upisuju u log datoteku moze
biti veoma velika (nekoliko stotina miliona bajtova dnevno). Zato se log datoteka
obicno organizuje tako da ima svoj aktivni deo na mediju sa direktnim pristupom,
i arhivirani deo (npr. na traci), u koji se prepisuje aktivni log kadgod se prepuni.
Pretpostavlja se da log datoteka nikada, ili veoma retko, pada, tj. da je,
zahvaljujuci sopstvenom dupliranju, tripliranju, itd, na raznim medijima, uvek dostupna.

288

15 Oporavak

15.1

Oporavak od pada transakcije

Jedan aplikativni program moze se sastojati od veceg broja transakcija. Izvrsenje


jedne transakcije moze da se zavrsi planirano ili neplanirano. Do planiranog
zavrsetka dolazi izvrsenjem COMMIT operacije kojom se uspesno kompletira
do
transakcija, ili eksplicitne ROLLBACK operacije, koja se izvrsava kada dode
greske za koju postoji programska provera (tada se radnje transakcije ponistavaju a
program nastavlja sa radom izvrsenjem sledece transakcije). Neplanirani zavrsetak
se kada dode
do greske za koju ne postoji programizvrsenja transakcije dogada
ska provera; tada se izvrsava implicitna (sistemska) ROLLBACK operacija, radnje
transakcije se ponistavaju a program prekida sa radom.
Izvrsavanjem operacije COMMIT, efekti svih azuriranja transakcije postaju
trajni, tj. vise se ne mogu ponistiti procedurom oporavka. U log datoteku se upisuje
odgovarajuci slog o kompletiranju transakcije (COMMIT slog), a svi katanci koje

je transakcija drzala nad objektima oslobadaju


se. Izvrsenje COMMIT operacije
ne podrazumeva fizicki upis svih azuriranih podataka u bazu (neki od njih mogu
biti u baferu podataka, pri cemu se, efikasnosti radi, sa fizickim upisom u bazu

ceka dok se baferi ne napune). Cinjenica


da efekti azuriranja postaju trajni znaci
da se moze garantovati da ce se upis u bazu dogoditi u nekom narednom trenutku;
u slucaju pada sistema, na primer, posle COMMIT operacije a pre fizickog upisa
podataka iz bafera u bazu, upis se garantuje REDO-logikom.
Pad transakcije nastaje kada transakcija ne zavrsi svoje izvrsenje planirano.
Tada sistem izvrsava implicitnu prinudnu ROLLBACK operaciju, tj. sprovodi
aktivnost oporavka od pada transakcije.
Pojedinacne radnje azuriranja u okviru jedne transakcije, kao i operacija
pocetka transakcije (eksplicitna ili implicitna BEGIN TRANSACTION operacija),
izvrsavaju se na nacin koji omogucuje oporavak baze u slucaju pada transakcije.
Oporavak podataka u bazi i vracanje baze u konzistentno stanje omogucuje se
upisom svih informacija o ovim radnjama i operacijama u sistemski log.
Pri izvrsavanju operacija azuriranja (u uzem smislu), osim sto se azurira baza,
u log se beleze vrednosti svakog azuriranog objekta pre i posle azuriranja (uz ostale
informacije o tom azuriranju).
Izvrsavanjem operacije BEGIN TRANSACTION (bilo da je eksplicitna ili implicitna) u log datoteku se upisuje slog pocetka transakcije.
Operacija ROLLBACK, bilo eksplicitna ili implicitna, sastoji se od ponistavanja
ucinjenih promena nad bazom. Izvrsava se citanjem unazad svih slogova iz log
datoteke koji pripadaju toj transakciji, do BEGIN TRANSACTION sloga. Za
svaki slog, promena se ponistava primenom odgovarajuce UNDO-operacije.
Aktivnost oporavka od pada transakcije ne ukljucuje REDO logiku.

15.2 Oporavak od pada sistema

15.2

289

Oporavak od pada sistema

U slucaju pada sistema, sadrzaj unutrasnje memorije je izgubljen. Zato se, po


ponovnom startovanju sistema, za oporavak koriste podaci iz log datoteke da bi
se ponistili efekti transakcija koje su bile u toku u trenutku pada sistema. Ove
transakcije se mogu identifikovati citanjem sistemskog loga unazad, kao transakcije
za koje postoji BEGIN TRANSACTION slog ali ne postoji COMMIT slog.

Da bi se smanjila kolicina posla vezana za ponistavanje transakcija, uvode se,

u pravilnim intervalima, obicno posle odredenog


broja upisanih slogova u log da
toteku, tacke pamcenja. U momentu koji odreduje
tacku pamcenja, fizicki se upisuju podaci i informacije iz log bafera i bafera podataka (koji su u unutrasnjoj
memoriji) u log datoteku i u bazu podataka, redom, i upisuje se slog tacke pamcenja
u log datoteku. Ovaj slog sadrzi informaciju o svim aktivnim transakcijama u momentu tacke pamcenja, adrese poslednjih slogova tih transakcija u log datoteci, a
moze sadrzati i niz drugih informacija o stanju baze podataka u tom trenutku.
Adresa sloga tacke pamcenja upisuje se u datoteku ponovnog startovanja (engl.
restart file).

Fizicki upis u tacki pamcenja znaci da ce se sadrzaj bafera prepisati na spoljni


medij bez obzira da li su baferi puni ili ne. To dalje znaci da se fizicki upis svih
azuriranih podataka uspesno kompletirane transakcije moze garantovati tek u tacki
pamcenja koja sledi za uspesnim kompletiranjem transakcije. Tako dolazimo do
zakljucka da su kompletiranje transakcije (upis COMMIT sloga u log datoteku) i
definitivni upis svih azuriranja te transakcije u bazu dve odvojene radnje, za koje

se ne sme dogoditi da se jedna izvrsi a druga ne. Mehanizam koji to obezbeduje


je protokol unaprednog upisivanja u log (engl. WAL Write Ahead Log). Prema
ovom protokolu, pri izvrsenju operacije COMMIT prvo se odgovarajuci slog fizicki
upisuje u log datoteku, pa se zatim podaci upisuju iz bafera podataka u bazu.
do pada sistema posle upisa COMMIT sloga u log datoteku a pre nego
Ako dode
sto je sadrzaj bafera podataka prepisan u bazu, taj se sadrzaj moze restaurisati iz
sistemskog loga REDO logikom.

Pri ponovnom startovanju sistema, posle pada sistema, moguce je prema


sadrzaju log datoteke identifikovati neuspele transakcije kandidate za ponistavanje,
i uspele transakcije kandidate za ponovno izvrsavanje. Oporavak baze podataka
tada se vrsi prema protokolu koji se moze opisati sledecim pseudoprogramom ([35]):

290

15 Oporavak

BEGIN
naci slog poslednje tacke pamcenja u log datoteci
(iz datoteke ponovnog startovanja);
IF u poslednjoj tacki pamcenja nema aktivnih transakcija
i slog tacke pamcenja je poslednji slog u log datoteci,
oporavak je zavrsen
ELSE
BEGIN
formirati dve prazne liste transakcija, uspele i neuspele;
sve transakcije aktivne u poslednjoj tacki pamcenja
staviti u listu neuspelih;
citati redom log datoteku od tacke pamcenja do kraja:
na slog pocetak transakcije,
kada se naide
dodati transakciju listi neuspelih;
na slog kompletirana transakcija,
kada se naide
dodati (premestiti) tu transakciju listi uspelih;
citati unazad log datoteku (od kraja)
i ponistiti akcije i efekte neuspelih transakcija;
citati log datoteku od poslednje tacke pamcenja unapred
i ponovo izvrsiti uspele transakcije
END
END.
Primer 15.1 Razmotrimo izvrsenje skupa transakcija predstavljeno slikom 15.1.
T1
T2
T3
T4
T5
trans.

tpam

tpad

vreme

Slika 15.1: Pad sistema pri izvrsenju skupa transakcija


Na vremenskoj osi oznacene su dve tacke: tpam tacka pamcenja, i tpad tacka
pada sistema. Transakcija T1 zavrsila je rad pre poslednje tacke pamcenja, pa su
njena azuriranja trajno upisana u bazu aktivnoscu postavljanja te tacke, i zato ona

15.2 Oporavak od pada sistema

291

ne ulazi u proces oporavka. Transakcije T2 i T3 zavrsile su sa radom posle momenta


tpam a pre pada sistema. U momentu pada sistema aktivne su transakcije T4 i T5 .
Zbog toga prethodni protokol svrstava transakcije T4 i T5 u listu neuspelih (cija
dejstva ponistava), a transakcije T2 i T3 u listu uspelih (koje zatim ponovo izvrsava
od tacke tpam). Time je zavrsena aktivnost oporavka od pada sistema.
sve X-katance pri
Upravljac oporavka podrazumeva da transakcija oslobada
izvrsenju COMMIT operacije. Najcesce je isti slucaj i sa S-katancima. Ovo je
saglasno sa svojstvom izolacije transakcije i resava problem zavisnosti od ponistenog
azuriranja, bilo da se ono dogodilo pre ili posle tacke pamcenja. Dakle, nisu moguca
izvrsenja prikazana na slikama 15.2, 15.3.

T2

T4

trans.

tpam azurira

cita

tpad

vreme

Slika 15.2: Zavisnost od ponistenog azuriranja posle tacke pamcenja

T2
T4
trans.

azurira

cita

tpam

tpad

vreme

Slika 15.3: Zavisnost od ponistenog azuriranja pre tacke pamcenja

15.2.1

Pobolj
sanje procedure oporavka od pada sistema

Postoji niz poboljsanja i modifikacija izlozenog konceptualnog postupka oporavka


od pada sistema. Tako je moguce sva upisivanja jedne transakcije u bazu ostaviti
za trenutak izvrsenja COMMIT operacije te transakcije, cime se eliminise potreba
je moguce oslabiti zahtev za izolacijom transakcije, tj.
za UNDO logikom. Takode
zahtev za dvofaznoscu, sto nosi opasnost nelinearizovanog izvrsenja.
Jedno evidentno poboljsanje protokola oporavka od pada sistema odnosi se na
aktivnosti vezane za tacku pamcenja. Naime, prethodno opisani protokol ponistava
efekte neuspelih transakcija koji mozda nisu ni bili ubelezeni u bazu (vec samo u
bafer podataka ako su se dogodili posle tacke pamcenja), odnosno ponovo izvrsava

292

15 Oporavak

radnje uspelih transakcija od tacke pamcenja, cak i ako su efekti tih radnji, zbog
popunjenosti bafera podataka, upisani u bazu pre pada sistema.

Moguce je eliminisati fizicko upisivanje bafera podataka u bazu podataka u tacki


pamcenja, a u fazi oporavka od pada sistema ponistavati samo one radnje neuspelih
transakcija ciji su efekti upisani u bazu, odnosno ponovo izvrsavati samo one radnje
uspelih transakcija ciji efekti nisu upisani u bazu. U tom cilju uvodi se, u svaki
slog sistemskog loga, u vreme njegovog upisa u log, jedinstvena oznaka serijski
broj u logu (engl. LSN Log Sequence Number). Serijski brojevi su u rastucem
poretku. Osim toga, kadgod se azurirana stranica fizicki upisuje u bazu podataka,
u stranicu se upisuje i LSN sloga sistemskog loga koji odgovara tom azuriranju.
U sistemskom logu moze biti vise slogova koji odgovaraju azuriranju iste stranice
baze podataka. Ako je serijski broj upisan u stranicu P veci ili jednak serijskom
broju sloga loga, efekat azuriranja kome odgovara taj slog fizicki je upisan u bazu;
ako je manji, efekat nije upisan.

Da bi se slog iz baze podataka azurirao, potrebno je procitati (iz baze) stranicu


na kojoj se slog nalazi. Posle azuriranja sloga, stranica je (u baferu podataka)
spremna za upis u bazu, pri cemu i dalje nosi serijski broj svog prethodnog upisa
u bazu.

Sada se u proceduru registrovanja tacke pamcenja, osim sto se eliminise fizicki


upis bafera podataka u bazu, moze dodati upis, u slog tacke pamcenja, vrednosti
LSN m najstarije stranice bafera podataka, tj. najmanjeg LSN stranica iz bafera
podataka, koje su azurirane ali jos nisu upisane u bazu.

Slog sistemskog loga sa serijskim brojem m odgovara tacki u sistemskom logu


od koje treba, umesto od tacke pamcenja, pri oporavku od pada sistema ponovo
izvrsavati uspele transakcije. Kako tacka m prethodi tacki pamcenja, moze se desiti
da neka transakcija koja je uspesno kompletirana pre tacke pamcenja, upadne u
skup aktivnih (uspelih) transakcija (transakcija T1 , slika 15.4). Na takvu transakciju primenice se procedura oporavka, mada se to ne bi dogodilo u prethodnoj varijanti oporavka; to je cena smanjenog broja ponistavanja, ponovnog izvrsavanja

i fizickog upisa koje obezbeduje


ovaj postupak.
Procedura oporavka od pada sistema sada ima sledeci izgled:

15.2 Oporavak od pada sistema

293

T1
T2
T3
T4
T5
trans.

tpam

tpad

vreme

Slika 15.4: Oporavak od pada sistema koriscenjem serijskih brojeva

BEGIN
formirati dve prazne liste transakcija, uspele i neuspele;
sve transakcije aktivne u tacki m staviti u listu neuspelih;
citati redom log datoteku od tacke m do kraja:
na slog pocetak transakcije,
kada se naide
dodati transakciju listi neuspelih;
na slog kompletirana transakcija,
kada se naide
dodati (premestiti) tu transakciju listi uspelih;
citati unazad log datoteku (od kraja)
i ponistiti efekte onih radnji neuspelih transakcija
za koje je p r, gde je r LSN tekuceg sloga
a p LSN odgovarajuce stranice baze podataka;
citati log datoteku od tacke m unapred
i ponovo izvrsiti one radnje uspelih transakcija
za koje je p < r (p, r kao u prethodnom koraku)
END.

294

15 Oporavak

15.3

Pitanja i zadaci

1. Definisati sledece pojmove:


pad transakcije
pad sistema
pad medija
log datoteka
upravljac oporavka
UNDO logika

REDO logika
tacka pamcenja
protokol unaprednog upisivanja u log
dnevnik azuriranja

2. U cemu se sastoji funkcija upravljaca oporavka?


3. Opisati protokol oporavka baze podataka od pada sistema.
4. U cemu se sastoji poboljsanje prethodnog protokola pomocu serijskog broja
u logu? Opisati odgovarajucu proceduru.
5. Neka se transakcije sastoje samo od radnji citanja i upisivanja slogova, i
neka njihova sintaksa ukljucuje eksplicitni BEGIN TRANSACTION i END
TRANSACTION iskaz. Skicirati programsku implementaciju procedure za
naizmenicno izvrsavanje skupa transakcija ovoga tipa (npr. po dve radnje
svake transakcije), uz belezenje odgovarajucih informacija u posebnu datoteku
(log datoteku). U slucaju uzajamnog blokiranja, procedura treba da izabere transakciju za ponistavanje i da ponisti njene efekte uz azuriranje log
datoteke. Uvesti neophodne pretpostavke i ogranicenja.
6. Skicirati programsku implementaciju procedure koja realizuje protokol oporavka baze podataka od pada sistema. Dopuniti proceduru iz prethodnog
zadatka tako da simulira pad sistema i poziva proceduru za oporavak baze
podataka.
7. Zasto je potrebno primeniti protokol unaprednog upisivanja u log datoteku?

Deo VI

Distribuirane baze podataka

U delu VI razmatraju se distribuirane baze podataka, sistemi za upravljanje


distribuiranim bazama podataka, specificni problemi u realizaciji pojedinih funkcija
tih sistema, kao i nacini za resavanje tih problema.
Sistem za upravljanje distribuiranim bazama podataka je i sam distribuiran, pa
se oznacava sa DSUBP distribuirani SUBP. Distribuirane baze podataka i DSUBP
zajedno obrazuju sistem distribuiranih baza podataka. Za obe vrste sistema koristi
se i kraci termin distribuirani sistem, kada je iz konteksta jasno na koju vrstu
sistema se termin odnosi.
Neke od poznatih prototipskih implementacija DSUBP su SDD-1 (System for
Distributed Databases, Computer Corporation of America [53]), R (IBM Research
Lab. [68]) i distribuirani INGRES (University of California, Berkeley [59]). Najpoznatiji komercijalni DSUBP su INGRES/STAR, ORACLE7/DDO (distributed
database option), DB2/DDF (distributed database facility). Svi nabrojani sistemi su relacioni, s obzirom da nerelacioni DSUBP ne mogu biti uspesni (v. [27]).
Osnovna karakteristika distribuiranih sistema je velika kolicina poruka i podataka koji se prenose preko komunikacione mreze. Zato je glavni cilj u postizanju
efikasnosti distribuiranih sistema smanjenje mrezne komunikacije. Ovaj cilj se
projektuje na sve kljucne funkcije SUBP; one moraju da se razmatraju iz novog
ugla, a problemi u njihovoj realizaciji zahtevaju nova resenja.
Deo VI sastoji se od dve glave:
Glava 16, Problemi distribuiranih sistema, bavi se nekim od problema distribuiranih sistema, kao sto su fragmentacija podataka, distribuirana
obrada upita, distribuirano azuriranje i upravljanje katalogom. Ova glava
sadrzi i kratak prikaz heterogenih distribuiranih sistema.
Za upravljanje transakcijama (kontrolu konkurentnosti i oporavka) u distribuiranom okruzenju neophodan je novi pristup, bitno razlicit od onog u
centralizovanom slucaju. Zbog toga je glava 17, Distribuirano upravljanje
transakcijama, posvecena metodama za resavanje problema distribuiranog
izvrsenja skupa transakcija i problema oporavka.

296

16

Problemi distribuiranih
sistema
16.1

O distribuiranim sistemima

Neformalno govoreci, distribuirana baza podataka je baza podataka koja se ne


nalazi u celosti na jednoj fizickoj lokaciji (na jednom racunaru), vec je razdeljena
na vise lokacija koje su povezane komunikacionom mrezom. Svaka lokacija, koja
se zove i cvor komunikacione mreze, poseduje svoj sopstveni, autonomni sistem za
upravljanje bazama podataka, sa sopstvenom kontrolom, upravljacem transakcija i
oporavka od pada, i ostalim znacajnim funkcijama, a ima i svoj centralni procesor

i ulazno/izlazne uredaje.
Osnovna pretpostavka za uspesnost sistema za upravljanje distribuiranim
bazama podataka je nevidljivost lokacije. Naime, ovaj sistem treba da obezbedi
jos jedan nivo fizicke nezavisnosti podataka: korisnik i njegov program ne treba
da znaju na kojoj se lokaciji u distribuiranom sistemu nalaze podaci koji su im
potrebni. Za korisnika, distribuirani sistem treba da izgleda identicno sa nedistribuiranim (centralizovanim), tj. pristup podacima treba da je isti kao da su
svi podaci smesteni u lokalnom cvoru korisnika. Sistem odlucuje (ne ukljucujuci
korisnika) o tome da li ce potrebne podatke, ukoliko su na udaljenoj lokaciji, doneti
na lokalni cvor za obradu, ili ce obradu preneti na udaljenu lokaciju.
Sistem distribuiranih baza podataka moze se predstaviti grafom ciji su cvorovi
lokacije, a grane komunikacione linije. Svaka lokacija sadrzi centralni procesor
(CP), lokalnu bazu podataka (BP) i pripadni SUBP, kao i skup terminala. Dve
njima postoji direktna veza koja funkcionise, ili ako
lokacije su povezane ako medu
postoji treca lokacija koja je sa njima u direktnoj vezi (slika 16.1).
Na razlicitim lokacijama, lokalni sistemi za upravljanje bazama podataka mogu
biti razliciti. Tada se DSUBP naziva heterogenim. Ako su SUBP na svim lokacijama isti, DSUBP se naziva homogenim.
297

298

16 Problemi distribuiranih sistema

komunikaciona
linija
CP

..
.

..
.
BP

CP

..
.

BP

..
.

H
H

CP

..
.

CP

..
.

..
.

BP

BP

..
.

Slika 16.1: Struktura sistema distribuiranih baza podataka

Prednosti koje donosi distribuirani koncept baze podataka su:


Lokalna autonomija podataka, upavljanja i kontrole. Okruzenje u kome se
distribuirane baze primenjuju, obicno je i samo logicki i fizicki distribuirano
(npr. univerzitet, fakulteti, odseci, odeljenja; centralna biblioteka, maticne
biblioteke, ogranci; ministarstvo, regionalni centri, itd). Distribuiranje baza
podataka kao i sistema za upravljanje njima, omogucuje pojedinim grupama
da lokalno kontrolisu sopstvene podatke, uz mogucnost pristupa podacima na
drugim lokacijama kada je to potrebno.

Veci kapacitet i postupni rast. Cest


razlog za instaliranje distribuiranog si
stema je nemogucnost jednog racunara da primi i obraduje
sve potrebne podatke. U slucaju da potrebe nadmase postojece kapacitete, dodavanje cvora
distribuiranom sistemu je znatno jednostavnije nego zamena centralizovanog
sistema vecim.
Pouzdanost i raspolozivost. Distribuirani sistemi mogu da nastave svoje
funkcionisanje i kada neki od cvorova privremeno izgube funkcionalnost.

16.1 O distribuiranim sistemima

299

Efikasnost i fleksibilnost. Podaci su fizicki blizu onome ko ih stvara i koristi,


pa je znatno smanjena potreba za udaljenom komunikacijom.
Jedan jednostavan specijalni slucaj distribuiranog sistema je klijent/server sistem. To je distribuirani sistem u kome su neki cvorovi klijenti a neki serveri,
pri cemu su na serverima smesteni podaci (i sistemi za upravljanje podacima) a
na klijentima se izvrsavaju aplikacije. Korisnik, odnosno aplikacija vodi racuna o
tome na kom serveru su smesteni relevantni podaci, sto znaci da u ovim sistemima
nije ostvarena nevidljivost lokacije.
Klijent/server sistemi zasnovani su na klijent/server arhitekturi, unekoliko razlicitoj od ANSI/SPARC arhitekture sistema baza podataka prikazane u glavi
1. Ova arhitektura se odnosi na jednostavnu logicku podelu odgovornosti unutar sistema na dva dela. Jedan deo (prvobitno u engleskoj terminologiji backend, pozadinski), server, u stvari je SUBP sa bazama podataka, i odgovoran je za
definisanje podataka, manipulisanje podacima, bezbednost, integritet, oporavak,
itd. Drugi deo (prvobitno je koriscen engleski termin frontend, prednji sistem), klijent, odgovoran je za rad aplikacija, kako korisnickih tako i sistemskih (na primer,
procesor upitnog jezika, generator aplikacija, generator izvestaja, itd). Ovakva

podela posla ne zahteva razdvajanje odgovornosti na razne racunare. Medutim,


termin klijent/server odnosi se danas gotovo iskljucivo na slucaj kada su klijent i
server na odvojenim racunarima, jer se mogucnost izdvajanja funkcija na odvojene
racunare pokazala veoma privlacnom i korisnom.
Osnovni klijent/server sistemi, dakle, podrazumevaju veci broj klijenata koji

dele isti server. Moguce je, medutim,


da jedan klijent pristupi vecem broju servera,
pri cemu je svaki pojedinacni zahtev (ili transakcija) upucen tacno jednom serveru
(korisnik mora da zna na kom serveru se koji podaci nalaze). Detaljnije informacije
o klijent/server sistemima mogu se naci, npr. u [27].
Klijent/server sistemi dozivljavaju veliku komercijalnu ekspanziju, pre svega
zbog znacajnog pojednostavljenja funkcija i problema vezanih za njihovu implementaciju, u odnosu na prave sisteme za upravljanje distribuiranim bazama podataka. Bez obzira na aktuelno stanje na trzistu, u preostalom tekstu ove glave,
kao i u sledecoj glavi, bice razmotrena puna funkcionalnost pravih DSUBP, jer
osnova za razvoj novih arhitektura sistema, pa i za usmeravanje trzista, jeste upravo
osvajanje pune funkcionalnosti DSUBP.
Dok se kod centralizovanih sistema baza podataka efikasnost sistema postizala
pre svega smanjenjem broja obracanja disku (jer je komunikacija sa diskom bila
najsporija), kod distribuiranih sistema efikasnost se postize pre svega smanjenjem
kolicine podataka i poruka koje se prenose preko mreze. Naime, komunikacione veze
kroz mrezu su obicno znatno sporije (i do 40 puta) od komunikacije sa lokalnim
diskom, i obicno imaju nezanemarljivo vreme kasnjenja. Osim toga, upravljanje
porukama (slanje i prijem poruka) ukljucuje veliki broj operacija centralnog procesora (u proseku 5000 10000 instrukcija operativnog sistema i komunikacione
kontrole po poruci; v. [21]).

300

16 Problemi distribuiranih sistema

Da bi se postigla efikasnost DSUBP, sve njegove komponente treba realizovati


na nacin koji smanjuje mreznu komunikaciju. Najznacajniji problemi koje tom
prilikom treba resiti su:
fragmentacija podataka
distribuirana obrada upita
distribuirano (preneto) azuriranje
upravljanje katalogom
distribuirano izvrsenje skupa transakcija, sto ukljucuje konkurentnost, integritet, oporavak i protokole kompletiranja transakcija.

16.2

Fragmentacija podataka

Podaci u distribuiranom sistemu mogu biti particionirani (engl. partitioned) ili


ponovljeni (engl. replicated) u fizickoj memoriji.
U slucaju ponavljanja podataka, jedan logicki objekat moze imati vise fizickih
reprezentacija (veci broj kopija) na vecem broju lokacija. Ponovljenost podataka
povecava raspolozivost podataka i efikasnost pristupa podacima, ali u znacajnoj
meri usloznjava azuriranje podataka, koji moraju biti konzistentni u svim svojim
kopijama. Slozenost koju nosi sobom strategija ponavljanja podataka mora biti

sakrivena od korisnika, tj. mora biti obezbedena


nevidljivost ponavljanja podataka.
U slucaju particioniranja podataka, logicki skup podataka (skup podataka sa
logickog nivoa) treba na neki nacin podeliti, a zatim delove fragmente (eventualno
sa ponovljenim kopijama) razdeliti po raznim lokacijama. Logicki skup podatka u
relacionom sistemu je relacija, a prirodni fragment relacije (koji je opet relacija)
jeste neki njen podskup definisan uslovom projekcije i restrikcije. Fragmentacija
mora biti izvedena tako da se spajanjem fragmenata moze dobiti polazna relacija.
Na primer, relacija I sa sadrzajem iz glave 1 moze se SQL-olikim jezikom particionirati na sledece fragmente:

DEFINE FRAGMENT JU1


AS SELECT I SIF, NAZIV
FROM
I
WHERE DRZAVA = Jugoslavija
DEFINE FRAGMENT JU2
AS SELECT I SIF, STATUS, DRZAVA
FROM
I

16.3 Distribuirana obrada upita


WHERE

301
DRZAVA = Jugoslavija

DEFINE FRAGMENT AM1


AS SELECT I SIF, NAZIV
FROM
I
WHERE DRZAVA = Amerika

DEFINE FRAGMENT AM2


AS SELECT I SIF, STATUS, DRZAVA
FROM
I
WHERE DRZAVA = Amerika

Najcesce primenjivana tehnika u obezbedivanju


ocuvanja informacija pri frag
mentaciji podataka jeste uvodenje sistemskih identifikatora n-torki (tzv. nametnutih kljuceva) kao primarnih kljuceva, koji se pamte uz svaki deo pojedine n-torke,
i omogucuju njenu rekonstrukciju. Ova tehnika je primenjena u distribuiranim
sistemima R i SDD-1.

16.3

Distribuirana obrada upita

Distribuirana obrada upita podrazumeva distribuiranu optimizaciju kao i distribuirano izvrsavanje upita. Strategije optimizacije upita nad distribuiranom bazom
podataka imaju za cilj da minimizuju cenu obrade i vreme za koje ce korisnik dobiti
odgovor. U troskovima obrade najvecu stavku cine troskovi mrezne komunikacije,
tj. prenosa podataka kroz mrezu, dok su troskovi komunikacije sa ulazno/izlaznim

uredajima
i koriscenja procesora nizi za nekoliko redova velicine. Zbog toga je
veoma znacajno, u zavisnosti od propusnosti mreze (kolicine podataka koje moze da
primi u sekundi) i vremena kasnjenja, pravilno odabrati relacije i njihove fragmente
koji ce biti prenoseni sa jedne lokacije na drugu u cilju obrade upita (globalna
optimizacija). Razlog za prenosenje podataka moze biti to sto su podaci na lokaciji
razlicitoj od one na kojoj se postavlja upit, ili sto u upitu ucestvuje veci broj relacija
sa razlicitih lokacija. Izbor strategije za izvrsenje operacija na jednoj lokaciji poznat
je kao lokalna optimizacija.
Ako se n relacija R1 , R2 , . . . , Rn koje ucestvuju u upitu nalaze na k razlicitih
lokacija l1 , l2 , . . . , lk , pri cemu je svaka relacija Ri u celosti na lokaciji lj , onda se
osnovna strategija distribuirane obrade upita sastoji od sledeca dva koraka:
1. maksimalna redukcija svake relacije na njenoj lokaciji (lokalna restrikcija i
projekcija na atribute spajanja i izlazne atribute),
2. prenosenje dobijenih relacija na jednu lokaciju, ili na vise lokacija, redom,
na kojima je moguce izvrsiti pojedinacna spajanja i projekciju na izlazne
atribute.

302

16 Problemi distribuiranih sistema

Za drugi korak osnovne strategije vezana je odluka o tome koje se relacije


prenose i na koje lokacije. Ta odluka se donosi na osnovu procene kolicine podataka
lokacija u svakom pojedinacnom slucaju; izbor relacija i
koji se prenose izmedu
lokacija vrsi se tako da minimizuje protok podataka kroz mrezu. Sledeci primer
ilustruje mogucnosti koje postoje pri donosenju te odluke.
Primer 16.1 Neka se relacije K, I, KI (iz glave 1) nalaze na lokacijama l1 , l2 , l3 ,
redom, i neka se na lokaciji l1 postavi sledeci SQL upit (naci naslove romana jugoslovenskih izdavaca kao i brojeve izdanja i nazive tih izdavaca):
SELECT K.NASLOV, I.NAZIV, KI.IZDANJE
FROM
K, KI, I
WHERE I.DRZAVA=Jugoslavija AND K.OBLAST=roman AND
K.K SIF=KI.K SIF AND KI.I SIF=I.I SIF
U upitu su prisutne operacije restrikcije nad relacijama K i I, dve operacije spajanja,
jedna nad relacijama K i KI a druga nad relacijama KI i I, kao i operacija projekcije
na izlazne atribute NASLOV, NAZIV i IZDANJE.
Prvi korak osnovne strategije distribuiranog izvrsavanja ovog upita sastoji se u
izvrsavanju, na lokaciji l1 , jednorelacionog upita
SELECT NASLOV, K SIF
FROM
K
WHERE OBLAST=roman
i u izvrsavanju, na lokaciji l2 , jednorelacionog upita
SELECT NAZIV, I SIF
FROM
I
WHERE DRZAVA=Jugoslavija
Prvi upit proizvodi relaciju K(NASLOV, K SIF) na lokaciji l1 , a drugi upit
proizvodi relaciju I(NAZIV, I SIF) na lokaciji l2 .
Pred drugi korak osnovne strategije postavlja se sledeci izbor:
a) Moguce je preneti relacije K i I na lokaciju l3 (analogno, relacije K i KI na
lokaciju l2 , odnosno relacije I i KI na lokaciju l1 ) i tamo izvrsiti oba spajanja
i projekciju na izlazne atribute:
SELECT K.NASLOV, I.NAZIV, KI.IZDANJE
FROM
K, I, KI
WHERE K.K SIF=KI.K SIF AND KI.I SIF=I.I SIF
a zatim rezultat preneti na lokaciju l1 .

16.3 Distribuirana obrada upita

303

pojedinacna spajanja vrsiti na razlicitim lokacijama. Na


b) Moguce je, takode,
primer, relacija I moze se preneti na lokaciju l3 , tamo izvrsiti spajanje sa
relacijom KI, uz projekciju na izlazne atribute celog upita i atribute spajanja
preostalog upita:
SELECT I.NAZIV, KI.K SIF, KI.IZDANJE
FROM
I, KI
WHERE I.I SIF=KI.I SIF
Neka je dobijena relacija rezultat IKI(NAZIV, K SIF, IZDANJE). Sada se
relacija IKI moze preneti na lokaciju l1 , i tamo izvrsiti spajanje sa relacijom
K i projekcija na izlazne atribute:
SELECT K.NASLOV, IKI.NAZIV, IKI.IZDANJE
FROM
IKI, K
WHERE IKI.K SIF=K.K SIF
(rezultat se nalazi na lokaciji l1 ).
Prethodni upiti spajanja tipa b) predstavljaju jednu mogucnost pojedinacnih
spajanja na razlicitim lokacijama. Ti upiti se mogu predstaviti parom izraza relacione algebre sa naznakom lokacije na kojoj se izvrsavaju,
IKI
REZ

= (I KI)
= (IKI K)

[NAZIV, K SIF, IZDANJE]


[NASLOV, NAZIV, IZDANJE]

(l3 )
(l1 ).

Analogne mogucnosti pojedinacnih spajanja na razlicitim lokacijama tipa b)


opisuju se i sledecim parovima izraza relacione algebre, sa naznakom lokacija:
IKI
= (I KI)
[NAZIV, K SIF, IZDANJE]
(l2 )
REZ = (IKI K) [NASLOV, NAZIV, IZDANJE] (l1 ),
KKI
REZ

= (K KI)
= (KKI I)

[NASLOV, I SIF, IZDANJE]


[NASLOV, NAZIV, IZDANJE]

(l1 )
(l2 ),

KKI
REZ

= (K KI)
= (KKI I)

[NASLOV, I SIF, IZDANJE]


[NASLOV, NAZIV, IZDANJE]

(l3 )
(l2 ).

Razmotrimo efikasnost nabrojanih varijanti koraka 2 osnovne strategije distribuirane obrade upita.
Neka su velicine relacija date sa
K
I
KI

(K SIF, NASLOV, OBLAST)


(I SIF, NAZIV, STATUS, DRZAVA)
(K SIF, I SIF, IZDANJE, GODINA, TIRAZ)

10000 n-torki
1000 n-torki
50000 n-torki

i neka svaka n-torka zauzima po 100 bita. Neka je, dalje, procenjeno da ima 1000
romana u relaciji K, 100 jugoslovenskih izdavaca u relaciji I i 20000 jugoslovenskih

304

16 Problemi distribuiranih sistema

izdanja u relaciji KI. Ako se jos pretpostavi da je propusnost mreze 50000 bita u
sekundi, a vreme kasnjenja 0.1 sekunda, onda se za optimalnu strategiju proglasava
ona koja ima minimalnu vrednost vremena komunikacije
t = kasnjenje + (kolicina podataka za prenos / propusnost), tj.
t = (broj poruka 0.1sec) + (broj bita za prenos / 50000)sec.
Primena raznih varijanti mogucnosti navedenih pod a) i b) rezultovala bi razlicitim ukupnim vremenima komunikacije. Na primer, u slucaju a) bice
t 0.2 + (1100100) / 50000 = 2.4 sekunde (bez prenosenja rezultata na
lokaciju l1 ), dok u slucaju b) dobijamo
t 0.2 + (100 + 20000) 100 / 50000 = 40.4sec.
Jedna od varijanti b) mogla bi da bude i prenosenje relacije KI na lokaciju
l2 , spajanje sa relacijom I i projekcija na atribute K SIF, IZDANJE, NAZIV,
zatim prenosenje rezultata na lokaciju l1 i spajanje sa relacijom K. U ovom slucaju
ukupno vreme komunikacije je
t 0.2 + (70000) 100 / 50000 = 140.2 sekunde, sto je znatno vise od prethodnih
vremena.
Na slican nacin mogu se izracunati ukupna vremena komunikacije i u drugim
varijantama, pri cemu je zadatak globalne optimizacije da izabere varijantu sa
najmanjim vremenskim utroskom.
Znatno poboljsanje efikasnosti moze se postici primenom sofisticiranih algo
ritama za izvodenje
nekih operacija. Jedan od takvih algoritama, primenjen u
sistemu SDD-1, odnosi se na izvrsenje operacije spajanja i ukljucuje operaciju poluspajanja (engl. semijoin). Rezultat operacije poluspajanja relacija R i S jednak
je rezultatu spajanja tih relacija, projektovanom na atribute relacije R. Tako, ako
je potrebno izvrsiti spajanje relacije R (sa lokacije l1 ) i relacije S (sa lokacije l2 ),
umesto da se cela relacija R prenese na lokaciju l2 i tamo spoji sa relacijom S,
moguce je izvrsiti sledeci niz radnji:
izracunati projekciju relacije S po atributu spajanja, na lokaciji l2 (rezultat
je relacija TEMP1);
preneti relaciju TEMP1 na lokaciju l1 ;
izvrsiti poluspajanje relacije R i TEMP1 po atributu spajanja, na lokaciji l1
(rezultat je relacija TEMP2);
preneti relaciju TEMP2 na lokaciju l2 ;
izvrsiti spajanje relacija TEMP2 i S po atributu spajanja, na lokaciji l2 .
Ovaj niz radnji smanjuje kolicinu prenosa podataka samo ako je
broj bitova (TEMP1) + broj bitova (TEMP2) < broj bitova (R),
i nije efikasan ako se spajanje izvodi po primarnom kljucu relacije R koji je strani
kljuc relacije S (npr. u slucaju relacija I, KI).

16.4 Preneto azuriranje

16.4

305

Preneto a
zuriranje

Kao sto je u odeljku o fragmentaciji podataka vec receno, ponavljanje podataka


podrazumeva da jedan logicki objekat (npr. relacija ili jedan njen fragment) moze
imati vise fizickih reprezentacija (kopija) na vecem broju lokacija. Posledica ove
ideje je da se, s obzirom na potrebu za konzistentnoscu podataka u svim kopijama,
azuriranje jednog logickog objekta mora preneti i na sve fizicke kopije tog objekta.

Medutim,
momentalno prenosenje azuriranja na sve kopije moze da onemoguci
(ili da nedopustivo dugo odlozi) uspesno izvrsenje azuriranja u slucaju da je bilo
koja od lokacija u padu; time ponavljanje podataka smanjuje umesto da povecava
raspolozivost podataka.
Jedan siroko prihvaceni pristup prenosenju azuriranja oslanja se na koncept
primarne kopije, i sastoji se u sledecem postupku:
jedna kopija svakog ponovljenog objekta proglasava se za primarnu kopiju tog
objekta, pri cemu primarne kopije razlicitih objekata mogu biti na razlicitim
lokacijama;
operacija azuriranja objekta smatra se logicki izvrsenom cim se izvrsi
azuriranje primarne kopije tog objekta; azuriranje ostalih kopija je sada
u nadleznosti lokacije na kojoj je primarna kopija, ali se mora izvrsiti pre
kompletiranja transakcije. Ovaj postupak zahteva primenu protokola dvofaznog kompletiranja transakcije (v. odeljak 17.4), koji se pak ne moze
uspesno sprovesti ako je bar jedna relevantna lokacija u padu, sto je nezanemarljivo cest slucaj. Ukoliko se dopusti azuriranje kopija i posle kompletiranja transakcije, ne moze se garantovati konzistentnost podataka u svim
njihovim kopijama. Ipak, neki komercijalni distribuirani sistemi pribegavaju
tom resenju jer puno postovanje azuriranja svih kopija pre kompletiranja
transakcije moze bitno da poveca vreme obrade.
Detaljnija razmatranja problema prenetog azuriranja mogu se naci u [27], [21].

16.5

Upravljanje katalogom

Katalog je, kako je vec istaknuto u odeljku 7.1, sistemska baza podataka koja sadrzi
podatke o baznim relacijama, pogledima, indeksima, korisnicima, itd, a u slucaju
distribuiranog sistema, i o nacinu i lokacijama na koje su podaci razdeljeni i (eventualno) ponovljeni. Sam katalog u distribuiranom sistemu moze biti centralizovan
(samo na jednoj lokaciji), potpuno ponovljen (na svim lokacijama po jedna kopija
kataloga), particioniran (na svakoj lokaciji je deo kataloga koji se odnosi na objekte
sa te lokacije) ili kombinovan (katalog je particioniran, ali na jednoj lokaciji postoji
i jedna centralna kopija kompletnog kataloga).
S obzirom na nedostatke koje ispoljava svaki od navedenih pristupa (zavisnost
od centralne lokacije, visoka cena prenosenja azuriranja kataloga ili skup pristup

306

16 Problemi distribuiranih sistema

udaljenoj lokaciji), implementirani sistemi koriste druge strategije. Tako, na primer,


u sistemu R ([68]) svaka lokacija sadrzi sledece kataloske informacije:

slog kataloga za svaki objekat roden


na toj lokaciji (tj. cija je prva kopija
kreirana na toj lokaciji); ovaj slog sadrzi i informaciju o tekucoj lokaciji objekta (ako je premesten);
slog kataloga za svaki objekat koji je trenutno smesten na toj lokaciji;
tabelu sinonima za svakog korisnika prijavljenog na toj lokaciji, koja preslikava sinonime objekata, definisane iskazom kreiranja sinonima, u sistemske
identifikatore objekata, jedinstvene u celom distribuiranom sistemu.
Sistemski identifikator objekta, koji se nikada ne menja (dok se objekat ne
ukloni), sastoji se od identifikatora korisnika koji je kreirao prvu kopiju tog objekta, lokacije sa koje je kreirana, lokalnog imena objekta (koje mu je dao korisnik

pri rodenju)
i lokacije na kojoj je roden.
Pronalazenje objekta, kada je dato njegovo lokalno ime ili sinonim, pocinje preslikavanjem lokalnog imena (automatski),
odnosno sinonima (pregledanjem tabele sinonima), u sistemski identifikator ob
jekta. Zatim se, prema sistemskom identifikatoru, nalazi lokacija rodenja
objekta,
pristupa joj se i u slogu koji odgovara tom objektu, pronalazi se lokacija na kojoj
je trenutno smesten. U sledecem koraku pristupa se (u opstem slucaju udaljenoj)
lokaciji na kojoj je objekat smesten, i lokalnim operacijama pronalazi objekat.

16.6

Heterogeni distribuirani sistemi

Pretpostavka o homogenosti DSUBP, tj. pretpostavka da sve lokacije u DSUBP


poseduju isti SUBP pokazuje se kao prejako ogranicenje u danasnjim uslovima,
kada znacajne kolicine podataka i aplikacija postoje na raznim racunarima, pod
razlicitim operativnim sistemima i pod kontrolom razlicitih SUBP. Potreba za istovremenim pristupom ovakvim podacima unutar jedne aplikacije, ili cak i jedne
ce DSUBP da obezbede podrsku hetransakcije, postavlja zahtev pred proizvoda
terogenim DSUBP. To znaci da, pored nezavisnosti pristupa podacima i obrade
podataka od lokacije, fragmentacije, ponavljanja podataka, masine, operativnog
sistema i mreznog protokola, heterogeni distribuirani sistem mora da obezbedi i
nezavisnost od SUBP na pojedinim lokacijama.
Postoje dva bitno razlicita pristupa resavanju ovog problema. Jedan je izgradnja
tzv. sistema multibaza podataka, SMBP (engl. multidatabase system, [43]). SMBP
je programski sistem koji se sastoji od niza komponenti. Jedna od tih komponenti
je jedinstveni jezik za kreiranje podataka i manipulisanje podacima koji su pod
kroz koju
kontrolom heterogenih SUBP. SMBP je, pre svega, jedinstvena sumeda,
korisnici i aplikacije mogu da komuniciraju sa raznorodnim sistemima.

Druga komponenta SMBP je globalni upravljac transakcija. SMBP obezbeduje,


pored lokalnih transakcija (nad jednim SUBP), i upravljanje globalnim transakcijama. Globalne transakcije se sastoje od veceg broja podtransakcija koje se

16.6 Heterogeni distribuirani sistemi

307

izvrsavaju nad pojedinacnim (razlicitim) SUBP, i sa njihovog aspekta se ponasaju


kao lokalne transakcije.
SMBP ukljucuje i skupa servera, po jedan za svaki lokalni SUBP, koji se
globalnog upravljaca transakcija i lokalnog SUBP. Svaka
ponasaju kao veza izmedu
globalna transakcija predaje globalnom upravljacu transakcija operacije citanja i
upisa, a ovaj moze da ih preda na obradu lokalnim SUBP (preko odgovarajucih
servera), da odlozi ili da prekine transakciju. Kada globalni upravljac transakcija
odluci da kompletira globalnu transakciju, on upucuje komandu za kompletiranje
lokalnim SUBP. Globalni upravljac transakcija je odgovoran i za funkcionalnost i
odrzavanje svojstava globalnih transakcija (ACID svojstva, globalna linearizovanost
izvrsenja skupa transakcija, izbegavanje ili razresavanje uzajamnog blokiranja, oporavak od sistemskih padova).
Oblast sistema multibaza je jos uvek otvorena istrazivacka oblast. Osnovni cilj
ovih sistema je da kroz upravljanje globalnim transakcijama odrzavaju konzistentnost multibaze. Detaljniji opis obrade transakcija multibaze, kao i nacin na koji se
ostvaruju funkcije upravljaca transakcija u ovom okruzenju, mogu se naci u [43].
Drugi pristup heterogenim DSUBP je manje ambiciozan, ali i komercijalno zastupljeniji. Njegova sustina je u izgradnji aplikativnih programa, tzv. prolaza (engl.
gateway) sistema SUBP1 prema sistemu SUBP2 , koji omogucuju korisniku SUBP1

(na lokaciji l1 ) da komunicira sa SUBP2 (koji je na lokaciji l2 ), istom sumedom


kojom komunicira sa sistemom SUBP1 .
Realizacija aplikativnog programa prolaza sistema SUBP1 prema sistemu
SUBP2 je u nadleznosti sistema SUBP1 , a program se izvrsava nad sistemom
SUBP2 . Na primer, ako je SUBP1 sistem Oracle a SUBP2 sistem DB2, onda
bi prolaz sistema Oracle prema sistemu DB2 omogucio korisniku sistema Oracle da
komunicira sa sistemom DB2, lazno predstavljajuci sistem DB2 kao Oracle.
Aplikativni program prolaz ostvaruje sledece komponente i zadatke ([27]):
SUBP1 i SUBP2 ,
protokol za razmenu informacija izmedu
relacioni server za SUBP2 ,
tipova podataka i upitnih jezika dva sistema,
preslikavanja izmedu
preslikavanje strukture kataloga sistema SUBP2 u strukturu kataloga sistema
SUBP1 ,
ucesce u dvofaznom protokolu kompletiranja transakcija,
doslednu primenu mehanizma zakljucavanja, itd.
S obzirom na znacaj koji ima realizacija kvalitetnih programa prolaza, postoji razvijena aktivnost standardizacije odgovarajucih protokola ([43]). U implementaciji pune funkcionalnosti prolaza javljaju se znacajni problemi, pa zato
komercijalni proizvodi ovog tipa ne podrzavaju sve potrebne funkcije ([27]).

308

16 Problemi distribuiranih sistema

16.7

Pitanja i zadaci

1. Definisati sledece pojmove:


distribuirana baza podataka
DSUBP
nevidljivost lokacije
heterogeni DSUBP
homogeni DSUBP
klijent/server arhitektura
fragmentacija podataka

globalna optimizacija
lokalna optimizacija
sistem multibaza
prolaz
particionirani podaci
ponovljeni podaci
nevidljivost particioniranja

2. Koje su prednosti a koji nedostaci DSUBP?


3. Navesti primer fragmentacije podataka.
4. Koji su problemi distribuiranih sistema?
5. Navesti primer distribuirane obrade upita.
6. Operacija poluspajanja relacija R i S nije efikasna ako se izvodi po primarnom
kljucu relacije R koji je strani kljuc relacije S (v. odeljak 16.3). Objasniti
zasto.
7. Kako se resava problem prenetog azuriranja?
8. Koje su specificnosti upravljanja katalogom u distribuiranom sistemu?
9. Distribuirani SUBP su gotovo iskljucivo relacioni sistemi. Objasniti razloge
za to.

17

Distribuirano upravljanje
transakcijama
Pod transakcijom u distribuiranom sistemu podrazumevace se, kao i u centralizo niz radnji koji prevodi jedno konzistentno stanje
vanom slucaju, vremenski ureden
baze u drugo konzistentno stanje baze. Posmatracemo opet jednostavni model
transakcija u kome se one sastoje samo od radnji citanja i upisa (azuriranja).
Ipak, pojam transakcije u distribuiranom sistemu je kompleksniji, s obzirom da
transakcija moze da izvrsava radnje svog programa na raznim lokacijama; zato
transakciju, koja predstavlja logicku jedinicu posla (i oporavka), moze da izvrsava
veci broj procesa na vecem broju lokacija. Startovanjem jedne transakcije bira se
jedan upravljac transakcija (na jednoj lokaciji) koji sluzi kao koordinator procesa te
transakcije. Svakoj transakciji dodeljuje se i njen privatni radni prostor (koji moze
da bude razdeljen na vise lokacija), iz kojeg ce transakcija citati i u koji ce upisivati
vrednosti objekata.
Pri distribuiranoj obradi transakcija, transakcija koja cita vrednost objekta
cita vrednost samo jednog lokalnog primerka tog objekta, dok azuriranje jednog objekta sprovodi nad svim primercima tog objekta (na svim lokacijama distribuiranog
sistema na kojima primerak tog objekta postoji).
Transakcija se, kao i u centralizovanom sistemu, karakterise ACID-svojstvima
(v. glavu 14).

17.1

Konkurentnost

Neka je dat skup transakcija T={Ti }ni=1 nad bazom podataka distribuiranom na k
lokacija.
Lokalno izvrsenje skupa T na lokaciji l je niz Il trojki oblika
(Tj , procitaj, xl ), odnosno
(Tj , azuriraj, xl ),
309

310

17 Distribuirano upravljanje transakcijama

gde je Tj T, xl je primerak objekta x na lokaciji l, a radnja (procitaj x) odnosno


(azuriraj x) je radnja transakcije Tj . Poredak trojki u ovom nizu odgovara poretku
radnji pojedine transakcije.
Distribuirano izvrsenje skupa T je niz lokalnih izvrsenja I = {Il }kl=1 , takav da
vazi:
(a) (citanje samo jednog primerka): ako je (Ti , procitaj, xj ) Ij , tada (Ti ,
procitaj, xl )
/ Il , za l 6= j, gde su xj , xl primerci objekta x na lokacijama
j, l, redom;
(b) (azuriranje svih primeraka): ako je (Ti , azuriraj, xj ) Ij , tada je (Ti ,
azuriraj, xl ) Il za sve lokacije l na kojima postoji primerak xl objekta
x;
(c) svakoj radnji svake transakcije Tj odgovara bar jedna trojka sa prvom komponentom Tj .

Primer 17.1 Neka je distribuirana baza podataka particionirana na dve lokacije


(1 i 2), i neka su njena tri logicka objekta x, y, z predstavljena sledecim rasporedom
svojih primeraka na tim lokacijama:
1: x1 , y1
2: x2 , y2 , z2 .
Neka su dve transakcije, T1 i T2 , koje se izvrsavaju nad tom bazom podataka,
sastavljene od sledecih radnji:
T1 : (procitaj x; azuriraj y)
T2 : (procitaj y; azuriraj z).
Jedno (ali ne i jedino) distribuirano izvrsenje transakcija T1 i T2 nad ovom
bazom podataka (oznacimo ga sa I), predstavlja skup sledecih lokalnih izvrsenja
I1 , I2 na lokacijama 1, 2:
I1 : ((T1 , procitaj, x1 ), (T1 , azuriraj, y1 ), (T2 , procitaj, y1 ))
I2 : ((T1 , azuriraj, y2 ), (T2 , azuriraj, z2 )).
U ovom primeru distribuiranog izvrsenja, transakcija T2 je odabrala da vrednost
objekta y procita na lokaciji 1 (a ne na lokaciji 2), tj. odabrala je da procita
primerak y1 (a ne y2 ).
Kao kod centralizovanih sistema, i kod distribuiranih sistema mogu se definisati
serijska distribuirana izvrsenja, ekvivalentna distribuirana i linearizovana (ekvivalentna serijskim) distribuirana izvrsenja skupa transakcija.
Serijsko distribuirano izvrsenje skupa transakcija T = {Ti }ni=1 je distribuirano

izvrsenje I za koje se na skupu T moze definisati uredenje


< za koje vazi: ako
je Ti < Tj , onda sve radnje transakcije Ti prethode svim radnjama transakcije
Tj u svakom lokalnom izvrsenju Il u kojem se pojavljuju radnje obeju transakcija.

17.2 Dvofazno zakljucavanje

311

Prethodni primer prikazuje serijsko distribuirano izvrsenje skupa transakcija {T1 ,


T2 } upravo u tom poretku.
Distribuirano izvrsenje moze da ne bude serijsko bilo zbog toga sto neko od
lokalnih izvrsenja nije serijsko, bilo zbog toga sto redosled transakcija u (inace
serijskim) lokalnim izvrsenjima nije isti.
Dve radnje skupa transakcija T su konfliktne u distribuiranom izvrsenju ako su
konfliktne (u centralizovanom smislu, v. glavu 14) u nekom (bilo kome) lokalnom
izvrsenju.
Dva distribuirana izvrsenja su ekvivalentna ako su, za svaku lokaciju, njihova
lokalna izvrsenja ekvivalentna (u centralizovanom smislu).
Distribuirano izvrsenje je linearizovano ako je ekvivalentno nekom serijskom
izvrsenju.

17.2

Dvofazno zaklju
cavanje

Jedna metoda za postizanje linearizovanog distribuiranog izvrsenja je, kao i kod centralizovanog linearizovanog izvrsenja, dvofaznost transakcija, koja se u distribuiranom slucaju prosiruje sledecim zahtevima:
pri citanju logickog objekta x, dovoljno je da transakcija zakljuca deljivim
katancem jedan primerak objekta x (onaj koji stvarno cita);
pri azuriranju logickog objekta x, transakcija mora da postavi ekskluzivne
katance na sve primerke objekta x, na svim lokacijama u distribuiranoj bazi;
ako transakcija ne moze da dobije trazeni katanac, ona staje u red za cekanje
za onaj primerak objekta nad kojim treba da izvrsi radnju.
Glavni nedostatak prethodnog postupka dvofaznog zakljucavanja je sto transakcija, pri azuriranju jednog logickog objekta, mora dobiti ekskluzivni katanac na

svim primercima tog objekta, na raznim lokacijama, a o dodeljivanju i oslobadanju


katanaca odlucuju lokalni moduli (upravljaci zakljucavanja). Zato taj postupak
zahteva puno komunikacije (slanja i primanja poruka), i moze se pojednostaviti na
nekoliko nacina (od kojih svaki ima svoje prednosti i nedostatke). Jedna tehnika
dvofaznog zakljucavanja u distribuiranom sistemu je centralizacija upravljaca zakljucavanja, koja podrazumeva da samo jedna lokacija upravlja postavljanjem i

oslobadanjem
katanaca u celom sistemu. U tom slucaju je azuriranje pojednostavljeno, jer se skup svih primeraka jednog logickog objekta moze tretirati (u svrhe
zakljucavanja) kao jedinstveni objekat. Nedostatak ove tehnike je sto se lokacija
koja upravlja zakljucavanjem brzo preopterecuje, a u slucaju njenog pada, pada i
ceo distribuirani sistem.
Druga tehnika je tehnika primarnog primerka objekta. U ovoj tehnici svaki
logicki objekat ima jedan svoj primarni primerak i, moguce je, veci broj ostalih

312

17 Distribuirano upravljanje transakcijama

primeraka. Razni logicki objekti mogu imati primarne primerke na raznim lokacijama. Upravljac zakljucavanja lokacije na kojoj je primarni primerak logickog ob
jekta x obraduje
zahteve za zakljucavanjem objekta x (i na svim drugim lokacijama). I u ovom slucaju svi primerci jednog objekta ponasaju se, u svrhe zakljucavanja, kao jedinstveni objekat, ali ova tehnika ne pokazuje nedostatke centralizovanog upravljaca zakljucavanja.

Nedostatak metode dvofaznosti transakcija u obezbedivanju


linearizovanosti
konkurentnog distribuiranog izvrsenja, kao i u slucaju centralizovanih SUBP, jeste
to sto moze doci do uzajamnog blokiranja transakcija. Na primer, ako bi se skupu
transakcija iz primera 17.1 dodala i transakcija T3 : (procitaj z; azuriraj x), onda
bi jedan skup parcijalnih lokalnih izvrsenja (na lokacijama 1 i 2) mogao da bude:
I1 : (T1 , procitaj, x1 )
I2 : (T2 , procitaj, y2 ), (T3 , procitaj, z2 ).
U tom trenutku transakcija T1 drzi deljivi katanac nad primerkom x1 objekta
x na lokaciji 1, transakcija T2 drzi deljivi katanac nad primerkom y2 objekta y
na lokaciji 2, i transakcija T3 drzi deljivi katanac nad primerkom z2 objekta z na
lokaciji 2. Posto su transakcijama T1 , T2 , T3 , da bi nastavile sa radom, potrebni
ekskluzivni katanci nad svim primercima objekata y, z, x, redom, s obzirom na
dvofaznost transakcija, nijedna od transakcija ne moze jos da oslobodi katanac
koji drzi, a ne moze ni da dobije katanac koji joj je potreban. Dakle, doslo je do
uzajamnog blokiranja.
Lokalni graf cekanja na lokaciji 1 (odnosno 2) predstavljen je na slici 17.1 a)
(odnosno 17.1 b)), a globalni graf cekanja na lokacijama 1 i 2 predstavljen je na
slici 17.2. Da bi, na primer, transakcija T1 na lokaciji 1 mogla da azurira primerak
y1 , ta transakcija mora, na svim lokacijama gde postoji primerak objekta y, imati
katanac nad primerkom tog objekta; dakle, ona mora da saceka da na lokaciji 2
dobije katanac na primerku y2 . Slicno vazi i za transakciju T3 koja treba da azurira
objekat x, odnosno za transakciju T2 koja treba da azurira objekat z.

1.

T1

x1

T3

a)

2.

T1

y2

- T2
b)

z2

- T3

Slika 17.1: Lokalni grafovi cekanja na lokacijama 1 i 2


U prethodnom primeru doslo je do tzv. globalnog uzajamnog blokiranja, jer su u
odnos uzajamnog blokiranja ukljuceni objekti na vise lokacija (u ovom slucaju dve

17.3 Vremenske oznake

1.

313
x1

T1

T3
6
x1

y2
?
2.

T1

y2

- T2

z2

- T3

Slika 17.2: Globalni graf cekanja na lokacijama 1 i 2

lokacije). Upravljaci zakljucavanja na pojedinacnim lokacijama nisu u stanju da


identifikuju globalno uzajamno blokiranje, jer nema ciklusa u lokalnim grafovima
cekanja.
Globalno uzajamno blokiranje moguce je detektovati ili spreciti.
Jedan nacin za detekciju uzajamnog blokiranja je centralizovanje jedne
lokacije i periodicno prebacivanje lokalnih grafova cekanja sa svih drugih lokacija
na centralnu lokaciju. Ovo resenje je vrlo ranjivo zbog mogucnosti da centralna
lokacija padne. Kompleksnije, ali i efikasnije resenje moze da ukljuci dodavanje
novog cvora u lokalni graf cekanja pojedinacne lokacije i, koji predstavlja svaku
transakciju koja ceka na kompletiranje neke transakcije sa lokacije i, odnosno
svaku transakciju na cije kompletiranje ceka neka od transakcija lokacije i. Ukoliko
nijedan tako prosireni lokalni graf cekanja lokacije ne sadrzi ciklus, globalnog uzajamnog blokiranja nema u celom sistemu; ako prosireni lokalni graf cekanja lokacije
i sadrzi ciklus, to je indikator moguceg globalnog uzajamnog blokiranja u celom
sistemu. Detaljniji opis ovog algoritma moze se naci u [21], [49].

17.3

Vremenske oznake

Kod centralizovanih sistema sprecavanje uzajamnog blokiranja je bila skupa operacija pa se najcesce pribegavalo njegovom detektovanju i ponistavanju nekih
transakcija koje su u njemu ucestvovale. Kod distribuiranih sistema operacija
ponistavanje transakcija je skuplja nego kod centralizovanih sistema, pa se primenjuje i druga mogucnost resavanja problema uzajamnog blokiranja njegovo
sprecavanje. Ono se postize po cenu smanjene konkurentnosti izvrsenja skupa
transakcija.
Jedna metoda konkurentnog izvrsavanja skupa transakcija koja iskljucuje
mogucnost uzajamnog blokiranja jeste metoda vremenskih oznaka. U ovoj metodi
transakcijama se dodeljuju oznake vremena njihovog pocetka, i dopustaju se konfliktne radnje samo u redosledu vremenskih oznaka pripadnih transakcija (pokusaj da
se konfliktne radnje izvrse u drugacijem redosledu proizvodi ponistavanje transakcije). Dok metoda zakljucavanja, uz detekciju i razresavanje (eventualno) nasta
log uzajamnog blokiranja, obezbeduje
ekvivalentnost konkurentnog izvrsenja sa

314

17 Distribuirano upravljanje transakcijama

nekim (unapred se ne zna kojim) serijskim izvrsenjem, metoda vremenskih oz


naka obezbeduje
ekvivalentnost konkurentnog izvrsenja sa specificnim, unapred
poznatim serijskim izvrsenjem.
Osnovna ideja metode vremenskih oznaka sastoji se u sledecem:
Svakoj transakciji dodeljuje se jedinstvena (u celom sistemu) vremenska oznaka. Ona se dobija dopisivanjem rednog broja lokacije oznaci vremena aktiviranja transakcije (oznaka lokacije je neophodna jer se vise transakcija na
vise lokacija moze istovremeno aktivirati).
Azuriranja se fizicki upisuju u bazu tek pri uspesnom kompletiranju transakcije.
Svaki fizicki primerak logickog objekta u bazi nosi vremensku oznaku transakcije koja ga je poslednja citala, kao i transakcije koja ga je poslednja
azurirala (raznim optimizacijama vremenske oznake objekata u bazi mogu
da se izostave).
Svaki zahtev starije transakcije T1 za operacijom odbacuje se, a transakcija
se ponistava i ponovo aktivira, ukoliko je taj zahtev u konfliktu sa operacijom
transakcija T2 . Operacija
koju je vec, nad istim objektom, izvrsila mlada
transakcije T1 je u konfliktu sa operacijom transakcije T2 ako se izvrsavaju
nad istim fizickim objektom, i bar jedna od tih operacija je azuriranje.
Ponovno aktiviranoj transakciji dodeljuje se nova vremenska oznaka.
Kao sto je za dvofazne transakcije u centralizovanom slucaju dokazana teorema
o linearizovanosti njihovog konkurentnog izvrsenja, moze se i za distribuirani sistem

dokazati slicno tvrdenje,


za slucaj da transakcije nose vremenske oznake.
Teorema 17.1 Izvrsenje koje postuje redosled vremenskih oznaka je linearizovano.
vremenskim ozDokaz: Dati skup transakcija {T1 , . . . , Tn } linearno je ureden

nakama (jer su i same vremenske oznake linearno uredene). Kako na svakoj lokaciji vazi da se izvrsenje konfliktnih radnji obavlja u redosledu vremenskih oznaka
transakcija, to za relaciju zavisnosti Z(I) distribuiranog izvrsenja I vazi da je (Ti ,
xl , Tj ) Z(I) (xl je primerak logickog objekta x na lokaciji l) ako i samo ako je
i < j, tj. ako i samo ako je vremenska oznaka (Ti ) < vremenska oznaka (Tj ). Ako

postoji trojka (Ti , xl , Tj ) Z(I), transakcije Ti i Tj su u relaciji prethodenja,

Ti Tj . Relacija prethodenja je aciklicna (ne moze se dogoditi da je (Ti , xl ,


Tj ) Z(I), (Tj , yk , Tp ) Z(I) i (Tp , zm , Ti ) Z(I), jer bi iz prethodnog sledilo da
je i < i). Zato je i celo distribuirano izvrsenje ekvivalentno serijskom T1 , . . . , Tn .
Jedna od tehnika metode vremenskih oznaka, koja povecava konkurentnost
izvrsavanja i koja je primenjena u distribuiranom sistemu SDD-1, zasniva se na
klasama transakcija i analizi grafa konflikta. U ovoj tehnici odbija se aktiviranje
u konflikt sa vec aktiviranim
transakcije ciji zahtevi za podacima mogu da dodu
transakcijama.

17.3 Vremenske oznake

17.3.1

315

Klase transakcija

Tehnika zasnovana na klasama transakcija, kojom se postize linearizovanost distribuiranog izvrsenja skupa transakcija, moze se opisati sledecim karakteristikama.
u konflikt,
Da bi se ogranicio skup transakcija koje uopste mogu da dodu
uocavaju se transakcije koje mogu da operisu (citaju ili azuriraju) nad istim
objektom. Zato se definise skup citanja i skup azuriranja transakcije kao skup
logickih objekata koje ta transakcija cita odnosno azurira.
Klasa transakcija se definise skupom citanja i skupom azuriranja. Pri tome,
jedna transakcija pripada nekoj klasi transakcija ako je njen skup citanja podskup skupa citanja te klase transakcija, a skup azuriranja podskup skupa
azuriranja te klase transakcija. Tako, ako je T transakcija izmene statusa izdavaca iz Jugoslavije, njen skup citanja i skup azuriranja definisan je sledecim
upitom:
SELECT *
FROM
I
WHERE DRZAVA = Jugoslavija
(ili odgovarajucom projekcijom).
Tada je transakcija T u klasi transakcija definisanoj skupom citanja (i skupom
azuriranja)
SELECT *
FROM
I
jer transakcija T cita, odnosno azurira neki podskup skupa slogova svih izdavaca.
Jedna transakcija moze biti istivremeno clan veceg broja klasa transakcija
(svih onih klasa ciji je skup citanja nadskup njenog skupa citanja, a skup
azuriranja nadskup njenog skupa azuriranja).
Dve klase transakcija su u konfliktu ako skup azuriranja bilo koje od tih klasa
ima neprazan presek sa skupom citanja ili skupom azuriranja druge klase.
Transakcije koje pripadaju klasama koje nisu u konfliktu mogu nesmetano
da se odvijaju paralelno, dok je za transakcije iz iste klase, ili za transakcije
konfliktnih klasa, potrebna sinhronizacija (npr. vremenskim oznakama), tj.
specificni protokoli.
Administrator baze podataka (ili sam sistem, kao u slucaju sistema SDD-1)

definise inicijalno klase transakcija koje, u odnosu na predvidene


transakcije,
treba da imaju najmanji moguci skup citanja i skup azuriranja, da bi se
smanjila mogucnost konflikta. Moze se pretpostaviti da je svaka lokacija
domacin za tacno jednu klasu transakcija (jer se to moze postici logickim
umnozavanjem lokacija, odnosno identicnim kopijama klase).

316

17 Distribuirano upravljanje transakcijama


Svaka lokacija l odrzava, za svaku drugu lokaciju k u sistemu, dva reda zahteva
koje su ispostavile transakcije sa lokacije k, i to u poretku vremenskih oznaka
tih transakcija: red zahteva za citanje i red zahteva za azuriranje objekata
smestenih na lokaciji l.

Svaka lokacija obraduje


transakcije svoje klase jednu po jednu, tj. serijski, u
redosledu njihovih vremenskih oznaka.

Kada lokacija l dobije zahtev od transakcije sa vremenskom oznakom t za


izvrsenje operacije citanja njenog objekta x, tada l odlaze taj zahtev sve dok
se na vrhu reda azuriranja svake lokacije ciji skup azuriranja sadrzi x ne
zahtev sa vremenskom oznakom vecom od t. (To znaci, prvo, da su
nade
svi zahtevi za azuriranjem koji mogu doci u konflikt sa zahtevom prispelim
od tog zahteva, pa se on moze bezbedno zadovoljiti,
na lokaciju l mladi
i drugo, razmatraju se samo klase transakcija koje mogu doci u konflikt sa
zahtevom za citanje, a ne sve klase transakcija). Zatim se izvrsava operacija
citanja. Ako je prispeli zahtev bio za azuriranjem, izvrsava se ono azuriranje
koje ima najmanju vremensku oznaku na lokaciji l.

17.3.2

Analiza grafa konflikta

Ideja tehnike analize grafa konflikta je u daljem smanjenju skupova transakcija za

koje je potrebno obezbediti odredeni


redosled izvrsavanja.

knjizi, a transakPrimer 17.2 Neka transakcija T cita i azurira slog o odredenoj


cija T1 samo cita taj isti slog. Te dve transakcije su u konfliktu ali se mogu
nesmetano izvrsavati u proizvoljnom redosledu svako njihovo izvrsenje je linearizovano.
Analiza grafa konflikta treba da iskoristi, u opstem slucaju, mogucnosti ilustrovane prethodnim primerom.
Graf konflikta sastoji se od skupa cvorova i tri skupa grana horizontalnih,
vertikalnih i dijagonalnih, i gradi se na sledeci nacin.
Za svaku klasu transakcija, graf konflikta sadrzi po jedan cvor citanja i jedan

cvor azuriranja. Cvor


citanja jedne transakcije postavlja se iznad cvora azuriranja
te transakcije i povezuje se sa njim vertikalnom granom. Ako skup azuriranja
klase transakcija Ci ima neprazan presek sa skupom azuriranja klase transakcija
Cj , tada se cvor azuriranja klase Ci povezuje sa cvorom azuriranja klase Cj horizontalnom granom; ako skup citanja klase transakcija Ci ima neprazan presek sa
skupom azuriranja klase transakcija Cj , tada se cvor citanja klase Ci povezuje sa
cvorom azuriranja klase Cj dijagonalnom granom. Znacenje horizontalnih i dijagonalnih grana je da transakcije dve klase (koje takva grana spaja) mogu, mada
ne moraju, doci u odgovarajucu konfliktnu situaciju (upisupis ili citanjeupis).
cvorova dve klase, onda transakcije te dve klase
Ako takvih grana nema izmedu
ne mogu biti u konfliktu i njihovo konkurentno izvrsenje ne proizvodi nijedan od

17.3 Vremenske oznake

317

problema konkurentnosti. Cilj analize grafa konflikta je identifikovanje parova klasa


transakcija cija su izvrsenja linearizovana, mada su klase povezane horizontalnim
(odnosno dijagonalnim) granama.

Primer 17.3 Neka su zadate sledece tri klase transakcija svojim skupovima citanja
i azuriranja:

318

17 Distribuirano upravljanje transakcijama

NAJVECIM

C1 : UVECATI
TIRAZ
IZDAVACIMA
skup citanja:
SELECT *
FROM
I, KI
WHERE I.I SIF = KI.I SIF AND I.STATUS =
(SELECT MAX(STATUS)
FROM
I)
skup azuriranja:
SELECT *
FROM
I, KI
WHERE I.I SIF = KI.I SIF AND I.STATUS =
(SELECT MAX(STATUS)
FROM
I)
Primer transakcije ove klase je Uvecati tiraz najvecim izdavacima iz Jugoslavije
za 10%.

C2 : UVECATI
STATUS NAJVECIM
IZDAVACIMA
skup citanja:
SELECT *
FROM
I
WHERE STATUS = ( SELECT MAX(STATUS)
FROM
I)
skup azuriranja:
SELECT *
FROM
I
WHERE STATUS = ( SELECT MAX(STATUS)
FROM
I)
IZDAVACE

C3 : PRIKAZATIE NAJVECE
skup citanja:
SELECT *
FROM
I
WHERE STATUS = ( SELECT MAX(STATUS)
FROM
I)
skup azuriranja:

prazan skup.

Graf konflikta ove tri klase transakcija moze se prikazati slikom 17.3.

17.3 Vremenske oznake

319

UVECATI
UVECATI
PRIKAZATI

TIRAZ
STATUS
NAJVECE

NAJVECIM
NAJVECIM
IZDAVACE

IZDAVACIMA
IZDAVACIMA
cvor citanja
cvor citanja
cvor citanja
r
r

r
HH

HH

HH

HH

HH

Hr
r
r
cvor azuriranja

UVECATI

TIRAZ

NAJVECIM

IZDAVACIMA

cvor azuriranja

UVECATI
STATUS

NAJVECIM

IZDAVACIMA

cvor azuriranja
PRIKAZATI

NAJVECE

IZDAVACE

Slika 17.3: Primer grafa konflikta


Transakcije klasa C1 i C2 mogu doci u razlicite konfliktne situacije (upis
upis, citanjeupis), pa se za njih mora obezbediti neki kompletni protokol kontrole konkurentnosti (npr. zakljucavanjem ili vremenskim oznakama). Sa druge
strane, proizvoljno konkurentno distribuirano izvrsenje transakcije iz klase C3 i
transakcije iz klase C1 je linearizovano ukoliko se obezbedi ispunjenost sledeceg
uslova: redosled izvrsavanja konfliktnih operacija citanja (transakcije iz klase C3 )
i azuriranja (transakcije iz klase C1 ) isti je na svim lokacijama; lokalna izvrsenja
takvih parova transakcija su bezuslovno linearizovana. Slicno vazi i za klase C3 i C2 .
Za kontrolu prethodnog uslova postoje efikasni mehanizmi, znatno jednostavniji od
opstih metoda zakljucavanja ili vremenskih oznaka ([8]).
Ova razlika u odnosu razlicitih klasa transakcija pri konkurentnom izvrsavanju
moze se delimicno ocitati i iz grafa konflikta: cvorovi (citanja i azuriranja) klase
transakcija C3 imaju samo jednu (dijagonalnu) granu sa cvorovima klase C1 i samo
jednu granu sa cvorovima klase C2 , dok klase transakcija C1 i C2 imaju veci broj
svojim cvorovima.
grana (tri grane) medu
Uopste, moze se dokazati sledece: ako cvorovi jedne klase transakcija imaju
najvise po jednu granu sa cvorovima druge klase transakcija, onda u slucaju horizontalne grane transakcije tih dveju klasa ne mogu biti u konfliktu i njihovo
konkurentno izvrsenje moze se odvijati bez posebne kontrole; ako je ta grana dijago
nalna, onda jednostavna sinhronizacija koja obezbeduje
prethodno navedeni uslov,
dovodi do linearizovanog izvrsenja. (Ova sinhronizacija u nekim slucajevima, kao
sto su transakcije koje se sastoje od jedne operacije citanja odnosno upisa, postaje
trivijalna. Takav je i primer 17.2). Ako je broj takvih grana veci (a najvise moze biti

320

17 Distribuirano upravljanje transakcijama

tri), onda su te dve klase transakcija u ciklusu i potrebno je kontrolisati konkurentno

izvrsenje njihovih transakcija nekim od protokola konkurentnosti, koji obezbeduje


isti redosled konfliktnih operacija po svim putanjama u ciklusu.
Klase transakcija definisu se staticki, pri definisanju sheme baze podataka, pa
se i analiza grafa konflikta sprovodi staticki. Njen rezultat je obicno tabela koja
se distribuira svim lokacijama, i koja ukazuje na horizontalne odnosno dijagonalne
grane koje zahtevaju kontrolu konkurentnosti.

17.4

Oporavak

Da bi se dobila atomicnost transakcije u distribuiranom okruzenju, u smislu da


se izvrse sve njene radnje ili nijedna, sistem za upravljanje transakcijama mora
da obezbedi da se svi procesi te transakcije uspesno kompletiraju ili da se svi njihovi efekti poniste. Na primer, da bi se izvrsilo azuriranje logickog objekta x od
strane neke transakcije, potrebno je uspesno izvrsiti azuriranja svih primeraka tog
objekta. Taj zadatak zahteva posebno razmatranje upravo zato sto su primerci
jednog objekta na raznim lokacijama koje, nezavisno jedna od druge, mogu da
budu onemogucene da takvu radnju izvrse (npr. zbog pada sistema). Da bi se
obezbedilo da azuriranja svih primeraka svih objekata od strane jedne transakcije
budu uspesno izvrsena, ili da nijedno ne bude izvrseno, primenjuje se poseban protokol dvofaznog kompletiranja transakcije. Njemu se pristupa kada je koordinator
transakcije obavesten da su svi procesi te transakcije zavrsili sa radom (uspesno ili
neuspesno), i sastoji se od sledece dve faze:
Za svaki logicki objekat x koji transakcija T azurira, i za svaki primerak xi
objekta x, koordinator te transakcije salje poruku lokaciji i (njenom SUBP)
da preliminarno azurira objekat xi . Ako je proces transakcije T na lokaciji i
uspesno zavrsen, lokacija i odgovara tako sto izvrsi preliminarno azuriranje,
tj. prepisuje vrednost xi iz radnog prostora transakcije u svoju log datoteku,
i obavestava o tome koordinatora; u suprotnom, lokacija obavestava koordinatora o neuspehu.
Ako je koordinator obavesten da su sve radnje preliminarnog azuriranja svih
objekata koje transakcija T azurira, na svim lokacijama, uspesno obavljene,
on salje poruke tim lokacijama da izvrse operaciju definitivnog azuriranja
svih svojih primeraka svih objekata koje T azurira; lokacije odgovaraju tako
sto odgovarajuce vrednosti iz svojih log datoteka prepisuju u svoje lokalne

baze i oslobadaju
resurse koje je transakcija T drzala. Kada se obave sva ta
prepisivanja i o tome obavesti koordinator, izvrsenje transakcije T je zavrseno.
Ako je koordinator obavesten da bar jedna lokacija nije uspesno obavila prvu
fazu, on salje poruku svim lokacijama o ponistavanju transakcije.
Ovakav protokol dvofaznog kompletiranja transakcije u implementacijama se
poboljsava na razne nacine, u cilju smanjenja broja poruka koje se prenose. Na
primer, moguce je pretpostaviti da ce kompletiranje biti uspesno i time eliminisati

17.4 Oporavak

321

slanje poruka iz prve faze. Ukoliko je kompletiranje zaista uspesno, broj poruka
je znatno smanjen; ukoliko je kompletiranje neuspesno (a pretpostavlja se da je to
slucaj), broj poruka se uvecava, a zahteva se i ponistavanje odredenog

redi
broja
radnji.

322

17.5

17 Distribuirano upravljanje transakcijama

Pitanja i zadaci

1. Definisati sledece pojmove:


lokalno izvrsenje skupa transakcija
distribuirano izvrsenje skupa transakcija
centralizacija upravljaca zakljucavanja
primarni primerak objekta
lokalni graf cekanja
globalni graf cekanja
protokol dvofaznog kompletiranja transakcije
klasa transakcija
skup citanja
skup azuriranja
graf konflikta
2. Objasniti specificnosti dvofaznog zakljucavanja u distribuiranom sistemu.
3. Opisati metodu vremenskih oznaka u konkurentnom izvrsenju skupa transakcija.
4. Dokazati linearizovanost izvrsenja skupa transakcija koje postuje redosled
vremenskih oznaka.
5. Opisati tehniku za konkurentno izvrsavanje skupa transakcija zasnovanu na
klasama transakcija.
6. Navesti primer analize grafa konflikta.

18

Klijent-server sistemi baza


podataka
Klijent-server sistemi baza podataka zasnovani su na klijent-server arhitekturi, unekoliko razlicitoj od ANSI/SPARC arhitekture sistema baza podataka prikazane u
glavi 1. Ova arhitektura se odnosi na jednostavnu logicku podelu odgovornosti unutar sistema na dva dela. Jedan deo (prvobitno u engleskoj terminologiji backend,
pozadinski), server, u stvari je SUBP sa bazama podataka, i odgovoran je za definisanje podataka, manipulisanje podacima, bezbednost, integritet, oporavak, itd.
Drugi deo (prvobitno je koriscen engleski termin frontend, prednji sistem), klijent,
odgovoran je za rad aplikacija, kako korisnickih tako i sistemskih (na primer, procesor upitnog jezika, generator aplikacija, generator izvestaja, itd). Ovakva podela
posla ne zahteva razdvajanje odgovornosti na razne racunare (slika 18.1).
Mada se termin klijent-server danas najcesce odnosi na slucaj kada su klijent
i server na odvojenim racunarima, jer se mogucnost izdvajanja funkcija na odvojene racunare pokazala veoma privlacnom i korisnom, termin se upotrebljava i za

opisivanje okruzenja u kome neki programi serveri pruzaju odredene


usluge
drugim programima klijentima, bez obzira da li se oni nalaze na razlicitim
racunarima ili ne.
Osnovni klijent-server sistemi, dakle, podrazumevaju veci broj klijenata koji

dele isti server (slika 18.2). Moguce je, medutim,


da jedan klijent pristupi vecem
broju servera, pri cemu je svaki pojedinacni zahtev (ili transakcija) upucen tacno
jednom serveru.
Postoji vise nacina na koje aplikativni program sa klijenta moze da pristupi bazi
podataka na serveru, tj. postoji vise metoda za ugradnju blokova za komunikaciju
sa SUBP u aplikativni program:
Ugnjezdenje statickog i dinamickog SQL-a u aplikativni program.
323

324

18 Klijent-server sistemi baza podataka

aplikacije

klijenti

SUBP

server
baza
podataka
Slika 18.1: Klijent-server arhitektura

Direktni pozivi, iz aplikativnog programa, funkcija odgovarajuceg SUBP


(engl. Call Level Interface CLI) za rad sa dinamickim SQL iskazima. Pri
koriscenju CLI sistema, aplikacija predaje dinamicke SQL iskaze kao argumente funkcija, upravljacu bazama podataka na obradu. Tako je CLI sistem
alternativa ugnjezdenom dinamickom SQL-u.
Zapamcene procedure na serveru. Zapamcena procedura (engl. stored procedure) je programski blok koji se poziva iz aplikacije na klijentu a izvrsava se
na serveru baza podataka. Pise se u odgovarajucim prosirenjima SQL-a, kao
sto je, na primer, Oracle PL/SQL ili C-Java/SQL u DB2, kompilira i pamti
u biblioteci odgovarajuceg SUBP. Tako se primenom zapamcenih procedura
deo logike aplikacije prenosi sa klijenta na server, i povecava funkcionalnost
servera.
Najcesci razlog za koriscenje zapamcenih procedura je intenzivna obrada podataka iz baze podataka, koja proizvodi malu kolicinu rezultujucih podataka,
ili cinjenica da je skup operacija (koje se izdvajaju u zapamcenu proceduru)
zajednicki za vise aplikacija. Naime, obrada pojedinacnog SQL iskaza (iz
aplikacije na klijentu) nad bazom na serveru ukljucuje dve poruke zahtev
i prijem (v. ??). U jednom aplikativnom programu moze biti mnogo SQL
iskaza, sto usloznjava mrezni saobracaj. Za koriscenje zapamcene procedure
od strane klijenta potrebne su samo dve poruke za ceo proces.
Zapamcene procedure ostvaruju mnoge prednosti:
1. koriste prednosti mocnih servera;
2. donose poboljsanja performansi statickom (kompiliranom) SQL-u;

18 Klijent-server sistemi baza podataka

325

...
KLIJENTI
@

@
@

KOMUNIKACIONA MREZA

SERVER

Slika 18.2: Klijent-server arhitektura: jedan server vise klijenata

3. smanjuju mrezni saobracaj;


4. povecavaju bezbednost podataka ucaurenjem podataka i operacija, tj.
ogranicavanjem pristupa objektima od strane aplikacije: pristup je
moguc samo procedurama a ne i podacima;
5. poboljsavaju integritet podataka dopustanjem raznim aplikacijama da
pristupe istom programskom kodu.
Klijent-server arhitektura podseca na centralizovane (engl. mainframe) racunar
ske sisteme sa skupovima terminala. Medutim,
kod klijent-server sistema ispunjen
je prvi uslov distribuiranih sistema, a to je u ovom slucaju autonomija klijenata.
Oni vrse samostalno sve operacije upotrebe podataka, dok se sa serverom komunicira samo zbog potrebe za pretrazivanjem ili azuriranjem podataka. Uloga servera
je usko i precizno definisana. Osim sa serverom baza podataka, koji upravlja
bazama podataka, klijenti mogu da komuniciraju i sa drugim mreznim serverima
koji im pruzaju usluge u obavljanju drugih operacija (nevezanih za bazu), npr. sa
Web serverom.

326

18 Klijent-server sistemi baza podataka

18.1

Jedna realizacija klijent-server RSUBP

Jedan primer klijent-server relacionog sistema za upravljanje bazama podataka je


IBM DB2 Universal Database (DB2 UDB) pod operativnim sistemima OS/2, Windows/NT ili UNIX. Ovaj sistem pripada novoj generaciji komercijalnih proizvoda
razvijenih iz prototipskog RSUBP System R (IBM istrazivacka laboratorija u San
Hozeu). Prethodne generacije ovog proizvoda firme IBM za razlicite operativne
sisteme nosile su razlicite nazive DB2 za MVS, SQL/DS za VM, DB2/2 za OS/2,
DB2/6000 za AIX/6000, DB2/400 za OS/400.
Pored servera baza podataka (IBM DB2 UDB), postoje i drugi IBM (softverski)
serveri namenjeni raznim poslovima. Neki od tih servera su:
IBM server za komunikaciju
IBM server za direktorijume i bezbednost (engl. directory, security)
IBM serveri za povezivanje sa Internetom

Sam DB2 UDB ukljucuje graficke alate koji omogucuju prilagodavanje


i optimizovanje performansi, upravljanje svim serverima sa jednog mesta, razvoj aplikacija
i obradu SQL upita.

18.1.1

DB2 server

IBM DB2 UDB server omogucuje lokalnim i udaljenim klijentima i aplikacijama da


kreiraju, azuriraju, kontrolisu i upravljaju relacionim bazama podataka koriscenjem
SQL-a, ODBC-a (Open DataBase Connectivity) ili DB2 CLI (Call Level Interface)
[?].
DB2 UDB server moze biti pod operativnim sistemom OS/2 Warp, Windows
NT ili UNIX.
Moguce je instalirati dva DB2 proizvoda: DB2 Enterprise Edition, ili DB2
ovim proizvodima je sto DB2 EnterWorkgroup Edition. Jedna razlika medu
prise Edition podrzava i povezivanje sa centralizovanim (maticnim, host) sistemima,
sto dalje omogucuje korisnicima pristup bazama podataka na tim sistemima pod
MVS/ESA, OS/390, OS/400, VM, VSE operativnim sistemima; druga razlika je u
politici licenciranja klijenata (v. [?]).
Kontrolni centar
Posebno znacajan graficki alat DB2 UDB jeste kontrolni
centar koji omogucuje izvrsenje administrativnih zadataka na serveru, kao sto su

konfigurisanje, proizvodenje
rezervnih kopija (engl. backup) i oporavak podataka,
upravljanje direktorijumima, raspodelu poslova i upravljanje medijima. Kontrolni
centar je novi graficki alat u ovoj verziji sistema DB2.
Kontrolni centar prikazuje objekte baze podataka kao sto su same baze i tabele i

njihove medusobne
veze. Koriscenjem kontrolnog centra moze se, sa jednog mesta,
upravljati lokalnim ili udaljenim serverom baza podataka i njihovim objektima.

18.1 Jedna realizacija klijent-server RSUBP

327

Kontrolni centar se moze instalirati i na klijentu, i to na OS/2, Windows NT ili


Windows 95 radnoj stanici.
Jedna od glavnih komponenti kontrolnog centra, komandni centar, koristi se
za pristup i manipulisanje bazama podataka iz grafickog interfejsa. Iz komandnog
centra mogu se izdavati DB2 komande ili postavljati SQL upiti u interaktivnom
prozoru i pratiti rezultati izvrsavanja u rezultujucem prozoru, ili pamtiti u izlaznoj
datoteci.
Pored mogucnosti prihvatanja zahteva sa klijenata, DB2 UDB (server baza po distribuirani (DRDA Distributed Relational Database Ardataka) ima ugraden

chitecture) aplikacioni server. On prihvata i obraduje


zahteve sa MVS, OS/400, VM
i drugih DRDA klijenata. Distribuirana (DRDA) arhitektura gradi se na formalnim komunikacionim protokolima i funkcijama klijent-server komponenti aplikacije.
Jedna transakcija u DB2 distribuiranom okruzenju moze da pristupi vecem broju
aplikacionih servera, pod uslovom da svim objektima jednog SQL iskaza upravlja
jedan aplikacioni server.

18.1.2

DB2 klijent

Klijenti DB2 mogu biti pod operativnim sistemom OS/2, Windows NT, Windows
95, Windows 3.1x, na UNIX platformama (AIX, HP-UX, Solaris, SINIX, Silicon
Graphics IRIX, SCO OpenServer), Macintosh, DOS.
Na svakoj klijent radnoj stanici, bez obzira na platformu, instaliran je paket
CAE (Client Application Enabler), koji omogucuje pristup DB2 serveru i povezivanje na bilo koji DB2 UDB proizvod. Ovaj paket ukljucuje sve neophodne komponente DB2 sistema, zatim ODBC podrsku koriscenju DB2 baze podataka od strane
drugih (ne-DB2) programa za obradu podataka, opseznu dokumentaciju i DB2 komandni interfejs (Command Line Processor). Za svaki operativni sistem postoji
odgovarajuci CAE proizvod, ali sve platforme ne podrzavaju i sve klijentske alate
(v. [?]).
Na klijentu mogu da se instaliraju i komponente za udaljeno administriranje
servera.

18.1.3

Ostali DB2 proizvodi

Ostali DB2 proizvodi ukljucuju:


DB2 Application Developers Kit sadrzi kolekciju DB2 UDB proizvoda, DB2
proizvoda za povezivanje, Software Developers Kits alata za razvoj aplikacija za sve podrzane platforme.
DB2 Universal Database Personal Edition, personalno izdanje sistema DB2
UDB, omogucuje kreiranje i koriscenje lokalnih baza i pristup udaljenim
bazama podataka ako su na raspolaganju.
DB2 Connect Enterprise Edition / DB2 Connect Personal Edition (ranije

DDCS multi-user gateway / DDCS single user) obezbeduje


klijentima u mrezi

328

18 Klijent-server sistemi baza podataka


/ na pojedinacnoj radnoj stanici pristup DB2 bazama podataka pod operativnim sistemima MVS/ESA, OS/390, OS/400, VM, i VSE.

DB2 Universal Database Extended Edition (ranije DB2 Parallel Edition)


omogucuje particioniranje baze podataka na vecem broju samostalnih
racunara sa istim operativnim sistemom, svaki sa sopstvenim procesorom
i memorijom. Korisniku i aplikaciji u razvoju baza izgleda kao da je jedinstvena. SQL operacije mogu paralelno da se izvrsavaju nad particijama baze
podataka, smanjujuci vreme izvrsavanja upita.
Alati za razvoj aplikacija
Posebno znacajan DB2 proizvod koji se uobicajeno
instalira i na serveru i na klijentima jeste Software Delopers Kit (DB2 SDK) alat
koji omogucuje razvoj aplikacija, tj. kolekcija alata koja ukljucuje i biblioteke,
za programiranje aplikacija (API Apdatoteke zaglavlja, dokumentovane sumede

plication Programming Interface), i primere programa za gradenje


tekstuelnih, multimedijalnih ili objektno-orijentisanih aplikacija.
Ako se instalira na serveru, SDK omogucuje pristup i udaljenim i lokalnim
bazama podataka; ako se instalira na klijentu, SDK omogucuje pristup samo udaljenim bazama podataka.
Kao i Client Application Enabler, i SDK se gradi za svaku specificnu platformu
operativni sistem.
DB2 SDK omogucuje razvoj aplikacija koje koriste razne metode ugradnje baze
podataka u aplikativni program:
ugnjezdeni SQL
CLI (Call Level Interface) razvojnu okolinu (koja je kompatibilna sa Microsoft
ODBC)
Java Database Connectivity (JDBC)
za programiranje aplikacija API
sumede
zapamcene procedure
Prve dve mogucnosti vec su opisane u delu 3.4 Aplikativni SQL. DB2 SDK
podrzava nekoliko programskih jezika (ukljucujuci COBOL, C, C++) za razvoj

aplikacija, i obezbeduje
prekompilatore za te jezike.
Treca metoda ugradnje baze podataka u aplikativni program, JDBC, predstavlja
posebno zanimljivu mogucnost u savremenom razvoju RSUBP to je pristup
bazama podataka preko Interneta. Popularnost Interneta i World Wide Web-a
postavlja zadatak pristupa podacima sa Web-a kao obavezu svakog RSUBP-a.
Pozivi DB2 API funkcija koriste se za izvrsavanje administrativnih funkcija
kao sto su pravljenje rezervnih kopija sqlubkp, ili restaurisanje baze podataka
sqlurst. API funkcije su isprogramirane u programskom jeziku, npr. C-u, i

18.1 Jedna realizacija klijent-server RSUBP

329

mogu se pozivati eksplicitno ili implicitno; one se pozivaju implicitno pri prekompiliranju aplikativnog programa sa ugnjezdenim SQL-om kada se SQL iskazi zamenjuju pozivima API funkcija u sintaksi odgovarajuceg jezika (v. sledecu tacku
Priprema i izvrsavanje aplikativnih programa).
Proces razvoja aplikacije u klijent-server okruzenju podrazumeva da su ispunjene sledece pretpostavke:
na serveru je instaliran upravljac bazama podataka (RSUBP);
na klijent ili server radnoj stanici na kojoj se razvija aplikacija instaliran je
DB2 SDK softver;
odgovarajuci jezicki procesor je instaliran i konfigurisan;
instaliran je i konfigurisan zajednicki komunikacioni protokol za server i klijent;
postoji mogucnost povezivanja na bazu podataka iz komandne linije (command line processor).
Aplikativni program moze se razvijati na serveru ili na bilo kom klijentu na
kome je instaliran DB2 SDK softver. Aplikacija se moze izvrsavati ili na serveru ili
na bilo kom klijentu na kome je instaliran CAE (Client Application Enabler).
Da bi aplikativni program mogao da se izvrsava, neophodno je da prethodno
uspostavi vezu poveze se sa ciljnom bazom podataka. Uspostavljanjem veze
identifikuje se korisnik (svojom korisnickom identifikacijom) koji izvrsava program,
i server (svojim imenom) nad kojim se program izvrsava. U opstem slucaju aplikativni program moze u jednom trenutku da bude povezan samo sa jednim serverom
baza podataka; taj server se naziva tekucim serverom. U slucaju distribuirane
transakcije, aplikativni program moze se povezati sa vecim brojem servera baza
podataka, pri cemu je u svakom trenutku samo jedan od tih servera tekuci server.
Veza programa sa serverom baza podataka uspostavlja se eksplicitno iskazom
CONNECT koji treba da bude prvi izvrsni iskaz, ili implicitno vezom na podrazumevani server baza podataka (pri startovanju aplikativnog programa, ako je
omoguceno implicitno povezivanje). Program zatim moze da izvrsava proizvoljni
broj iskaza za manipulisanje podacima, definisanje i odrzavanje objekata baze po
dataka, kontrolnih operacija kao sto je dodela prava korisnicima, potvrdivanja
ili
ponistavanja promena. Veza sa bazom podataka prekida se izvrsavanjem iskaza
CONNECT RESET ili DISCONNECT.

18.1.4

Priprema i izvr
savanje aplikativnih porograma

U ovoj tacki bice izlozen postupak pripreme aplikativnog programa za izvrsenje u


klijent-server okruzenju.

330

18 Klijent-server sistemi baza podataka

Izvorni program P na maticnom jeziku (npr. C-u) u koji je ugnjezden staticki


SQL, kreira se, koriscenjem editora, u standardnoj ASCII datoteci, i ima odgovarajucu ekstenziju (npr. sqc za SQL ugnjezden u C).
Prvi korak u pripremi programa za izvrsenje je njegovo prekompiliranje tj.
obrada programa koriscenjem odgovarajuceg prekompilatora.
Aplikativni (.sqc) program se prekompilira izvrsavanjem PREP komande i tom
prilikom obavljaju se sledece radnje:
1. SQL iskazi u aplikativnom programu stavljaju se pod komentar i generisu se
pozivi DB2 API funkcija za te iskaze, koje maticni (C) kompilator razume;
tako modifikovani izvorni program P je program na maticnom (C) jeziku i
on se smesta u datoteku sa odgovarajucom ekstenzijom (za C jezik .c).
2. Kreira se vezna datoteka1 (engl. bind file) sa ekstenzijom .bnd koja sadrzi
izdvojene (iz aplikativnog programa P) SQL iskaze i informacije o njima;
vezna datoteka se koristi u trecem koraku povezivanju (engl. bind) aplikacije
i baza podataka. Umesto kreiranja vezne datoteke, u koraku prekompiliranja
moze se izvrsiti i povezivanje aplikacije sa bazom podataka (v. treci korak
povezivanje).
3. Generisu se poruke o procesu prekompiliranja koje se mogu usmeriti u datoteku poruka.
Pre prekompiliranja aplikacija mora da se poveze (CONNECT komandom) sa
serverom, tj. sa specificnom bazom podataka, bilo eksplicitno bilo implicitno. Mada
se aplikativni program prekompilira na klijent radnoj stanici a i modifikovani izvorni
program i poruke generisu na klijentu, veza sa serverom je potrebna zbog izvesnih
provera i kontrole.
Drugi korak je klasicna priprema modifikovanog izvornog programa P za
izvrsenje kompiliranje koriscenjem C kompilatora (kompiliraju se eventualno i
drugi izvorni C programi koji ne sadrze SQL iskaze) i povezivanje povezivacem (linkerom) maticnog jezika (povezuju se svi korisnicki moduli kao i biblioteka maticnog
jezika i biblioteka API SUBP-a). Tako se dobijaju prevedeni programi i izvrsni program u datotekama sa ekstenzijama .obj odnosno .exe.
Tre
ci korak u pripremi aplikativnog programa za izvrsenje je povezivanje (engl.
binding) aplikacije i baze podataka. Izvrsava ga proces veznik (engl. bind) koji
kreira pristupni paket 2 (ako povezivanje nije vec izvrseno u koraku prekompilacije)
na osnovu sadrzaja vezne datoteke, koji ce RSUBP koristiti da bi pristupio bazi
podataka u vreme izvrsavanja aplikacije. Pristupni paket smesta se u bazu podataka. Veznik je kompilator baze podataka i prevodi sadrzaj vezne datoteke
gradeci pri tom pristupni paket kao optimizovanu upravljacku strukturu, nivoa
1 U terminologiji ranijih verzija sistema DB2 vezna datoteka se nazivala moduo zahteva nad
bazom podataka (engl. DBRM Data Base Request Modul).
2 U terminologiji ranijih verzija sistema DB2 paket se nazivao plan aplikacije (engl. application plan).

18.1 Jedna realizacija klijent-server RSUBP

331

bliskog masinskom; veznik pri tom proverava prava korisnika (koji ga poziva) za
izvrsenje pojedinih radnji.
Ako se aplikacija obraca vecem broju baza podataka, za svaku se mora kreirati
ako aplikacija ukljucuje veci broj posebno prekompiliranih
pristupni paket. Takode,
izvornih modula, za svaki moduo se kreira po jedan pristupni paket.
Ukoliko se struktura pristupnih puteva promeni (na primer, doda se novi indeks
ili ukloni postojeci), da bi aplikacija mogla da koristi nove mogucnosti pristupa,
veznik mora ponovo da se pozove i da se kreira novi pristupni paket. Ponovno
pozivanje veznika moze biti automatsko implicitno (na primer u slucaju uklanjanja indeksa koji je koriscen u pristupnom paketu) ili eksplicitno (na primer, u
slucaju dodavanja novog indeksa koji korisnik zeli da iskoristi).
do poziva
Aplikacija se izvrsava na klijentu; kada se izvrsavanjem programa dode
DB2 API funkcije (zahteva za operacijom nad bazom), upravljanje preuzima server
koji izvrsava odgovarajucu operaciju nad bazom, i vraca rezultat i kontrolu upravljanja programom klijentu.
Postupak pripreme i izvrsenja aplikativnog programa u klijent-server okruzenju
moze se prikazati shematski kao na slici 18.3. Maticni jezik je programski jezik
C. Pravougaonicima su predstavljeni sistemski programi koji se koriste u pripremi
i izvrsenju aplikacije, zakrivljenim kvadratima prikazuju se datoteke koje se koriste i proizvode u procesu pripreme, dok je valjkom predstavljena baza podataka,
ukljucujuci i katalog kao njen sistemski deo.
Prethodno razmatranje odnosi se na aplikativne programe sa statickim SQLom. Programi sa dinamickom pripremom i izvrsavanjem SQL iskaza (koriscenjem
PREPARE i EXECUTE ili EXECUTE IMMEDIATE) ne prekompiliraju se vec
ceo postupak obrade prolaze u vreme izvrsenja.
U aplikativnom programu moze da se koristi DB2 CLI sistem koji je baziran
na Microsoft Open Database Connectivity (ODBC) specifikaciji, i na ISO CLI
standardu. Ovaj sistem koristi dinamicke SQL iskaze kao argumente funkcija koji

se prosleduju
sistemu DB2 na obradu. U tom slucaju koraci prekompiliranja i
povezivanja aplikacije sa bazom (bind) nisu potrebni jer se koriste javni pristupni

paketi koje obezbeduje


DB2. Dovoljno je samo kompilirati i linkovati aplikaciju.
Iz DB2 CLI aplikacije mogu da se pozivaju i zapamcene procedure. Tada se
aplikacija izvrsava delom na klijentu a delom na serveru (zapamcene procedure
izvrsavaju se na serveru), smanjujuci tako mrezni saobracaj.
Sistem DB2 je kompilatorski sistem, za razliku od gotovo svih nerelacionih sistema koji su interpretatorski. Ovo vazi i za interaktivni DB2 i za aplikativni DB2,
tj. prevode se ne samo aplikativni programi vec i interaktivno zadati SQL iskazi.

Razlog za prednost koja se daje prevodenju


je upravo u sistemskoj optimizaciji koja
karakterise relacione sisteme, i koja znacajno povecava efikasnost izvrsavanja kako
aplikativnih programa tako i interaktivnih SQL iskaza.

332

18 Klijent-server sistemi baza podataka

izvorni
program P
na jeziku
C/SQL
?
vezna
modifikovani
prekompilator
- datoteka
program P
(db2 PREP)
(bind file)
na jeziku C
?

?
veznik
(db2 BIND)

C-kompilator

?
prevedeni
program
?
povezivac
(linker)

pristupni
paket
(plan
aplikacije)

biblioteke

?
katalog
baza
podataka

?
izvrsni
program

A
MREZ

DB2 KLIJENT

?
DB2

DB2 SERVER

Slika 18.3: Priprema i izvrsenje aplikativnog programa u DB2

18.1 Jedna realizacija klijent-server RSUBP

18.1.5

333

Fizi
cka organizacija podataka u sistemu DB2

Za predstavljanje fizickih podataka sistem DB2 koristi nekoliko vrsta objekata:


Fizicki slog koji odgovara vrsti bazne tabele; sastoji se od prefiksa sloga koji
ukazuje na tabelu cijoj fizickoj reprezentaciji slog pripada, i od fizickih polja
koja odgovaraju vrednostima atributa, ali osim njih sadrzi i dodatne informacije kao sto je duzina polja. Fizicki slogovi su grupisani u stranice velicine
4KB (v. glavu 11).
Prostor tabela (engl. tablespace); sadrzi tabele, indekse, kompleksne objekte i
dugacke (LONG) tipove podataka. Prostor tabela je osnovna fizicka struktura
u sistemu DB2 i moze biti jednog od sledeca dva tipa:
1. prostor tabela kojim upravlja upravljac bazama podataka (engl. DMS
Database Managed Space)
2. prostor tabela kojim upravlja operativni sistem (engl. SMS System
Managed Space).

Svaki prostor tabela sastoji se od skladista (uredaja


ili direktorijuma) u kojima su smesteni objekti (npr. tabele) unutar tog prostora tabela. Podaci
procitani iz pojedinih skladista prostora tabela smestaju se u prostor unutrasnje memorije koji se naziva red bafera (engl. buffer pool). Red bafera
pridruzen je prostoru tabela. U slucaju paralelne MPP hardverske konfiguracije (engl. massive parallel processing), koriscenjem UDB proizvoda DB2
UDB Extended Edition (v. 18.1.3 Ostali DB2 proizvodi), baza podataka
moze biti particionirana na vise cvorova (klijenata i servera); tada se prostoru
tabela moze dodeliti grupa cvorova na kojima se nalaze delovi tog prostora
tabela.
Baza podataka skup prostora tabela kojima se zajedno upravlja; skup svih
podataka podeljen je na veci broj disjunktnih korisnickih i sistemskih baza
podataka; sistemski katalog je deo jedne od sistemskih baza podataka;
Dijalekt SQL-a koji podrzava DB2 ukljucuje, pored iskaza za kreiranje, izmenu
i uklanjanje baznih tabela i indeksa, i iskaze za kreiranje, uklanjanje i izmenu
prostora tabela i reda bafera. Pored SQL iskaza za ove operacije, sistem DB2
ukljucuje komandu za kreiranje i uklanjanje baze podataka.
DB2 komanda za kreiranje baze podataka je oblika
CREATE DATABASE ime-baze-podataka

[AT NODE] [ON oznaka-uredaja]


[CATALOG TABLESPACE definicija-prostora-tabela]
[USER TABLESPACE definicija-prostora-tabela]

334

18 Klijent-server sistemi baza podataka


[TEMPORARY TABLESPACE definicija-prostora-tabela]
Ova komanda moze da se izvrsi samo sa servera. Njenim izvrsenjem inicijalizuje se nova baza podataka, kreiraju tri pocetna prostora tabela i sistemske
tabele, i alocira log datoteka za oporavak. U paralelnoj hardverskoj konfiguraciji (MPP) ova komanda se odnosi na sve cvorove navedene u odgovarajucoj
datoteci (db2nodes.cfg). Baza podataka tada postaje particionirana, a cvor
sa kog sa ova komanda izvrsava postaje kataloski cvor nove baze podataka.
AT NODE opcija (u MPP konfiguraciji) precizira da se baza podataka kreira
samo na cvoru sa koga se komanda izdaje.

ON oznaka-uredaja
precizira slovo pridruzeno uredaju
na kome se kreira nova
baza podataka (npr. C:).
Ovom komandom se uvek, eksplicitno ili implicitno, kreira po jedan CATALOG, USER i TEMPORARY prostor tabela za katalog, korisnike i
privremene podatke (SYSCATSPACE, USERSPACE1, TEMPSPACE1, redom). Ako se odgovarajuce opcije ne navedu kreiraju se podrazumevani SMS
prostori tabela sa odgovarajucim brojem direktorijuma.
Definicija prostora tabela ukljucuje opcije vezane za tu vrstu objekta, kao

sto su tip prostora tabela (SYSTEM / DATABASE), direktorijum ili uredaj


i broj stranica, itd. (v. iskaz CREATE TABLESPACE).
SQL iskaz kreiranja prostora tabela je kompleksan, i u grubim crtama ima
oblik

[REGULAR]
[LONG]
TABLESPACE ime-prostora-tabela
CREATE

[TEMPORARY]
[IN NODEGROUP ime-grupe-cvorova]

SYSTEM sistemska-skladista
]
[MANAGED BY
DATABASE skladista baze podataka
[BUFFERPOOL ime-reda-bafera]
[ostali-parametri].
Ovim iskazom kreira se novi prostor tabela u bazi podataka (sa kojom je
prethodno izvrseno povezivanje), dodeljuju mu se skladista i definicija novog
prostora tabela belezi u katalogu.
Prostor tabela, s obzirom na podatke koji se u njega mogu upisati, moze biti
REGULAR za sve podatke osim privremenih, LONG za LOB (Large Object)
kolone tabela i TEMPORARY za privremene tabele.
Opcija MANAGED BY opisuje da li prostorom tabela upravlja operativni
sistem (SYSTEM) ili upravljac bazama podataka (DATABASE); pri tom se
navode i skladista za prostor tabela imena direktorijuma u slucaju SMS

18.1 Jedna realizacija klijent-server RSUBP

335

ili imena datoteka ili uredaja,


sa navedenim brojem stranica velicine 4KB, u
slucaju DMS prostora tabela.
Opcija IN NODEGROUP (u MPP konfiguraciji) precizira na kojoj se grupi
cvorova particionirane baze podataka kreira novi prostor tabela. U tom

slucaju postoji i mogucnost navodenja


specificnih cvorova na kojima se prostor tabela nalazi u okviru date grupe.
SQL iskaz kreiranja baznih tabela, CREATE TABLE, pored definicije kolona
i primarnog i stranih kljuceva (v. tacke 1.4.1, 1.4.2) i uslova ogranicenja , ima

i mogucnosti navodenja
prostora tabela za tu tabelu (tipa REGULAR), kljuca
particioniranja (u slucaju particionirane baze podataka), prostora tabela za
indekse i dugacke (LONG) objekte, oblika
[ IN ime-prostora-tabela
[INDEX IN ime-prostora-tabela]
[LONG IN ime-prostora-tabela]]
[ PARTITIONING KEY (lista-kolona)]
SQL iskazom za kreiranje reda bafera, CREATE BUFFERPOOL kreira se
novi red bafera u tekucoj bazi podataka, i precizira se velicina u stranicama;
u slucju particionirane baze podataka, u iskazu se mogu navesti i cvorovi na
kojima ce se ovaj red bafera kreirati.
Ukoliko se pri kreiranju bilo kog od prethodnih objekata neki od parametara
fizicke strukture ne navede, uzimaju se podrazumevane sistemske vrednosti.

[TABLESPACE ime-prostora-tabela]

[TABLE ime-tabele]
Iskaz DROP
[INDEX ime-indeksa]

[BUFFERPOOL ime-reda-bafera]
uklanja odgovarajuci fizicki objekat, kao i sve objekte koji su posredno ili
neposredno zavisni od njega; iz kataloga se uklanja opis tog objekta a pristupni paketi koji od njega zavise oznacavaju se nevazecim.
DROP iskaz moze da se primeni i na paket, shemu, pogled, triger, proceduru
i druge kreirane objekte.
Pored SQL DROP iskaza, postoji i DB2 komanda za uklanjanje baze podataka,
DROP DATABASE ime-baze-podataka
koja se moze primeniti i samo na specificni cvor u particioniranoj bazi (MPP
konfiguraciji).
Iskaz izmene (ALTER) moze se primeniti na izmenu definicije tabele, prostora
tabela ili reda bafera, i odnosi se na fizicke parametre ovih objekata, odnosno
na dodavanje kolona i definisanje ili uklanjanje primarnog i stranog kljuca i
uslova ogranicenja u slucaju bazne tabele.

336

18 Klijent-server sistemi baza podataka

Detaljniji opis fizicke organizacije sistema DB2 moze se naci u [24], [27]. Detalji
sintakse i semantike SQL iskaza koji podrzavaju fizicku strukturu sistema opisani
su u [37], [?].

18.2

Pitanja i zadaci

1. Definisati sledece pojmove:


klijent-server arhitektura
CLI sistem

zapamcena procedura
pristupni paket

distribuiranih i klijent-server SUBP?


2. Koje su razlike izmedu
3. Kako aplikativni progran moze da pristupi bazi podataka na serveru?
4. Opisati arhitekturu DB2 UDB.
5. Opisati postupak pripreme aplikativnog programa za izvrsenje u sistemu DB2.
6. Opisati funkciju prekompilatora.
je veznik i koja mu je funkcija?
7. Sta
8. Objasniti vrste objekata koje DB2 koristi za predstavljanje fizickih podataka.
9. Navesti DB2 (SQL) iskaze za kreiranje i uklanjanje baza podataka, prostora
tabela i baznih tabela.

Dodatak A

Objektno orijentisane baze


podataka
Relacioni sistemi za upravljanje bazama podataka predstavljali su znacajni
napredak u tehnologiji upravljanja bazama podataka u odnosu na prethodne generacije hijerarhijskih i mreznih sistema. Njihove prednosti, za veliki broj korisnika
i aplikacija, ogledale su se pre svega u
neproceduralnim upitnim jezicima i
znacajnoj meri nezavisnosti podataka.
Mada veoma uspesni u obradi poslovnih podataka i aplikacija, relacioni sistemi
se, s obzirom na oskudan repertoar tipova podataka i zahtev za normalizovanoscu
relacija, pokazuju neadekvatnim za siroke klase aplikacija koje manipulisu podacima
kompleksnije strukture. Kao takve aplikacije obicno se vide aplikacije nad geometrijskim, tekstuelnim i programskim podacima, odnosno aplikacije projektovanja uz
pomoc racunara (Computer Aided Design CAD), zatim geografski informacioni
sistemi (GIS), hipertekstuelne aplikacije, cuvanje i obrada dokumenata, kao i aplikacije razvoja softvera uz pomoc racunara (Computer Aided Software Engineering
CASE).
Zbog uocenih nedostataka, proizvodjaci relacionih sistema prosiruju svoje
proizvode novom funkcionalnoscu, kao sto je:
podrska bogatijem skupu tipova i pravila,
nasledjivanje atributa u odnosima tipa generalizacija/specijalizacija,
ucaurenje podataka i operacija (funkcija, procedura), pri cemu je nacin pristupa podacima ogranicen definisanim operacijama (funkcijama, procedurama).
Ovakvim prosirenjima relacioni sistemi izlaze iz okvira relacionog modela, i
prerastaju u sisteme nove generacije ([63]).
337

338

A Objektno orijentisane baze podataka

Sa druge strane, neke od pomenutih funkcija kojima se prosiruju relacioni sistemi (kompleksni objekti, nasledjivanje, ucaurenje) predstavljaju sastavni deo programske paradigme poznate kao objektno orijentisana1 paradigma. Ova programska paradigma privukla je posebnu paznju krajem osamdesetih godina, i predstavlja
vazan istrazivacki pravac u vecem broju racunarskih disciplina, kao sto su programski jezici, reprezentacija znanja, baze podataka, arhitektura racunara ([41]). Zato
jedan pravac razvoja oblasti baza podataka jeste definicija novog modela podataka,
objektno orijentisanog modela, i implementacija sistema za upravljanje bazama podataka nad tim modelom.
Baze podataka izgradjene nad objektno orijentisanim modelom su objektno orijentisane baze podataka, a sistem za upravljanje takvim bazama zove se, po analogiji
se relacionim i distribuiranim sistemima, objektno orijentisani sistem za upravljanje
bazama podataka, u oznaci OOSUBP. Objektno orijentisane baze podataka, zajedno
sa OOSUBP, obrazuju sistem objektno orijentisanih baza podataka. Za obe vrste
sistema koristi se i kraci termin, objektni sistem, kada je iz konteksta jasno na koju
vrstu sistema se termin odnosi.
Pored podrske novim svojstvima vezanim za objektno orijentisani model, pred
OOSUBP se koncepcijski postavljaju ista pitanja i zadaci kao i pred RSUBP (upitni jezik, integritetni deo, upravljanje transakcijama, fizicka organizacija, indeksi
i grupisanje objekata, konkurentnost i autorizacija); odgovori i resenja, medjutim,
sada zahtevaju sasvim drugacija razmatranja (v. odeljak A.2).
Mada objektno orijentisani pristup programiranju i projektovanju kompleksnih
programskih sistema dozivljava veliku popularnost u raznim disciplinama, ne postoji potpuna saglasnost o tome sta objektna orijentisanost uopste znaci i, posebno,
sta su to objektno orijentisane baze podataka. Za razliku od precizne definicije relacionog modela, ne postoji jedinstveni objektno orijentisani model podataka; zato
su objektni sistemi, koncepti na kojima su izgradjeni, kao i njihova funkcionalnost
dosta saroliki. Bez obzira na odsustvo jedinstva u konceptima i standarda u modelu,
arhitekturi i jezicima, postoji veci broj prototipskih i komercijalnih OOSUBP, npr.
GemStone ([10]), ObjectStore ([45]), Iris ([69]), ORION ([41]), O2 ([28]), itd. Kako
se funkcionalnost prosirenih relacionih sistema preklapa (a u nekim sistemima i poklapa) sa objektnim sistemima, i oni prvi se mogu smatrati objektnim sistemima
(npr. POSTGRES, [60], Starburst [47]).
U sledecim odeljcima bice prikazani koncepti objektno orijentisane paradigme
koji su znacajni za oblast baza podataka, i to objektno orijentisani model podataka
(jezgro i prosirenja), dugotrajne transakcije i objektno orijentisani upitni jezici.
Poslednji odeljak posvecen je sistemima baza podataka nove generacije.

1 Termini objektno orijentisani i objektni obi


cno se upotrebljavaju u sinonimnom zna
cenju;
tako ce biti i u ovom tekstu. Prvi termin je stariji i njegova skra
cenica (OO) postala je sastavni
deo niza drugih imena i skra
cenica. U punim nazivima, drugi termin ima tendenciju potiskivanja
prvog.

A.1 Objektno orijentisani model podataka

A.1

339

Objektno orijentisani model podataka

Model podataka predstavlja logicku reprezentaciju objekata realnog sveta i njihovih odnosa, mogucnosti manipulisanja objektima i zadavanja pravila integriteta.
Osnovna ideja objektno orijentisanog modela je da podigne nivo apstrakcije podataka, tako da se, umesto bitovima, bajtovima, slogovima, poljima, n-torkama,
manipulise prirodnijim entitetima iz realnog sveta, objektima. Kao sto je vec
receno, jedinstveni objektno orijentisani model ne postoji. U prvom Manifestu
sistema objektno orijentisanih baza podataka, ideolozi ovih sistema odustaju od
namere za definisanjem apstraktnog objektno orijentisanog modela na kome bi se
bazirale implementacije OOSUBP, uz sledeci stav: U odnosu na specifikaciju (OO)
sistema primenjujemo darvinisticki pristup: nadamo se da ce se, iz niza eksperimentalnih prototipova koji su u izgradnji, iskristalisati jedinstveni objektno orijentisani
model ([5]).
U odsustvu jedinstvenog objektno orijentisanog modela podataka, pogodno je
identifikovati minimalni skup objektnih koncepata koje podrzava (na jedan ili drugi
nacin) svaki objektni sistem (jezgro OO modela podataka, [42]), i prepoznati moguce
koncepte nadgradnje tog minimalnog skupa, prisutne u implementaciji razlicitih sistema.

A.1.1

Jezgro objektno orijentisanog modela podataka

Jezgro OO modela podataka, sa aspekta baza podataka, predstavljaju sledeci koncepti:


objekat
klasa
poruka i metoda
ucaurenje
nasledjivanje

Objekat.
U OO modelu podataka objekat je svaki entitet realnog sveta, tj.
objekat je sve. Primitivna vrednost je objekat (npr. ceo broj 2 ili niska aaa),
ali objekat je i kompleksni entitet tipa OSOBA, kao i citav programski sistem.
Svaki objekat ima pridruzen jedinstveni (u sistemu) identifikator. Tako se nekoj
odredjenoj osobi tipa OSOBA moze pridruziti identifikator o1 . Postojanje identifikatora objekta vodi poreklo iz objektno orijentisanih programskih jezika, gde
je podrazumevano prisustvo objekta u unutrasnjoj memoriji i gde se pretrazivanje
objekata po svojstvu, tako karakteristicno za baze podataka, nije primenjivalo.
Jedinstveni identifikator ima i svoju specificnu ulogu u objektno orijentisanim
bazama. Naime, svaki objekat ima stanje i ponasanje. Stanje objekta opisuje se

340

A Objektno orijentisane baze podataka

vrednostima njegovih instancnih promenljivih (ili atributa). Uloga jedinstvenog


identifikatora objekta u objektno orijentisanim bazama je da zameni objekat kada
se on pojavi kao vrednost neke instancne promenljive nekog drugog objekta. Tako
objekat sa identifikatorom o1 moze imati instancne promenljive sa sledecim vrednostima:
ime:
Mika Mikic
datum rodjenja: 22.03.1955.
poslodavac:
p1
gde je p1 jedinstveni identifikator objekta poslodavca osobe o1 . Objekat sa identifikatorom p1 moze imati kompleksnu strukturu sa instancnim promenljivim, na
primer, naziv i adresa, pa je kao vrednost instancne promenljive poslodavac osobe
sa identifikatorom o1 mnogo jednostavnije navesti identifikator p1 tog objekta nego
citav objekat.
Poruka, metoda, u
caurenje. Ponasanje objekta opisuje se skupom poruka na
koje je objekat sposoban da odgovori. Za objekat o1 te poruke mogu biti, izmedju
ostalih, ime, godine starosti, naziv poslodavca. Objekat na primljenu poruku
odgovara izvrsavanjem metode, tj. implementirane procedure koja je zaduzena za
izvrsavanje poruke. Svaki objekat je ucauren, sto znaci da je njegova interna
struktura nevidljiva za korisnika tog objekta. Korisniku je omogucen pristup objektu samo preko skupa poruka definisanih za taj objekat. Na primer, korisnik
objekta o1 ne zna njegove instancne promenljive, kao ni nacin implementacije njegovih metoda, pa tako nema mogucnost pristupa podatku datum rodjenja. Ova
instancna promenljiva moze se koristiti u implementaciji metode godine starosti,
da bi se, u odnosu na tekuci datum, uz odgovarajuce zaokrugljivanje ili odsecanje,
izracunala starost (u godinama) osobe o1 .
Za razliku od ovakvog, cistog objektno orijentisanog modela, veci broj objektnih sistema gradi se na objektnom modelu koji omogucuje definisanje javnih instancnih promenljivih, vidljivih svakom korisniku objekta, koje onda daju korisniku
mogucnost kako citanja vrednosti, tako i promene vrednosti instancne promenljive.
Klasa.
Svaki objekat pripada nekoj klasi, kojom se definise struktura objekata
te klase (instancne promenljive) i skup operacija i funkcija koje se nad objektima te
klase mogu izvrsavati (poruke). Objekat se naziva primerkom klase kojoj pripada.
Dakle, instancne promenljive i poruke definisu se na nivou klase, a primenjuju se
na primerke klase. Metode kojima se implementiraju poruke operacije i funkcije,
implementiraju se na nivou klase. (Na primer, objekat o1 moze biti primerak klase
OSOBA, cije su instancne promenljive ime, datum-rodjenja i poslodavac, a poruke,
tj. metode one koje se primenjuju na objekat o1 ). Svaka klasa sadrzi i metodu
novi za kreiranje primeraka klase, koja traba da se primenjuje na samu klasu, a ne
na primerak klase. Da bi se ujednacio nacin primene poruka i izvrsavanja metoda,
potrebno je da se poruke uvek primenjuju na objekte, a ne na klase. Zato za svaku
klasu postoji jedan specificni objekat, tzv. objekat klase, koji sadrzi definiciju klase.
Poruka, tj. metoda novi, primenjuje se na objekat klase.

A.1 Objektno orijentisani model podataka

341

Vrednost instancne promenljive a objekta iz klase X je objekat ili identifikator


objekta iz neke klase Y , a moze biti i skup ili lista objekata (ili identifikatora
objekata) iz klase Y . Klasa Y je domen instancne promenljive a klase X, i moze
imati proizvoljno kompleksnu strukturu. Tako se dolazi do ugnjezdene definicije
klase X kao usmerenog grafa klasa sa korenom u klasi X. Ovaj usmereni graf se
zove hijerarhija kompozicije klas
a , ili jos i horizontalna hijerarhija klas
a. On ne
mora predstavljati striktnu hijerarhiju (moze sadrzati i cikluse) i odgovara odnosu
agregacije izmedju klase X i klasa domena instancnih promenljivih (atributa)
klase X.
Primer A.1 Klasa objekata KNJIGA moze imati strukturu sledeceg oblika (uz
instancne promenljive navedeni su njihovi domeni; domen u viticastim zagradama
oznacava da odgovarajuca instancna promenljiva ima skupovnu vrednost):
klasa KNJIGA
naziv:
autori:
izdavac:
god izdanja:
sadrzina:

NISKA ZNAKOVA
{OSOBA}
PRAVNO LICE
CEO BROJ
{POGLAVLJE}

Klase NISKA ZANAKOVA i CEO BROJ su jednostavne (primitivne) klase, sa


atomicnim vrednostima. Klase OSOBA, PRAVNO LICE i POGLAVLJE, sa druge
strane, imaju sopstvenu strukturu (i ponasanje), koja se mora zadati definicijom
tih klasa. Na primer, struktura klasa OSOBA i POGLAVLJE moze biti sledeceg
oblika:
klasa OSOBA
ime:
NISKA ZNAKOVA
prezime: NISKA ZNAKOVA
adresa:
ADRESA
klasa POGLAVLJE
naslov:
sadrzina:

NISKA ZNAKOVA
{ODELJAK}

Slicno, mora se zadati i definicija klasa ADRESA i ODELJAK. Na primer,


struktura klase ODELJAK moze biti:
klasa ODELJAK
naslov:
sadrzina:

NISKA ZNAKOVA
{PARAGRAF}

Dalje, klasa PARAGRAF moze imati instancnu promenljivu definisanu skupovno


(paragraf se sastoji od reci), dok klasa REC
moze imati niz innad klasom REC
stancnih promenljivih koje karakterisu rec kao osnovnu jedinicu strukture i znacenja
teksta. Tako se dobija hijerarhija kompozicije klase KNJIGA, tj. usmereni graf sa
korenom u klasi KNJIGA. Jedan deo tog grafa predstavljen je na slici A.1.

342

A Objektno orijentisane baze podataka

- NISKA ZN
KNJIGA

OSOBA

.. . ADRESA

- PR.LICE . . .
- CEO BROJ
..
.
- POGLAVLJE ODELJAK

..
.
PARAGRAF -

REC

...

Slika A.1: Horizontalna hijerarhija klase KNJIGA

Objektni sistemi omogucuju korisniku da izvede novu klasu iz


Nasledjivanje.
postojece klase. Nova klasa, koja se zove podklasa postojece klase, nasledjuje sve instancne promenljive (strukturno nasledjivanje) i metode (nasledjivanje ponasanja)
od postojece klase, koja se naziva nadklasa nove klase. Svaki objekat primerak
podklase je ujedno i primerak nadklase, pa se moze koristiti gdegod se koristi
primerak nadklase. Ovo svojstvo odgovara odnosu generalizacije medju tipovima
entiteta (klasama) i doprinosi mogucnosti ponovnog koriscenja vec napisanih programa kojima se implementira model (engl. reusability). Podklasa obicno sadrzi
i dodatne instancne promenljive i metode, koje definise korisnik kreator podklase. Metode nasledjene od nadklase mogu u podklasi biti redefinisane. Mogucnost
primene iste metode (ili razlicitih metoda sa istim imenom) na razlicite klase, zove
se polimorfizam.

Na primer, moguce je definisati klasu UDZBENIK


kao podklasu klase KNJIGA, sa dodatanim instancnim promenljivim OBLAST, PROFILI (iz koje je oblasti
udzbenik i kojim je profilima namenjen) i novim metodama profil-u i profil-iz
za dodavanje odnosno izuzimanje odredjenog profila iz skupa kome je udzbenik
namenjen.
Jedna klasa moze imati proizvoljan broj podklasa. U slucaju sistema sa jednostrukim nasledjivanjem, jedna klasa moze imati najvise jednu nadklasu, pa takve
klase cine hijerarhiju klas
a; u slucaju sistema sa visestrukim nasledjivanjem, klasa
moze imati veci broj nadklasa, pa takve klase grade opstiju strukturu usmerenog
grafa bez ciklusa koja se naziva i resetkom klasa (engl. lattice, [42]). Skup klasa
koje su u odnosu podklasa/ nadklasa zove se i vertikalna hijerarhija klas
a.

Na primer, klasa KNJIGA, pored podklase UDZBENIK,


moze imati i podklase
ROMAN i POEZIJA, koje pak mogu imati svoje podklase. Tako bi hijerarhija
klasa ovog primera mogla graficki da se predstavi kao na slici A.2.

A.1 Objektno orijentisani model podataka

343

KNJIGA

UDZBENIK

HH

HH

HH
j

?
ROMAN

...

HH
HH

...

UMETNICKA

HH

RODOLJUBIVA

...

POEZIJA

?
LJUBAVNA

HH
j
NARODNA
...

HH
H
j
REFLEKSIVNA

...

Slika A.2: Vertikalna hijerarhija klase KNJIGA

Struktura klasa zajedno sa hijerarhijom kompozicije klasa i hijerarhijom klasa


definise objektno orijentisanu shemu.
Implementacija jezgra OO modela podataka u kontekstu OO baza podataka
mora da ukljuci perzistentnu (trajnu) memoriju za objekte i shemu, kao i korisnicke sumedje jezik definisanja objekata i klasa i jezik manipulisanja objektima
i klasama. Postoje dva osnovna pristupa izgradnji sumedja za objektno orijentisane
baze podataka. Prvi je izgradnja integrisanog jezika koji se koristi i za operacije nad
bazom podataka i za kontrolne operacije nevezane za baze. Ovaj jezik moze nastati
prosirenjem objektno orijentisanog programskog jezika konstrukcijama vezanim za
baze podataka, ili definisanjem novog integrisanog jezika iste namene.
Drugi pristup je tradicionalan u bazama podataka: to je definisanje jezika baze
podataka i njegovo ugnjezdenje u maticni programski jezik.
Najcesce korisceni OO jezici koji se prosiruju mehanizmima za rad sa bazama
podataka su OPAL ([10]) i C++ ([61]). Prednost integrisanih jezika baza podataka
je u tome sto se njima prevazilazi razlika izmedju slogovnog nivoa podataka u
programskom jeziku i skupovnog nivoa podataka upitnih jezika (npr. SQL-a). Nedostatak je, medjutim, sto se ova razlika prevazilazi snizavanjem nivoa apstrakcije
podataka, odnosno zamenom skupovnog nivoa upitnog jezika slogovnim nivoom
programskog jezika. Drugi nedostatak integrisanog jezika je potreba da se iz razlicitih programskih jezika pristupa objektno orijentisanoj bazi, sto je onda moguce
samo izgradnjom veceg broja integrisanih jezika.
Drugi pristup ima osnovni nedostatak u nepodudarnosti modela podataka u
bazi i modela podataka (tipova i struktura) u maticnom programskom jeziku. Zato

344

A Objektno orijentisane baze podataka

se, najcesce, sumedja OO baze podataka realizuje kroz dva razlicita jezika jedan
deklarativni, neproceduralni jezik za interaktivne (ad hoc) upite (npr. OSQL, [2])
i drugi aplikativni, proceduralni integrisani jezik baza podataka. Napomenimo
ovde, bez detaljnijeg razmatranja problema, da interaktivni upitni jezik nad OO
bazom, kao koncept, narusava princip ucaurenja, jer omogucuje pristup objektima
i njihovim svojstvima mimo definisanih metoda. Detaljnije o ovom problemu i
uslovima pod kojima interaktivni upitni jezik ne narusava ucaurenje objekata bice
reci u tacki A.2.2 (v. i [27]).

A.1.2

Ostali koncepti objektno orijentisanih modela podataka

Koncepti jezgra OO modela pokazuju se nedovoljnim (ili nedovoljno efikasnim) u


modeliranju i implementaciji aplikacija nad objektima slozene strukture. Specificne
klase aplikacija zato zahtevaju nadgradnju jezgra specificnim konceptima semantickog modeliranja, proizvodeci razlicite OO modele i sisteme.
Najcesci koncepti kojima se nadgradjuje jezgro OO modela jesu kompozitni
objekti, izmenljivost objektne sheme i podrska verzijama. Ako sistem za upravljanje
objektno orijentisanim bazama podataka podrzava ove koncepte, onda aplikacije ne
moraju da se bave njihovom kontrolom.
Kompozitni objekti. Kompozitni objekti su jedno od semantickih prosirenja
jezgra objektno orijentisanog modela. Implementacija koncepta kompozitnog objekta u objektnom sistemu omogucuje sistemsku kontrolu kreiranja, brisanja,
izmene i pretrazivanja kompozitnog objekta; ona takodje obezbedjuje sistemsku
podrsku uslovima integriteta, autorizaciji, konkurentnosti i drugim funkcijama koje
se realizuju nad kompozitnim objektom kao celinom.
Kompozitni objekti zasnivaju se na specificnoj semantici odnosa nekih klasa u
horizontalnoj hijerarhiji klasa. To je odnos tipa deo-od (engl. part-of). Tako, u
primeru A.1 semantika odnosa izmedju klasa KNJIGA i OSOBA (preko atributa autori) nije ista kao semantika odnosa izmedju klasa KNJIGA i POGLAVLJE (preko
atributa sadrzina); u prvom slucaju atribut autori, tj. skup vrednosti iz domena
OSOBA, jeste svojstvo objekta iz klase KNJIGA, dok u drugom slucaju vrednost
atributa sadrzina, tj. skup vrednosti iz domena POGLAVLJE, predstavlja deo
objekta iz klase KNJIGA. Zato objekat iz klase KNJIGA, zajedno sa pripadnim
objektima iz klasa koje obrazuju horizontalnu hijerarhiju, a koje su u odnosu deood, jeste jedan kompozitni objekat. Naglasimo da u ovaj kompozitni objekat ne
ulaze objekti primerci klasa koje su u odnosu svojstvo u toj horiznotalnoj hijerarhiji, npr. objekti iz klase OSOBA.
Objasnimo pojam kompozitnog objekta nesto sistematicnije. Kao sto je vec
naglaseno, stanje objekta je skup vrednosti iz domena atributa klase kojoj objekat
pripada. Domeni mogu biti jednostavne klase (brojeva, niski) i tada se vrednosti
atributa predstavljaju bas tim jednostavnim objektima; domeni mogu biti i slozene

A.1 Objektno orijentisani model podataka

345

klase, kada se vrednosti atributa predstavljaju identifikatorima objekata primeraka tih slozenih klasa. Ovi identifikatori zovu se obracanja (reference) objektima
koje identifikuju. Ako obracanje nosi semantiku deo-od, onda se ono zove kompozitno obracanje ([41]) i pripada semantickom prosirenju objektnog modela, inace
je obracanje slabo i sastavni je deo semantike jezgra objektnog modela. Kompozitno obracanje moze biti ekskluzivno ili deljeno (kada je jedan objekat deo-od
samo jednog objekta odnosno kada jedan objekat moze biti deo-od veceg broja objekata), zavisno ili nezavisno (kada je postojanje objekta na koji postoji kompozitno
obracanje uslovljeno postojanjem objekta koji vrsi to obracanje, odnosno kada nije
time uslovljeno).
Kompozitni objekat je heterogena kolekcija objekata koja se sastoji od objekta
koji ima atribute kompozitna obracanja, i od svih objekata (komponentnih objekata) na koje se ta obracanja odnose. Atribut sa vrednostima kompozitnim
obracanjima zove se kompozitni atribut. Komponentni objekti pripadaju razlicitim
klasama, a te klase su organizovane u hijerarhiju koja se zove hijerarhija kompozitnog atributa. Svaka klasa ove hijerarhije zove se komponentna klasa, a sama hijerarhija je deo (podskup) hijerarhije kompozicije klasa. Tako, u primeru A.1 atribut
sadrzina jeste kompozitni atribut, a klase POGLAVLJE, ODELJAK, PARAGRAF
su komponentne klase hijerarhije kompozitnog atributa sadrzina klase KNi REC
JIGA. Kompozitni objekat se u tom primeru sastoji od odgovarajucih primeraka

klasa KNJIGA, POGLAVLJE, ODELJAK, PARAGRAF i REC.


Verzije.
Neki OOSUBP podrzavaju koncept verzij
a objekta kao vremenskih
podataka, koji se pokazuje potrebnim u nizu aplikacija. Takve aplikacije su razvoj
softvera, projektovanje hardvera, kreiranje dokumenata. Ova podrska odnosi se na
mogucnosti:
kreiranja nove verzije objekta, koja se daje specificnom korisniku na koriscenje
i eventualno izmenu;
proglasavanja kreirane (i izmenjene) verzije objekta u tekucu verziju;
spajanja razlicitih verzija;
brisanja zastarele verzije;
pretrazivanja istorije verzija datog objekta.
Verzije stvaraju nove vrste odnosa izmedju objekata. Jedan od tih odnosa je
izvedena-od, izmedju nove i stare verzije objekta. Druga vrsta odnosa je verzija-od,
izmedju svake verzije objekta i apstraktnog objekta cije su to verzije.
Verzije objekta, zajedno sa definisanim odnosima, obrazuju usmereni graf. Veci
broj verzija moze biti u odnosu izvedena-od sa jednom verzijom objekta, i svaka
verzija objekta moze biti u tom odnosu sa vecim brojem verzija objekta (tj. iz jedne
verzije objekta moze se izvesti veci broj novih verzija, a i nova verzija jednog objekta
moze biti izvedena iz veceg broja starih verzija). Ipak, vecina modela koji ukljucuju

346

A Objektno orijentisane baze podataka

semanticki koncept verzija ogranicava ovaj graf na hijerarhijsku strukturu koja se


zove hijerarhija verzija. Slika A.3 predstavlja jednu hijerarhiju verzija objekta iz
klase KNJIGA. Jednostruke grane oznacavaju odnos verzija-od, a dvostruke odnos
izvedena-od.
Knjiga
(apstr.obj.)
BPPP
Knjiga
Knjiga

PP

B
PP(verzija 1)
(verzija 0)
PP

P
q
)

B
@

B
@

B
@

B
@
R

R
@

BBN

Knjiga
(verzija 3)

Knjiga
(verzija 2)

Slika A.3: Graf verzija

Osnovne prednosti objektnog pristupa projektovanju


Modifikacija sheme.
i razvoju programskih sistema su posledica koncepta nasledjivanja, i ogledaju
se u mogucnosti jednostavnog prosirenja sistema, kao i u mogucnosti ponovnog
koriscenja fragmenata sistema (npr. jednom napisana metoda moze se primeniti na
sve podklase, a moze se upotrebiti i u drugom programskom sistemu). U kontekstu
sistema za upravljanje bazama podataka, prisustvo veceg broja korisnika uslovljava potrebu za razlicitim pogledima na shemu baze podataka, sto podrazumeva
i razlicite poglede na relaciju i mehanizam nasledjivanja. Razliciti pogledi podrazumevaju, zato, modifikaciju (fizicku ili virtuelnu) sheme. Fizicka modifikacija
sheme predstavlja aspekt logickog projektovanja objektne baze podataka.
Model modifikacije sheme podrazumeva definisanje smislenih promena koje su
moguce nad shemom, kao i definisanje semantike tih promena. Sam objektni model
podataka, s obzirom na medjuzavisnost klasa i njihovu tesnu povezanost odnosima
generalizacije i agregacije, namece znatno siri spektar mogucih i cesto potrebnih
modifikacija sheme od, na primer, relacionog modela.
S obzirom na dve vrste odnosa modeliranih objektnim modelom podataka, i
modifikacije sheme objektno orijentisanih baza podataka su u osnovi dvojake. To
su modifikacija definicije klase (modifikacija hijerarhije kompozicije klasa) i modifikacija odnosa nasledjivanja (modifikacija hijerarhije klasa). Modifikacija definicije klase ukljucuje modifikaciju atributa, domena i metoda, dok se modifikacija

A.1 Objektno orijentisani model podataka

347

hijerarhije klasa odnosi na promenu odnosa nadklasa/podklasa para klasa, ili na


dodavanje ili uklanjanje klase.
Jedan od malog broja OOSUBP ciji model sadrzi modifikaciju sheme je ORION
([41]), pa ce ovde biti nabrojane mogucnosti modifikacije sheme koje on nudi. Ove
mogucnosti su direktno zavisne od specificnosti celokupnog modela, i u slucaju sistema ORION odrazavaju visestrukost nasledjivanja sadrzanu u modelu ovog sistema.
Modifikacije pojedinacne klase:
1. Modifikacije atributa
dodati novi atribut klasi;
ukloniti postojeci atribut iz klase;
promeniti ime atributa klase;
promeniti domen atributa klase;
promeniti podrazumevanu vrednost atributa;
2. Modifikacije metoda
dodati novu metodu klasi;
ukloniti postojecu metodu iz klase;
promeniti ime metode klase;
promeniti metodu (blok implementirane procedure) klase;
Modifikacije odnosa nadklasa/podklasa
1. za dve postojece klase proglasiti jednu za nadklasu druge;
2. ukloniti jednu klasu iz liste nadklasa druge klase;
3. promeniti poredak nadklasa date klase;
4. dodati novu klasu;
5. ukloniti postojecu klasu;
6. dodati novu klasu kao nadklasu n postojecih klasa;
7. razdeliti jednu klasu u n novih klasa;
8. udruziti n klasa u jednu novu klasu.
Realizacija navedenih modifikacija sheme vodjena je pravilima koja se odnose
na atribute, domene, metode, nasledjivanje atributa i metoda od jedne ili veceg
broja nadklasa, na razresavanje konflikata zbog istoimenih atributa ili metoda i, pre
svega, na ocuvanje hijerarhije klasa kao usmerenog grafa sa korenom u sistemskoj
klasi KLASA.
Modifikacija sheme koja ukljucuje kompozitne objekte uzrokuje specificne probleme koji su izvan okvira ovog razmatranja (v. [41]).

348

A.2

A Objektno orijentisane baze podataka

Objektno orijentisani sistemi baza podataka

Objektno orijentisani sistem baza podataka ukljucuju objektne baze podataka


i odgovarajuci sistem za upravljanje tim bazama, OOSUBP. OOSUBP, pored
podrske konceptima objektnog modela, mora da podrzi i sve funkcije koje su karakteristicne za sistem za upravljanje bazom podataka uopste. To, preciznije, znaci da
OOSUBP mora da poseduje odgovarajuce korisnicke sumedje, tj. jezike za rad sa
bazom podataka, programe za obradu i optimizaciju upita, kontrolu integriteta, autorizaciju, kao i oporavak od pada. OOSUBP mora da podrzi i fizicku organizaciju
i upravljanje objektima u fizickoj memoriji, kao i upravljanje transakcijama. Mada
su same funkcije iste kao i kod relacionih sistema, njihova realizacija u objektnom
okruzenju postavlja specificne probleme i zahteva specificna resenja.
Osnovna razlika u realizaciji funkcija objektno orijentisanog sistema baza podataka, u odnosu na druge sisteme, nastaje kao posledica dvostruke hijerarhijske
organizacije podataka (tj. klasa). Tako je moguce pristup objektima iz neke klase
(u cilju pretrazivanja, unosenja, brisanja, azuriranja) ograniciti samo na tu klasu,
a moguce je pod pristupom objektima iz neke klase podrazumevati i pristup objektima iz svih podklasa te klase (s obzirom da je svaki primerak podklase neke
klase istovremeno i primerak te klase). Kod fizickog smestanja objekata, moguce je
grupisati objekte prema odnosu podklasa/nadklasa, a moguce je grupisati ih prema
odnosu agregacije, tj. prema hijerarhiji kompozicije klasa.
Kao objekat zakljucavanja i autorizacije, u objektnom modelu moze se pojaviti pojedinacni primerak klase, kompozitni objekat, cela klasa, cela hijerarhija
kompozicije klasa, ili deo hijerarhije klasa sa korenom u datoj klasi. S obzirom
na mogucu slozenost objekata, i koncept transakcije se znatno menja. Transakcije mogu vremenski biti znatno duze, mogu sadrzavati ugnjezdene transakcije
(npr. nad komponentnim objektima), pa se arhitektura same transakcije menja, a
konkurentno izvrsenje skupa transakcija zahteva drugacije protokole u odnosu na
one koji se srecu kod relacionih sistema.
Poseban znacaj u funkcionisanju SUBP (bilo koje vrste) imaju upitni jezici i
upravljanje transakcijama. Kako ovi aspekti sistema imaju izrazene specificnosti u
arhitekturi sistema za upravljanje objektno orijentisanim bazama podataka, u preostalom tekstu ovog odeljka bice razmotrene upravo ove dve komponente OOSUBP.

A.2.1

Dugotrajne transakcije

Fundamentalna pretpostavka u osnovi tradicionalnog modela transakcija u relacionim sistemima jeste kratko trajanje transakcija. Za objektno orijentisani sistem
baza podataka, koji operise kompleksnim objektima, transakcija moze da traje
veoma dugo, satima ili danima. Transakcija je u objektnom sistemu, kao i u drugim
sistemima, jedinica kontrole konkurentnosti i oporavka. Zato za transakcije koje
traju dugo implementacija tradicionalnog modela transakcija moze, s jedne strane,
da izazove neprihvatljivo dugo cekanje na dobijanje katanca i pristup objektu. Sa
druge strane, ako se dugotrajna transakcija ponistava zbog zahteva korisnika, pada

A.2 Objektno orijentisani sistemi baza podataka

349

transakcije ili sistema, kolicina izgubljenog posla moze da bude takodje neprihvatljivo velika.
Cilj modela transakcija je da, za definisani kriterijum konzistentnosti baze podataka, pod pretpostavkom konkurentnog izvrsenja skupa transakcija, kao i pod
pretpostavkom moguceg pada sistema, obezbedi osnovu za automatsko nametanje
tog kriterijuma. Kriterijum konzistentnosti u tradicionalnim transakcijama je linearizovanost. Ovaj kriterijum se namece odgovarajucim postupkom dobijanja
katanaca u slucaju konkurentnosti, odnosno koriscenjem dnevnika azuriranja i oporavka u slucaju pada sistema.
Dugotrajne transakcije ne moraju prihvatiti linearizovanost kao kriterijum
konzistentnosti. Problem sa dugotrajnim transakcijama je sto odgovarajuceg,
opsteg kriterijuma konzistentnosti jos nema. Bez obzira na to, postoje pokusaji
u pojedinim sistemima da se resi problem dugog cekanja na katance i skupog
ponistenja transakcije.
Dugotrajne transakcije imaju jedan od sledeca dva oblika. Ravne dugotrajne
transakcije su one koje u svom sastavu nemaju druge transakcije (podtransakcije) i
mogu da se posmatraju kao nizovi kratkotrajnih transakcija. Ugnjezdene transakcije predstavljaju hijerarhijsku organizaciju transakcija.
Za kontrolu konkurentnosti ravnih dugotrajnih transakcija moze se koristiti
neka od metoda koje se ne zasnivaju na katancima i zakljucavanju, npr. kontrola
konkurentnosti pomocu vise verzija ([27]), ako sistem uopste podrzava verzije. Objekat moze da se iskopira u radni prostor transakcije koja zahteva citanje ili upis u
taj objekat. Ako transakcija samo cita svoju kopiju, onda ona ne proizvodi efekte
na istoriju verzija tog objekta. Ako transakcija menja svoju kopiju, onda se ta
kopija, po zavrsetku transakcije, prijavljuje kao nova verzija objekta.
Zakljucavanje objekta u slucaju verzija zahteva se samo za vreme kopiranja
objekta u radni prostor transakcije, pa je potreba za dugotrajnim cekanjem na
katance eliminisana. Mehanizam verzija takodje omogucuje rad (najcesce eksperimentalne prirode) sa raznim varijantama jednog objekta, i obezbedjuje informacije
o istoriji verzija (istorijske podatke o objektu). Medjutim, odrzavanje istorije verzija znacajno uvecava prostor i kolicinu obrade podataka. Zbog toga se za kontrolu
konkurentnosti transakcija nad nekim objektima, pored mehanizma verzija, moraju
obezbediti i alternativni mehanizmi. Jedan od njih je mehanizam mekog katanca.
Naime, za kratkotrajne transakcije sistem postavlja kratkotrajne, tvrde katance,
koji se ne mogu osloboditi pre kompletiranja ili ponistenja transakcije. Za dugotrajne transakcije korisnik (a ne sistem) eksplicitno postavlja meke katance, koje
moze eksplicitno da oslobodi i u toku izvrsavanja transakcije, ili koji se (sistemski)
oslobadjaju na kraju transakcije. Meki katanac se eksplicitno oslobadja obicno na
zahtev druge transakcije koja je u konfliktu sa tim katancem.
Za oporavak od pada sistema, ravne dugotrajne transakcije obicno primenjuju koncept tacaka pamcenja. Tacke pamcenja omogucuju parcijalno ponistavanje
transakcija. Deo dugotrajne transakcije izmedju dve tacke pamcenja moze se tretirati kao kratkotrajna transakcija, koja je u tom slucaju jedinica oporavka. Ponekad

350

A Objektno orijentisane baze podataka

je potrebno ponistiti ili ponovo izvrsiti vise od jedne kratkotrajne transakcije (striktno unazad), sto predstavlja problem s obzirom da su katanci prethodnih kratkotrajnih transakcija (koje su izvrsile COMMIT operaciju) oslobodjeni. Tada se moze
primeniti tehnika vremenskih oznaka koje se dodeljuju COMMIT slogovima log
datoteke i objektima koji se azuriraju. Radnja ponistenja (ili ponovnog izvrsenja)
azuriranja objekta dopusta se samo ako je vremenska oznaka COMMIT sloga tekuce
kratkotrajne transakcije veca od vremenske oznake objekta, i ako objekat vec nije
zakljucan od strane druge kratkotrajne transakcije.
Ugnjezdene transakcije su uopstenje tacaka pamcenja i omogucuju, umesto serijske, hijerarhijsku organizaciju transakcije, a u slucaju potrebe, i hijerarhijsko
ponistavanje. Zato je iskaz pocetka transakcije, npr. BEGIN TRANSACTION,
prosiren tako da oznacava i pocetak podtransakcije; COMMIT i ROLLBACK operacije su takodje prosirene tako da se odnose i na podtransakciju, ali samo u opsegu
spoljasnje transakcije a ne i citavog sistema.

A.2.2

Upitni jezici

Vecina OOSUBP koristi dva razlicita jezika za definisanje i manipulisanje podacima:


jedan za aplikativno programiranje i drugi za interaktivne upite. Za izgradnju aplikativnog jezika ovi sistemi najcesce ne primenjuju pristup ugnjezdenja upitnog
jezika u maticni jezik, koji je najzastupljeniji kod relacionih sistema. Umesto toga,
objektni sistemi primenjuju koncept integrisanog jezika ([27]) koji se koristi i za operacije nad objektnom bazom i za upravljacke operacije i operacije obrade tipicne
za programske jezike. Time se prevazilaze problemi nepodudarnosti tipova i nivoa
semantike (deklaratvna/proceduralna) maticnog i upitnog jezika, ali, na zalost,
najcesce po cenu spustanja nivoa operacija nad bazom na proceduralni nivo operacija programskog jezika. Najzastupljeniji medju integrisanim jezicima objektnih
sistema su OPAL (dijalekt Smalltalk-a, jezik OOSUBP GemStone, [10]) i C++
([61]). Posledica koriscenja integrisanog jezika je i nepostovanje principa dualnosti
za interaktivni i aplikativni jezik.
Interaktivni upitni jezik za realizaciju ad hoc upita obicno je neka verzija objektno prosirenog SQL jezika; prosirenje moze biti i takvo da dobijeni jezik malo lici
na sam SQL. Prikazimo u osnovnim crtama upitni jezik OSQL sistema Iris ([69],
[34]). Iskazi jezika OSQL mogu se klasifikovati na sledeci nacin:
iskazi otvaranja baze podataka i povezivanja sa njom, START i CONNECT;
iskazi definisanja
1. Definicija klase (u terminologiji ovog sistema to je kreiranje tipa)
ukljucuje ime klase, atribute i njihove domene. Atributi (u ovoj terminologiji funkcije svojstava) mogu imati opciju REQUIRED, sto
odgovara opciji NOT NULL kod relacionih sistema. U definiciji klase
moze se navesti i njena nadklasa (onda klasa nasledjuje sve atribute nadklase). Atribut klase moze uzeti, kao svoju vrednost, i skup vrednosti

A.2 Objektno orijentisani sistemi baza podataka

351

iz odgovarajuceg domena, sto se oznacava opcijom MANY. Na primer,


sledecim iskazima se kreiraju klase Osoba, Autor, Recenzent, Rad:
CREATE TYPE Osoba
(ime Charstring REQUIRED,
adresa Charstring,
telefon Charstring);
CREATE TYPE Autor SUBTYPE Osoba
(br radova Integer);
CREATE TYPE Recenzent SUBTYPE Osoba
(domen istrazivanja Oblast MANY);
CREATE TYPE Rad
(naslov Charstring REQUIRED,
autori Autor REQUIRED MANY,
oblast Oblast,
recenzenti Recenzent MANY);
2. Definicija primerka klase ukljucuje ime promenljive (cija je vrednost taj
primerak klase, tj. objekat) i vrednosti nekih (bar REQUIRED) atributa
pripadne klase. Na primer, sledecim iskazima se kreiraju primerci klasa
Recenzent, Autor i Rad:
CREATE Recenzent (ime, domen istrazivanja)
INSTANCES r 1 (Mara Maric, (racunarstvo, ekonomija));
CREATE Autor (ime)
INSTANCES a 1 (Pera Peric);
CREATE Rad (naslov, autori)
INSTANCES rd 1 (O objektnom modelu,

a 1);

3. Definicija funkcije ukljucuje ime funkcije i preslikavanje skupa klasa u


klasu kojoj pripada objekat vrednost funkcije. Na primer, sledeci iskaz
definise funkciju ocena koja vraca ocenu kojom je jedan recenzent ocenio
jedan rad (ovo je primer tzv. zapamcene funkcije):
CREATE FUNCTION

ocena (Rad, Recenzent)

Integer;

iskazi dodele
1. Dodela klase objektu oznacava mogucnost pripadnosti jednog objekta
vecem broju klasa. Na primer, objektu a1 (primerak klase Autor) moze
se dodeliti i klasa Recenzent, tj. autor a1 bice istovremeno i recenzent:
ADD TYPE Recenzent to

a 1;

352

A Objektno orijentisane baze podataka


2. Dodela vrednosti funkciji (funkciji svojstva, tj. atributu, ili zapamcenoj
funkciji) izvrsava se iskazom SET. Tako, atributu recenzenti objekta rd1
moze se dodeliti vrednost r1 , a funkciji ocena sa argumentima (rd1 , r1 )
moze se dodeliti vrednost 5 pomocu sledecih iskaza:
SET recenzenti (rd 1)

= r 1;

SET ocena (rd 1, r 1) = 5;


iskazi pretrazivanja
Ovi iskazi su oblika SELECT FOR EACH WHERE, pri cemu linija
FOR EACH odgovara FROM liniji SQL-a ali, za razliku od nje, nije obavezna.
Na primer, upiti naci naslov rada rd1 i naci naslove svih radova autora
a1 mogu se izraziti sledecim iskazima:

SELECT

naslov(rd 1);

SELECT
naslov
FOR EACH Rad rd
WHERE
a 1 = autor(rd);

Interaktivni upitni jezici, mada siroko zastupljeni u objektnim sistemima za upravljanje bazama podataka, narusavaju princip ucaurenja podataka i operacija,
osim ako su objekti projektovani prema jednom specificnom, strogom kriterijumu.
Naime, princip ucaurenja podrazumeva da se objektima moze pristupiti samo
preko definisanih poruka, dok interaktivni upitni jezik omogucuje pristup svim
atributima (instancnim promenljivim) objekta. Dovoljan uslov za ucaurenost objekta i pri upotrebi ad hoc upita je da skup metoda, tj. poruka koje definisu
ponasanje objekata iz jedne klase, sadrzi jednu kompletnu mogucu reprezentaciju
objekta iz te klase. Ilustrujmo znacenje zahteva za kompletnoscu, kao i opcije
moguce reprezentacije.

Primer A.2 Neka su za klasu TACKA


definisane metode za dobijanje njenih
Dekartovih koordinata x i y, a za klasu KRUG metoda za dobijanja tacke centra
kruga, i metoda za dobijanje broja duzine poluprecnika kruga. Ovaj skup metoda

obrazuje jednu kompletnu reprezentaciju objekata iz klasa TACKA


i KRUG, jer
su njima pokrivena sva svojstva tih objekata. Ukoliko su u upitu dopusteni i
skalarni izrazi nad definisanim metodama, proizvoljne slozenosti, onda upitni jezik
zaista omogucuje, bez narusavanja ucaurenosti objekta, postavljanje proizvoljnih,

neplaniranih upita nad klasama TACKA


i KRUG (na primer, naci sve krugove sa
centrom u tacki (0,0); ili, naci koordinate centara svih krugova sa poluprecnikom
1).

A.3 Sistemi baza podataka nove generacije

353

Reprezentacija kruga centrom i poluprecnikom (tj. metodama koje vracaju te


podatke) je jedna moguca reprezentacija kruga. Druga reprezentacija objekta iz
klase KRUG moze da se sastoji od metoda za dobijanje koordinata krajnjih tacaka
jednog precnika; da bi reprezentacija bila precizno odredjena, moze se posmatrati
precnik paralelan x-osi. Tako bi skup metoda nad klasom KRUG sada sadrzao
metode za dobijanje x1 -koordinate, x2 -koordinate i (zajednicke) y-koordinate krajnjih tacaka precnika paralelnog x-osi. I ova reprezentacija je kompletna, a upitni
jezik, kao i u prethodnom slucaju, omogucuje postavljanje svih upita.
Za razliku od prethodnih, logickih reprezentacija, fizicka reprezentacija objekta
iz klase KRUG, odnosno stvarne instancne promenljive te klase mogu biti, na
primer, polarne koordinate krajnjih tacaka precnika paralelnog x-osi. Korisnik
ne moze da pristupi instancnim promenljivim i one nisu od interesa za upitni jezik
(koji raspolaze samo odredjenim skupom metoda). One su od interesa i koriste se
u implementaciji metoda, jer metode, prema postavkama objektnog modela, imaju
pristup instancnim promenljivim sopstvene klase.
Skup metoda jedne kompletne moguce reprezentacije objekata iz date klase
dovoljan je za postavljanje upita nad tom klasom. Skup svih metoda te klase obicno
je znatno siri; on sadrzi (bar) jos i metode za dodeljivanje vrednosti objektima, kao i
metode za kreiranje novog objekta iz klase, odnosno za unistenje postojeceg objekta
iz klase.

A.3

Sistemi baza podataka nove generacije

Razvoj sistema baza podataka u postrelacionom periodu kretao se u dva pravca:


nadgradnja objektno orijentisanih programskih jezika upravljacem trajnih (perzistentnih) objekata (perzistentni OO sistemi), i izgradnja objektno orijentisanih baza
podataka sa punom podrskom ANSI SQL jeziku.
OOSUBP prve vrste obicno obezbedjuju razne funkcije standardnog SUBP
jednostavne upitne jezike, pristupne metode kao sto je direktni pristup ili
grupisanje, upravljanje transakcijama i kontrolu konkurentnosti i oporavka. Medjutim, oni su nekompatibilni sa RSUBP i ne poseduju citav niz svojstava utemeljenih
i razvijenih u kontekstu RSUBP, kao sto su mehanizam pogleda, autorizacija, potpuno neproceduralni upitni jezici, upravljanje katalozima, itd. Zbog toga se drugi
pravac smatra pravcem razvoja sistema baza podataka nove generacije ([43]).
Integrisani relaciono/objektni sistemi su prosirenja relacionih sistema konceptima jezgra OO modela, kao i nekim specificnim OO konceptima. Ovakvim integracijama pristupaju i proizvodjaci perzistentnih OO sistema, i proizvodjaci relacionih proizvoda. Prvi planiraju prosirenja svojih sistema upitnim jezikom kompatibilnim sa ANSI SQL, dok drugi prosiruju ANSI SQL2 konceptima objektnog
modela (takvo prosirenje je i najavljeni ANSI SQL3 standard).
I pored ovakve nacelne saglasnosti u pogledu razvoja nove generacije sistema
baza podataka, postoje i znacajne razlike medju zainteresovanim istrazivackim i

354

A Objektno orijentisane baze podataka

proizvodjackim stranama. Tako se i dogodilo da su se u periodu od 1990 1995.


godine u relevantnoj literaturi pojavila tri manifesta sistema baza podataka nove
generacije, koje su sastavili vrhunski istrazivaci i eksperti u oblasti OO i relacione
tehnologije. Prvi od tih manifesta ([5]) zastupa koncepte objektnog modela sa upravljacem perzistentnih objekata, smatrajuci ga sledbenikom relacionog modela
u evoluciji modela podataka, u istom smislu odbacivanja i negiranja koncepata u
kome je relacioni model sledbenik mreznog i hijerarhijskog.
Drugi manifest ([63]) je delo Komiteta za unapredjenje funkcija SUBP, sastavljenog od najeminentnijih istrazivaca u oblasti relacione tehnologije, sa americkih univerziteta i iz industrije. On polazi od cinjenice da RSUBP ne samo da ne podrzava
aplikacije sa kompleksnim podacima, vec da ne podrzava adekvatno ni poslovne
aplikacije kojima je prvenstveno namenjen; adekvatna podrska poslovnim aplikacijama podrazumeva i podrsku kompleksnim dokumentima, kao i multimedijalnim
podacima slici, rukopisu, zvuku, fotografiji. Osnovne postavke ovog manifesta su
sledece.
Pored tradicionalnog upravljanja podacima, nova generacija SUBP treba da
podrzi bogatiju strukturu objekata i pravila. Pozeljna svojstva su: sistem apstraktnih tipova podataka, raznovrsni konstruktori tipova podataka (niz, slog,
skup, unija), rekurzivna kompozicija konstruktora, nasledjivanje, ucaurenje,
deklarativna ogranicenja i proceduralni trigeri.
Nova generacija SUBP mora da nasledi sva svojstva relacione generacije
SUBP, pre svega neproceduralni pristup podacima, nezavisnost podataka i
mehanizam pogleda.
Nova generacija SUBP mora biti otvorena prema drugim podsistemima, tj.
treba da omoguci lak pristup iz drugih sistema kao sto su sistemi rasirenih
tabela, programski jezici, alati za podrsku odlucivanju, graficki paketi; ona
takodje treba da omoguci rad u klijent/server arhitekturi, kao i u distribuiranom okruzenju. Kao sumedju sistema nove generacije treba razvijati perzistentne jezike (koji omogucuju rad sa bazom) za raznovrsne programske jezike.
Za interaktivne upite treba koristiti SQL, tj. njegove nadgradnje, jer je uprkos
svojim brojnim nedostacima taj jezik osvojio trziste.
Treci u ovom nizu manifesta ([20]) polazi od relacionog modela u njegovom primarnom obliku, a ne od relacionih sistema ili relacionih jezika, i pogotovu ne od
SQL-a, s obzirom na njegova znacajna odstupanja od samog relacionog modela.
Relacioni model se ne prosiruje, vec se predlazu sistemi koji, osim dobrih svojstava
relacionog modela, poseduju i dobra ortogonalna svojstva (druga dobra svojstva
koja relacioni model ne poznaje); ta ortogonalna svojstva su uglavnom dobra svojstva objektno orijentisanog modela. Takodje, navode se svojstva postojecih modela
koja se ocenjuju kao losa, i koja ovi sistemi treba da iskljuce.
Za razliku od niza implementacija integrisanih relaciono/objektnih sistema, koji
integraciju baziraju na izjednacavanju relacionog koncepta relacije i objektnog kon-

A.4 Pitanja i zadaci

355

cepta klase ([60], [69]), pristup koji se predlaze ovim manifestom polazi od izjednacavanja koncepta klase sa relacionim konceptom domena. Time se prevazilazi
niz teskoca kao sto su izrazavanje ad hoc upita nad objektnom bazom, realizacija
ucaurenja strukture i ponasanja objekta, karakterizacija tipa, preneto azuriranje
objekata, odrzavanje pravila integriteta, semantika operacija relacione algebre, itd.
([27]).
Medju dobrim svojstvima relacionog modela, koja treba podrzati u sistemima
baza podataka nove generacije, isticu se sledeca:
domen kao imenovani skup vrednosti proizvoljne slozenosti; vrednosti iz domena moze se pristupiti samo preko operacija definisanih nad domenom (vrednost domena, a ne n-torka relacije, odgovara objektu u objektno orijentisanom
modelu, pa je vrednost domena ucaurena);
skup n-arnih operacija za svaku uredjenu listu od n domena (ne obavezno
razlicitih), sa naznakom domena rezultata operacije;
fizicka reprezentacija razlicitih vrednosti jednog domena moze biti razlicita
(npr. dva prirodnojezicka dokumenta mogu biti priredjena razlicitim procesorima teksta);
za odredjenu strukturu n-torke (atribute i domene), moguce je definisati dva
nova domena jedan cije su vrednosti n-torke sa zadatom strukturom, i drugi
cije su vrednosti relacije sa zadatom strukturom; dakle, n-torka i relacija
su konstruktori domena;
uslov integriteta moze biti opsteg oblika formule relacionog racuna, i moze se
odnositi na domen, atribut, relaciju ili bazu podataka u celini.
Losa svojstva relacionih sistema, koja se ne smeju podrzati sistemom nove generacije (prema ovom manifestu), odnose se, pre svega, na svojstva SQL jezika kojima on odstupa od relacionog modela (npr. pozivanje na redosled atributa relacije,
neimenovani atributi, dupliranje n-torki, prisustvo fizicke reprezentacije i pristupnih puteva na logickom nivou, slogovno orijentisan pristup, brisanje i azuriranje
koriscenjem kursora, itd).
Medju novim svojstvima koja sistemi nove generacije treba da poseduju isticu
se provera tipova u vreme kompilacije, precizni model nasledjivanja (jednostrukog
ili visestrukog), ugnjezdene transakcije. Kao losa svojstva objektnih sistema prepoznaju se izjednacavanje relacije i klase objekata, postojanje identifikatora objekata,
koncept javnih i zasticenih instancnih promenljivih, itd. Zato sistemi baza podataka
nove generacije ne treba da podrze ova svojstva.

A.4

Pitanja i zadaci

1. Definisati sledece pojmove:

objektno orijentisani model podataka hijerarhija kompozicije klasa


objekat

polimorfizam

klasa

kompozitni objekti

objekat klase

hijerarhija kompozitnog atributa

poruka i metoda

verzije

ucaurenje

modifikacija sheme

nasledjivanje

OOSUBP

jednostruko nasledjivanje

dugotrajne transakcije

visestruko nasledjivanje

ugnjezdene transakcije

objektna shema

meki katanac

hijerarhija klasa

sistem baza podataka nove generacije

2. Koji su pristupi realizaciji sumedje kod objektno orijentisanih baza podataka?


3. Opisati uobicajene operacije nad verzijama.
4. Koje su dopustene modifikacije sheme?
5. Kako se klasifikuju iskazi OSQL-a? Navesti primere.
6. Opisati probleme koji se javljaju pri realizaciji upitnog jezika nad objektno
orijentisanim bazama podataka (OOBP).
donosi predlog standarda SQL3 u odnosu na objektni aspekt SUBP?
7. Sta
8. Projektovati OOBP o izdavastvu. Koliko ima razlicitih mogucnosti za to
projektovanje? Koja je najbolja? Objasniti.
9. Koje biste metode definisali za OOBP iz prethodnog zadatka?
10. Mehanizam zakljucavanja pokazuje se neefikasnim u kontroli konkurentnosti OOBP. Kako biste organizovali kontrolu konkurentnosti koriscenjem
visestrukih verzija?
11. Koji elementi modifikacije sheme imaju svoje analogone u relacionom sistemu? Koji su to analogoni?

356

Bibliografija
[1] Alagic,S. Relacione baze podataka, Svjetlost, Sarajevo, 1984.
[2] Annevelink,J. i ost. Object SQL A language for the design and implementation of object databases, u [43].
[3] Armstrong,W.W. Dependency structures of data base relationships, Information Processing, 74, North-Holland Publ. Co., Amsterdam, 1974.
[4] Astrahan,M. i ost. System R: Relational approach to database management,
ACM ToDS, 1(2), 1976.
[5] Atkinson,M.i ost. The object-oriented database system manifesto, Deductive
and Object-Oriented Databases, Elsevier Science, 1990.
[6] ANSI/X3/SPARC Study Group on Database Management Systems. Interim
report, ACM SIGMOD bulletin, 7(2), 1975.
[7] Bernstein,P.A. Synthesizing third normal form relations from functional dependencies, ACM ToDS, 1(4), 1976.
[8] Bernstein,P.A. i ost. Concurrency control in a System for Distributed
Databases (SDD-1), ACM ToDS, 5(1), 1980.
[9] Boyce,R. i ost. Specifying queries as relational expressions: SQUARE, IBM
San Jose Research Reports, RJ-1291, 1973.
[10] Butterworth,P. i ost. The Gemstone object database management system,
Comm.ACM, 34(10), 1991.
[11] Chamberlin,D., Boyce,R. SEQUEL: A structured English query language,
ACM-SIGFIDET Workshop on Data Description, Access and Control, Ann
Arbor, MI, 1974.
[12] Chamberlin,D. i ost. SEQUEL2: A unified approach to data definition, manipulation, and control, IBM Journal of Research and Development, 20(6),
1976.
357

358

BIBLIOGRAFIJA

[13] Chen,P.P.-S. The Entity Relationship Model toward a unified view of data,
ACM ToDS, 1(1), 1976.
[14] Codd,E. A relational model of data for large shared data banks,
Comm.ACM, 13(6), 1970.
[15] Codd,E. A data base sublanguage founded on the relational calculus, ACMSIGFIDET Workshop on Data Description, Access and Control, San Diego,
CA, 1971.
[16] Codd,E. Further normalization of the data base relational model, Data Base
Systems (Rustin,R. ured.), Prentice-Hall, 1972.
[17] Codd,E. Relational completeness of data base sublanguages, Data Base Systems (Rustin,R. ured.), Prentice-Hall, 1972.
[18] Codd,E. Extending the database relational model to capture more meaning,
ACM ToDS, 4(4), 1979.
[19] Codd,E. The Relational Model for Database Management Version 2, Addison
Wesley Publ. Inc., 1990.
[20] Darwen,H., Date,C.J. The Third Manifesto, SIGMOD RECORD, 24(1),
1995.
[21] Date,C.J. An Introduction to Database Systems, vol. II, Addison Wesley Publ.
Inc., 1983.
[22] Date,C.J. An Introduction to Database Systems vol. I, 4. izdanje, Addison
Wesley Publ. Inc., 1986.
[23] Date,C.J. A Guide to INGRES, Addison Wesley Publ. Inc., 1987.
[24] Date,C.J., White,C.J. A Guide to DB2, Addison Wesley Publ. Inc., 1989.
[25] Date,C.J. (ured.) Relational Database Writings 19851989, Addison Wesley
Publ. Inc., 1990.
[26] Date,C.J., Darwen,H. (ured.) Relational Database Writings 19891991, Addison Wesley Publ. Inc., 1992.
[27] Date,C.J. An Introduction ta Database Systems, 6. izdanje, Addison Wesley
Publ. Inc., 1995.
[28] Deux,O. i ost. The O2 system, kao [45].
[29] Djordjevic,S. (ured.) Oksfordski recnik racunarstva, prevod sa engleskog, Nolit,
Beograd, 1990.
[30] Eswaran,K.P. i ost. The notions of consistency and predicate locks in a
database system, Comm.ACM, 19(11), 1976.

BIBLIOGRAFIJA

359

[31] Fagin,R. Multivalued dependencies and a new normal form for relational
databases, ACM ToDS, 2(3), 1977.
[32] Fagin,R. Normal forms and relational database operators, ACM SIGMOD
Conf., 1979.
[33] Fagin,R. A normal form for relational databases that is based on domains
and keys, ACM ToDS, 6(3), 1981.
[34] Fishman,D. i ost. Iris: An object-oriented database management system,
ACM ToIS, 5(1), 1987.
[35] Gray,J. i ost. The recovery manager of the System R data manager, ACM
Computing Surveys, 13(2), 1981.
[36] Hammer,M., McLeod,D. Database description with SDM: A semantic
database model, ACM ToDS, 6(3), 1981.
[37] IBM. IBM DATABASE 2 SQL Reference, IBM, 1992.
[38] IBM. IBM DB2 Application programming and SQL Guide, IBM, 1992.
[39] International Organization for Standardization (ISO). Database Language SQL
Document ISO/IEC 9075, 1992.
[40] Kim,W. On optimizing an SQL-like nested query, ACM ToDS, 7(3), 1982.
[41] Kim,W. Introduction to Object-Oriented Databases, MIT Press, 1990.
[42] Kim,W. Object-oriented databases: definition and research directions, IEEE
Trans. on Knowledge and Data Engineering, 2(3), 1990.
[43] Kim,W. (ured.) Modern Database Systems, ACM Press, 1995.
[44] Knuth,D. The Art of Computer Programming, vol. III, Sorting and Searching,
Addison Wesley Publ. Inc., 1968.
[45] Lamb,C. i ost. The Objectstore database system, Comm.ACM, 34(10), 1991.
[46] Lipski,Jr.W. On semantic issues connected with incomplete information
databases, ACM ToDS, 4(3), 1979.
[47] Lohman,G.M. i ost. Extensions to Starburst: objects, types, functions, and
rules, Comm.ACM, 34(10), 1991.
[48] Maier,D. The Theory of Relational Databases, Computer Science Press, 1983.
[49] Obermarck,R. Global deadlock detection algorithm, IBM Research Reports,
RJ2845, 1980.
[50] IBM. Query Management Facility: Planning and Administration Guide for
MVS, IBM, SC264235, 1992.

360

BIBLIOGRAFIJA

[51] Relational Technology Inc. EQUEL C Users Guide, Version 2.0 VAX/UNIX,
Berkeley, CA, 1983.
[52] Rolland,F.D. Relational Database Management with ORACLE, Addison Wesley Publ. Inc., 1989.
[53] Rothnie,J.B. i ost. Introduction to a System for Distributed Databases (SDD1), ACM ToDS, 5(1), 1980.
[54] Schmid,H.A., Swenson,J.R. On the semantics of the relational data model,
ACM SIGMOD Conf., 1975.
[55] Sedgewick,R. Algorithms in C, Addison Wesley Publ. Inc., 1988.
[56] Selinger,P.G. i ost. Access path selection in a relational database system,
ACM SIGMOD Conf., 1979.
[57] Smith,J.M., Chang,P.Y.T. Optimizing the performance of a relational algebra
database interface, Comm.ACM, 18(10), 1975.
[58] Smith,J.M., Smith,D.C. Database abstractions: aggregation and generalization, ACM ToDS, 1(1), 1976.
[59] Stonebraker,M. (ured.) The INGRES papers: Anatomy of a Relational
Database System, Addison Wesley Publ. Inc., 1986.
[60] Stonebraker,M., Rowe,L. The design of POSTGRES, ACM SIGMOD Conf.,
1986.
[61] Stroustrup,B. The C++ Programming Language, Addison Wesley Publ. Inc.,
1986.
[62] Teorey,T. Database Modeling and Design: The Entity-Relationship Approach,
Morgan Kauffman, 1990.
[63] The Committee for Advanced DBMS Function. Third generation database
system manifesto, SIGMOD RECORD, 19(3), 1990.
[64] Ullman,J.D. Principles of Database Systems, Computer Science Press, 1980.
[65] Ullman,J.D. Database and Knowledge-Base Systems, vol. I, Computer Science
Press, 1988.
[66] Ullman,J.D. Database and Knowledge-Base Systems, vol. II, Computer Science
Press, 1989.
[67] Wiederhold,G. Database Design, McGraw-Hill Book Co., 1977.
[68] Williams,R. i ost. R : An overview of the architecture, IBM Research Reports, RJ3325, 1981.

BIBLIOGRAFIJA

361

[69] Wilkinson,K. i ost. The Iris architecture and implementation, IEEE Trans.
on Knowledge and Data Engineering, 20(1), 1990.

[70] Youssefi,K., Wong,E. Query processing in a relational database management


system, u [59].

You might also like