DBS - úkol č. 2 - lichý týden - řešení

Letadlo (ID_LETADLO, Oznaceni, kapacita)
Jazyky (ID_JAZ, NazevJazyka)
Personal (ID_PERS, Jmeno)
Letuska (ID_PERS) – je to divné, ale je potřeba je nějak určit
Pilot (ID_PERS, PilotniPrukaz)
UmiJazyk (ID_PERS, ID_JAZ)
Destinace (ID_DEST, JmenoLetiste)
Opatreni (ID_OPATRENI, Popis)
VyzadujeOpatreni (ID_DEST, ID_OPATRENI)
Let (ID_LET, DatumCasOdletu, DatumCasPriletu, RezervaceUkoncena, ID_LETADLO, ID_DEST_Z, ID_DEST_DO) – :!: pozor na join!
Pasazer (ID_PAS, Jmeno)
Cestuje (ID_PAS, ID_LET)
NaPalube (ID_PERS, ID_LET)

Dotazy

Jelikož jsem trochu zapomněl při zadávání úloh na to, že původní návrh zahrnoval i budoucí lety, pak jsou výrazy “letěl” nebo “nebyl v Riu” trochu problémové. V úkolech i zde beru řešení, kde se tato skutečnost nebere v úvahu. Správnější by bylo v dotčených případech selektovat relaci Let podle podmínky např. DatumCasOdletu < now().

Vyjádřete pomocí relační algebry následující dotazy:

  1. Vypište popis všech opatření pro let s číslem 3.
    • (Let(ID_LET==3) [Let.ID_DEST_DO==Destinace.ID_DEST] Destinace * VyzadujeOpatreni * Opatreni ) [Popis]
  2. Vypište seznam letišť, kam letěl pilot Jan Novák.
    • (Pilot * Personal(Jmeno=="Jan Novak") * NaPalube * Let) [Let.ID_DEST_DO==Destinace.ID_DEST> Destinace
  3. Vypište všechny lety do Ria de Janeira, které ještě mají otevřenou registraci. Atribut RegistraceUzavrena nabývá hodnot true nebo false.
    • Let(RegistraceUkoncena==false) <Let.ID_DEST_DO==Destinace.ID_DEST] Destinace (JmenoLetiste == "Rio de Janeiro")
  4. Vypište seznam destinací, kam se již letělo z New Yorku.
    • (Destinace(JmenoLetiste=="New York") [Destinace.ID_DEST == Let.ID_DEST_Z> Let ) [Let.ID_DEST_DO == Destinace.ID_DEST> Destinace
  5. Vypište seznam pasažérů, kteří letěli mezi 1.1.2008 a 31.1.2008 včetně. Předpokládáme, že datum/čas lze porovnávat operátory “je větší” apod. Zápis je ve formátu 'YYYYMMDD HHMM'.
    • Let(DatumCasOdletu ≤ "20080131 2359" OR DatumCasPriletu ≥ "20080101 0000") * Cestuje *> Pasazer
    • Tady záleží na tom, jak si ty podmínky času přesněji definujete, já to beru jako platné, pokud byl let v tu dobu ve vzduchu.
  6. Vypište jména pilotů, kteří ještě nebyli v Riu.
    • ((Pilot \ (Pilot <* (NaPalube * Let [Let.ID_DEST_Z == Destinace.ID_DEST OR Let.ID_DEST_DO == Destinace.ID_DEST] Destinace(JmenoLetiste="Rio De Janeiro") ))) * Personal)[Jmeno]
  7. Vypište jména letušek, které již letěly na všech letadlech.
    • (((Letuska * NaPalube * Let) [ID_PERS, ID_LETADLO] ÷ Letadlo [ID_LETADLO]) * Personal)[Jmeno]

~~DISCUSSION~~