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