Zbirka rješenih zadataka iz baza podataka

Doc. dr. sc. Markus Schatten
Zbirka rjeˇsenih zadataka iz baza podataka
Sadrˇzaj
1 Relacijska algebra
1.1 Izraˇcun upita . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2 Relacijska algebra i SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1
1
6
2 SQL
9
i
ii
Predgovor
iii
iv
1 Relacijska algebra
1.1
Izraˇ
cun upita
Zadatak 1.1 Zadane su relacije i ograniˇcenje:
r2 B C
1 1
0 2
0 2
r1 A B C
1 0 2
2 0 2
2 1 3
F = (A = D)
Neka je zadan upit RA(U):
σF (ΠAD (r1 oo r2 ))
Izraˇcunajte odgovor na upit koriste´ci relacijsku algebru.
Rjeˇsenje Sa si oznaˇcavat ´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) ≡ ⊥
t3 : (2 = 2) ≡ >
1
D
2
3
2
3
D
2
2
3
t4 : (2 = 3) ≡ ⊥
σF (s2 ) A D
2 2
Zadatak 1.2 Zadane su relacije i ograniˇcenje:
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 6= 2)
Neka je zadan upit RA(U):
ΠAB (σF (r1 ∪ r2 ))
Izraˇcunajte odgovor na upit koriste´ci relacijsku algebru.
Rjeˇsenje Sa si oznaˇcavat ´cemo medurezultate.
r1 ∪ r2 A B C
1 3 1
s1 =
2 0 2
1 1 2
3 2 3
t1 : (1 > 3) ∨ (1 6= 2) ≡ ⊥ ∨ > ≡ >
t2 : (2 > 0) ∨ (2 6= 2) ≡ > ∨ ⊥ ≡ >
t3 : (1 > 1) ∨ (2 6= 2) ≡ ⊥ ∨ ⊥ ≡ ⊥
t4 : (3 > 2) ∨ (3 6= 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 ograniˇcenje
r
A B C
1 3 1
2 0 2
s B C
1 1
3 2
D
2
3
H = [(A 6 s.C ) ∨ (r .B > s.B)] ⇒ (A < s.C )
Izraˇcunajte AC (Πr .C ,s.B (σH (r ⊗ s))).
2
Rjeˇsenje Sa ri oznaˇcavat ´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 6 1) ∨ (3 > 1)] ⇒ (1 < 1) ≡ [> ∨ >] ⇒ ⊥ ≡ > ⇒ ⊥ ≡ ⊥
t2 : [(1 6 2) ∨ (3 > 3)] ⇒ (1 < 2) ≡ [> ∨ ⊥] ⇒ > ≡ > ⇒ > ≡ >
t3 : [(2 6 1) ∨ (0 > 1)] ⇒ (2 < 1) ≡ [⊥ ∨ ⊥] ⇒ ⊥ ≡ ⊥ ⇒ ⊥ ≡ >
t4 : [(2 6 2) ∨ (0 > 3)] ⇒ (2 < 2) ≡ [> ∨ ⊥] ⇒ ⊥ ≡ > ⇒ ⊥ ≡ ⊥
σH (r1 ) A r .B r .C
r2 =
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 ograniˇcenje
r1 A B C
2 2 1
1 1 0
3 1 1
r2 B C
2 1
1 1
1 0
D
0
2
2
F = [(A < B)(B 6= 2)] ⇒ (B 6= C )
Potrebno je izraˇcunati upit RA(U) : AC (ΠAD (σF (r1 oo r2 )))
Rjeˇsenje Sa si ´cemo oznaˇcavati medurezultate.
r1 oo r2 A B C
2 2 1
s1 =
1 1 0
3 1 1
D
0
2
2
t1 : [(2 < 2) ∨ (2 6= 2)] ⇒ (2 6= 1) ≡ [⊥ ∨ ⊥] ⇒ > ≡ ⊥ ⇒ > ≡ >
3
t1 : [(1 < 1) ∨ (1 6= 2)] ⇒ (1 6= 0) ≡ [⊥ ∨ >] ⇒ > ≡ > ⇒ > ≡ >
t1 : [(3 < 1) ∨ (1 6= 2)] ⇒ (1 6= 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 ograniˇcenje:
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 6= 2)] ⇒ (A > 2)
Neka je zadan upit RA(U):
AC (ΠAB (σF (r1 ∩ r2 )))
Izraˇcunajte odgovor na upit koriste´ci relacijsku algebru.
Rjeˇsenje Sa si oznaˇcavat ´cemo medurezultate.
r1 ∩ r2 A B C
s1 =
1 1 2
2 0 2
[(1 > 1) ∨ (2 6= 2)] ⇒ (1 > 2) ≡ [⊥ ∨ ⊥] ⇒ ⊥ ≡ ⊥ ⇒ ⊥ ≡ >
[(2 > 0) ∨ (2 6= 2)] ⇒ (2 > 2) ≡ [> ∨ ⊥] ⇒ ⊥ ≡ > ⇒ ⊥ ≡ ⊥
s2 =
s3 =
σF (s1 ) A B C
1 1 2
ΠAB (s2 ) A B
1 1
4
Π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 ograniˇcenja:
r1 A B C
2 2 b
1 4 b
5 1 a
r2 A B D
1 1 2
2 2 3
3 2 3
D
3
2
2
F
= (A 6 B) ⇔ (D 6= 2)
G
= (C 6= a)
Neka je zadan upit RA(U):
AC (ΠABD (σG (r1 )) ∪ σF (r2 ))
Izraˇcunajte odgovor na upit koriste´ci relacijsku algebru.
Rjeˇsenje Sa si oznaˇcavat ´cemo medurezultate.
s1 =
σG (r1 ) A B C
2 2 b
1 4 b
D
3
2
(b 6= a) ≡ >
(b 6= a) ≡ >
(a 6= a) ≡ ⊥
s2 =
s3 =
ΠABD (s1 ) A B D
2 2 3
1 4 2
σF (r2 ) A B D
2 2 3
(1 6 1) ⇔ (2 6= 2) ≡ > ⇔ ⊥ ≡ ⊥
(2 6 2) ⇔ (3 6= 2) ≡ > ⇔ > ≡ >
(3 6 2) ⇔ (4 6= 2) ≡ ⊥ ⇔ > ≡ ⊥
s2 ∪ s3 A B D
s4 =
2 2 3
1 4 2
5
− s3


ΠA (s4 ) A
ΠB (s4 ) B
ΠD (s4 ) D
AC (s4 ) = 
2 oo
2 oo
3  − s4
1
4
2
1.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
Relacijska algebra i SQL
Zadatak 1.7 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) Iskaˇzite upit u relacijskoj algebri (RA(U))
(b) Izraˇcunajte odgovor na upit koriste´ci relacijsku algebru.
Rjeˇsenje Rjeˇsavamo (a). Iz SELECT klauzule isˇcitavamo elemente u konaˇcnoj projekciji. Sa ri
oznaˇcavat ´cemo relacije koje joˇs valja izraˇcunati:
ΠA
r .B D (r1 )
Iz WHERE klauzule isˇcitavamo formulu za selekciju:
F = (r .C = s.C ) ∧ (A > 1)
Sada imamo
r1 = σF (r2 )
odnosno:
6
r1 = σ(r .C =s.C )∧(A>1) (r2 )
Iz FROM klauzule isˇcitavamo relacije koje valja staviti u produkt. Stoga imamo:
r2 = r ⊗ s
Konaˇcno rjeˇsenje je stoga:
ΠA
r .B D (σ(r .C =s.C )∧(A>1) (r
⊗ s))
Rjeˇsavamo (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
D
2
3
2
3
t1 : (1 = 1) ∧ (1 > 1) ≡ > ∧ ⊥ ≡ ⊥
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.8 Zadane su relacije i ograniˇcenje:
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
D
α
β
α
F = (A > C ) ∧ (D 6= β)
Neka je zadan upit RA(U):
ΠAC (σF (r1 oo r2 ))
(a) Izraˇcunajte odgovor na upit koriste´ci relacijsku algebru.
(b) Pretvorite RA(U) u SQL(U)
Rjeˇsenje Rjeˇsavamo (a):
S si oznaˇcavat ´cemo medurezultate.
r1 oo r2 A B C
s1 =
1 a 1
2 c 2
7
D E
α 2
α 2
D
3
t1 : (1 > 1) ∧ (α 6= β) ≡ ⊥ ∧ > ≡ ⊥
t2 : (2 > 2) ∧ (α 6= β) ≡ ⊥ ∧ > ≡ ⊥
s2 =
σF (s1 ) A B
s3 = ΠAC (σF (r1 oo r2 )) =
C D E
∅
ΠAC (s2 ) A
C
∅
Rjeˇsavamo (b):
Poˇcinjemo sa SELECT klauzulom koja je ekvivalentna konaˇcnoj projekciji:
SELECT A , C
U FROM klauzuli moraju se pojaviti sve relacije iz RA(U):
FROM r1 , r2
U WHERE klauzuli moramo uvrstiti ograniˇcenje F :
WHERE A > C AND D <> β
Prirodni spoj je samo dodatno ograniˇcenje 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 toˇcan, 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 zakljuˇcuje o jednakosti atributa temeljem
imena, ve´c 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
izjednaˇcava atributom u drugoj relaciji (uvjet prirodnog spoja), u naˇsem sluˇcaju moˇzemo 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
8
2 SQL
Zadatak 2.1 Zadana je relacija
artikl
ˇ
Sifra
1
2
3
Naziv Jediniˇcna cijena
Kava
8
Rakija
4
Klipi´c
2
Zadana su ograniˇcenja:
ˇ
ˆ Sifra
je primarni kljuˇc relacije
ˆ Svaki artikl mora imati jedinstven naziv
ˆ Jediniˇcna cijena ne smije biti negativna
(a) Kreirajte u SQL-u strukturu tablice artikl s odgovaraju´cim ograniˇcenjima.
(b) Neka je zadan upit U : odrediti sve one ˇsifre i nazive artikala ˇcija je cijena ve´ca od 3. Napiˇsite
SQL(U) i RA(U). Zatim izraˇcunajte relaciju o(RA(U)) koja je odgovor na upit U.
Rjeˇsenje Rjeˇsavamo (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 )
)
Rjeˇsavamo (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
9
RA(U) : Πsifra, cijena (σjedinicna cijena>3 (artikl))
Sa ri oznaˇcavat ´cemo medurezultate:
t1 : (8 > 3) ≡ >
t2 : (4 > 3) ≡ >
t3 : (2 > 3) ≡ ⊥
σjedinicna cijena>3 (artikl) sifra naziv jediniˇcna cijena
r1 =
1
Kava
8
2
Rakija
4
Πsifra, cijena (r1 ) sifra jediniˇcna 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) znaˇci da nastavnik n predaje predmet p.
(a) Kreirajte u SQL-u strukturu tablice pr
(b) Iskaˇzite rijeˇcima entitetski integritet za tablicu pr
(c) Neka je zadan upit U : odrediti sve one nastavnike koji predaju predmet uz i ne predaju predmet
fm. Napiˇsite SQL(U) i tablicu o(SQL(U)) koja je odgovor na upit SQL(U).
Rjeˇsenje Rjeˇsavamo (a):
CREATE TABLE p r
(
N VARCHAR( 2 ) ,
P VARCHAR( 2 ) ,
PRIMARY KEY( N, P )
)
Rjeˇsavamo (b). U relaciji (tablici) pr vrijednosti atributa N i P ne smiju poprimiti vrijednost null
jer su dio primarnog kljuˇca.
Rjeˇsavamo (c).
SELECT N
FROM p r
WHERE P = ’ uz ’
AND N NOT IN
(
10
SELECT N
FROM p r
WHERE P = ’ fm ’
)
o(SQL(U)) N
n1
Zadatak 2.3 Zadana je relacija i ograniˇcenja
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 ve´ca od 1900
(a) Kreirajte u SQL-u strukturu tablice knjiga s odgovaraju´cim ograniˇcenjima.
(b) Neka je zadan upit U : odrediti sve one naslove knjiga koje su izdane nakon 2000 godine.
Napiˇsite SQL(U) i RA(U). Zatim izraˇcunajte relaciju o(RA(U)) koja je odgovor na upit U.
Rjeˇsenje Rjeˇsavamo (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 )
)
Rjeˇsavamo (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
ΠNaslov (r1 ) Naslov
Arhitektura suvremenih organizacija
Teorija baza podataka
11
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 ograniˇcenja:
ˆ Svaka knjiga mora imati naslov
ˆ Ako se ne specificira godina izdanja upisuje se 2011
(a) Kreirajte u SQL-u strukturu tablice knjiga s odgovaraju´cim ograniˇcenjima.
(b) Neka je zadan upit U : odrediti sve one naslove knjiga koje su izdane prije 2008 godine. Napiˇsite
SQL(U) i RA(U). Zatim izraˇcunajte relaciju o(RA(U)) koja je odgovor na upit U.
Rjeˇsenje Rjeˇsavamo (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
)
Rjeˇsavamo (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 ≡ ⊥
σGodina>2000 (knjiga) ISBN Naslov
Godina
r1 =
1
Programiranje u Prologu
1992
2
Arhitektura suvremenih organizacija 2005
ΠNaslov (r1 ) Naslov
Programiranje u Prologu
Arhitektura suvremenih organizacija
Zadatak 2.5 Zadana je relacija
raˇcun broj raˇcuna klijent
saldo
1
k1
2134, 56
2
k2
444, 09
3
k3
−234, 43
4
k1
−342.51
Zadana su ograniˇcenja (poslovna pravila):
12
ˆ Svaki baknovni raˇcun mora imati broj raˇcuna, klijenta i saldo
ˆ Dopuˇsten negativni saldo moˇze biti −2000
(a) Kreirajte u SQL-u strukturu tablice raˇcun s odgovaraju´cim ograniˇcenjima.
(b) Neka je zadan upit U : odrediti sve one klijente koji imaju barem jedan raˇcun s negativnim
saldom. Napiˇsite SQL(U) i RA(U). Zatim izraˇcunajte relaciju o(RA(U)) koja je odgovor na
upit U.
Rjeˇsenje Rjeˇsavamo (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
)
)
Rjeˇsavamo (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 ≡ >
r1 =
σsaldo<0 (racun) broj racuna klijent
saldo
1
k3
−234, 43
2
k1
−342.51
Πklijent (r1 ) klijent
k3
k1
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
Zadana su ograniˇcenja:
ˆ Primarni kljuˇc relacije tvprogram je vrijeme
ˆ Primarni kljuˇc relacije emisija je ˇsifra
ˆ Naziv emisije je jedinstven u relaciji emisija
13
emisija ˇsifra naziv opis ˇzanr
1
e1
o1
z1
2
e2
o2
z1
3
e3
o3
z2
ˆ Atribut emisija u relaciji tvprogram vanjski je kljuˇc koji se referencira na primarni kljuˇc relacije
emisija
Kreirajte u SQL-u strukturu tablica tvprogram i emisija s odgovaraju´cim ograniˇcenjima.
Rjeˇsenje Rjeˇsenje 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,
)
Rjeˇsenje 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 )
)
14