You are on page 1of 23

Formalni upitni jezici

Baze podataka 1

dr Miloš CVETANOVIĆ
• Proceduralni jezici
– Relaciona algebra
• Deklarativni jezici
– Relacioni račun domena
– Relacioni račun n-torki

2
Biblioteka

OBLAST (SifO, Naziv)


NASLOV (SifN, Naziv)
KNJIGA (SifK, SifN)
CLAN (SifC, Ime)
POZAJMICA (SifP, SifC, SifK, SifN, Datum, Dana)
REZERVACIJA (SifC, SifN, DatumVreme)
DRZI (SifK, SifC, Datum)
JE_REZERVISANA (SifK, SifC, Datum)

3
Restrikcija

• Struktura relacije se ne menja


• Kardinalnost N(t) ≤ N(r)

• Primer 1
σSifO=“PJ”(naslov) → t(SifN, Naziv, SifO)

• Primer 2
σKoji > 1(je_autor) → t(SifA, SifN, Koji)

4
Projekcija

• Struktura relacije se menja


• Kardinalnost N(t) ≤ N(r)

• Primer 1
p Naziv, SifO(naslov) → t(Naziv, SifO)

• Primer 2
p Naziv (σSifO=“PJ”(naslov)) → t(Naziv)

5
Unija

• Unijska kompatibilnost
– Šeme relacija imaju isti broj atributa
– Atributi šema relacija redom odgovaraju jedni drugima (po tipu i značenju)
• Kardinalnost: max(N(r), N(s)) ≤ N(t) ≤ N(r)+N(s)

• Primer 1
clan U autor → t(SifX, Ime)

• Primer 2
p SifK (drzi) → t1(SifK)
p SifK (pozajmica) → t2(SifK)
t1 U t2 → t3(SifK)

6
Razlika

• Unijska kompatibilnost
• Kardinalnost: 0 ≤ N(t) ≤ N(r)

• Primer 1
p SifC, SifK (drzi) → t1(SifC, SifK)
p SifC, SifK (pozajmica) → t2(SifC, SifK)
t1 – t2 → t3(SifC, SifK)

• Primer 2
p SifC (clan) → t1(SifC)
p SifC (drzi) → t2(SifC)
t1 – t2 → t3(SifC)

• p SifC (clan) – pSifC (drzi) → t3(SifC)

7
Presek

• Unijska kompatibilnost
• Kardinalnost: 0 ≤ N(t) ≤ min(N(r), N(s))

• Ekvivalentno sa: r – (r – s)

8
Dekartov proizvod

• Šema rezultantne relacije sadrži sve atribute polaznih relacija


• Kardinalnost: N(t) = N(r) * N(s)

9
Spajanje

r ´ P ( XY ) s = s P ( XY ) (r ´ s) = t ( XY ) = {xy | x Î r Ù y Î s Ù P( xy)}

( r ´ X i QYk s ); Q Î {=, £, ³, <, >, ¹}; X i Î X ; Yk Î Y ;

(r ´ X =Y s ); X = ( X 1 ,..., X n ); Y = (Y1 ,..., Yn ); X 1 = Y1 Ù X 2 = Y2 ...;

(r ´ A*B s); A = B; A Í X , B Í Y ; p XY - B (s A= B (r ´ s)) = t ( XY - B)

10
Deljenje

• p SifA, SifN (je_autor) → t1(SifA, SifN) autor-naslov (r)

• p SifN (σSiFO=“PJ”(naslov)) → t2(SifN) naslov-pj (s)

• p SifA (je_autor) → t3(SifA) autor-sif (πX(r))


• t3 x t2 → t4 svi-sve (πX(r) x s)
• t4 – t1 → t5 nije-autor ((πX(r) x s)-r)
• t3 – pSifA(t5) → t6 trazene-sif

11
Primer A

• p SifC(drzi) → drz(SifC)
• p SifC(pozajmica) → poz(SifC)
• drz U poz → drzpoz(SifC)
• clan x* drzpoz → svedrzpoz(SifC, Ime)
• p Ime(svedrzpoz) → resenje(Ime)

• p Ime(clan x* (p SifC(drzi) U p SifC(pozajmica)))

• Davati smislena imena relacijam koje nastaju kao međurezultat


• Komentarisati značenje međurezultata
• Navoditi koje atribute sadrže relacije međurezultata

12
Primer B

• p SifC, SifK(drzi) U p SifC, SifK(pozajmica) → t1(SifC, SifK)


• p SifC, SifN(knjiga x* t1) → t2(SifC, SifN)
• p SifN(σSifO=“PJ”(naslov)) → t3(SifN)
• t2 / t3 → t4(SifC)
• p SifN(σSifO=“BP”(naslov)) → t5(SifN)
• p Sifk(knjiga x* t5) → t6(SifK)
• t1 x* t6 → t7(SifC, SifK)
• t4 – pSifC(t7) → t8(SifC)
• p Ime(clan x* t8) → resenje(Ime)

13
Primer C

• Data je šema relacione baze podataka

FILM(SifF, Naziv, Duzina, Ocena, Cena, SifZ);


KASETA(SifK, Duzina);
ZANR(SifZ, Naziv);
POZAJMICA(SifP, SifK, SifF, SifC, Dana);
SADRZI(SifK, SifF);
CLAN(SifC, Ime, Popust);

• Sastaviti iskaze relacione algebre koji daju šifre i nazive filmova koji su sadržani na
jednoj ili više kaseta a nisu pozajmljivani.

• Sastaviti iskaze relacione algebre koji daju šifre i imena članova koji su pozajmili bar
jedan od filmova koji imaju najmanju ocenu među filmovima svog žanra.

14
Dodatni operatori relacione algebre

• Preimenovanje
r s ( A , A ,..., A ) (r ) ® s ( A1 , A2 ,..., An )
1 2 n

• Agregatne operacije

G1 ,G2 ,...,Gn GF1 ( A1 ), F2 ( A2 ),..., Fn ( An ) (r )

Gi – atributi po kojima se grupiše


Fi – agregatna operacija
{sum, avg, max, min, count, count-distinct}
Ai – atributi relacije

15
• Proceduralni jezici
– Relaciona algebra
• Deklarativni jezici
– Relacioni račun domena
– Relacioni račun n-torki

16
Relacioni račun domena – primeri 1

{< SifN , Naziv, SifO > < SifN , Naziv, SifO >Î naslov Ù SifO =" PJ "}

{< Naziv, SifO > $SifN (< SifN , Naziv, SifO >Î naslov}
{< SifX , IME >| $SifA(< SifA, IME >Î autor Ù SifA = SifX ) Ú
Ú $SifC (< SifC , IME >Î clan Ù SifC = SifX )}

{< SifC >| $IME (< SifC , IME >Î clan) Ù


Ù ¬$SifK , Datum(< SifK , SifC , Datum >Î drzi )}

17
Relacioni račun domena – primeri 2

{< SifK >| $SifC , Datum(< SifK , SifC , Datum >Î drzi ) Ú
Ú $SifP, SifC , SifN , Dana(< SifP, SifC , SifK , SifN , Dana >Î pozajmica)}

{< SifC , SifK >| $Datum(< SifK , SifC , Datum >Î drzi Ù
Ù $SifP, SifN , Dana (< SifP, SifC , SifK , SifN , Dana ) Î pozajmica )}

{< SifN , NazivN , SifON , SifO, NazivO >|< SifN , NazivN , SifON >Î naslov Ù
Ù < SifO, NazivO >Î oblast Ù SifON = SifO}

{< SifN , Naziv, NazivO >| $SifON ((< SifN , Naziv, SifON >Î naslov) Ù
Ù $SifO (< SifO, NazivO >Î oblast Ù SifO = SifON ))}

18
Relacioni račun domena – primeri 3

{< IME >| $SifC (< SifC , IME >Î clan Ù


Ù ($SifK , Datum(< SifK , SifC , Datum >Î drzi ) Ú
Ú $SifP, SifK1 , SifN , Dana(< SifP, SifC , SifK1 , SifN , Dana >Î pozajmica))}

{< IME >| $SifA(< SifA, IME >Î autor Ù


Ù $SifN , Naziv, SifO (< SifN , Naziv, SifO >Î naslov Ù
Ù SifO =" PJ "Ù$Koji (< SifA, SifN , Koji >Î je _ autor )))}

{< SifN >| $SifC , Datum(< SifN , SifC , Datum >Î rezervacija ) Ù
Ù $SifK (< SifK , SifN >Î knjiga Ù
Ù ¬$SifC , Datum(< SifK , SifC , Datum >Î drzi ))}

19
• Proceduralni jezici
– Relaciona algebra
• Deklarativni jezici
– Relacioni račun domena
– Relacioni račun n-torki

20
Relacioni račun n-torki – primeri 1

{t t Î naslov Ù t[SifO] =" PJ "}

{t | $u (u Î naslov Ù t[ Naziv] = u[ Naziv] Ù t[SifO] = u[SifO])}

{t | $u (u Î autor Ù t[ SifX ] = u[ SifA] Ù t[ IME ] = u[ IME ]) Ú


Ú $u (u Î clan Ù t[ SifX ] = u[ SifC ] Ù t[ IME ] = u[ IME ])}

{t | $u (u Î clan Ù t[ SifC ] = u[ SifC ] Ù ¬$v(v Î drzi Ù u[ SifC ] = v[ SifC ]))}

21
Relacioni račun n-torki – primeri 2

{t | $u (u Î drzi Ù t[ SifK ] = u[ SifK ]) Ú $u (u Î pozajmica Ù t[ SifK ] = u[ SifK ])}

{t | $u (u Î drzi Ù t[ SifC ] = u[ SifC ] Ù t[ SifK ] = u[ SifK ] Ù


Ù $v(v Î pozajmica Ù u[ SifC ] = v[ SifC ] Ù u[ SifK ] = v[ SifK ]))}

{t | $u (u Î naslov Ù t[ SifN ] = u[ SifN ] Ù t[ NazivN ] = u[ Naziv ] Ù t[ SifON ] = u[ SifO ] Ù


Ù $v(v Î oblast Ù t[ SifO ] = v[ SifO ] Ù t[ NazivO] = v[ Naziv ] Ù u[ SifO ] = v[ SifO ]))}

{t | $u Î naslov Ù t[ SifN ] = u[ SifN ] Ù t[ NazivN ] = u[ Naziv ] Ù


Ù $v(v Î oblast Ù t[ NazivO ] = v[ Naziv ] Ù u[ SifO ] = v[ SifO ]))}

22
Relacioni račun n-torki – primeri 3

{t | $u (u Î clan Ù t[ IME ] = u[ IME ] Ù


Ù ($v(v Î drzi Ù u[ SifC ] = v[ SifC ]) Ú
Ú $v(v Î pozajmica Ù u[ SifC ] = v[ SifC ])))}

{t | $u (u Î autor Ù t[ IME ] = u[ IME ] Ù


Ù $v(v Î naslov Ù v[ SifO ] =" PJ "Ù
Ù $x( x Î je _ autor Ù v[ SifN ] = x[ SifN ] Ù u[ SifA] = x[ SifA])))}

{t | $u (u Î rezervacija Ù t[ SifN ] = u[ SifN ] Ù


Ù $v(v Î knjiga Ù u[ SifN ] = v[ SifN ] Ù
Ù ¬$x( x Î drzi Ù v[ SifK ] = x[ SifK ])))}

23

You might also like