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:
- 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]
- 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
- 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")
- 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
- 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.
- 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]
- 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~~