====== DBS - 2. individuální úkol - lichý týden ====== ~~NOTOC~~ {{ :dbs:ukol1_reseni.png?400|}} Datový model z [[09_ukol1_lichy|1. úkolu]] lze převést do relačního modelu následovně. Plavidlo (__IDP__, Kapacita, Nosnost, Barva)\\ Balon (__IDP__, Nadrz, Pisek)\\ Vzducholod (__IDP__, Baterie)\\ Zakaznik (__IDZ__, Jmeno, Adresa, Telefon)\\ Zamestnanec (__IDZAM__, Jmeno)\\ Kontrola (__IDP, Datum__, Opravy)\\ Vypujcka (__IDV__, Pujceno, Vraceno, IDP, IDZ, Vydal, Prevzal)\\ **IO:** Balon [IDP] ⊆ Plavidlo [IDP]\\ Vzducholod [IDP] ⊆ Plavidlo [IDP]\\ Kontrola [IDP] ⊆ Plavidlo [IDP]\\ Vypujcka [IDP] ⊆ Plavidlo [IDP]\\ Vypujcka [IDZ] ⊆ Zakaznik [IDZ]\\ Vypujcka [vydal] ⊆ Zamestnanec [IDZAM]\\ Vypujcka [prevzal] ⊆ Zamestnanec [IDZAM]\\ Pozor na názvy atributů při přirozeném spojení :!:. ===== Zadání ===== Vyjádřete pomocí relační algebry následující dotazy. - Vypište seznam plavidel (aspoň ID, barva), která byla dne 1.9.2009 **vrácena** (formát data např YYYY-MM-DD) * {Vypujcka(Vraceno='2009-09-01') * Plavidlo} [IDP, Barva] - Vypište seznam všech zákazníků (Jména), kteří si půjčili již někdy kontrolované plavidlo. * {Kontrola * Plavidlo * Vypujcka * Zakaznik}[Jmeno] - Vypište seznam výpůjček (Datum půjčení a vrácení), kterých se zúčastnil zaměstnanec Jan Novák (na pozicích předávajícího i přebírajícío :!:). * { Vypujcka [Vypujcka.Vydal = Zamestnanec.IDZAM OR Vypujcka.Prevzal = Zamestnanec.IDZAM] Zamestnanec(jmeno = "Jan Novák") } [Pujceno, Vraceno] - Vypište seznam plavidel (ID, barva), která byla opravována v roce 2008 (tj. mezi 1.1. a 31.12., datum zapište například ve formátu YYYY-MM-DD, datum lze porovnávat pomocí operátorů >, < apod.) * { Kontrola (Datum >= '2008-01-01' AND Datum <= '2008-12-31') * Plavidlo } [IDP, Barva] - Seznam zákazníků (Jméno, adresa), kteří si ještě nepůjčili vzducholoď (nicméně balón už mohli - ale nemuseli). * { Zakaznik \ {Vzducholod *> Vypujcka *> Zakaznik} } [Jmeno, Adresa] - Vypište detailní seznam výpůjček, který bude obsahovat Datum půjčení a vrácení, Jméno zákazníka a obou zaměstnanců (toho, co půjčoval, a toho, který přebíral zpět).\\ **Příklad výstupu:**\\ (2009-10-10, 2009-10-15, Jan Novák, Franta Skočdopole, Tomáš Marný),\\ (2009-10-09, 2009-10-20, Karel Dvořák, Franta Skočdopole, Radim Skuhra) * Z1 := Zamestnanec Z2 := Zamestnanec { Vypujcka * Zakaznik [Vydal = Z1.IDZAM] Z1 [Prevzal = Z2.IDZAM] Z2 } [Pujceno, Vraceno, Zakaznik.Jmeno, Z1.Jmeno, Z2.Jmeno] - Vypište seznam zaměstnanců, kteří již **vypůjčili** (tj. předali v nějaké výpůjčce) všechna plavidla, která existují. Tj. pro takové zaměstnance neexistuje plavidlo, které by nepředali v nějaké jimi vyřizované výpůjčce. * { Vypujcka [Vydal -> IDZAM, IDP] ÷ Plavidlo [IDP] } *> Zamestnanec * Přepis pomocí dvojí negace\\ Universum := Vypujcka[Vydal] x Plavidlo[IDP] Neuskutecnene := Universum \ Vypujcka [Vydal, IDP] Vyhovuji := Vypujcka[Vydal] \ Neuskutecnene [Vydal] Vysledek := Vyhovuji [Vydal = IDZAM> Zamestnanec * Více vysvětlující přepis pomocí dvojí negace\\ Universum := Zamestnanec[IDZAM] x Plavidlo[IDP] Neuskutecnene := Universum \ Vypujcka [Vydal->IDZAM, IDP] Vyhovuji := Zamestnanec[IDZAM] \ Neuskutecnene [IDZAM] Vysledek := Vyhovuji *> Zamestnanec