Professional Documents
Culture Documents
Markus Schatten
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
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
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
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
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.B s.C
1
1
3
2
1
1
3
2
D
2
3
2
3
t1 : [(1
t2 : [(1
t3 : [(2
t4 : [(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
AC (r3 ) r .C
1
2
s.B
3
1 r3
3
1
s.B
1
3
r1 A B C
2 2 1
1 1 0
3 1 1
D
0
2
2
D
0
2
2
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
r2 A B C
1 1 2
2 0 2
3 2 3
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
D
3
2
2
r2 A B D
1 1 2
2 2 3
3 2 3
B) (D = 2)
= (A
= (C = a)
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
AC (s4 ) A B D
2 2 2
2 4 3
2 4 2
1 2 3
1 2 2
1 4 3
r2 A B C
f 1 f
g 5 f
f 3 f
(A = C ) (B > 2)
(C = f )
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
AC (s4 ) A B C
f 5 f
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
r2 A B C
b a 3
b c 2
b b 1
(D = a) (C
D
b
b
a
2)
s1
A (r1 ) A
B (r1 ) B
C (r1 ) C
a
r1
= AC (r1 ) =
oo
b oo
b
1
a
c
AC (r1 ) A B C
a a 1
b a 1
c b 1
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
A B C
a b d
a c d
b c e
A (A (r ))
B (B (r ))
C (C (r )).
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 =
r2 A B C
2 1 0
3 1 1
1 0 2
9
C (C (r ))
D
a
b
c
d
e
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
r2 A B D
b a b
b c b
b b a
(A = B) (C
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
A B C
1 3 1
2 0 2
s B C
1 1
3 2
D
2
3
r .B D (r1 )
r2 = r s
Konacno rjesenje je stoga:
A
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
s.B s.C
3
2
s)) A r .B D
2 0
3
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
r2 .E (s1 )
r2 ))
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
r2 .A r2 .B E
1
2
2
2
2
2
1
2
2
2
2
2
r1 .A
s3 = r1 .A
r2 .E (s2 )
r2 )) =
r2 A B C
f 5 f
g 5 d
f 3 f
(A = C ) (B > 2)
(D = a)
D
b
b
a
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
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
s1 =
B=b (r ) A B C
a b 5
c b 2
s2 = A (B=b (r )) =
A (r ) A
a
c
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
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
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
Sifra
1
2
3
Zadana su ogranicenja:
Sifra
je primarni kljuc relacije
Svaki artikl mora imati jedinstven naziv
Jedinicna cijena ne smije biti negativna
N
n1
n1
n2
n3
n3
n3
P
bp
uz
bp
bp
uz
fm
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
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
r1 =
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
vrijeme
emisija
26.06.2011. 10:00
1
26.06.2011. 10:30
2
26.06.2011. 11:45
2
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
30
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
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,
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
t1 : (n1 = n1 ) (n1 = n2 )
r12
t2 : (n2 = n1 ) (n2 = n2 )
t3 : (n2 = n1 ) (n2 = n2 )
p# sem-pred
uz
4
bp2
5
mpp
6
Stoga je i r22 = (n#{n1 ,n2 }) (r21 ) = r12 . Iz toga slijedi da je r23 = o(RA2 (U))) = o(RA1 (U))).
r32 =
r33 =
t1 : n1 = n2
t2 : n2 = n2
t3 : n2 = n2
r35 =
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
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 =
35
VZ-743-CV Fiat
32198
RI-144-HT Skoda
32123
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
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 =
(VZ-743-CV
= SI-245-AS) (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 Skoda
32123
2 Presvetli
2
RI-144-HT
prezime marka
Presvetli Skoda
VZ-743-CV
32198
RI-144-HT
32123
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
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
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
ime
Ivek
Joza
Barica
prezime
Presvetli
Prekratki
Prekratki
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
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
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
ime
Barica
Barica
Barica
prezime
Ivanovic
Marjanovic
Stojanovic
ime
Barica
Barica
Barica
Barica
prezime
Ivanovic
Marjanovic
Stojanovic
Prikratki
ime
Stefica
Ivek
Joza
prezime
Ivanovic
Marjanovic
Stojanovic
ime
Slavek
Joza
Barica
prezime
Presvetli
Jambrek
Presvetli
status
null
upisan
null
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
41
42
3.1
SBVR
3.2
UML
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
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
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
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
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
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
50
4.1
1NF
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
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
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
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
4.3
3NF
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:
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
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
C
D
E
B
D
B
CF+ost = CD
CF+ost = CB
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
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
kp(F ) :
B
A
C
C
AB
C
D
B
D
E
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
C
D
BE
E
AB
A
C
B
C AB
CAB
CDE
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
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
4.6
5NF
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
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
A BC
C D
C A
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 )
A BC
C D
C A
B AC
C D
C A
62
5.1
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
(a) Pod pretpostavkom da je domena svih atributa D = {a, b, c} izracunajte model za DBP pomocu
relacijskih operatora.
63
Rjesenje
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)
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
(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
Izracunajte GrH(A
A B C (D E (F G )))
2 2
1 0
2 2
1 1
0 1
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
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
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 GrH(B
A B C (D E (F G )))
2 2
1 0
2 2
3 1
1 0
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
Rjesenje
5.3
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 ?
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 =?)
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 =?).
5.4
A B
C
1 2 [1, 3
1 2 [3, 5
2 3 [1, 3
1 3 [2, 4
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
(a) OC (BC (r ))
i
(b) ZC (F (r ))
Rjesenje
68