Zápočtový úkol

(KMI/DASY, 2024/2025)

Jakožto vyhlášeného odborníka na databáze Vás kontaktovalo místní sportoviště, které bude vytvářet nový web a potřebuje pro něj navrhnout databázi. Doteď sportoviště veškerá svá data evidovalo v šanonech, kartotékách a tabulkovém software a nabídku sportovcům zveřejňovalo pouze na nástěnce a sociálních sítích. Naneštěstí jediný člověk, který aktuálnímu systému skutečně rozumí, jde v únoru do důchodu. Všechnu potřebnou evidenci a funkcionalitu tedy bude nahrazovat právě nová webová aplikace již od února. Čas kvapí a tak návrh databáze musíte dokončit do 22.12.2024, 23:59 CET, aby po Vánocích mohli začít pracovat programátoři.

Sportoviště funguje následujícím způsobem:

  1. Nabízené zázemí:

    • 1 tělocvična
    • 1 tenisový kurt
    • 1 fotbalové hřiště
    • 1 univerzální tartanová plocha
    • 1 společenská místnost
  2. Na sportovišti pracují různí trenéři, kteří nabízejí různé sportovní aktivity. O trenérech potřebujeme evidovat minimálně jejich osobní údaje, hodinovou mzda a aktivity, které mohou trénovat.

  3. U sportovní aktivity potřebujeme znát alespoň název, stručný popis, potřebné zázemí (hřiště), kapacitu, trvání (počet hodin) a cenu za osobu. Jednotlivé aktivity lze plánovat pro různé trenéry na různé dny a časy. Naplánované aktivity budou nabízeny v programu sportoviště (klasická kalendářová tabulka).

  4. Sportoviště provádí registrace sportovců, kteří se následně mohou přihlašovat na naplánované jednotlivé sportovní aktivity. O sportovcích chceme evidovat minimálně jejich osobní údaje, předplacený kredit, datum registrace, atd.

V případě otázek či nejasností k fungování sportoviště se můžete doptat jeho správce (tj. mailem nebo na cvičení).

Obecné zadání

Vašim úkolem je pro sportoviště navrhnout databázi, nad kterou budou schopni postavit webovou službu s funkcionalitou požadovanou výše (programy, registrace, platby, …). Přičemž:

Úkoly

  1. Databázi navrhněte a implementujte v PostgreSQL.
  2. Ověřte funkčnost Vašeho návrhu tím, že implementujete dotazy vracející následující data:
    1. Všechny trenéry dané sportovní aktivity (např. šachu). [alespoň jméno a příjmení]
    2. Všechny sportovce s nenulovým předplaceným kreditem. [alespoň jméno a příjmení]
    3. Program celého sportoviště v zadaném časovém rozmezí. [alespoň název aktivity, datum, čas a trenér]
    4. Program daného zázemí (hřiště) v zadaném časovém rozmezí. [alespoň název aktivity, datum, čas a trenér]
    5. Všechny sportovce, kteří jsou zároveň trenéři. [alespoň jméno a příjmení]
    6. Všechny události, na kterých se mohou potkat dva vybraní sportovci. [alespoň název aktivity, datum a čas]
    7. Všechny sportovce přihlášené na zadanou sportovní aktivitu (např. fotbal) v zadaném časovém období. [alespoň jméno a příjmení]
    8. Všechny události v programu, které mají více registrovaných účastníků, než je jejich kapacita. [alespoň název aktivity, kapacita, počet přihlášených, datum a čas]
    9. Celkový výdělek (tj. peníze získané od sportovců) sportoviště v zadaném období. [jedno číslo]
  3. Naplňte databázi testovacími daty tak, aby každý z předchozích dotazů vrátil neprázdný výsledek (při vhodně zvolených omezeních - data, aktivity, sportovci, …)
  4. (bonus) Dotaz vracející celkové výdělky jednotlivých trenérů (tj. jejich mzdy za odtrénované hodiny) v zadaném měsíci (všichni trenéři v jedné tabulce; seřazení sestupně podle výdělku; vynechejte trenéry s nulovým výdělkem v daném období). [alespoň jméno, příjmení a suma]

Bodování

Bodovány nebudou jen dotazy ale i návrh DB a celkové provedení úkolu (smysluplnost, přehlednost, dokumentace, …). Funkční dotazy nad nesprávným návrhem (vzhledem k obecnému zadání výše) na zápočet stačit nemusí. Podobně stačit nebude ani hezký návrh bez dodaných dotazů. Doporučuji úkol rozdělit na tři skripty: implementace návrhu, plnění daty a samotné dotazy. Pište i komentáře, například s popisem Vaší úvahy. Mohou pomoct s body při technických chybách v provedení.

Formality