Doc. dr. sc. Markus Schatten Zbirka rješenih zadataka iz baza podataka
Sadržaj 1 Relacijska algebra 1 1.1 Izračun upita....................................... 1 1.2 Relacijska algebra i SQL................................. 6 2 SQL 9 i
ii
Predgovor iii
iv
1 Relacijska algebra 1.1 Izračun upita Zadatak 1.1 Zadane su relacije i ograničenje: r 1 A B C 1 0 2 2 1 3 r 2 B C D 0 2 2 0 2 3 F = (A = D) Neka je zadan upit RA(U): σ F (Π AD (r 1 oo r 2 )) Izračunajte odgovor na upit koristeći relacijsku algebru. Rješenje Sa s i označavat ćemo medurezultate. s 1 = r 1 oo r 2 A B C D 1 0 2 2 1 0 2 3 2 3 s 2 = Π AD (s 1 ) A D 1 2 1 3 2 2 2 3 t 1 : (1 = 2) t 2 : (1 = 3) t 3 : (2 = 2) 1
t 4 : (2 = 3) Zadatak 1.2 Zadane su relacije i ograničenje: σ F (s 2 ) A D 2 2 r 1 A B C 1 3 1 r 2 A B C 3 2 3 F = (A > B) (C 2) Neka je zadan upit RA(U): Π AB (σ F (r 1 r 2 )) Izračunajte odgovor na upit koristeći relacijsku algebru. Rješenje Sa s i označavat ćemo medurezultate. s 1 = r 1 r 2 A B C 1 3 1 3 2 3 t 1 : (1 > 3) (1 2) t 2 : (2 > 0) (2 2) t 3 : (1 > 1) (2 2) t 4 : (3 > 2) (3 2) s 2 = σ F (s 1 ) A B C 1 3 1 3 2 3 Zadatak 1.3 Zadane su relacije i ograničenje Π AB (s 2 ) A B 1 3 2 0 3 2 r A B C 1 3 1 s B C D 3 2 3 Izračunajte AC(Π r.c,s.b (σ H (r s))). H = [(A s.c) (r.b > s.b)] (A < s.c) 2
Rješenje Sa r i označavat ćemo medurezultate. r 1 = r s A r.b r.c s.b s.c D 1 3 1 1 3 1 3 2 3 3 2 3 t 1 : [(1 1) (3 > 1)] (1 < 1) [ ] t 2 : [(1 2) (3 > 3)] (1 < 2) [ ] t 3 : [(2 1) (0 > 1)] (2 < 1) [ ] t 4 : [(2 2) (0 > 3)] (2 < 2) [ ] r 2 = σ H (r 1 ) A r.b r.c s.b s.c D 1 3 1 3 2 3 r 3 = Π r.c,s.b (r 2 ) r.c s.b 1 3 2 1 AC(r 3 ) = = = Π r.c (r 3 ) r.c 1 2 oo Π s.b (r 3 ) Π r.c (r 3 ) oo Π s.b (r 3 ) r.c s.b 1 3 1 1 2 3 2 1 AC(r 3 ) r.c s.b 1 1 2 3 s.b 3 1 r 3 r 3 Zadatak 1.4 Zadane su relacije i ograničenje r 1 A B C 2 2 1 1 1 0 3 1 1 r 2 B C D 2 1 0 1 0 2 F = [(A < B)(B 2)] (B C) Potrebno je izračunati upit RA(U) : AC(Π AD (σ F (r 1 oo r 2 ))) Rješenje Sa s i ćemo označavati medurezultate. s 1 = r 1 oo r 2 A B C D 2 2 1 0 1 1 0 2 3 t 1 : [(2 < 2) (2 2)] (2 1) [ ] 3
t 1 : [(1 < 1) (1 2)] (1 0) [ ] t 1 : [(3 < 1) (1 2)] (1 1) [ ] s 2 = σ F (s 1 ) A B C D 2 2 1 0 1 1 0 2 s 3 = Π AD (s 2 ) A D 2 0 1 2 AC(s 3 ) = = = Π A (s 3 ) A 2 1 oo Π D (s 3 ) Π A (s 3 ) oo Π D (s 3 ) A D 2 0 2 2 1 0 1 2 AC(s 3 ) A D 2 2 1 0 D 0 2 s 3 s 3 Zadatak 1.5 Zadane su relacije i ograničenje: r 1 A B C 4 2 3 r 2 A B C 3 2 3 F = [(A > B) (C 2)] (A > 2) Neka je zadan upit RA(U): AC(Π AB (σ F (r 1 r 2 ))) Izračunajte odgovor na upit koristeći relacijsku algebru. Rješenje Sa s i označavat ćemo medurezultate. s 1 = r 1 r 2 A B C [(1 > 1) (2 2)] (1 > 2) [ ] [(2 > 0) (2 2)] (2 > 2) [ ] s 2 = σ F (s 1 ) A B C s 3 = Π AB(s 2 ) A B 1 1 4
AC(s 3 ) = ( ΠA (s 3 ) A 1 oo Π B(s 3 ) B 1 = Π A(s 3 ) oo Π B (s 3 ) A B 1 1 s 3 = AC(s 3) A B Zadatak 1.6 Zadane su relacije i ograničenja: ) s 3 r 1 A B C D 2 2 b 3 1 4 b 2 5 1 a 2 r 2 A B D 2 2 3 3 2 3 F = (A B) (D 2) G = (C a) Neka je zadan upit RA(U): AC(Π ABD (σ G (r 1 )) σ F (r 2 )) Izračunajte odgovor na upit koristeći relacijsku algebru. Rješenje Sa s i označavat ćemo medurezultate. s 1 = σ G (r 1 ) A B C D 2 2 b 3 1 4 b 2 (b a) (b a) (a a) s 2 = Π ABD (s 1 ) A B D 2 2 3 1 4 2 s 3 = σ F (r 2 ) A B D 2 2 3 (1 1) (2 2) (2 2) (3 2) (3 2) (4 2) s 4 = s 2 s 3 A B D 2 2 3 1 4 2 5
AC(s 4 ) = = = Π A (s 4 ) A 2 1 oo Π B (s 4 ) B 2 4 oo Π D (s 4 ) Π A (s 4 ) oo Π B (s 4 ) oo Π D (s 4 ) A B D 2 2 3 2 2 2 2 4 3 2 4 2 1 2 3 1 2 2 1 4 3 1 4 2 AC(s 4 ) A B D 2 2 2 2 4 3 2 4 2 1 2 3 1 2 2 1 4 3 D 3 2 s 4 s 4 1.2 Relacijska algebra i SQL Zadatak 1.7 Zadane su relacije: Neka je zadan upit SQL(U): SELECT r. A, r. B, s.d FROM r, s WHERE r. C = s. C AND A > 1 r A B C 1 3 1 s B C D 3 2 3 (a) Iskažite upit u relacijskoj algebri (RA(U)) (b) Izračunajte odgovor na upit koristeći relacijsku algebru. Rješenje Rješavamo (a). Iz SELECT klauzule isčitavamo elemente u konačnoj projekciji. Sa r i označavat ćemo relacije koje još valja izračunati: Π A r.b D (r 1 ) Iz WHERE klauzule isčitavamo formulu za selekciju: Sada imamo odnosno: F = (r.c = s.c) (A > 1) r 1 = σ F (r 2 ) 6
r 1 = σ (r.c=s.c) (A>1) (r 2 ) Iz FROM klauzule isčitavamo relacije koje valja staviti u produkt. Stoga imamo: Konačno rješenje je stoga: Rješavamo (b). r 2 = r s Π A r.b D (σ (r.c=s.c) (A>1) (r s)) r s A r.b r.c s.b s.c D 1 3 1 1 3 1 3 2 3 3 2 3 t 1 : (1 = 1) (1 > 1) t 2 : (1 = 2) (1 > 1) t 3 : (2 = 1) (2 > 1) t 4 : (2 = 2) (2 > 1) σ (r.c=s.c) (A>1) (r s) A r.b r.c s.b s.c D 3 2 3 Zadatak 1.8 Zadane su relacije i ograničenje: Π A r.b D (σ (r.c=s.c) (A>1) (r s)) A r.b D 2 0 3 r 1 A B C D 1 a 1 α 2 b 2 β 2 c 2 α r 2 A B E 1 a 2 2 c 2 3 a 3 F = (A > C) (D β) Neka je zadan upit RA(U): Π AC (σ F (r 1 oo r 2 )) (a) Izračunajte odgovor na upit koristeći relacijsku algebru. (b) Pretvorite RA(U) u SQL(U) Rješenje Rješavamo (a): S s i označavat ćemo medurezultate. s 1 = r 1 oo r 2 A B C D E 1 a 1 α 2 2 c 2 α 2 7
t 1 : (1 > 1) (α β) t 2 : (2 > 2) (α β) s 2 = σ F (s 1 ) A B C D E s 3 = Π AC (σ F (r 1 oo r 2 )) = Π AC (s 2 ) A C Rješavamo (b): Počinjemo sa SELECT klauzulom koja je ekvivalentna konačnoj projekciji: SELECT A, C U FROM klauzuli moraju se pojaviti sve relacije iz RA(U): FROM r 1, r 2 U WHERE klauzuli moramo uvrstiti ograničenje F : WHERE A > C AND D <> β Prirodni spoj je samo dodatno ograničenje u WHERE klauzuli: r 1.A = r 2.A AND r 1.B = r 2.B Dakle ukupni upit je: SELECT A, C FROM r 1, r 2 WHERE A > C AND D <> β AND r 1.A = r 2.A AND r 1.B = r 2.B Ovaj rezultat nije u potpunosti točan, obzirom da u SELECT i WHERE klauzuli nije jasno na koji se atribut A misli (A iz r 1 ili A iz r 2 ). SQL stroj u pravilu ne zaključuje o jednakosti atributa temeljem imena, već temeljem imena i relacije u kojoj se oni nalaze, zbog čega je potrebno koristiti notaciju naziv relacije.naziv atributa. Obzirom da se kasnije u WHERE klauzuli atribut A iz jedne relacije izjednačava atributom u drugoj relaciji (uvjet prirodnog spoja), u našem slučaju možemo proizvoljno odabrati relaciju: SELECT r 1.A, C FROM r 1, r 2 WHERE r 1.A > C AND D <> β AND r 1.A = r 2.A AND r 1.B = r 2.B 8
2 SQL Zadatak 2.1 Zadana je relacija Zadana su ograničenja: ˆ Šifra je primarni ključ relacije ˆ Svaki artikl mora imati jedinstven naziv ˆ Jedinična cijena ne smije biti negativna artikl Šifra Naziv Jedinična cijena 1 Kava 8 2 Rakija 4 3 Klipić 2 (a) Kreirajte u SQL-u strukturu tablice artikl s odgovarajućim ograničenjima. (b) Neka je zadan upit U : odrediti sve one šifre i nazive artikala čija je cijena veća od 3. Napišite SQL(U) i RA(U). Zatim izračunajte relaciju o(ra(u)) koja je odgovor na upit U. Rješenje Rješavamo (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šavamo (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 r i označavat ćemo medurezultate: t 1 : (8 > 3) t 2 : (4 > 3) t 3 : (2 > 3) r 1 = σ jedinicna cijena>3 (artikl) sifra naziv jedinična cijena 1 Kava 8 2 Rakija 4 Zadatak 2.2 Zadana je relacija Π sifra, cijena (r 1 ) sifra jedinična cijena 1 8 2 4 pr N P n 1 bp n 1 uz n 2 bp n 3 bp n 3 uz fm Semantika: pr(n, p) znači da nastavnik n predaje predmet p. (a) Kreirajte u SQL-u strukturu tablice pr (b) Iskažite riječima entitetski integritet za tablicu pr n 3 (c) Neka je zadan upit U : odrediti sve one nastavnike koji predaju predmet uz i ne predaju predmet fm. Napišite SQL(U) i tablicu o(sql(u)) koja je odgovor na upit SQL(U). Rješenje Rješavamo (a): CREATE TABLE p r ( N VARCHAR( 2 ), P VARCHAR( 2 ), PRIMARY KEY( N, P ) ) Rješavamo (b). U relaciji (tablici) pr vrijednosti atributa N i P ne smiju poprimiti vrijednost null jer su dio primarnog ključa. Rješavamo (c). SELECT N FROM pr WHERE P = uz AND N NOT IN ( 10
) SELECT N FROM pr WHERE P = fm o(sql(u)) N n 1 Zadatak 2.3 Zadana je relacija i ograničenja knjiga ISBN Naslov Godina 1 Programiranje u Prologu 1992 2 Arhitektura suvremenih organizacija 2005 3 Teorija baza podataka 2009 ˆ Svaka knjiga mora imati naslov i godinu izdanja ˆ Godina izdanja mora biti veća od 1900 (a) Kreirajte u SQL-u strukturu tablice knjiga s odgovarajućim ograničenjima. (b) Neka je zadan upit U : odrediti sve one naslove knjiga koje su izdane nakon 2000 godine. Napišite SQL(U) i RA(U). Zatim izračunajte relaciju o(ra(u)) koja je odgovor na upit U. Rješenje Rješavamo (a). CREATE TABLE k n j i g a ( ISBN INTEGER PRIMARY KEY, Naslov TEXT NOT NULL, Godina INTEGER NOT NULL CHECK( Godina > 1900 ) ) Rješavamo (b). SQL(U): SELECT Naslov FROM k n j i g a WHERE Godina > 2000 RA(U) : Π Naslov (σ Godina>2000 (knjiga)) t 1 : 1992 > 2000 t 2 : 2005 > 2000 t 3 : 2009 > 2000 r 1 = σ Godina>2000 (knjiga) ISBN Naslov Godina 2 Arhitektura suvremenih organizacija 2005 3 Teorija baza podataka 2009 Π Naslov (r 1 ) Naslov Arhitektura suvremenih organizacija Teorija baza podataka 11
Zadatak 2.4 Zadana je relacija Zadana su ograničenja: knjiga ISBN Naslov Godina 1 Programiranje u Prologu 1992 2 Arhitektura suvremenih organizacija 2005 3 Teorija baza podataka 2009 ˆ Svaka knjiga mora imati naslov ˆ Ako se ne specificira godina izdanja upisuje se 2011 (a) Kreirajte u SQL-u strukturu tablice knjiga s odgovarajućim ograničenjima. (b) Neka je zadan upit U : odrediti sve one naslove knjiga koje su izdane prije 2008 godine. Napišite SQL(U) i RA(U). Zatim izračunajte relaciju o(ra(u)) koja je odgovor na upit U. Rješenje Rješavamo (a). CREATE TABLE k n j i g a ( ISBN INTEGER PRIMARY KEY, Naslov TEXT NOT NULL, Godina INTEGER DEFAULT 2011 ) Rješavamo (b). SQL(U): SELECT Naslov FROM k n j i g a WHERE Godina < 2008 RA(U) : Π Naslov (σ Godina<2008 (knjiga)) t 1 : 1992 < 2008 t 2 : 2005 < 2008 t 3 : 2009 < 2008 r 1 = σ Godina>2000 (knjiga) ISBN Naslov Godina 1 Programiranje u Prologu 1992 2 Arhitektura suvremenih organizacija 2005 Π Naslov (r 1 ) Naslov Programiranje u Prologu Arhitektura suvremenih organizacija Zadatak 2.5 Zadana je relacija Zadana su ograničenja (poslovna pravila): račun broj računa klijent saldo 1 k 1 2134, 56 2 k 2 444, 09 3 k 3 234, 43 4 k 1 342.51 12
ˆ Svaki baknovni račun mora imati broj računa, klijenta i saldo ˆ Dopušten negativni saldo može biti 2000 (a) Kreirajte u SQL-u strukturu tablice račun s odgovarajućim ograničenjima. (b) Neka je zadan upit U : odrediti sve one klijente koji imaju barem jedan račun s negativnim saldom. Napišite SQL(U) i RA(U). Zatim izračunajte relaciju o(ra(u)) koja je odgovor na upit U. Rješenje Rješavamo (a). CREATE TABLE racun ( b r o j racuna 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šavamo (b). SQL(U): SELECT k l i j e n t FROM racun WHERE s a l d o < 0 RA(U) : Π klijent (σ saldo<0 (racun)) t 1 : 2134, 56 < 0 t 2 : 444, 09 < 0 t 3 : 234, 43 < 0 t 4 : 342.51 < 0 r 1 = σ saldo<0 (racun) broj racuna klijent saldo 1 k 3 234, 43 2 k 1 342.51 Π klijent (r 1 ) klijent k 3 k 1 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čenja: emisija šifra naziv opis žanr 1 e 1 o 1 z 1 2 e 2 o 2 z 1 3 e 3 o 3 z 2 ˆ Primarni ključ relacije tvprogram je vrijeme ˆ Primarni ključ relacije emisija je šifra ˆ Naziv emisije je jedinstven u relaciji emisija 13
ˆ Atribut emisija u relaciji tvprogram vanjski je ključ koji se referencira na primarni ključ relacije emisija Kreirajte u SQL-u strukturu tablica tvprogram i emisija s odgovarajućim ograničenjima. Rješenje Rješenje 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šenje za tablicu tvprogram: CREATE TABLE tvprogram ( 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