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:
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
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.
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).
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ž:
- Jste odborníci na relační databáze a PostgreSQL, tedy přirozeně sáhnete právě po této technologii.
- Vaše čest Vám nedovolí předat nekvalitní návrh, tedy návrh bude následovat nejlepší praktiky, které jste se naučili v tomto kurzu.
Zejména všechny relační proměnné:
- jsou v BCNF,
- mají vhodně zvolené typy atributů,
- obsahují vhodné primární klíče,
- obsahují vhodné cizí klíče,
- obsahují další vhodná integritní omezení, pokud někde dávají smysl,
- neobsahují (i DB jako celek) redundanci, které umíte zabránit,
- …
Úkoly
- Databázi navrhněte a implementujte v PostgreSQL.
- Ověřte funkčnost Vašeho návrhu tím, že implementujete dotazy vracející následující data:
- Všechny trenéry dané sportovní aktivity (např. šachu). [alespoň jméno a příjmení]
- Všechny sportovce s nenulovým předplaceným kreditem. [alespoň jméno a příjmení]
- Program celého sportoviště v zadaném časovém rozmezí. [alespoň název aktivity, datum, čas a trenér]
- Program daného zázemí (hřiště) v zadaném časovém rozmezí. [alespoň název aktivity, datum, čas a trenér]
- Všechny sportovce, kteří jsou zároveň trenéři. [alespoň jméno a příjmení]
- Všechny události, na kterých se mohou potkat dva vybraní sportovci. [alespoň název aktivity, datum a čas]
- Všechny sportovce přihlášené na zadanou sportovní aktivitu (např. fotbal) v zadaném časovém období. [alespoň jméno a příjmení]
- 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]
- Celkový výdělek (tj. peníze získané od sportovců) sportoviště v zadaném období. [jedno číslo]
- 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, …)
- (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
- Z úkolu lze získat 100 bodů (plus 5 bonusových za poslední dotaz).
- Termín odevzdání: 22.12.2024, 23:59 CET
- Za každou započatou hodinu zpoždění je penalizace 10 bodů.
- Odevzdávejte emailem na tomas.urbanec@upol.cz s předmětem DASY - zápočtový úkol.
- Předmět emailu dodržujte pro autoamtické zpracování a potvrzení doručení emailu.
- Pokud cokoliv není jasné, ozvěte se mailem nebo na cvičení.
- Výsledky úkolů