====== 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)
- 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~~