===== Semestrální práce ===== Student si na začátku semestru vybere téma semestrální práce. Inspiraci lze najít [[https://cw.fel.cvut.cz/wiki/courses/bd6b33dbs/1.konzultace|zde]]. V rámci semestrální práce musí student odevzdat tyto dílčí části: ==== 1. Zadání semestrální práce ==== Tato dílčí část musí obsahovat: * Název zadání a stručný popis, v kterém několika větami popíšete k čemu bude systém sloužit. Co bude evidovat a jakou jsou jeho nejčastější případy použití. Chceme také, aby jste zmínili úskalí, která by v systému mohla být. * Odevzdání formou PDF (email to ). * Termín odevzdání 10.3.2017, doporučené datum odevzdání 8.3.2017, termín konzultace 8.3.2017-10.3.2017 * Bodové hodnoceni: Tato část není bodově hodnocena. Vypracování této části semestrální práce je povinné. Slouží hlavně pro vás, aby jste si ujasnili co za systém vlastně vytváříte. ==== 2. Návrh modelu DB ==== Jedná se návrh modelu databáze, který budete realizovat. Tato dílčí část musí obsahovat: * Návrh databáze * Minimální rozsah DB: 6 entitních typů, alespoň 1 vztah M:N * Student odevzdá konceptuální model, jemu odpovídající logický model, popis referenčních integrit (alespoň 1) * Odevzdání formou PDF ([[https://cw.felk.cvut.cz/brute/|BRUTE]]). * Termín odevzdání 24.3.2017, doporučené datum odevzdání 16.3.2017, konzultace 17.3.2017 * Bodové hodnocení: max 4 body * Penalizace za pozdní odevzdání: -2 body * každý započatý týden po deadline. ==== 3. DB model v DB ==== Jedná se o přípravu SQL skriptů, na jejichž základě bude možné vytvořit DB, kterou student navrhl v předchozím bodě. Dílčí části jsou: * SQL skripty, které vytvoří DB a vloží do ní ukázková data. * DB bude také vytvořená v databázovém systému, který poskytujeme (slon.fel.cvut.cz - vaše SQL skripty budu na tomto serveru testovat, na případnou funkčnost na vašich strojích nebude brán zřetel) * SQL skripty budou obsahovat vytvoření tabulek vč. integritních omezení a referenčních integrit a ukázková data, která se do databáze vloží. * Odevzdání formou SQL skriptů ([[https://cw.felk.cvut.cz/brute/|BRUTE]], pokud vám nepůjde uploadovat přímo soubor .sql, zabalte ho do .zip). * Termín odevzdání 7.4.2017, doporučené datum odevzdání 30.3.2017, konzultace 31.3.2017 * Bodové hodnocení: max 6 bodů * Penalizace za pozdní odevzdání: -3 body * každý započatý týden po termínu. ==== 4. Práce s daty ==== Jedná se o demonstraci toho, jak bude váš systém pracovat s daty v DB. Dílčí části jsou: * SQL skripty, které demonstrují operace nad vaší DB (bude se jednat o dotazy insert, select, update, delete, minimálně jednu uloženou proceduru, trigger, pohled a index). * Dokument v PDF, který specifikuje použití vaší DB. Bude požadováno minimálně 5 dotazů: * 2x SELECT: Například zjištění, jací uživatelé mají půjčeny konkrétní knihy, nebo kolik knih v kategorii "dětské" jsou aktuálně vypůjčeny (toto jsou pouze demonstrativní příklady). V PDF dokumentu budou uvedeny 2 business use-cases, související tabulky a relace přes které se dotazy budou realizovat. V dotazech musí být smysluplně demonstrována agregace (GROUP BY), spojení mezi více tabulkami (JOIN) a vnořený dotaz. * 2x UPDATE: Například úprava sériového čísla knihy (toto je pouze demonstrativní příklad). V PDF dokumentu bude uveden business use-case a související tabulky, přes které se bude dotaz realizovat. V dotazech musí být smysluplně demonstrována referenční integrita (ON UPDATE). Dále musí být demonstrováno zachování konzistence dat při paralelním spuštění více dotazů (TRANSACTION). * 1x DELETE: Například odstranění kategorie knihy (toto je pouze demonstrativní příklad). V PDF dokumentu bude uveden business use-case a související tabulky, přes které se bude dotaz realizovat. V dotazech musí být smysluplně demonstrována referenční integrita (ON DELETE). * SQL skripty, které demonstrují použití DB na základě use-cases z předešlého bodu. * Odevzdání formou SQL skriptů a PDF se specifikací ([[https://cw.felk.cvut.cz/brute/|BRUTE]] pokud vám nepůjde uploadovat přímo soubor .sql, zabalte ho do .zip). * Termín odevzdání 21.4.2017, doporučení datum odevzdání 13.4.2017, konzultace 14.4.2017 (??? svatek) * Bodové hodnocení: max 6 bodů * Penalizace za pozdní odevzdání: -3 body * každý započatý týden po termínu. ==== 5. Uživatelské rozhraní a desktopová aplikace ==== Jedná se o návrh a vytvoření GUI, pro ovládání aplikace, která používá navržené řešení. Je potřeba vytvořit: * GUI ve Swingu apod. * Vhodně demonstrovat komplexní zpracování (CRUD), vybrané N:M vazby, minimálně v rozsahu požadovaném v dílčích částech 3 a 4 * Použití JPA 2 + JPQL (případně Criteria API) k práci s daty v DB. * Transakční zpracování, volba vhodných stupňů izolovanosti transakcí * Výstupní sestavy obsahující agregovaná data * Demonstrace anomálií při různých stupních izolovanosti (anomálie vynuťte vhodnými prostředky) * Odevzdání archivu (zip), který obsahuje vše k tomuto bodu (SQL skripty, spustitelnou aplikaci, zdrojové kódy a ostatní potřebné soubory pro kompilaci) ([[https://cw.felk.cvut.cz/brute/|BRUTE]]). * Aplikaci musí být možné zkompilovat z uploadovaných souborů a poté spustit. * Do textového souboru případně pdf popište v krocích jak aplikaci zkompilovat, sestavit a spustit. * Pokud bude potřeba nějaký nestandardní postup kompilace anebo sestavení (speciální parametry, build tool, apod.) vysvětlete vše v textovém popisu. * Termín odevzdání: 25.5.2017, doporučené datum odevzdání 19.5.2017, data konzultací: 28.4.2017 a 12.5.2017 * Na poslední konzultaci 26.5.2017 budete aplikaci a zdrojové kódy demonstrovat/vysvětlovat vyučujícímu. * Bodové hodnocení: max 14 bodů * Penalizace za pozdní odevzdání: -5 bodů * každý započatý týden po termínu. ==== 6. Použití pokročilých technik - nepovinná část ==== Tato část je nepovinná, ale v případě její odevzdání můžete dostat body navíc. Dílčí části: * netriviální optimalizace dotazu (EXPLAIN, atp) * netriviální použití uložené procedury * netriviální dotaz * Termín odevzdání: 26.5.2017, doporučené datum odevzdání 19.5.2017, data konzultací: 28.4.2017 a 12.5.2017 * Odevzdání formou předvedení cvičícímu. Tuto část není možné odevzdat po termínu. * Bodové hodnocení: max 5 bodů