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)
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:
(Let(ID_LET==3) [Let.ID_DEST_DO==Destinace.ID_DEST] Destinace * VyzadujeOpatreni * Opatreni ) [Popis]
(Pilot * Personal(Jmeno=="Jan Novak") * NaPalube * Let) [Let.ID_DEST_DO==Destinace.ID_DEST> Destinace
RegistraceUzavrena
nabývá hodnot true nebo false.Let(RegistraceUkoncena==false) <Let.ID_DEST_DO==Destinace.ID_DEST] Destinace (JmenoLetiste == "Rio de Janeiro")
(Destinace(JmenoLetiste=="New York") [Destinace.ID_DEST == Let.ID_DEST_Z> Let ) [Let.ID_DEST_DO == Destinace.ID_DEST> Destinace
Let(DatumCasOdletu ≤ "20080131 2359" OR DatumCasPriletu ≥ "20080101 0000") * Cestuje *> Pasazer
((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]
(((Letuska * NaPalube * Let) [ID_PERS, ID_LETADLO] ÷ Letadlo [ID_LETADLO]) * Personal)[Jmeno]
~~DISCUSSION~~