DBS - Individuální úkol č. 3 - sudý týden
Uvažujme náš bugtracker z minulého úkolu. Pro připomenutí, zde je jedno z možných řešení.
Tento diagram lze jednoduše transformovat do relačního schématu (viz přednáška).
StupenZavaznosti (Priorita, Nazev)
Uzivatel (UID, Jmeno)
Programator (UID)
Tester (UID)
Komponenta (ID_KOMP, Nazev, Popis, UID_Sefprogramator)
HlaseniChyby(ID_REPORTU, PopisChyby, ID_KOMP, StupenZavaznosti, UID_Nahlasil, DatumCas_Nahlasil, UID_Uzavrel, DatumCas_Uzavrel)
DiskusniPrispevek (ID_PRISPEVKU, DatumCas, Text, UID, ID_REPORTU)
IO:
Programator[UID] ⊆ Uzivatel[UID]
Tester[UID] ⊆ Uzivatel[UID]
Komponenta[UID_Sefprogramator] ⊆ Programator[UID]
HlaseniChyby[ID_KOMP] ⊆ Komponenta[ID_KOMP]
HlaseniChyby[StupenZavaznosti] ⊆ StupenZavaznosti[Priorita]
HlaseniChyby[UID_Nahlasil] ⊆ Tester[UID]
HlaseniChyby[UID_Uzavrel] ⊆ Programator[UID] – je NULL iff chyba není opravena
DiskusniPrispevek[UID] ⊆ Uzivatel[UID]
DiskusniPrispevek[ID_REPORTU] ⊆ HlaseniChyby[ID_REPORTU]
Pozor na natural joiny. Pár atributů jsem pro přehlednost přejmenoval.
Zadání
Vyjádřete pomocí relační algebry následující dotazy:
- Vypište testery (aspoň jména), kteří nahlásili chybu v komponentě, které “šéfuje” Jan Novák.
- Vypište programátory (aspoň jména), kteří přidali diskusní příspěvek k hlášení o chybě, kterou nahlásil Karel Svoboda.
- Vypište seznam (aspoň jména) testerů, kteří nahlásili chybu ve všech komponentách, kterým “šéfuje” Jan Novák.
Vyjádřete pomocí SQL následující dotazy:
- Vypište seznam všech testerů (aspoň jména) a k nim počet nahlášených chyb komponenty s názvem “libDBS”. Pokud nemá žádnou chybu, bude zde číslo 0.
- Vypište seznam testerů (aspoň jména), kteří nikdy nenahlásili chybu v žádné knihovně. Knihovna je komponenta, jejíž název začíná na řetěz “lib” (hint: použijte predikát LIKE).
- Vypište jména uživatelů, kteří mají více jak 100 diskusních příspěvků.