You are on page 1of 73

Doc. dr. sc.

Markus Schatten

Zbirka rjesenih zadataka iz baza podataka

Sadrzaj

1 Relacijska algebra
1.1 Izracun upita . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2 Relacijska algebra i SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1
1
11

2 SQL
2.1 Kreiranje tablica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.2 Upiti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.3 Transakcije . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

25
25
31
38

3 Konceptualno oblikovanje baza podataka


3.1 SBVR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.2 UML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.3 Medurelacijska ogranicenja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

43
43
45
50

4 Logi
cko oblikovanje baza podataka
4.1 1NF . . . . . . . . . . . . . . .
4.2 2NF . . . . . . . . . . . . . . .
4.3 3NF . . . . . . . . . . . . . . .
4.4 BCNF . . . . . . . . . . . . . .
4.5 4NF . . . . . . . . . . . . . . .
4.6 5NF . . . . . . . . . . . . . . .
4.7 6NF . . . . . . . . . . . . . . .
4.8 Implikacijski problemi . . . . . .

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

51
51
53
54
59
60
60
61
61

5 Napredne baze podataka


5.1 Deduktivne baze podataka
5.2 Poopcene baze podataka .
5.3 Parcijalne baze podataka .
5.4 Temporalne baze podataka

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

63
63
64
67
68

.
.
.
.

.
.
.
.

.
.
.
.

ii

Predgovor

Ova zbirka rjesenih zadataka je pokusaj akumulacije svih razlicitih vrsta zadataka koji se mogu pojaviti na ispitima iz kolegija Baze podataka na studiju Primjena informacijske tehnologije u poslovanju,
Fakulteta organizacije i informatike u Varazdinu (poglavlja 1., 2. i 3 osim potpoglavlja 3.3), zatim
kolegija Teorija baza podataka na studiju Baze podataka i baze znanje, Fakulteta organizacije i informatike u Varazdinu (djelomicno poglavlje 4. te poglavlje 5.), te kolegija Administracija podatkovnih
baz na Fakulteti za informacijske studije u Novom Mestu (poglavlja 3. i djelomicno 4.), kao i drugih
vrsta zadataka vezanih uz podrucje baza podataka. Zbirka je nedovrsena i nerecenzirana te stoga
nije mjerodavna literatura za kolegij. To sto je nedovrsena znaci da je moguce da postoje vrste
zadataka koje se u njoj ne obraduju, a mogu se pojaviti na ispitu. To sto je nerecenzirana znaci
da nije pregledana od strucnog povjerenstva i lako moze sadrzavati pogreske. Ako u tekstu uocite
pogresku, molim da ju javite na markus.schatten@foi.hr. Prijelom zbirke izraden je u LATEX 2
okruzju.Ovaj rad zasticen je Creative Commons licencom i to Attribution-NonCommercial-ShareAlike
3.0 Unported (CC BY-NC-SA 3.0)1

http://creativecommons.org/licenses/by-nc-sa/3.0/

iii

iv

1 Relacijska algebra

1.1

Izra
cun upita

Zadatak 1.1 Zadane su relacije i ogranicenje:


r1 A B C
1 0 2
2 0 2
2 1 3

r2 B C
1 1
0 2
0 2

F = (A = D)
Neka je zadan upit RA(U):
F (AD (r1 oo r2 ))
Izracunajte odgovor na upit koristeci relacijsku algebru.
Rjesenje Sa si oznacavat cemo medurezultate.
r1 oo r2 A B C
1 0 2
s1 =
1 0 2
2 0 2
2 0 2
AD (s1 ) A D
1 2
s2 =
1 3
2 2
2 3
t1 : (1 = 2)
t2 : (1 = 3)
1

D
2
3
2
3

D
2
2
3

t3 : (2 = 2)
t4 : (2 = 3)
F (s2 ) A D
2 2
Zadatak 1.2 Zadane su relacije i ogranicenje:
r2 A B C
1 1 2
2 0 2
3 2 3

r1 A B C
1 3 1
2 0 2

F = (A > B) (C = 2)
Neka je zadan upit RA(U):
AB (F (r1 r2 ))
Izracunajte odgovor na upit koristeci relacijsku algebru.
Rjesenje Sa si oznacavat cemo medurezultate.
r1 r2 A B C
1 3 1
s1 =
2 0 2
1 1 2
3 2 3
t1 : (1 > 3) (1 = 2)
t2 : (2 > 0) (2 = 2)

t3 : (1 > 1) (2 = 2)
t4 : (3 > 2) (3 = 2)

F (s1 ) A B C
1 3 1
s2 =
2 0 2
3 2 3
AB (s2 ) A B
1 3
2 0
3 2
Zadatak 1.3 Zadane su relacije i ogranicenje
r

A B C
1 3 1
2 0 2

H = [(A

s B C
1 1
3 2

D
2
3

s.C ) (r .B > s.B)] (A < s.C )

Izracunajte AC (r .C ,s.B (H (r s))).


2

Rjesenje Sa ri oznacavat cemo medurezultate.


r s A r .B r .C
1 3
1
r1 =
1 3
1
2 0
2
2 0
2

s.B s.C
1
1
3
2
1
1
3
2

D
2
3
2
3

t1 : [(1

1) (3 > 1)] (1 < 1) [

t2 : [(1

2) (3 > 3)] (1 < 2) [ ]

t3 : [(2

1) (0 > 1)] (2 < 1) [ ]

t4 : [(2

2) (0 > 3)] (2 < 2) [ ]

r2 =

H (r1 ) A r .B r .C
1 3
1
2 0
2

s.B s.C
3
2
1
1

r .C ,s.B (r2 ) r .C
r3 =
1
2

D
3
2

s.B
3
1

r .C (r3 ) r .C
s.B (r3 ) s.B
AC (r3 ) =
1 oo
3 r3
2
1

r .C (r3 ) oo s.B (r3 ) r .C


1
1
2
2

AC (r3 ) r .C
1
2

s.B
3
1 r3
3
1

s.B
1
3

Zadatak 1.4 Zadane su relacije i ogranicenje


r2 B C
2 1
1 1
1 0

r1 A B C
2 2 1
1 1 0
3 1 1

D
0
2
2

F = [(A < B)(B = 2)] (B = C )


Potrebno je izracunati upit RA(U) : AC (AD (F (r1 oo r2 )))
Rjesenje Sa si cemo oznacavati medurezultate.
r1 oo r2 A B C
2 2 1
s1 =
1 1 0
3 1 1
3

D
0
2
2

t1 : [(2 < 2) (2 = 2)] (2 = 1) [ ]

t1 : [(1 < 1) (1 = 2)] (1 = 0) [

t1 : [(3 < 1) (1 = 2)] (1 = 1) [

s2 =

F (s1 ) A B C
2 2 1
1 1 0

D
0
2

AD (s2 ) A D
s3 =
2 0
1 2

A (s3 ) A
D (s3 ) D
AC (s3 ) =
2 oo
0 s3
1
2

A (s3 ) oo D (s3 ) A D
2 0
2 2 s3
1 0
1 2

AC (s3 ) A D
2 2
1 0

Zadatak 1.5 Zadane su relacije i ogranicenje:


r1 A B C
4 2 3
2 0 2
1 1 2

r2 A B C
1 1 2
2 0 2
3 2 3

F = [(A > B) (C = 2)] (A > 2)


Neka je zadan upit RA(U):
AC (AB (F (r1 r2 )))
Izracunajte odgovor na upit koristeci relacijsku algebru.
Rjesenje Sa si oznacavat cemo medurezultate.
r1 r2 A B C
s1 =
1 1 2
2 0 2
[(1 > 1) (2 = 2)] (1 > 2) [ ]
[(2 > 0) (2 = 2)] (2 > 2) [ ]
s2 =

F (s1 ) A B C
1 1 2
4

AB (s2 ) A B
1 1

s3 =

A (s3 ) A
B (s3 ) B
oo
1
1

AC (s3 ) =
=

A (s3 ) oo B (s3 ) A B
s3
1 1

AC (s3 ) A B

Zadatak 1.6 Zadane su relacije i ogranicenja:


r1 A B C
2 2 b
1 4 b
5 1 a

D
3
2
2

r2 A B D
1 1 2
2 2 3
3 2 3
B) (D = 2)

= (A

= (C = a)

Neka je zadan upit RA(U):


AC (ABD (G (r1 )) F (r2 ))
Izracunajte odgovor na upit koristeci relacijsku algebru.
Rjesenje Sa si oznacavat cemo medurezultate.

s1 =

G (r1 ) A B C
2 2 b
1 4 b

D
3
2

(b = a)
(b = a)
(a = a)

s2 =

s3 =

ABD (s1 ) A B D
2 2 3
1 4 2
F (r2 ) A B D
2 2 3

(1

1) (2 = 2)

(2

2) (3 = 2)

(3

2) (4 = 2)
5

s3

s4 =

s2 s3 A B D
2 2 3
1 4 2

A (s4 ) A
B (s4 ) B
D (s4 ) D
AC (s4 ) =
2 oo
2 oo
3 s4
1
4
2

A (s4 ) oo B (s4 ) oo D (s4 ) A B D


2 2 3
2 2 2
2 4 3
2 4 2 s4
1 2 3
1 2 2
1 4 3
1 4 2

AC (s4 ) A B D
2 2 2
2 4 3
2 4 2
1 2 3
1 2 2
1 4 3

Zadatak 1.7 Zadane su relacije i ogranicenja:


r1 A B C
f 5 f
f 3 g
f 3 f

r2 A B C
f 1 f
g 5 f
f 3 f

(A = C ) (B > 2)

(C = f )

Neka je zadan upit RA(U):


AC (G (r1 ) ABC (F (r2 )))
Izracunajte odgovor na upit koristeci relacijsku algebru.
Rjesenje Sa si cemo oznacavati medurezultate.
t1 : (f = f )
t2 : (f = g )
t3 : (f = f )
G (r1 ) A B C
s1 =
f 5 f
f 3 f
6

D
b
a
b

t1 : (f = f ) (1 > 2)
t2 : (g = f ) (5 > 2)

t3 : (f = f ) (3 > 2)

F (r2 ) A B C
f 1 f
s2 =
g 5 f
f 3 f

D
b
a
b

ABC (s2 ) A B C
f 1 f
s3 =
g 5 f
f 3 f
s4 =

s1 s3 A B C
f 5 f

s5 = AC (G (r1 ) ABC (F (r2 ))) =

AC (s4 ) A B C
f 5 f

Zadatak 1.8 Zadana je baza podataka BP i uvjet F :


nastavnik n# prezime zvanje
n1
Kim
prof
n2
Kam
doc
n3
Kam
izprof

predmet

p# broj-sati-tj sem-pred
uz
2
4
bp2
2
5
mpp
2
6

predaje n# p#
n1
uz
n2 bp2
n2 mpp
F

[(prezime = Kim) (p# = uz)] (n# = n2 )

Izracunajte RA(U) = p#, zvanje (F (nastavnik oo predaje)).


Rjesenje Sa ri cemo oznacavati medurezultate.
nastavnik oo predaje n# prezime zvanje p#
n1
Kim
prof
uz
r1 =
n2
Kam
doc
bp2
n2
Kam
doc mpp
t1 : [(Kim = Kim) (uz = uz)] (n1 = n2 ) [

t2 : [(Kam = Kim) (bp2 = uz)] (n2 = n2 ) [ ]


t3 : [(Kam = Kim) (mpp = uz)] (n2 = n2 ) [ ]
r2 =

F (r1 ) n# prezime zvanje p#


n1
Kim
prof
uz

p#, zvanje (F (nastavnik oo predaje)) = r3 =

p#, zvanje (r2 ) p# zvanje


uz
prof

Zadatak 1.9 Zadane su relacije i ogranicenje:


r1 A B C
a b 1
b b 1
c a 1

r2 A B C
b a 3
b c 2
b b 1

(D = a) (C

D
b
b
a

2)

Neka je zadan upit RA(U):


AC (r1 ) ABC (F (r2 ))
Izracunajte odgovor na upit koristeci relacijsku algebru.
Rjesenje Sa si cemo oznacavati medurezultate. Prvo cemo izracunati aktivni komplement relacije
r1 :

s1

A (r1 ) A
B (r1 ) B
C (r1 ) C
a
r1
= AC (r1 ) =
oo
b oo
b
1
a
c

A (r1 ) oo B (r1 ) oo C (r1 ) A B C


a b 1
r1 A B C
a a 1
a b 1
b b 1
b b 1
b a 1
c a 1
c b 1
c a 1

AC (r1 ) A B C
a a 1
b a 1
c b 1

Rjesavamo drugi dio izraza:


t1 : (b = a) (3

2)

t2 : (b = a) (2

2)

t3 : (a = a) (1

2)

s2 =

F (r2 ) A B C
b c 2
b b 1

D
b
a

ABC (s2 ) A B C
s3 =
b c 2
b b 1
Konacni je rezultat stoga:
8

AC (r1 ) ABC (F (r2 )) A B C


a a 1
s1 s3 =
b a 1
c b 1
Zadatak 1.10 Zadana je relacija r :
r

A B C
a b d
a c d
b c e

Neka je DOM(A) = DOM(B) = DOM(C ) = DOM(D).


Izracunajte RA(U) = D

A (A (r ))

B (B (r ))

C (C (r )).

Rjesenje Sa s1 cemo oznacavati medurezultate.


A (r ) A
s1 =
a
b
D

A (s1 )

s2 =

D
a
b

B (r ) B
s3 =
b
c
D

B (s3 )

s4 =

D
b
c

C (r ) C
s5 =
d
e
D

C (s5 )

s6 =
D

A (A (r ))

D
d
e

B (B (r ))

s7 = s2 s4 s6 =

Zadatak 1.11 Zadane su relacije:


r1 A B C
2 2 1
1 1 1
3 1 1

r2 A B C
2 1 0
3 1 1
1 0 2
9

C (C (r ))

D
a
b
c
d
e

Potrebno je izracunati upit RA(U) : AC (r1 r2 )


Rjesenje Sa si cemo oznacavati medurezultate.

s1 =

s2 =

r1 r2 A B C
2 2 1
1 1 1

A (s1 ) A
B (s1 ) B
C (s1 ) C
s1
2 oo
2 oo
1
1
1

A (s1 ) oo B (s1 ) oo C (s1 ) A B C


AC (r1 r2 ) A B C
2 2 1
s2 =
2 1 1 s1 =
2 1 1
1 2 1
1 2 1
1 1 1
Zadatak 1.12 Zadane su relacije i ogranicenje:
r1 A B C
a b 2
b b 3
c a 1

r2 A B D
b a b
b c b
b b a

(A = B) (C

2)

Neka je zadan upit RA(U):


AB (AC (r2 )) AB (F (r1 ))
Izracunajte odgovor na upit koristeci relacijsku algebru.
Rjesenje Sa si cemo oznacavati medurezultate.
B (r2 ) B
AC (r2 )
D (r2 ) D
(r ) A
a
s1 = A 2
oo
oo
b r2 =
b
b
a
c
t1 : (a = b) (2

2)

t2 : (b = b) (3

2)

t3 : (c = a) (1

2)

F (r2 ) A B C
a b 2
s2 =
b b 3
c a 1
10

A B D
b a a
b b b
b c a

AB (s1 ) A B
b a
s3 =
b b
b c
AB (s2 ) A B
a b
s4 =
b b
c a
s3 s4 A B
b a
b b
s5 = AB (AC (r2 )) AB (F (r1 )) =
b c
a b
c a

1.2

Relacijska algebra i SQL

Zadatak 1.13 Zadane su relacije:


r

A B C
1 3 1
2 0 2

s B C
1 1
3 2

D
2
3

Neka je zadan upit SQL(U):


SELECT r . A , r . B , s . D
FROM r , s
WHERE r . C = s . C
AND A > 1
(a) Iskazite upit u relacijskoj algebri (RA(U))
(b) Izracunajte odgovor na upit koristeci relacijsku algebru.
Rjesenje Rjesavamo (a). Iz SELECT klauzule iscitavamo elemente u konacnoj projekciji. Sa ri
oznacavat cemo relacije koje jos valja izracunati:
A

r .B D (r1 )

Iz WHERE klauzule iscitavamo formulu za selekciju:


F = (r .C = s.C ) (A > 1)
Sada imamo
r1 = F (r2 )
odnosno:
r1 = (r .C =s.C )(A>1) (r2 )
Iz FROM klauzule iscitavamo relacije koje valja staviti u produkt. Stoga imamo:
11

r2 = r s
Konacno rjesenje je stoga:
A

r .B D ((r .C =s.C )(A>1) (r

s))

Rjesavamo (b).
r s A r .B r .C
1 3
1
1 3
1
2 0
2
2 0
2

s.B s.C
1
1
3
2
1
1
3
2

t1 : (1 = 1) (1 > 1)

D
2
3
2
3

t2 : (1 = 2) (1 > 1)
t3 : (2 = 1) (2 > 1)

t4 : (2 = 2) (2 > 1)

(r .C =s.C )(A>1) (r s) A r .B r .C
2 0
2
A

r .B D ((r .C =s.C )(A>1) (r

s.B s.C
3
2

s)) A r .B D
2 0
3

Zadatak 1.14 Zadane su relacije i ogranicenje:


r1 A B C
1 a 1
2 b 2
2 c 2

r2 A B E
1 a 2
2 c 2
3 a 3

F = (A > C ) (D = )
Neka je zadan upit RA(U):
AC (F (r1 oo r2 ))
(a) Izracunajte odgovor na upit koristeci relacijsku algebru.
(b) Pretvorite RA(U) u SQL(U)
Rjesenje Rjesavamo (a):
S si oznacavat cemo medurezultate.
r1 oo r2 A B C
s1 =
1 a 1
2 c 2

D E
2
2

t1 : (1 > 1) ( = )
12

D
3

t2 : (2 > 2) ( = )
s2 =

F (s1 ) A B

s3 = AC (F (r1 oo r2 )) =

C D E

AC (s2 ) A

Rjesavamo (b):
Pocinjemo sa SELECT klauzulom koja je ekvivalentna konacnoj projekciji:
SELECT A , C
U FROM klauzuli moraju se pojaviti sve relacije iz RA(U):
FROM r1 , r2
U WHERE klauzuli moramo uvrstiti ogranicenje F :
WHERE A > C AND D <>
Prirodni spoj je samo dodatno ogranicenje u WHERE klauzuli:
r1 .A = r2 .A AND r1 .B = r2 .B
Dakle ukupni upit je:
SELECT A, C
FROM r1 , r2
WHERE A > C AND D <> AND r1 .A = r2 .A AND r1 .B = r2 .B
Ovaj rezultat nije u potpunosti tocan, obzirom da u SELECT i WHERE klauzuli nije jasno na koji se
atribut A misli (A iz r1 ili A iz r2 ). SQL stroj u pravilu ne zakljucuje o jednakosti atributa temeljem
imena, vec temeljem imena i relacije u kojoj se oni nalaze, zbog cega je potrebno koristiti notaciju
naziv relacije.naziv atributa. Obzirom da se kasnije u WHERE klauzuli atribut A iz jedne relacije
izjednacava atributom u drugoj relaciji (uvjet prirodnog spoja), u nasem slucaju mozemo proizvoljno
odabrati relaciju:
SELECT r1 .A, C
FROM r1 , r2
WHERE r1 .A > C AND D <> AND r1 .A = r2 .A AND r1 .B = r2 .B
Zadatak 1.15 Zadane su relacije i upit SQL(U):
r1 A B C
3 2 3
1 2 2
2 1 1

r2 A B E
1 2 2
2 2 2
3 2 3

SELECT r 1 . A , r 2 . E
FROM r1 , r 2
WHERE r 1 . B = r 2 . B
AND r 2 . E <> 3
13

(a) Pretvorite SQL(U) u RA(U)


(b) Izracunajte odgovor na upit koristeci relacijsku algebru.
Rjesenje Rjesavamo (a). Iz SELECT klauzule iscitavamo elemente u konacnoj projekciji. Sa si
oznacavat cemo relacije koje jos valja izracunati:
r1 .A

r2 .E (s1 )

Iz WHERE klauzule iscitavamo formulu za selekciju:


F (r1 .B = r2 .B) (r2 .E = 3)
Sada imamo
s1 = F (s2 )
odnosno:
s1 = (r1 .B=r2 .B)(r2 .E =3) (s2 )
Iz FROM klauzule iscitavamo relacije koje valja staviti u produkt. Stoga imamo:
s 2 = r1 r2
Konacno rjesenje je stoga:
r1 .A

r2 .E ((r1 .B=r2 .B)(r2 .E =3) (r1

r2 ))

Rjesavamo (b). Sa si oznacavat cemo medurezultate.


r1 r2 r1 .A r1 .B C
3
2
3
3
2
3
3
2
3
1
2
2
s1 =
1
2
2
1
2
2
2
1
1
2
1
1
2
1
1

r2 .A r2 .B E
1
2
2
2
2
2
3
2
3
1
2
2
2
2
2
3
2
3
1
2
2
2
2
2
3
2
3

t1 : (2 = 2) (2 = 3)

t2 : (2 = 2) (2 = 3)

t3 : (2 = 2) (3 = 3)

t4 : (2 = 2) (2 = 3)

t5 : (2 = 2) (2 = 3)

t6 : (2 = 2) (3 = 3)

t7 : (1 = 2) (2 = 3)

t8 : (1 = 2) (2 = 3)

t9 : (1 = 2) (3 = 3)
14

(r1 .B=r2 .B)(r2 .E =3) (s1 ) r1 .A r1 .B C


3
2
3
s2 =
3
2
3
1
2
2
1
2
2

r2 .A r2 .B E
1
2
2
2
2
2
1
2
2
2
2
2

r1 .A
s3 = r1 .A

r2 .E ((r1 .B=r2 .B)(r2 .E =3) (r1

r2 .E (s2 )

r2 )) =

Zadatak 1.16 Zadane su relacije i ogranicenja:


r1 A B C
f 5 f
f 3 g
f 1 f

r2 A B C
f 5 f
g 5 d
f 3 f

(A = C ) (B > 2)

(D = a)

D
b
b
a

Neka je zadan upit RA(U):


F (r1 ) ABC (G (r2 ))
(a) Izracunajte odgovor na upit koristeci relacijsku algebru.
(b) Pretvorite RA(U) u SQL(U).
Rjesenje Rjesavamo pod (a). Sa si oznacavat cemo medurezultate.
t1 : (f = f ) (5 > 2)

t2 : (f = g ) (3 > 2)

t3 : (f = f ) (1 > 2)
F (r1 ) A B C
s1 =
f 5 f
f 3 g
t1 : (b = a)
t2 : (b = a)
t3 : (a = a)

s2 =

G (r2 ) A B C
f 5 f
g 5 d

D
b
b

ABC (s2 ) A B C
s3 =
f 5 f
g 5 d
15

A E
3 2
1 2

s1 s3 A B C
f 5 f
s4 = F (r1 ) ABC (G (r2 )) =
f 3 g
g 5 d
Rjesavamo (b). Obzirom da imamo uniju izraza posebno rjesavamo svaki od izraza u uniji. Prvi izraz
(F (r1 )) pretvoren u SQL jest:
SELECT
FROM r 1
WHERE A <> C OR B > 2
Drugi izraz (ABC (G (r2 ))) pretvoren u SQL jest:
SELECT A , B , C
FROM r 2
WHERE D <> a
Konacno rjesenje je unija ovih dvaju izraza:
SELECT
FROM r 1
WHERE A <> C OR B > 2
UNION
SELECT A , B , C
FROM r 2
WHERE D <> a
Zadatak 1.17 Zadane su relacije i upit SQL(U):
r1 A B C
a b 5
c b 2
a c 2

r2 A B D
a b 2
c b 3
a a 4

SELECT A , B
FROM r 1
WHERE C > 2
INTERSECT
SELECT A , B
FROM r 2
WHERE D <= 3
(a) Pretvorite SQL(U) u RA(U)
(b) Izracunajte odgovor na upit koristeci relacijsku algebru.
Rjesenje Rjesavamo pod (a). Sa si oznacavat cemo relacijske izraze ciju vrijednost treba jos odrediti.
Obzirom da je rijec o skupovnoj operaciji presjeka, rezultat je presjek dvaju relacija:
s1 s2
Iz SELECT klauzule prvog upita citamo atribute selekcije:
16

s1 = AB (s3 )
Iz WHERE klauzule prvog upita citamo uvjet selekcije:
s3 = C >2 (r1 )
Iz SELECT klauzule drugog upita citamo atribute selekcije:
s2 = AB (s4 )
Iz WHERE klauzule drugog upita citamo uvjet selekcije:
s4 = D3 (r2 )
Stoga je konacno rjesenje:
AB (C >2 (r1 )) AB (D3 (r2 ))
Rjesavamo pod (b). Sa qi cemo oznacavati medurezultate.
q1 =

C >2 (r1 ) A B C
a b 5

q2 =

AB (q1 ) A B
a b

D3 (r2 ) A B D
q3 =
a b 2
c b 3
q4 =

q5 = q2 q4 =

AB (q3 ) A B
a b
c b

AB (C >2 (r1 )) AB (D3 (r2 )) A B


a b

Zadatak 1.18 Zadane su relacije i upit SQL(U):


r1 A B C
a b 5
c b 2
a a 4

r2 A B D
a b 2
a b 3
a a 4

SELECT r 1 . A , D
FROM r1 , r 2
WHERE C > 2
AND r 1 . A = r 2 . A
AND r 2 . B = r 1 . B
(a) Pretvorite SQL(U) u RA(U)
(b) Izracunajte odgovor na upit koristeci relacijsku algebru.
17

Rjesenje Rjesavamo pod (a). Sa si cemo oznacavati relacijske izraze koje jos treba odrediti. Iz
SELECT klauzule citamo konacnu projekciju:
r1 .A,D (s1 )
Iz WHERE klauzule citamo formulu selekcije:
F = (C > 2) (r1 .A = r2 .A) (r2 .B = r1 .B)
Stoga je selekcija:
s1 = F (s2 )
Iz FROM klauzule citamo relacije koje valja pomnoziti:
s2 = r1 r2
Stoga je konacni izraz RA(U):
r1 .A,D (F (r1 r2 ))
Rjesavamo pod (b). Sa qi cemo oznacavati medurezultate.
r1 r2 r1 .A r1 .B C
a
b
5
a
b
5
a
b
5
c
b
2
q1 =
c
b
2
c
b
2
a
a
4
a
a
4
a
a
4

r2 .A r2 .B D
a
b
2
a
b
3
a
a
4
a
b
2
a
b
3
a
a
4
a
b
2
a
b
3
a
a
4

t1 : (5 > 2) (a = a) (b = b)

t2 : (5 > 2) (a = a) (b = b)

t3 : (5 > 2) (a = a) (a = b)

t4 : (2 > 2) (c = a) (b = b)

t5 : (2 > 2) (c = a) (b = b)

t6 : (2 > 2) (c = a) (a = b)
t7 : (4 > 2) (a = a) (b = a)

t8 : (4 > 2) (a = a) (b = a)

t9 : (4 > 2) (a = a) (a = a)

F (q1 ) r1 .A r1 .B C
a
b
5
q2 =
a
b
5
a
a
4
18

r2 .A r2 .B D
a
b
2
a
b
3
a
a
4

r1 .A,D (F (r1 r2 )) r1 .A D
a
2
q3 = r1 .A,D (q2 ) =
a
3
a
4
Zadatak 1.19 Zadane su relacije i upit SQL(U):
r1 A B C
1 2 5
2 3 4
4 3 2

r2 A B D
2 1 2
2 2 5
2 3 1

SELECT r 1 . A , r 2 . B
FROM r1 , r 2
WHERE r 2 . D > 1
(a) Pretvorite SQL(U) u RA(U)
(b) Izracunajte odgovor na upit koristeci relacijsku algebru.
Rjesenje Rjesavamo pod (a). Sa si cemo oznacavati relacijske izraze koje jos treba odrediti. Iz
SELECT klauzule citamo konacnu projekciju:
r1 .A,r2 .B (s1 )
Iz WHERE klauzule citamo formulu selekcije:
F = (r2 .D > 1)
Stoga je selekcija:
s1 = F (s2 )
Iz FROM klauzule citamo relacije koje valja pomnoziti:
s2 = r1 r2
Stoga je konacni izraz RA(U):
r1 .A,r2 .B (F (r1 r2 ))
Rjesavamo pod (b). Sa qi cemo oznacavati medurezultate.
r1 r2 r1 .A r1 .B C
1
2
5
1
2
5
1
2
5
2
3
4
q1 =
2
3
4
2
3
4
4
3
2
4
3
2
4
3
2
19

r2 .A r2 .B D
2
1
2
2
2
5
2
3
1
2
1
2
2
2
5
2
3
1
2
1
2
2
2
5
2
3
1

t1 : (2 > 1)
t2 : (5 > 1)
t3 : (1 > 1)
t4 : (2 > 1)
t5 : (5 > 1)
t6 : (1 > 1)
t7 : (2 > 1)
t8 : (5 > 1)
t9 : (1 > 1)
F (q1 ) r1 .A r1 .B C
1
2
5
1
2
5
q2 =
2
3
4
2
3
4
4
3
2
4
3
2

r2 .A r2 .B D
2
1
2
2
2
5
2
1
2
2
2
5
2
1
2
2
2
5

r1 .A,r2 .B (q2 ) r1 .A r2 .B
1
1
1
2
q3 = r1 .A,r2 .B (F (r1 r2 )) =
2
1
2
2
4
1
4
2
Zadatak 1.20 Zadana je relacija r i upit RA(U):
r

A B C
a b 5
c b 2
a a 4

A (B=b (r ))
(a) Pretvorite RA(U) u SQL(U)
(b) Izracunajte odgovor na upit koristeci relacijsku algebru.
Rjesenje Rjesavamo pod (a). Pri pretvaranju relacijskog izraza u SQL prvo pojednostavljujemo
izraz, no obzirom da u ovom slucaju nemamo slozenih operatora (AC , ) niti prirodnog spajanja
( oo ), pojednostavljivanje nije potrebno. Atributi konacne projekcije idu u SELECT klauzulu, uvjet
selekcije ide u WHERE klauzulu, a relacija nad kojom se provode operacije u FROM klauzulu. Stoga
je rjesenje:
SELECT A
FROM r
WHERE B = b
20

Rjesavamo pod (b). Sa si oznacavat cemo medurezultate.


t1 : b = b
t2 : b = b
t3 : a = b

s1 =

B=b (r ) A B C
a b 5
c b 2

s2 = A (B=b (r )) =

A (r ) A
a
c

Zadatak 1.21 Zadane su relacije r1 i r2 te upit SQL(U):

r1 A B C
1 1 3
1 4 4
4 2 5

r2 B C
1 3
4 4
2 5

SELECT B ,
FROM r 1
WHERE A =
INTERSECT
SELECT B ,
FROM r 2
WHERE D >

D
2
1
5

C
1 OR B <> 4
C
1

(a) Pretvorite SQL(U) u RA(U).


(b) Izracunajte odgovor na upit koristeci relacijsku algebru.
Rjesenje Rjesavamo pod (a). S si cemo oznacavati medurezultate. Obzirom da je rijec o izrazu
presjeka skupova (INTERSECT), konacni izraz imat ce oblik:
s1 s2
U oba dijela izraza imamo projekcije (SELECT klauzula):
s1 = BC (s3 )
s2 = BC (s4 )
Preostali izrazi su formule (WHERE klauzule):
F1 (A = 1) (B = 4)
F2 (D > 1)
Stoga ce s3 imati sljedeci oblik selekcije:
s3 = F1 (r1 )
Slicno je i sa s4 :
s4 = F2 (r2 )
21

Stoga je konacni izraz:


RA(U) = BC (F1 (r1 )) BC (F2 (r2 ))
Rjesavamo pod (b). Sa si cemo oznacavati medurezultate.
t1 : (1 = 1) (1 = 4)

t2 : (1 = 1) (4 = 4)

t3 : (4 = 1) (2 = 4)

F1 (r1 ) A B C
1 1 3
s1 =
1 4 4
4 2 5
t1 : (2 > 1)
t2 : (1 > 1)
t3 : (5 > 1)

s2 =

F2 (r2 ) B C
1 3
2 5

D
2
5

BC (s1 ) B C
1 3
s3 =
4 4
2 5
BC (s2 ) B C
s4 =
1 3
2 5
s3 s4 B C
s5 = BC (F1 (r1 )) BC (F2 (r2 )) =
1 3
2 5
Zadatak 1.22 Zadane su relacije r1 i r2 te upit SQL(U):

r1 A B C
1 1 1
1 4 2
4 2 1

r2 B C
1 3
4 2
2 5

SELECT B , C
FROM r 1
WHERE A IN ( 1 , 4 )
UNION
SELECT B , C
FROM r 2
WHERE D < 5

D
2
1
5

(a) Pretvorite SQL(U) u RA(U).


(b) Izracunajte odgovor na upit koristeci relacijsku algebru.
22

Rjesenje Rjesavamo pod (a). S si cemo oznacavati medurezultate. Obzirom da je rijec o izrazu
unija skupova (UNION), konacni izraz imat ce oblik:
s1 s2
U oba dijela izraza imamo projekcije (SELECT klauzula):
s1 = BC (s3 )
s2 = BC (s4 )
Zatim rjesavamo selekcije (WHERE klauzula), pri cemu imamo formule:
F1 = (A {1, 4})
F2 = (D < 5)
Alternativno F1 smo mogli zapisati kao (A = 1) (A = 4). Selekcije su onda:
s3 = F1 (r1 )
s4 = F1 (r2 )
Stoga je konacan izraz:
RA(U) = BC (F1 (r1 )) BC (F1 (r2 ))
Rjesavamo pod (b). Sa s1 cemo oznacavati medurezultate.
t1 : (1 {1, 4})
t2 : (1 {1, 4})
t3 : (4 {1, 4})
F1 (r1 ) A B C
1 1 1
s1 =
1 4 2
4 2 1
t1 : (2 < 5)
t2 : (1 < 5)
t3 : (5 < 5)

s2 =

F2 (r2 ) B C
1 3
4 2

D
2
1

BC (s1 ) B C
1 1
s3 =
4 2
2 1
BC (s2 ) B C
s4 =
1 3
4 2
23

s3 s4 B C
1 1
s5 = BC (F1 (r1 )) BC (F1 (r2 )) =
4 2
2 1
1 3

24

2 SQL

2.1

Kreiranje tablica

Zadatak 2.1 Zadana je relacija


artikl

Sifra
1
2
3

Naziv Jedinicna cijena


Kava
8
Rakija
4
Klipic
2

Zadana su ogranicenja:

Sifra
je primarni kljuc relacije
Svaki artikl mora imati jedinstven naziv
Jedinicna cijena ne smije biti negativna

(a) Kreirajte u SQL-u strukturu tablice artikl s odgovarajucim ogranicenjima.


(b) Neka je zadan upit U : odrediti sve one sifre i nazive artikala cija je cijena veca od 3. Napisite
SQL(U) i RA(U). Zatim izracunajte relaciju o(RA(U)) koja je odgovor na upit U.
Rjesenje Rjesavamo (a):
CREATE TABLE a r t i k l
(
s i f r a INT PRIMARY KEY,
n a z i v VARCHAR UNIQUE ,
j e d i n i c n a c i j e n a FLOAT CHECK( j e d i n i c n a c i j e n a > 0 )
)
Rjesavamo (b):
SQL(U):
SELECT s i f r a , n a z i v
FROM a r t i k l
WHERE j e d i n i c n a c i j e n a > 3
25

RA(U) : sifra, cijena (jedinicna cijena>3 (artikl))


Sa ri oznacavat cemo medurezultate:
t1 : (8 > 3)
t2 : (4 > 3)
t3 : (2 > 3)
jedinicna cijena>3 (artikl) sifra naziv jedinicna cijena
r1 =
1
Kava
8
2
Rakija
4
sifra, cijena (r1 ) sifra jedinicna cijena
1
8
2
4
Zadatak 2.2 Zadana je relacija
pr

N
n1
n1
n2
n3
n3
n3

P
bp
uz
bp
bp
uz
fm

Semantika: pr (n, p) znaci da nastavnik n predaje predmet p.


(a) Kreirajte u SQL-u strukturu tablice pr
(b) Iskazite rijecima entitetski integritet za tablicu pr
(c) Neka je zadan upit U : odrediti sve one nastavnike koji predaju predmet uz i ne predaju predmet
fm. Napisite SQL(U) i tablicu o(SQL(U)) koja je odgovor na upit SQL(U).
Rjesenje Rjesavamo (a):
CREATE TABLE p r
(
N VARCHAR( 2 ) ,
P VARCHAR( 2 ) ,
PRIMARY KEY( N, P )
)
Rjesavamo (b). U relaciji (tablici) pr vrijednosti atributa N i P ne smiju poprimiti vrijednost null
jer su dio primarnog kljuca.
Rjesavamo (c).
26

SELECT N
FROM p r
WHERE P = uz
AND N NOT IN
(
SELECT N
FROM p r
WHERE P = fm
)
o(SQL(U)) N
n1
Zadatak 2.3 Zadana je relacija i ogranicenja
knjiga ISBN
1
2
3

Naslov
Godina
Programiranje u Prologu
1992
Arhitektura suvremenih organizacija 2005
Teorija baza podataka
2009

Svaka knjiga mora imati naslov i godinu izdanja


Godina izdanja mora biti veca od 1900

(a) Kreirajte u SQL-u strukturu tablice knjiga s odgovarajucim ogranicenjima.


(b) Neka je zadan upit U : odrediti sve one naslove knjiga koje su izdane nakon 2000 godine.
Napisite SQL(U) i RA(U). Zatim izracunajte relaciju o(RA(U)) koja je odgovor na upit U.
Rjesenje Rjesavamo (a).
CREATE TABLE k n j i g a
(
ISBN INTEGER PRIMARY KEY,
N a s l o v TEXT NOT NULL ,
Godina INTEGER NOT NULL CHECK( Godina > 1900 )
)
Rjesavamo (b).
SQL(U):
SELECT N a s l o v
FROM k n j i g a
WHERE Godina > 2000
RA(U) : Naslov (Godina>2000 (knjiga))
t1 : 1992 > 2000
t2 : 2005 > 2000
t3 : 2009 > 2000
Godina>2000 (knjiga) ISBN Naslov
Godina
r1 =
2
Arhitektura suvremenih organizacija 2005
3
Teorija baza podataka
2009
27

Naslov (r1 ) Naslov


Arhitektura suvremenih organizacija
Teorija baza podataka
Zadatak 2.4 Zadana je relacija
knjiga ISBN
1
2
3

Naslov
Godina
Programiranje u Prologu
1992
Arhitektura suvremenih organizacija 2005
Teorija baza podataka
2009

Zadana su ogranicenja:
Svaka knjiga mora imati naslov
Ako se ne specificira godina izdanja upisuje se 2011

(a) Kreirajte u SQL-u strukturu tablice knjiga s odgovarajucim ogranicenjima.


(b) Neka je zadan upit U : odrediti sve one naslove knjiga koje su izdane prije 2008 godine. Napisite
SQL(U) i RA(U). Zatim izracunajte relaciju o(RA(U)) koja je odgovor na upit U.
Rjesenje Rjesavamo (a).
CREATE TABLE k n j i g a
(
ISBN INTEGER PRIMARY KEY,
N a s l o v TEXT NOT NULL ,
Godina INTEGER DEFAULT 2011
)
Rjesavamo (b).
SQL(U):
SELECT N a s l o v
FROM k n j i g a
WHERE Godina < 2008
RA(U) : Naslov (Godina<2008 (knjiga))
t1 : 1992 < 2008
t2 : 2005 < 2008
t3 : 2009 < 2008

r1 =

Godina>2000 (knjiga) ISBN Naslov


Godina
1
Programiranje u Prologu
1992
2
Arhitektura suvremenih organizacija 2005
Naslov (r1 ) Naslov
Programiranje u Prologu
Arhitektura suvremenih organizacija
28

Zadatak 2.5 Zadana je relacija


racun broj racuna klijent
saldo
1
k1
2134, 56
2
k2
444, 09
3
k3
234, 43
4
k1
342.51
Zadana su ogranicenja (poslovna pravila):
Svaki baknovni racun mora imati broj racuna, klijenta i saldo
Dopusten negativni saldo moze biti 2000

(a) Kreirajte u SQL-u strukturu tablice racun s odgovarajucim ogranicenjima.


(b) Neka je zadan upit U : odrediti sve one klijente koji imaju barem jedan racun s negativnim
saldom. Napisite SQL(U) i RA(U). Zatim izracunajte relaciju o(RA(U)) koja je odgovor na
upit U.
Rjesenje Rjesavamo (a).
CREATE TABLE r a c u n
(
b r o j r a c u n a INTEGER PRIMARY KEY,
k l i j e n t TEXT NOT NULL ,
s a l d o DECIMAL NOT NULL CHECK( s a l d o > 2000
)

Rjesavamo (b).
SQL(U):
SELECT k l i j e n t
FROM r a c u n
WHERE s a l d o < 0
RA(U) : klijent (saldo<0 (racun))

t1 :

2134, 56 < 0

t2 :

444, 09 < 0

t3 : 234, 43 < 0
t4 : 342.51 < 0

saldo<0 (racun) broj racuna klijent


saldo
r1 =
1
k3
234, 43
2
k1
342.51
klijent (r1 ) klijent
k3
k1
29

Zadatak 2.6 Zadana je baza podataka


tvprogram

vrijeme
emisija
26.06.2011. 10:00
1
26.06.2011. 10:30
2
26.06.2011. 11:45
2

emisija sifra naziv opis zanr


1
e1
o1
z1
2
e2
o2
z1
3
e3
o3
z2

Zadana su ogranicenja:
Primarni kljuc relacije tvprogram je vrijeme
Primarni kljuc relacije emisija je sifra
Naziv emisije je jedinstven u relaciji emisija
Atribut emisija u relaciji tvprogram vanjski je kljuc koji se referencira na primarni kljuc relacije
emisija

Kreirajte u SQL-u strukturu tablica tvprogram i emisija s odgovarajucim ogranicenjima.


Rjesenje Rjesenje za tablicu emisija:
CREATE TABLE e m i s i j a
(
s i f r a INTEGER PRIMARY KEY,
n a z i v TEXT UNIQUE ,
o p i s TEXT,
z a n r TEXT,
)
Rjesenje za tablicu tvprogram:
CREATE TABLE t v p r o g r a m
(
v r i j e m e DATETIME PRIMARY KEY,
e m i s i j a INTEGER FOREIGN KEY REFERENCES e m i s i j a ( s i f r a )
)
Zadatak 2.7 Zadana je baza podataka
stan sifra kvadratura adresa vlasnik
1
80
a1
3
2
105
a2
1
3
55
a1
2
4
150
a3
3

vlasnik oib ime prezime


1
i1
p1
2
i2
p2
3
i3
p3

Zadana su ogranicenja (poslovna pravila):


Primarni kljuc relacije stan je sifra
Primarni kljuc relacije vlasnik je oib
Kvadratura stana ne smije biti negativan broj
Atribut vlasnik u relaciji stan vanjski je kljuc koji se referencira na primarni kljuc relacije vlasnik
Svaki stan mora imati definiranu adresu

30

Kreirajte u SQL-u strukturu tablica stan i vlasnik s odgovarajucim ogranicenjima.


Rjesenje Rjesavamo relaciju vlasnik.
CREATE TABLE v l a s n i k
(
o i b INTEGER PRIMARY KEY,
ime VARCHAR( 2 ) ,
p r e z i m e VARCHAR( 2 )
)
Rjesavamo relaciju stan.
CREATE TABLE s t a n
(
s i f r a INTEGER PRIMARY KEY,
k v a d r a t u r a INTEGER CHECK( k v a d r a t u r a >= 0 ) ,
a d r e s a NOT NULL ,
v l a s n i k INTEGER REFERENCES v l a s n i k ( o i b )
)
Zadatak 2.8 Zadana je baza podataka BP s ogranicenjima:
proizvod sifra
naziv
1
Kutija XXL
2
Kutija XL
3
Limenka 0.5

sirovina sifra naziv


1
Karton
2
Lim

sastavnica proizvod sirovina kolicina


1
1
175.00
2
1
120.00

Ogranicenja: Atribut sifra se koristi kao primarni kljuc u relacijama proizvod i sirovina. Atribut
proizvod u relaciji sastavnica je vanjski kljuc koji se referencira na primarni kljuc u relaciji sastavnica.
Atribut sirovina u relaciji sastavnica je vanjski kljuc koji se referencira na primarni kljuc u relaciji sirovina. Primarni kljuc relacije sastavnica je kombinacija atributa proizvod i sirovina. Atribut kolicina u
relaciji sastavnica ne smije biti negativan.
Neka su zadani tipovi podataka kao sto slijedi.
sifra/proizvod/sirovina cjelobrojna vrijednost
naziv varijabilni znakovni niz do 20 znakova
koli
cina decimalni broj
Kreirajte BP (tablice, unos) koristeci odgovarajuce SQL naredbe.

2.2

Upiti

Zadatak 2.9 Zadana je baza podataka BP:


nastavnik n# prezime zvanje
n1
Kim
prof
n2
Kam
doc
n3
Kam
izprof

predmet

31

p# broj-sati-tj sem-pred
uz
2
4
bp2
2
5
mpp
2
6

predaje n# p#
n1
uz
n2 bp2
n2 mpp
Neka je zadan upit U : Odredite sifre predmeta i odgovarajuce semestre predavanja predmeta koje
predaju nastavnici n1 i n2 .
(a) Napisite SQL(U)
(b) Napisite tablicu koja je je odgovor na SQL(U)
Rjesenje Rjesavamo pod (a). Da bismo dobili sifru i semenstar predavanja nekog predmeta za
odredenog nastavnika potrebno je spojiti sve tri tablice. To cinimo prirodnim spojem, odnosno u
SQL-u povezivanjem odgovarajucih vanjskih kljuceva. Da bismo dobili predmete dvaju nastavnika,

potrebno je da slogovi tablice zadovoljavaju uvjet: Sifra


nastavnika je n1 ili n2 . Ovaj je upit moguce
rjesiti na nekoliko nacina:
Prvi nacin SQL1 (U) (OR ogranicenje):
SELECT p . p#, p . semp r e d
FROM n a s t a v n i k n , predmet p , p r e d a j e p r
WHERE n . n# = p r . n#
AND p r . p# = p . p#
AND ( n . n# = n1 OR n . n# = n2 )
Drugi nacin SQL2 (U) (IN ogranicenje):
SELECT p . p#, p . semp r e d
FROM n a s t a v n i k n , predmet p , p r e d a j e p r
WHERE n . n# = p r . n#
AND p r . p# = p . p#
AND n . n# IN ( n1 , n2 )
Treci nacin SQL3 (U) (unija):
SELECT p . p#, p . semp r e d
FROM n a s t a v n i k n , predmet p , p r e d a j e p r
WHERE n . n# = p r . n#
AND p r . p# = p . p#
AND n . n# = n1
UNION
SELECT p . p#, p . semp r e d
FROM n a s t a v n i k n , predmet p , p r e d a j e p r
WHERE n . n# = p r . n#
AND p r . p# = p . p#
AND n . n# = n2
Jasno je da je drugi nacin najjednostavniji.
Rjesavamo pod (b). Pretvorimo svaki od upita u relacijsku algebru.
RA1 (U) : p#, sem-pred ((n#=n1 )(n#=n2 ) (nastavnik oo predaje oo predmet))
RA2 (U) : p#, sem-pred ((n#{n1 ,n2 }) (nastavnik oo predaje oo predmet))
RA3 (U) : p#, sem-pred (n#=n1 (nastavnik oo predaje oo predmet))
p#, sem-pred (n#=n2 (nastavnik oo predaje oo predmet))
32

Pri tome smo se okoristili prirodnim spajanjem umjesto produktom obzirom da su svi vanjski kljucevi
valjano spojeni. U nastavku cemo pri rjesavanju visestrukog prirodnog spoja koristiti konvenciju
spajanja s lijeva na desno, tj. r1 oo r2 oo r3 rjesavat cemo kao (r1 oo r2 ) oo r3 .
Racunamo o(RA1 (U)). Medurezultate oznacavat cemo s r1i .

r11

nastavnik oo predaje oo predmet n# prezime zvanje p# broj-sati-tj sem-pred


n1
Kim
prof
uz
2
4
=
n2
Kam
doc
bp2
2
5
n2
Kam
doc mpp
2
6

t1 : (n1 = n1 ) (n1 = n2 )

r12

t2 : (n2 = n1 ) (n2 = n2 )

t3 : (n2 = n1 ) (n2 = n2 )

(n#=n1 )(n#=n2 ) (r11 ) n# prezime zvanje p# broj-sati-tj sem-pred


n1
Kim
prof
uz
2
4
=
n2
Kam
doc
bp2
2
5
n2
Kam
doc mpp
2
6
p#, sem-pred (r12 )
r13 = o(RA1 (U)) =

p# sem-pred
uz
4
bp2
5
mpp
6

Racunamo o(RA2 (U)). Medurezultate oznacavat cemo s r2i .


Vrijedi da je r21 = nastavnik oo predaje oo predmet = r11 .
t1 : n1 {n1 , n2 }
t2 : n2 {n1 , n2 }
t3 : n2 {n1 , n2 }

Stoga je i r22 = (n#{n1 ,n2 }) (r21 ) = r12 . Iz toga slijedi da je r23 = o(RA2 (U))) = o(RA1 (U))).

Racunamo o(RA3 (U)). Medurezultate oznacavat cemo s r3i .


Vrijedi da je r31 = nastavnik oo predaje oo predmet = r11 .
t1 : n1 = n1
t2 : n2 = n1
t3 : n2 = n1

r32 =

(n#=n1 ) (r31 ) n# prezime zvanje p# broj-sati-tj sem-pred


n1
Kim
prof
uz
2
4
33

r33 =

p#, sem-pred (r12 ) p# sem-pred


uz
4

Vrijedi da je r34 = nastavnik oo predaje oo predmet = r11 .

t1 : n1 = n2
t2 : n2 = n2
t3 : n2 = n2

r35 =

(n#=n2 ) (r34 ) n# prezime zvanje p# broj-sati-tj sem-pred


n2
Kam
doc
bp2
2
5
n2
Kam
doc mpp
2
6
p#, sem-pred (r35 )
r36 =

p# sem-pred
bp2
5
mpp
6

r33 r36
r37 = o(RA3 (U)) =

p# sem-pred
uz
4
bp2
5
mpp
6

Dakle, dobili smo ocekivani rezultat, tj. o(RA1 (U)) = o(RA2 (U)) = o(RA3 (U)).
Zadatak 2.10 Zadana je baza podataka BP s ogranicenjima:
klijent oib prezime
1 Prekratki
2 Presvetli
3 Jambrek

savjetnik oib prezime


1
Maric
2
Sanjic

savjetuje savjetnik klijent


1
1
1
3
Ogranicenja: Atribut oib se koristi kao primarni kljuc u relacijama klijent i savjetnik. Atribut savjetnik
u relaciji savjetuje je vanjski kljuc koji se referencira na primarni kljuc u relaciji savjetnik. Atribut
klijent u relaciji savjetuje je vanjski kljuc koji se referencira na primarni kljuc u relaciji klijent.
Neka je zadan upit U: Pronaci sva prezimena klijenata koje savjetuje savjetnik s prezimenom Maric.
(a) Napisite SQL(U)
(b) Napisite tablicu koja je odgovor na SQL(U)
Rjesenje Rjesavamo pod (a). Prema specifikaciji upita U vidimo da je potrebno spojiti tablice
klijent, savjetuje i savjetnik. Stoga njih stavljamo u FROM klauzulu. Jasno je da bismo ih pravilno
spojili, potrebno je izjednaciti vanjske kljuceve sto cinimo u WHERE klauzuli. Konacno, upit treba
vratiti samo imena i prezimena klijenata, sto navodimo u SELECT klauzuli. Stoga je rjesenje:
34

SELECT k l i j e n t . p r e z i m e
FROM s a v j e t n i k , s a v j e t u j e , k l i j e n t
WHERE s a v j e t n i k . o i b = s a v j e t u j e . s a v j e t n i k
AND s a v j e t u j e . k l i j e n t = k l i j e n t . o i b
Rjesavamo pod (b). Pretvaramo upit u relacijsku algebru, pri cemu koristimo alijase za prefikse
k = klijent, sa = savjetuje i s = savjetnik:
k.prezime (s.oib=sa.savjetniksa.klijent=k.oib (savjetnik savjetuje klijent))
Racunamo odgovor na upit, pri emu cemo s ri oznacavati medurezultate.
savjetnik savjetuje klijent s.oib s.prezime sa.savjetnik sa.klijent k.oib k.prezime
1
Maric
1
1
1
Prekratki
1
Maric
1
3
2
Presvetli
1
Maric
1
1
3
Jambrek
1
Maric
1
3
1
Prekratki
1
Maric
1
1
2
Presvetli
r1 =
1
Maric
1
3
3
Jambrek
2
Sanjic
1
1
1
Prekratki
2
Sanjic
1
3
2
Presvetli
2
Sanjic
1
1
3
Jambrek
2
Sanjic
1
3
1
Prekratki
2
Sanjic
1
1
2
Presvetli
2
Sanjic
1
3
3
Jambrek
t1 : 1 = 1 1 = 1

t2 : 1 = 1 3 = 2

t3 : 1 = 1 1 = 3

t4 : 1 = 1 3 = 1

t5 : 1 = 1 1 = 2

t6 : 1 = 1 3 = 3

t7 : 2 = 1 1 = 1

t8 : 2 = 1 3 = 2
t9 : 2 = 1 1 = 3
t10 : 2 = 1 3 = 1
t11 : 2 = 1 1 = 2
t12 : 2 = 1 3 = 3

r2 =

s.oib=sa.savjetniksa.klijent=k.oib (r1 ) s.oib s.prezime sa.savjetnik sa.klijent k.oib k.prezime


1
Maric
1
1
1
Prekratki
1
Maric
1
3
3
Jambrek

r3 = k.prezime (s.oib=sa.savjetniksa.klijent=k.oib (savjetniksavjetujeklijent)) =

35

k.prezime (r2 ) k.prezime


Prekratki
Jambrek

Zadatak 2.11 Zadana je baza podataka BP te upit U:

vozilo reg. oznaka marka stanje brojila


SI-245-AS
Fiat
12362

VZ-743-CV Fiat
32198

RI-144-HT Skoda
32123

vozac oib prezime


1 Prikratki
2 Presvetli

upravlja vozac
vozilo
1
SI-245-AS
2
SI-245-AS
2
RI-144-HT

U : Odredite prezimena i odgovarajuce marke vozila onih vozaca koji su zaduzeni za vozila cija je

marka Skoda.
(a) Napisite SQL(U) te ga pretvorite u RA(U).
(b) Izracunajte odgovor na upit koristeci relacijsku algebru.
Rjesenje Rjesavamo pod (a). Iz specifikacije upita vidimo da je potrebno spojiti sve tri tablice sto
cemo uciniti spajajuci odgovarajuce vanjske kljuceve.
SELECT v o z a c . p r e z i m e , v o z i l o . marka
FROM v o z i l o , v o z a c , u p r a v l j a
WHERE v o z a c . o i b = u p r a v l j a . v o z a c
AND v o z i l o . r e g . o zn a k a = u p r a v l j a . v o z i l o

AND v o z i l o . marka = Skoda

Za pretvaranje u relacijsku algebru, koristit cemo si za oznacavanje medurezultata. Iz FROM klauzule


citamo produkt tablica koje ce se spajati.
s1 = vozilo vozac upravlja
Iz WHERE klauzule citamo formulu selekcije.

F = (oib = vozac) (reg. oznaka = vozilo) (marka = Skoda)


Stoga je selekcija:
s2 = F (s1 )
Iz SELECT klauzule citamo konacnu projekciju:
s3 = prezime, marka (s2 )
Stoga je konacni izraz:
RA(U) = prezime, marka (F (vozilo vozac upravlja))
Rjesavamo pod (b). Sa ri cemo oznacavati medurezultate.
36

vozilo vozac upravlja reg. oznaka marka stanje brojila oib prezime vozac
vozilo
SI-245-AS
Fiat
12362
1 Prikratki
1
SI-245-AS
SI-245-AS
Fiat
12362
2 Presvetli
2
SI-245-AS
SI-245-AS
Fiat
12362
1 Prikratki
2
RI-144-HT
SI-245-AS
Fiat
12362
2 Presvetli
1
SI-245-AS
SI-245-AS
Fiat
12362
1 Prikratki
2
SI-245-AS
SI-245-AS
Fiat
12362
2 Presvetli
2
RI-144-HT

VZ-743-CV
Fiat
32198
1 Prikratki
1
SI-245-AS

VZ-743-CV Fiat
32198
2 Presvetli
2
SI-245-AS

VZ-743-CV
Fiat
32198
1 Prikratki
2
RI-144-HT
r1 =

VZ-743-CV
Fiat
32198
2 Presvetli
1
SI-245-AS

VZ-743-CV Fiat
32198
1 Prikratki
2
SI-245-AS

VZ-743-CV
Fiat
32198
2 Presvetli
2
RI-144-HT

RI-144-HT Skoda
32123
1 Prikratki
1
SI-245-AS

RI-144-HT Skoda
32123
2 Presvetli
2
SI-245-AS

RI-144-HT Skoda
32123
1 Prikratki
2
RI-144-HT

RI-144-HT Skoda
32123
2 Presvetli
1
SI-245-AS

RI-144-HT Skoda
32123
1 Prikratki
2
SI-245-AS

RI-144-HT Skoda
32123
2 Presvetli
2
RI-144-HT

t1
t2
t3
t4
t5
t6
t7
t8
t9
t10
t11
t12
t13
t14
t15
t16
t17
t18

:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:

(1 = 1)
(2 = 2)
(1 = 2)
(2 = 1)
(1 = 2)
(2 = 2)
(1 = 1)
(2 = 2)
(1 = 2)
(2 = 1)
(1 = 2)
(2 = 2)
(1 = 1)
(2 = 2)
(1 = 2)
(2 = 1)
(1 = 2)
(2 = 2)

r2 =

(SI-245-AS = SI-245-AS) (Fiat = Skoda)

(SI-245-AS = SI-245-AS) (Fiat = Skoda)

(SI-245-AS = RI-144-HT) (Fiat = Skoda)

(SI-245-AS = SI-245-AS) (Fiat = Skoda)

(SI-245-AS = SI-245-AS) (Fiat = Skoda)

(SI-245-AS = RI-144-HT) (Fiat = Skoda)

(VZ-743-CV
= SI-245-AS) (Fiat = Skoda)

(VZ-743-CV
= SI-245-AS) (Fiat = Skoda)

(VZ-743-CV = RI-144-HT) (Fiat = Skoda)

(VZ-743-CV
= SI-245-AS) (Fiat = Skoda)

(VZ-743-CV = SI-245-AS) (Fiat = Skoda)

(VZ-743-CV
= RI-144-HT) (Fiat = Skoda)

(RI-144-HT = SI-245-AS) (Skoda = Skoda)

(RI-144-HT = SI-245-AS) (Skoda


= Skoda)

(RI-144-HT = RI-144-HT) (Skoda


= Skoda)

(RI-144-HT = SI-245-AS) (Skoda = Skoda)

(RI-144-HT = SI-245-AS) (Skoda


= Skoda)

(RI-144-HT = RI-144-HT) (Skoda = Skoda)

F (r1 ) reg. oznaka marka stanje brojila oib prezime vozac


vozilo

RI-144-HT Skoda
32123
2 Presvetli
2
RI-144-HT

r3 = prezime, marka (F (vozilo vozac upravlja)) =


Zadatak 2.12 Zadana je baza podataka BP te upit U:
37

prezime, marka (r2 )

prezime marka

Presvetli Skoda

vozilo reg. oznaka stanje brojila


SI-245-AS
12362

VZ-743-CV
32198
RI-144-HT
32123

vozac oib prezime ime


1 Prikratki Joza
2 Presvetli Ivek

upravlja vozac
vozilo
1
SI-245-AS
2
SI-245-AS

1
VZ-743-CV
2
RI-144-HT

U : Odredite imena i prezimena vozaca koji upravljaju vozilima cije je stanje brojila vece od 30000.
(a) Napisite SQL(U) te ga pretvorite u RA(U).
(b) Izracunajte odgovor na upit koristeci relacijsku algebru.
Rjesenje

2.3

Transakcije

Zadatak 2.13 Zadana je tablica s ogranicenjem i transakcije:


konto broj
saldo
1
89.30
2 102.05
3
15.35

Ogranicenje: Nije dopusten negativan saldo.

BEGIN TRANSACTION T1 ;
INSERT INTO s a l d o VALUES( 5 , 0 . 0 0 ) ;
DELETE FROM s a l d o WHERE b r o j = 3 ;
COMMIT;
BEGIN TRANSACTION T2 ;
UPDATE k o n t o SET s a l d o = s a l d o + 100 WHERE b r o j = 2 ;
UPDATE k o n t o SET s a l d o = s a l d o 100 WHERE b r o j = 1 ;
COMMIT;
(a) Odredite stanje tablice konto nakon izvrsenja transakcije T1.
(b) Odredite stanje tablice konto nakon izvrsenja transakcije T2.
Rjesenje Rjesavamo (a). Prva naredba transakcije T1 dodaje slog (5, 0.00) u tablicu konto. Stoga
je medustanje:
konto broj
saldo
1
89.30
2 102.05
3
15.35
5
0.00
Druga naredba transakcije T1 brise sve slogove iz tablice konto ciji je broj konta 3. Stoga je
medustanje (koje je ujedno i konacno stanje nakon izvrsavanja transakcije T1):
konto broj
saldo
1
89.30
2 102.05
5
0.00
38

Rjesavamo (b). Prva naredba transakcije T2 azurira tablicu konto tako da povecava stanje salda za
100 tamo gdje je broj konta 2. Stoga je medustanje:
konto broj
saldo
1
89.30
2 202.05
5
0.00
Druga naredba transakcije T2 azurira tablicu konto tako da smanjuje stanje salda za 100 tamo gdje
je broj konta 1. Stoga je medustanje:
konto broj
saldo
1 10.70
2
202.05
5
0.00
Obzirom da je zadano ogranicenje koje zabranjuje negativan saldo, doslo je do narusavanja integriteta
baze podataka te se stoga transakcija T2 prekida. Zbog toga vrijedi stanje baze podataka koje je
vrijedilo prije pocetka transakcije T2, to jest konacno stanje je:
konto broj
saldo
1
89.30
2 102.05
5
0.00
Zadatak 2.14 Zadana je tablica s ogranicenjem i transakcija:
autor sifra
1
2
3

ime
Ivana
Miroslav
August

prezime
Brlic-Mazuranic
Krleza

Senoa

Ogranicenje: Svaki autor mora imati prezime.

BEGIN TRANSACTION T1 ;
DELETE FROM a u t o r WHERE s i f r a = 3 ;
INSERT INTO a u t o r ( s i f r a , ime ) VALUES( 4 , I v a n ) ;
COMMIT;
Odredite stanje tablice autor nakon izvrsenja transakcije T1.
Rjesenje Medustanje nakon prvog izraza transakcije je:
autor sifra ime
prezime
1
Ivana
Brlic-Mazuranic
2
Miroslav Krleza
Nakon izvrsavanja drugog izraza medustanje je:
autor sifra
1
2
4

ime
Ivana
Miroslav
Ivan

prezime
Brlic-Mazuranic
Krleza
null

Obzirom da je doslo do nedozvoljenog stanja tablice (prezime autora je nepoznato), dolazi do prekida
transakcije. Stoga je konacno stanje ono stanje koje je vrijedilo prije pocetka transakcije T1:
39

autor sifra
1
2
3

ime
Ivana
Miroslav
August

prezime
Brlic-Mazuranic
Krleza

Senoa

Zadatak 2.15 Zadana je tablica s ogranicenjem i transakcija:


osoba oib
1
2
3

ime
Ivek
Joza
Barica

prezime
Presvetli
Prekratki
Prekratki

Ogranicenje: oib je primarni kljuc relacije osoba.

BEGIN TRANSACTION T1 ;
UPDATE o s o b a
SET ime = S t e f i c a , p r e z i m e = Jambrescak
WHERE o i b = 3 ;
INSERT INTO o s o b a ( p r e z i m e , ime , o i b )
VALUES( Lacko , Edmund , 4 ) ;
COMMIT;
Odredite stanje tablice osoba nakon izvrsenja transakcije T1.
Rjesenje Medustanje nakon prvog izraza transakcije je:
osoba oib
1
2
3

ime
Ivek
Joza
Stefica

prezime
Presvetli
Prekratki
Jambrescak

Stanje nakon drugog izraza je:


osoba oib
1
2
3
4

ime
Ivek
Joza
Stefica
Edmund

prezime
Presvetli
Prekratki
Jambrescak
Lacko

Obzirom da nije doslo do narusavanja inetgritetnog ogranicenja, ovo je ujedno i konacno stanje
tablice.
Zadatak 2.16 Zadana je tablica s ogranicenjem i transakcija:
zaposlenik oib
1
2
3

ime

Stefica
Ivek
Joza

prezime
Ivanovic
Marjanovic
Stojanovic

Ogranicenje: oib je primarni kljuc relacije zaposlenik.

BEGIN TRANSACTION T1 ;
UPDATE o s o b a SET ime = B a r i c a WHERE ime LIKE % a n o v i % ;
INSERT INTO z a p o s l e n i k VALUES( 2 , B a r i c a , P r i k r a t k i ) ;
COMMIT;
Odredite stanje tablice zaposlenik nakon izvrsenja transakcije T1.
40

Rjesenje Medustanje nakon prvog izraza transakcije je:


zaposlenik oib
1
2
3

ime
Barica
Barica
Barica

prezime
Ivanovic
Marjanovic
Stojanovic

ime
Barica
Barica
Barica
Barica

prezime
Ivanovic
Marjanovic
Stojanovic
Prikratki

Nakon drugog izraza, medustanje je:


zaposlenik oib
1
2
3
2

Obzirom da je doslo do narusavanja integritetnog ogranicenja (ponavljanje vrijednosti primarnog


kljuca), transakcija se prekida i vrijedi stanje koje je vrijedilo prije pocetka transakcije T 1, tj.:
zaposlenik oib
1
2
3

ime

Stefica
Ivek
Joza

prezime
Ivanovic
Marjanovic
Stojanovic

Zadatak 2.17 Zadana je tablica s ogranicenjem i transakcija:


student jmbag
1
2
3

ime
Slavek
Joza
Barica

prezime
Presvetli
Jambrek
Presvetli

status
null
upisan
null

Ogranicenje: jmbag je primarni kljuc relacije student.

BEGIN TRANSACTION T1 ;
UPDATE s t u d e n t SET s t a t u s = u p i s a n WHERE s t a t u s I S NULL ;
INSERT INTO o s o b a ( p r e z i m e , ime , jmbag ) VALUES( P r e k r a t k i , I v e k , 4 ) ;
COMMIT;
Odredite stanje tablice student nakon izvrsenja transakcije T1.
Rjesenje Prva naredba postavlja sve nepoznate statuse na upisan, zbog cega je stanje nakon prve
naredbe:
student jmbag
1
2
3

ime
Slavek
Joza
Barica

prezime
Presvetli
Jambrek
Presvetli

status
upisan
upisan
upisan

Druga naredba dodaje red u tablicu (obzirom da atribut status nije navedn upisuje se null vrijednost):
student jmbag
1
2
3
4

ime
Slavek
Joza
Barica
Ivek

prezime
Presvetli
Jambrek
Presvetli
Prekratki

status
upisan
upisan
upisan
null

Obzirom da nije doslo do narusavanja integriteta, ovo je i konacno stanje tablice.

41

42

3 Konceptualno oblikovanje baza podataka

3.1

SBVR

Zadatak 3.1 Zadan je sljedeci opis korisnickih zahtjeva:


Svaki stol posluzuje samo jedan konobar. Konobar se raspoznaje prema svojoj sifri te ima svoje
ime i prezime. Stol se raspoznaje prema broju stola. Konobar moze posluziti vise stolova. Za
svaku narudzbu na nekom stolu konobar izdaje racun, pri cemu moze izdati i vise racuna. Racun se
raspoznaje po broju racuna, a sadrzi datum i vrijeme posluzivanja, te stavke narudzbe kojih moze
biti vise, ali barem jedna. Svaka stavka se sastoji od proizvoda i narucene kolicine. Proizvod se
raspoznaje po sifri te ima svoj naziv i jedinicnu cijenu.
(a) Oblikujte SBVR opis ovih korisnickih zahjteva.
(b) Nacrtajte odgovarajuci konceptualni (UML) dijagram.
Rjesenje Rjesavamo pod (a). Ovaj je zadatak moguce rjesiti na vise nacina, pri cemu cemo se drzati
pravila da idemo redom prema korisnickim zahtjevima (sto u praksi ne mora biti tako) te s ciljem
da cemo iz ovog opisa kasnije oblikovati konceptualni model baze podataka. U nastavku je jedno
validno rjesenje:
Svaki stol posluzuje barem jedan konobar.
Svaki konobar ima tocno jednu sifru.
Svaki konobar ima ime.
Svaki konobar ima prezime.
Svaki stol ima tocno jedan broj stola.
Konobar moze posluziti vise stolova.
Konobar za svaki stol izdaje vise ra
cuna.
Svaki ra
cun ima tocno jedan broj ra
cuna.
Svaki ra
cun sadrzi datum i vrijeme.
Svaki ra
cun sadrzi jednu ili vise stavki.
Svaka stavka sadrzi proizvod.
Svaka stavka sadrzi naru
cenu koli
cinu.
Svaki proizvod ima tocno jednu sifru.
Svaki proizvod ima naziv.
43

Svaki proizvod ima jedini


cnu cijenu.
Pri rjesenju smo se drzali konvencije da smo koncepte (entitete, atribute) oznacavali podebljanim
slovima, predikate (veze, relacije) podvucenim slovima, a modalne operatore i kvantifikatore (multiplicitet veza, ogranicenja) obicnim slovima.
Rjesavamo pod (b). Iz SBVR specifikacije koncepte pretvaramo u entitete ako su slozeni (vezani uz
predikate ima, sadrzi, sastoji se od i sl.), odnosno atribute ako su jednostavni. Stoga su entiteti s
odgovarajucim atributima:
stol( broj stola )
konobar( sifra, ime, prezime )
racun( broj racuna, datum i vrijeme )
stavka( proizvod, narucena kolicina )
proizvod( sifra, naziv, jedinicna cijena )
Pri cemu su podvuceni atributi dio primarnog kljuca. Obzirom da su koncepti stavka i proizvod
slozeni, a istovremeno s desne strane predikata sadrzavanja, te veze se pretvaraju u agregacije.
Takoder, veza izmedu stola, konobara i racuna je 3-arna jer se jedno posluzivanje uvijek veze uz
jednog konobara, jedan stol i vise racuna. Stoga je UML Class dijagram ove SBVR specifikacije:

Zadatak 3.2 Zadan je sljedeci opis korisnickih zahtjeva:


Svako motorno vozilo jedinstveno je odredeno brojem sasije. Motorna vozila imaju marku, tip te
odredenu vrstu goriva koju koriste. Vlasnik vozila u nekom trenutku moze biti samo jedna fizicka ili
pravna osoba. Ako je vozilo registrirano dobiva jedinstvenu registarsku oznaku na razdoblje od godinu
dana. Svaka registarska oznaka za sobom povlaci odgovarajuci broj obavezne police osiguranja.
Vozacka dozvola izdaje se za upravljanje motornim vozilima koja su svrstana u AM, A1, A2, A, B,
B E, C1, C1 E, C, C E, D1, D1 E, D, D E, F, G i H kategorije vozila. Samo fizicka osoba koja ima
odgovarajucu vozacku dozvolu smije upravljati odredenom kategorijom motornih vozila.
(a) Oblikujte SBVR opis ovih korisnickih zahjteva.
(b) Nacrtajte odgovarajuci konceptualni (UML) dijagram.
Rjesenje
44

3.2

UML

Zadatak 3.3 Neka je zadano poslovno pravilo u SBVR notaciji:

PP: Svaki menad


zer koordinira barem tri radnika.
(a) Oblikujte UML dijagram.
(b) Napisite jednu valjanu konktretizaciju (tablicno).
Rjesenje Rjesavamo pod (a). Analizmo PP utvrdujemo da se radi o binarnoj relaciji izmedu
menadzera i radnika, arnosti 3 ili vise. Stoga je UML dijagram:

Rjesavamo pod (b). Jedna valjana konkretizacija je:


koordinira menadzer radnik
m1
r1
m1
r2
m1
r3
Zadatak 3.4 Neka je zadano poslovno pravilo u SBVR notaciji:
PP: Svaki taksista vozi s tocno jednog polazista na tocno jedno odrediste po tocno jednoj cijeni.
(a) Oblikujte UML dijagram.
(b) Napisite jednu valjanu konktretizaciju (tablicno).
Rjesenje Rjesavamo pod (a). Analizom PP utvrdujemo da se radi o 4-arnoj relaciji vozi( taksista,
polaziste, odrediste, cijena ). Stoga je UML dijagram:

Rjesavamo pod (b). Jedna valjana konkretizacija je sljedeca:


45

vozi taksista polaziste odrediste cijena


t1
p1
o1
100
t1
p1
o2
200
t2
p2
o1
150
Iz UML dijagrama je jasno da svaki taksista moze imati vise voznji, dok se jedna voznja (kombinacija
polazista, odredista i cijene) odnosi na tocno jednog taksistu.
Zadatak 3.5 Neka su zadana poslovna pravila u SBVR notaciji:

PP1 : Svaki korisnik ima barem jednu e-mail adresu.


PP2 : Korisnici su prijatelji s drugim korisnicima.
(a) Oblikujte UML dijagram.
(b) Napisite jednu valjanu konktretizaciju (tablicno).
Rjesenje Rjesavamo pod (a). Obzirom da je e-mail adresa jednostavni entitet (ne razlaze se dalje na
druge entitete), te obzirom da je dio relacije ima koja ukazuje na sadrzavanje, njega cemo prikazati
kao atribut entiteta korisnik. Relacija je prijatelj s je rekurzivna jer spaja korisnike s korisnicima.
Obzirom da je entitet korisnik s obje strane relacije u mnozini, kardinalnost veze je vise naprema
vise.

Rjesavamo pod (b). Obzirom da je relacija je prijatelj s i multiplicitet veze je vise naprema vise,
potrebno ju je predstaviti zasebnom tablicom. Jedna valjana konkretizacija je:
ima korisnik e-mail adresa
k1
e1
k2
e2

je prijatelj s korisnik korisnik


k1
k2

Zadatak 3.6 Neka je zadano poslovno pravilo u SBVR notaciji:

PP: Svaki avion sadrzi barem dva krila.


(a) Oblikujte UML dijagram.
(b) Napisite jednu valjanu konktretizaciju (tablicno).
Rjesenje Rjesavamo pod (a). Obzirom da je rijec o relaciji sadrzavanja, dijagram ce najbolje biti
predstavljen agregacijom ili tocnije kompozicijom (jer avion bez krila nije avion). Sljedeci dijagram
je jedno moguce rjesenje:
46

Rjesavamo pod (b). Sljedeca relacija je jedna valjana konkretizacija:


sadrzi avion krilo
a1
k1
a1
k2
Zadatak 3.7 Neka su zadana poslovna pravila u SBVR notaciji:

PP1 : Svaka knjiga ima jedan naslov.


PP2 : Svaka knjiga napisana je od jednog ili vise autora.
PP3 : Svaki autor napisao je jednu ili vise knjiga.
(a) Oblikujte UML dijagram klasa koji je u skladu s navedenim poslovnim pravilima.
(b) Napisite jednu valjanu konktretizaciju (tablicno).
Rjesenje Rjesavamo pod (a). Obzirom da je naslov jednostavni entitet, prikazat cemo ga kao
atribut entiteta knjiga. Jedno moguce rjesenje prikazano je na sljedecoj slici.

Rjesavamo pod (b). Obzirom da imamo specificnu situaciju (veza s obje strane ima multiplicitet
vise), potrebno je uvesti slabi entitet na toj vezi ciji ce se primarni kljuc sastojati od primarnih
kljuceva dvaju povezanih entiteta.
napisao knjiga autor
k1
a1
k1
a2
k2
a1

ima knjiga naslov


k1
n1
k2
n2

Zadatak 3.8 Neka su zadana poslovna pravila u SBVR notaciji:

PP1 : Svako vozilo ima tocno jedan broj sasije.


PP2 : Svaki voza
c je zaduzen za jedno ili vise vozila.
cku dozvolu.
PP3 : Svaki voza
c je vlasnik tocno jednu voza
(a) Oblikujte UML dijagram klasa koji je u skladu s navedenim poslovnim pravilima.
(b) Napisite jednu valjanu konktretizaciju (tablicno).
Rjesenje Rjesavamo pod (a). Analizom poslovnih pravila uvidamo da su entiteti broj sasije i
voza
cka dozvola jednostavni (ili su dio relacije ima ili se ne razlazu se dalje) zbog cega cemo ih
prikazati kao atribute odgovarajucih entiteta.
47

Rjesavamo pod (b). Jedna valjana konkretizacija je sljedeca:


ima vozilo broj sasije
a1
b1
a2
b2
a3
b3

je vlasnik vozac vozacka dozvola


v1
vd1
v2
vd2

zaduzen vozac vozilo


v1
a1
v2
a2
v2
a3

Zadatak 3.9 Neka je zadan UML dijagram kao sto slijedi:

NAPOMENA: Znak * predstavlja vezu 0 ili vise (0:N), a 1 je kardinalnost 1 i samo 1 (1:1).
(a) Pretvorite dijagram u relacijski model.
(b) Implementirajte model koristeci SQL.
Rjesenje Rjesavamo pod (a). Obzirom da je rijec o ternarnoj vezi potrebno ju je predstaviti zasebnom relacijom. Relacijski model je tada:
stol( broj stola )
racun( broj racuna, datum i vrijeme, iznos )
konobar( sifra, ime, prezime )
izdaje( stol, konobar, racun )
Pri cemu atributi podvuceni crtkasto predstavljaju vanjske kljuceve iz drugih relacija.
Rjesavamo pod (b). Implementacija je sljedeca:
CREATE TABLE s t o l (
b r o j s t o l a INTEGER PRIMARY KEY
)
CREATE TABLE r a c un (
b r o j r a c una INTEGER PRIMARY KEY,
datum i v r i j e m e DATETIME ,
i z n o s DECIMAL
)
CREATE TABLE k o n o b a r (
48

s i f r a BIGINT PRIMARY KEY,


ime VARCHAR( 2 0 ) ,
p r e z i m e VARCHAR( 2 5 )
)
CREATE TABLE i z d a j e (
s t o l INTEGER REFERENCES s t o l ( b r o j s t o l a ) ,
k o n o b a r BIGINT REFERENCES k o n o b a r ( s i f r a ) ,
r a c un INTEGER REFERENCES r a c un ( b r o j r a c una ) ,
PRIMARY KEY( s t o l , konobar , r a c un )
)

Zadatak 3.10 Neka je zadan UML dijagram kao sto slijedi:

NAPOMENA: Znak * predstavlja vezu 0 ili vise (0:N), a 1 je kardinalnost 1 i samo 1 (1:1).
(a) Pretvorite dijagram u relacijski model.
(b) Implementirajte model koristeci SQL.
Rjesenje Rjesavamo pod (a). Obzirom na vezu jedan naprema vise potrebno je u relaciju igrac
uvrstiti vanjski kljuc iz relacije klub. Stoga je relacijski model kao sto slijedi:
klub( sifra, naziv, adresa, telefonski broj )
igrac( oib, ime, prezime, pozicija, klub )
Rjesavamo pod (b). SQL implementacija je kao sto slijedi:
CREATE TABLE k l u b (
s i f r a INTEGER PRIMARY KEY,
n a z i v VARCHAR( 3 0 ) ,
a d r e s a TEXT,
t e l e f o n s k i b r o j VARCHAR( 1 5 )
)
CREATE TABLE i g r a c (
o i b BIGINT PRIMARY KEY,
ime VARCHAR( 2 0 ) ,
p r e z i m e VARCHAR( 2 5 ) ,
p o z i c i j a VARCHAR( 1 0 ) ,
k l u b INTEGER REFERENCES k l u b ( s i f r a )
)

49

3.3

Medurelacijska ograni
cenja

Zadatak 3.11 Zadane su relacije (predikati) sljedecim tablicama:


r

A B C
1 2 1
2 2 1
3 4 3

s B C
2 3
1 1
2 2

D
1
1
4

Neka je zadano medurelacijsko ogranicenje:


H = (t r )[(t(B) < 3 t(A) = 3) (u s)(u(CD) = t(AC ))]
Ispitati je li H vrijedi za relacije r i s.
Rjesenje
Zadatak 3.12 Zadane su relacije (predikati) sljedecim tablicama:
r

A B C
a a c
c b a
b b c

s B C
a b
b a
c b

D
c
c
d

Neka je zadano medurelacijsko ogranicenje:


H = (t r )[(t(B) = b t(B) = c) (u s)(u(BC ) = t(BC ))]
Ispitati je li H vrijedi za relacije r i s .
Rjesenje

50

4 Logicko oblikovanje baza podataka

4.1

1NF

Zadatak 4.1 Zadana je relacijska shema R = ABC pri cemu je

Dom(A) = {1, 2, 3}
Dom(B) = {{1, 2, 3}, {1, 2}}
Dom(C ) = {a, b, c}
(a) Napisite jednu valjanu relaciju r (R)
(b) Provjerite je li R u 1NF, te ukoliko nije predlozite rjesenje.
(c) Prikazite sada relaciju r koristeci svoje rjesenje.
Rjesenje Rjesavamo pod (a). Relacija r (R) pod vrijednostima odgovarajucih atributa smije imati
samo vrijednosti odredene njihovom domenom. Stoga je jedna moguca valjana relacija:
r

A
B
C
1 {1, 2}
a
3 {1, 2, 3} a
1 {1, 2}
c

Rjesavamo pod (b). Vidimo da domena atributa B sadrzi slozene vrijednosti (skupove) zbog cega R
nije u 1NF. Jedno moguce rjesenje je uvodenje identiteta svakog skupa iz Dom(B) i uvodenje novog
atributa koji se dobiva rastavljanjem atributa B. Neka je atribut identiteta oznacen s I (B), a novi
atribut s B . R sada postaje R = A I (B) B C , a domene novih atributa:

Dom(A) = {1, 2, 3}
Dom(I (B)) = {o1 , o2 }
Dom(B ) = {1, 2, 3}
Dom(C ) = {a, b, c}
51

Uocite da smo za svaki skup u Dom(B) uveli po jedan identitet objekta (oi , i = 1, 2), te da smo
domenu atributa B dobili kao uniju svih skupova iz Dom(B).
Rjesavamo pod (c). Relaciju r (R ) sada mozemo prikazati kao:
r

A I (B) B
1 o2
1
1 o2
2
3 o1
1
3 o1
2
3 o1
3
1 o2
1
1 o2
2

C
a
a
a
a
a
c
c

Zadatak 4.2 Zadana je relacijska shema R = ABC pri cemu je

Dom(A) = {x, y , z}
Dom(B) = {1, 2, 3, 4, 5}
Dom(C ) = {(1, 1), (1, 2), (2, 1), (2, 2)}
Pri cemu je (X , Y ) uredeni par X i Y .
(a) Napisite jednu valjanu relaciju r (R)
(b) Provjerite je li R u 1NF, te ukoliko nije predlozite rjesenje.
(c) Prikazite sada relaciju r koristeci svoje rjesenje.
Rjesenje Rjesavamo pod (a). Sljedeca relacija r je valjana:
r

A B
C
x 4 (1, 2)
x 2 (1, 1)
y 1 (1, 2)

Rjesavamo pod (b). Relacijska shema nije u 1NF zbog toga sto je atribut C slozen. Stoga uvodimo
Dom(C ) = {o1 , o2 , o3 , o4 } pri cemu je o1 = (1, 1), o2 = (1, 2), o3 = (2, 1) i o4 = (2, 2). Obzirom da
je rijec o uredenim parovima tj. n-torkama, mozemo ih izdvojiti u posebnu relaciju kako bi ocuvali
poredak. Da smo primjenili rjesenje kao u zadatku 4.1, izgubili bismo informaciju o tome koji je
element prvi, a koji drugi u uredenom paru.
Rjesavamo pod (c). Sljedece dvije relacije daju siru1 informaciju kao i relacija r iz podzadatka (a).
Oznake atributa P1 i P2 su proizvoljne.
r

A B C
x 4 o2
x 2 o1
x 1 o2

C P1 P2
o1 1 1
o2 1 2
o3 2 1
o4 2 2

U relaciji r iz podzadatka a nismo imali informaciju o svim mogucim vrijednostima koje moze poprimit atribut C ,
iako je to zadano njegovom domenom.

52

4.2

2NF

Zadatak 4.3 Zadana je relacijska shema (R, F ), R = ABCD i


F :

A C
AB D

Provjerite je li (R, F ) u 2NF, te ako nije napravite 2NF dekompoziciju koja cuva informaciju i
zavisnosti.
Rjesenje Prvo trazimo kljuc. Prema kljucnom triku, atributi A i B moraju biti dio svakog kljuca
(AB K ). Provjeravamo prvo je li AB kljuc, racunanjem zatvaraca:
(AB)+
F = ABCD
Zakljucujemo da je K = AB jedini kljuc. Provjeravamo postoji li parcijalna zavisnost nekljucnog
atributa od kljuca (uvjet 2NF). Kljucni atributi su AB, a nekljucni CD. Uocavamo da vrijedi z1 :
AB C i z2 : A C , zbog cega je z1 parcijalna zavisnost. Stoga, zakljucujemo da (R, F ) nije u
2NF. Radimo dekompoziciju preko z2 , obzirom da ona narusava 2NF:
ABCD

AC
AC

ABD

Stoga je dekompozicija d(R) : AC , ABD. Dalje, provjeravamo svaku od komponenti je li u 2NF.


Komponenta AC je u 2NF jer (obzirom da ne vrijede nestandardne zavisnosti) ne postoji dvokomponentna relacijska shema koja nije u 2NF. Za komponentu ABD vrijedi AB D i ne vrijede nikakve
druge netrivijalne funkcijske zavisnosti sto lako mozemo provjeriti racunanjem projekcije skupa zavisnosti na ABD:
Provjeravamo redom moguce netrivijalne zavisnosti:
A
A
B
B
D
D
AB
AD
BD

B
A+
F
D
A
BF+
D
A
DF+
B
D (AB)+
F
B (AD)+
F
A (BD)+
F

= AC

B
AC
D
AC
= B
A
B
D
B
= D
A
D
B
D
= ABCD D ABCD
= ACD
B
ACD
= BD
A
BD

Shodno tome provjeravamo je li (ABD, {AB D}) u 2NF. Obzirom da je skup atributa AB bio
kljuc u (R, F ), tj. na visoj razini, on se naslijeduje u dekompoziciji, stoga je K = AB. Provjeravamo,
postoji li parcijalna zavisnost nekljucnog atributa od kljuca. Kljucni atributi su AB, a nekljucni D.
Moguci uzrocnici parcijalne zavisnosti su A D i B D, no niti jedna od njih ne vrijedi, sto
mozemo iscitati iz prethodne projekcije skupa zavisnosti. Stoga zakljucujemo da je komponenta
ABD u 2NF. Konacno zakljucujemo da je dekompozicija d(R) : AC , ABD 2NF dekompozicija koja
cuva informaciju i zavisnosti. Kljucevi ove dekompozicije A za komponentu AC (jer je A C ) i AB
za komponentu ABD.
53

Zadatak 4.4 Zadana je relacijska shema (R, F ), R = ABCD i


F : B C
B AD
Provjerite je li (R, F ) u 2NF, te ako nije napravite 2NF dekompoziciju koja cuva informaciju i
zavisnosti.
Rjesenje Trazimo kljuc. Prema kljucnom triku:
BF+ = BCAD
Stoga je K = B jedini kljuc. Obzirom da je K jednokomponentni kljuc (a ne postoje nestandardne
zavisnosti oblika X ), zakljucujemo da nije moguce pronaci parcijalnu zavisnost nekljucnog
atributa od kljuca. Stoga je zadani (R, F ) u 2NF.

4.3

3NF

Zadatak 4.5 Zadana je relacijska shema (R, F ), R = ABCDEF i


F : AE
A
C
AC

C
DE
BD
BE

Provjerite je li (R, F ) u 3NF, te ako nije, napravite dekompoziciju pomocu algoritma 3NF sinteze.
Rjesenje Prvo trazimo kljuc. Prema kljucnom triku AF mora biti komponenta svakog kljuca. Provjeravamo je li AF kljuc:
(AF )+
F = AFDECB
Zakljucujemo da je K = AF jedini kljuc. Stoga su kljucni atributi AF , a nekljucni BCDE . Pokusavamo
konstruirati tranzitivni dijagram:

Dijagram vrijedi jer:


AF
C
C

C
D
AF

(AF )+
= AFDECB C
F
D
CF+ = CBD
CF+ = CDB
AF

I zato jer je C D netrivijalna funkcijska zavisnost. Zakljucujemo da (R, F ) nije u 3NF jer postoji
tranzitivna zavisnost nekljucnog atributa od kljuca.
Primjenjujemo algoritam 3NF sinteze. Prvo racunamo kanonski pokrivac kp(F ). Prvi korak je desno
razbijanje:
F = draz(F ) : AE
A
A
C
C
AC
AC
54

C
D
E
B
D
B
E

Sljedeci korak je lijeva redukcija. Provjeravamo one zavisnosti koje s lijeve strane imaju vise od
jednog skupa atributa.
Provjeravamo AE C :
A C
E C

A+
= ADECB C
F
+
EF = E
C

Zavisnost A C vrijedi, tj. mozemo izbaciti komponentu E odnosno reducirati zavisnost AE C


u A C.
Provjeravamo AC B:
A C
C C

A+
= ADECB B
F
CF+ = CBD
B

Obje zavisnosti vrijede, tj. mozemo izbaciti proizvoljnu komponentu. Ovdje cemo se odluciti za
A B (moguce je uzeti i drugu zavisnost).
Provjeravamo AC E :
A C
C C

A+
= ADECB E
F
+
CF = CBD
E

Zavisnost A E vrijedi, tj. mozemo izbaciti komponentu C odnosno reducirati zavisnost AC E


u A E . Obzirom da je ta zavisnost vec u F mozemo ju izbaciti.
Stoga je lijeva redukcija:
F = lred(F ) : A
A
A
C
C
A

C
D
E
B
D
B

Slijedi treci korak, a to je izbacivanje redundantnih zavisnosti. Za svaku zavisnost iz F provjeravamo


je li proizlazi iz preostalih zavisnosti.
Provjeravamo A C :
A+
F ost = ADEB

Zavisnost ne mozemo izbaciti.


Provjeravamo A D:
A+
F ost = ACEBD D
Zavisnost izbacujemo.
Provjeravamo A E :
A+
F ost = ACB

CF+ost = CD

Zavisnost ne mozemo izbaciti.


Provjeravamo C B:

Zavisnost ne mozemo izbaciti.


Provjeravamo C D:
55

CF+ost = CB

Zavisnost ne mozemo izbaciti.


Provjeravamo A B:
A+
F ost = ACEB B
Zavisnost izbacujemo.
Iz navedenog proizlazi da je kanonski pokrivac:
kp(F ) : A
A
C
C

C
E
B
D

Sljedeci korak 3NF sinteze je sinteza komponenti. Nju dobivamo tako da od svake zavisnosti spajamo
lijevu i desnu stranu, tj.:
d(R) : AC , AE , CB, CD
Sljedeci korak je dodavanje globalnog kljuca, ako on nije sadrzan u niti jednoj od komponenti.
Obzirom da je to ovdje slucaj, dodajemo komponentu AF , tj.
d(R) : AC , AE , CB, CD, AF
Sljedeci korak je smanjivanje broja komponenti dekompozicije iz kanonskog pokrivaca uz eliminaciju
podskupova, tj.:
d(R) : ACE , CBD, AF
U ovom slucaj nismo imali podskupova. Konacno, 3NF dekompozicija dobivena 3NF sintezom je
d(R): ACE, CBD, AF sto je i rjesenje zadatka. Kljucevi u komponentama su podvuceni, a proizlaze
iz kp(F ) i globalnog kljuca.
Zadatak 4.6 Zadana je relacijska shema (R, F ), R = ABCDE i
F :

B
A
C
AB

C
D
BD
E

Provjerite je li (R, F ) u 3NF, te ako nije, napravite dekompoziciju pomocu algoritma 3NF sinteze.
Rjesenje Trazimo kljuc. Prema kljucnom triku:
A+
F = AD
Stoga A nije kljuc, pa ga je potrebno prosirivati dok ne dobijemo kljuc.
(AB)+
= ABCDE
F
(AC )+
= ACDBE
F
(AD)+
= AD
F
(AE )+
= AED
F

56

Stoga su kljucevi K1 = AB i K2 = AC . Kljucni su atributi A, B i C , a nekljucni D i E . Provjeravamo


je li postoji tranzitivna zavisnost nekljucnog atributa od kljuca i nalazimo sljedeci tranzitivno dijagram:

Dijagram vrijedi jer:


AB C
(AB)+
= ABCDE
F
C D
CF+ = CBD
C
AB
CF+ = CDB

C
D
AB

Primjenjujemo algoritam 3NF sinteze. Racunamo kp(F ) tj. prvi korak desno razbijanje:
draz(F ) :

B
A
C
C
AB

C
D
B
D
E

Sljedeci korak je lijeva redukcija. Pokusati lijevo reducirati mozemo samo zavisnost AB E :
A E
B E

A+
= AD
F
BF+ = BCD

E
E

Stoga nije moguce lijevo reducirati ovu zavisnost. Prelazimo na korak izbacivanja redundantnih
zavisnosti.
Provjeravamo B C :
BF+ost = B

A+
F ost = A

CF+ost = C

CF+ost = C

Zavisnost ne mozemo izbaciti.


Provjeravamo A D:

Zavisnost ne mozemo izbaciti.


Provjeravamo C B:

Zavisnost ne mozemo izbaciti.


Provjeravamo C D:

Zavisnost ne mozemo izbaciti.


Provjeravamo AB E :
(AB)+
F ost = ABCD

Zavisnost ne mozemo izbaciti.


Iz toga slijedi, da ne mozemo izbaciti niti jednu od zavisnosti, sto znaci da je kanonski pokrivac:
57

kp(F ) :

B
A
C
C
AB

C
D
B
D
E

Prelazimo na sintezu komponenti:


d(R) : AD, CB, CD, ABE
Smanjujemo broj komponenti (nema podskupova):
d(R) : AD, CBD, ABE
U ovom slucaju nije potrebno dodavati globalni kljuc, obzirom da je jedan ok kljuceva sadrzan u
komponenti ABE . Stoga je konacno rjesenje d(R): AD, CBD, ABE.
Zadatak 4.7 Zadani su R = ABCD i F F (R):
F :

AC
A BD

Provjerite je li (R, F ) u 3NF , te ukoliko nije napravite dekompoziciju koja cuva informaciju i zavisnosti
koristeci algoritam 3NF sinteze.
Rjesenje Trazimo kljuc. Primjernom kljucnog trika A je dio svakog kljuca.
A+
F = ACBD R

Cime
zakljucujemo da je A jedini kljuc. Stoga je kljucni atribut A, a nekljucni BCD. Obzirom da
ne postoji niti jedna funkcijska zavisnost u F koja s lijeve strane ne sadrzi kljuc (sto je budi receno
ujedno i uvjet za BCNF ), nije moguce konstruirati tranzitivni dijagram. Samim time jasno je da je
(R, F ) u 3NF i nije potrebna daljnja normalizacija.
Zadatak 4.8 Zadani su R = ABCDE i F F (R):
F :

AB
CD B
C AD
BD

Provjerite je li (R, F ) u 3NF , te ukoliko nije napravite dekompoziciju koja cuva informaciju i zavisnosti
koristeci algoritam 3NF sinteze.
Rjesenje
Zadatak 4.9 Zadani su R = ABCDE i F F (R):
F :

AB
CE B
C AD
BD

Provjerite je li (R, F ) u 3NF , te ukoliko nije napravite dekompoziciju koja cuva informaciju i zavisnosti
pomocu algoritma 3NF sinteze.
Rjesenje
58

4.4

BCNF

Zadatak 4.10 Zadana je relacijska shema (R, F ), R = ABCDE i


F :

C
D
BE
E

AB
A
C
B

Provjerite je li (R, F ) u BCNF, te ako nije napravite BCNF dekompoziciju.


Rjesenje Prvo trazimo kljuc. Prema kljucnom triku DE je dio svakog kljuca. Provjeravamo je li DE
kljuc:
(DE )+
F = DEABC
Zakljucujemo da je DE jedini kljuc. Obzirom da postoji netrivijalna funkcijska zavisnost koja s lijeve
strane ne sadrzi kljuc u F + (u ovom slucaju sve zavisnosti iz F imaju to svojstvo), zakljucujemo da
(R, F ) nije u BCNF. Odabiremo zavisnot C AB za dekompoziciju (ovjde je bilo moguce odabrati
bilo koju drugu zavisnost iz F , pa su stoga moguca i druga rjesenja).
Obavljamo dekompoziciju:
ABCDE

C AB
CAB

CDE

Dobivamo dekompoziciju d(R): CAB, CDE.


Provjeravamo za svaku od komponenti je li u BCNF.
Racunamo projekciju skupa zavisnosti na CAB:
A
A
B
B
C
C
AB
AC
BC

B
C
A
C
A
B
C
B
A

A+
= A
F
BF+
CF+
(AB)+
F
(AC )+
F
(BC )+
F

B
C
= B
A
C
= CAB A
B
= AB
C
= ACB B
= BCA A

A
A
B
B
ABC
ABC
AB
ABC
ABC

Vidimo da svaka od zavisnosti C A, C B, AC B i BC A koje vrijede u CAB sadrze kljuc


C sa svoje lijeve strane. Stoga zakljucujemo da je komponenta CAB u BCNF.
Racunamo projekciju skupa zavisnosti na CDE :
C
C
D
D
E
E
CD
CE
DE

D
CF+
E
C
DF+
E
C
EF+
D
E (CD)+
F
D (CE )+
F
C (DE )+
F

= CAB
= DA
= EBCA
= CDAB
= CEAB
= DEABC
59

D
ABC
E
ABC
C
AD
E
AD
C ABCE
D
ABCE
E
ABCD
D
ABC
C ABCDE

Vidimo da zavisnost E C s lijeve strane ne sadrzi kljuc DE , sto znaci da komponenta CDE nije
u BCNF. Stoga obavljamo dekompoziciju po zavisnosti koja narusava BCNF.
CDE

E C
EC

ED

Obzirom da smo dobili samo dvokomponentne sheme, zakljucujemo da su obje u BCNF i da nije
potrebna daljnja provjera. Stoga je konacna BCNF dekompozicija d(R): CAB, CE, DE .

4.5

4NF

Zadatak 4.11 Zadani su R = ABCDE i F FVS(R):


F : AC DE
AB C
Provjerite je li (R, F ) u 4NF , te ukoliko nije napravite dekompoziciju koja cuva informaciju.
Rjesenje

4.6

5NF

Zadatak 4.12 Zadani su R = ABCD i F FVS(R):


F :

A CD
B A
oo(AB, CD)

Provjerite je li (R, F ) u 5NF , te ukoliko nije napravite dekompoziciju koja cuva informaciju.
Rjesenje
Zadatak 4.13 Zadani su R = ABCD i F FVS(R):
F :

A BD
BD
B AC
AC
B A
oo(AB, ACD)

Provjerite je li (R, F ) u 5NF , te ukoliko nije napravite dekompoziciju koja cuva informaciju.
Rjesenje
60

4.7

6NF

Zadatak 4.14 Zadani su R = ABCD i F FVS(R):


F :

AB
AD B
oo(A, B)

Provjerite je li (R, F ) u 6NF , te ukoliko nije napravite dekompoziciju koja cuva informaciju.
Rjesenje

4.8

Implikacijski problemi

Zadatak 4.15 Zadani su R = ABCD i F FVSZ (R):


F :

A BC
C D
C A

Rjesite implikacijski problem:


F |= oo (AD, ABC )
Rjesenje Obzirom da se zavisnost spoja oo (AD, ABC ) prema pravilu pretvaranja funkcijskih i
viseznacnih zavisnosti u zavisnosti spoja, moze zapisati i kao A D dovoljno je primjeniti zatvarac:
A+
F : ABCD D
iz cega slijedi da je F |= oo (AD, ABC ).
Rjesenje chase postupkom takoder je valjano: konstruiramo tablicu T0 i redom primjenjujemo transformacije preko zavisnosti u F u potrazi za ciljnim retkom:
T0
AD
ABC

A B
C
D
a1 b12 b13 a4
a1 a2 a3 b24

ABC

T1

A B C D
a1 a2 a3 a4
a1 a2 a3 b24

Vidimo da vec u prvoj iteraciji dobivamo ciljni redak cime smo dokazali da F |= oo (AD, ABC ).
Zadatak 4.16 Zadani su R = ABCD i F FVSZ (R):
F :

B BC
BC D
oo (AD, ABC )

Rjesite implikacijski problem:


F |= A D
Rjesenje Obzirom da zelimo dokazati viseznacnu zavisnost, moramo ju prvo pretvoriti u zavisnost
spoja kako bi (eventualno) primjenili chase postupak.
A D = oo (AD, ABC )
Pretvorbom vidimo da smo dobili zavisnost spoja koja se nalazi u F zbog cega zakljucujemo da vrijedi
F |= A D.
61

Zadatak 4.17 Zadani su R = ABCD i F FVSZ (R):


F :

A BC
C D
C A

Rjesite implikacijski problem:


F |= oo (AD, ABC )
Rjesenje Problem mozemo rjesiti na vise nacina. Ovdje cemo se posluziti saznanjem, da vrijedi A
D |= oo (AD, ABC ), uz napomenu da obrat ne vrijedi. Stoga mozemo rjesiti (strozi) implikacijski
problem:
F |= A D
Iz zavisnosti A BC proizlazi da vrijede zavisnosti A B i A C , prema pravilu desnog razbijanja.
Stoga, obzirom na pravilo tranzitivnosti (A C i C D) vrijedi A D, sto smo htjeli i dokazati.
Prema tome, vrijedi i:
F |= oo (AD, ABC )
Zadatak 4.18 Zadani su R = ABCD i F FVSZ (R):
F :

B AC
C D
C A

Rjesite implikacijski problem:


F |= oo (BD, ABC )
Rjesenje

62

5 Napredne baze podataka

5.1

Deduktivne baze podataka

Zadatak 5.1 Neka je zadana deduktivna baza podataka DBP = (EBP, IBP, ):
r
EBP :

IBP :

A B
a b
b c
c a

s B C
b a
c b
b b

p1 : p(x, y ) r (x, y )
p2 : p(x, y ) s(x, y ), r (y , x)

(a) Pod pretpostavkom da je domena D = {a, b, c} izracunajte model za DBP pomocu relacijskih
operatora.
(b) Izracunajte upit U : AB (A=a (r oo s)) p (pod pretpostavkom da su relacijske sheme od r i
p ekvivalentne).
Rjesenje
Zadatak 5.2 Neka je zadana deduktivna baza podataka DBP = (EBP, IBP, ):
r
EBP :

IBP :

A B
a b
c c
a a

s B C
b a
c b
c b

p1 : p(x, y ) r (a, y ), s(c, x)


p2 : p(x, y ) s(x, y ), r (y , x)

(a) Pod pretpostavkom da je domena svih atributa D = {a, b, c} izracunajte model za DBP pomocu
relacijskih operatora.
63

(b) Izracunajte upit U : AB (A=a (r oo s)) p (pod pretpostavkom da su relacijske sheme od r i


p ekvivalentne).

Rjesenje

Zadatak 5.3 Zadana je DBP


r
EBP :

IBP :

A B
1 2
2 3
2 4
3 5

p1 : p(x, y ) r (x, y )
p2 : p(x, y ) r (x, z), p(z, y )
p3 : p(x, y ) p(y , x)

Napisati model za DBP racunajuci pravila pomocu relacijske algebre.

Rjesenje

Zadatak 5.4 Neka je zadana deduktivna baza podataka DBP = (EBP, IBP, ):
r
EBP :

IBP :

A B
a b
b c
c a

s B C
b a
c b
b b

p1 : p(x, y ) r (x, z), r (z, y )


p2 : p(x, y ) s(x, y ), r (y , x)

(a) Pod pretpostavkom da je domena D = {a, b, c} izracunajte model za DBP pomocu relacijskih
operatora.
(b) Izracunajte upit U : AC (r oo s) p (pod pretpostavkom da su relacijske sheme od r i p
ekvivalentne).

Rjesenje

5.2

Poop
cene baze podataka

Zadatak 5.5 Neka je zadana relacija


64

Izracunajte GrH(A

A B C (D E (F G )))

2 2
1 0

2 2
1 1
0 1

B) (ABFG (RaC (D F G ) (RaE (F G ) (r ))))

Rjesenje
Zadatak 5.6 Neka je zadana relacija
r

Izracunajte GrH(A

A B C (D E (F G )))

2 2
1 0

2 2
1 1
0 1

B) (ABFG (F =2 (RaC (D F G ) (RaE (F G ) (r ))))

Rjesenje
Zadatak 5.7 Neka je zadana relacija
r

A B C (D E (F G )))

2 2
1 0

2 2
3 1
0 1

65

Izracunajte GrH(A

B) (ABF (RaC (D F G ) (RaE (F G ) (r ))))

Rjesenje
Zadatak 5.8 Neka su zadane relacije r1 (R1 ), r2 (R2 )
r1 A B(C D)
r2 D E

B(C D)

1 0
1 1

2 1

2 1
1 0

2 2
1 1
1 0

Izracunajte pr2 .B (Fp (r1 r2 )), gdje je F : (r2 .B r1 .B) (A > 1)


Rjesenje
Zadatak 5.9 Neka je zadana relacija
r

Izracunajte GrH(B

A B C (D E (F G )))

2 2
1 0

2 2
3 1
1 0

F ) (ABF (RaC (D F G ) (RaE (F G ) (r )))

Rjesenje
Zadatak 5.10 Neka je zadana poopcena relacija r .
r

A B C (D E (F G )))

2 2
1 0

2 2
1 1
0 1

66

Izracunajte GrH(B

F G ) (ABFG (RaC (D F G ) (RaE (F G ) (r ))))

Rjesenje

5.3

Parcijalne baze podataka

Zadatak 5.11 Neka je zadana parcijalna relacija r :


r

A B C
a b ?
b ? c

Ispitajte je li:
a) A B strogo vrijedi u r
b) A B slabo vrijedi u r
c) A B strogo ne vrijedi u r
Rjesenje
Zadatak 5.12 Neka su zadane parcijalne relacije r i s:
r

s B D E
? 1 2
3 2 ?
? 4 ?

A B C
1 ? 2
1 3 ?

Temeljem simbolicke jednakosti (J2 ) izracunajte:


(a) ADE (r oo s)
N
(AC oo B (s))
(b) B>C

Rjesenje
Zadatak 5.13 Zadane su relacije r i s te formula F :
r

s B C
2 ?
2 1
2 1

A B C
1 2 1
2 2 ?
F : (A

D
2
3
?

D) (D =?)

Izracunajte temeljem apsolutne jednakosti (J1 ), sljedeci relacijski izraz:


r1 = F (ABD (AC (r ) oo s)
Rjesenje
67

Zadatak 5.14 Zadane su relacije:


r

i formula F : (A

s B C
2 ?
2 1
2 1

A B C
1 2 1
2 2 ?

D
2
3
?

D) (D =?).

(a) izracunajte temeljem J1, sljedeci relacijski izraz:


r1 = F (ABD (r oo s)
(b) ispitajte u relaciji r je li A C slabo vrijedi
(c) ispitajte u relaciji s jea li C BD strogo ne vrijedi (strogo ne vrijedi i ne vrijedi strogo ne
znaci isto!)
Rjesenje

5.4

Temporalne baze podataka

Zadatak 5.15 Neka je zadana temporalna relacija r i formula F :


r

A B
C
1 2 [1, 3
1 2 [3, 5
2 3 [1, 3
1 3 [2, 4

F : [(A < 2) (B > 2)] (C prije [4, 5 )


i

Izracunajte ZC (F (r ))
Rjesenje
Zadatak 5.16 Neka je zadana temporalna relacija r i formula F :
r

A B
C
1 2 [1, 3
1 2 [3, 5
2 3 [1, 3
1 3 [2, 4

F : [(A < 2) (B > 2)] (C prije [4, 5 )


Izracunajte:
i

(a) OC (BC (r ))
i

(b) ZC (F (r ))
Rjesenje

68

You might also like