Datový model z 1. úkolu lze převést do relačního modelu následovně.
Hrac (IDH, Jmeno, Narozen)
Zapas (IDZ, Datum_konani, Vyzyvajici, Vyzvany, IDP)
Ligovy (IDZ, Skore1, Skore2)
Exhibice (IDZ, Penize)
Placek (IDP, Nazev, IDH)
Oprava (IDP, Datum, Popis)
IO:
Zapas[Vyzyvajici] ⊆ Hrac[IDH]
Zapas[Vyzvany] ⊆ Hrac[IDH]
Zapas[IDP] ⊆ Placek[IDP]
Ligovy[IDZ] ⊆ Zapas[IDZ]
Exhibice[IDZ] ⊆ Zapas[IDZ]
Placek[IDH] ⊆ Hrac[IDH]
Oprava[IDP] ⊆ Placek[IDP]
Pozor na názvy atributů při přirozeném spojení .
Navrhněte dotazy v SQL. Rozdhodně nechci, abyste všechny dotazy odladili na nějakých datech, překlepy mě nezajímají, jde o myšlenky:
select z.datum_konani, p.nazev from zapas z join hrac h on (h.idh = z.vyzyvajici) join placek p using (idp) where hrac.jmeno = 'Novak'
select z.datum_konani, h1.jmeno, h2.jmeno from zapas z join hrac h1 on (h1.idh = z.vyzyvajici) join hrac h2 on (h2.idh = z.vyzyvany)
select p.idp, p.nazev from placek p where p.idp not in (select idp from zapas natural join exhibice)
select p.idp, p.nazev from placek p natural join zapas natural join ligovy minus -- nebo except select p.idp, p.nazev from placek p natural join zapas natural join exhibice
select p.idp, p.nazev, count(z.idz) as pocet_zapasu from placek p left join zapas z on (p.idp = z.idp) group by p.idp, p.nazev
select h.idh, h.jmeno from hrac h left join zapas z on (h.idh = z.vyzyvajici) group by h.idh, h.jmeno having count(z.idz) > 10