DBS - 2. individuální úkol - lichý týden
Datový model z 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