====== Semestrální práce ======
==== CP-0 Sdělení tématu (1 bod) ====
* Pomocí několika vět popište téma své práce. V krátkosti popište i motivaci, proč vámi vybrané téma budete zpracovávat.
* Uvažujte takové téma, které jednak zahrnuje jak (taxonomický) popis systému, tak provozní data (například měření, periodická realizace, atp).
* Vyberte si takové téma, u kterého v rámci svých aktuálních znalostí dokážete zrealizovat tak, aby odpovídalo níže uvedeným požadavkům. V případě nejistoty kontaktujte cvičícího.
* Téma v rámci skupiny musí být jedinečné, nesmí být identické s ukázkovými tématy probíranými na cvičeních a přednáškách.
==== CP-1 Konceptuální model (20 bodů) ====
* Pomocí aplikace [[https://erdia.stejspet.cz/|ER Dia]] vytvořte relační konceptuální model, který odevzdejte ve formě archivu obsahujícího
* XML dokumentu //cp0-krm.xml//
* PDF dokumentu //cp0-krm.pdf// obsahující obrázek a krátký popis modelu/technické zdůvodnění použitého konstruktu.
* Konceptuální model musí obsahovat nejméně 5 entitních typů, počet entitních typů by neměl přesahovat 10.
* Pro účely konceptuálního modelu nezavádějte žádné umělé identifikátory.
* Na základě technických důvodů navrhněte konceptuální model, který obsahuje alespoň jednou:
* jednoduchý, strukturovaný a vícečetný atribut
* vazbu 1:1, 1:N a N:M s použitím kardinalit 0..1, 1..1, 0..N, 1..N
* rekurzivní nebo reflexivní vazbu
* dědičnost
* slabý entitní typ
* V modelu uveďte relevantní identifikátory, alespoň u jednoho entitního typu zaveďte (neuvedení relevantního identifikátoru je považováno za chybu)
* složený identifikátor
* více identifikátorů
==== CP-2 Relační model (10 bodů) ====
* Transformujte konceptuální model (CP-1) na relační model v textové podobě, odevzdejte ve formě archivu obsahující
* obrázek //cp1-krm.png// obsahující (případně opraveného) konceptuálního modelu
* XML dokument //cp1-krm.xml// obsahující konceptuální model
* HTML dokument //cp1-krm.html// obsahující relační model.
* Pokud to považujete za vhodné, doplňte předchozí konceptuální model o nové entity/vztahy/charakteristiky.
* Využijte textovou notaci //Tabulka (__Klíč__, Atribut1, Atribut2) //, uvádějte cizí klíče. Neuvažujte NULL hodnoty.
- Operace(čas, zákazník, čas, zaměstnanec, čas, exemplář/u>, typ_operace)
- FK: zákazník ⊆ Zákazník(jméno)
- ...
- R(...)
==== CP-3 SQL - Vytvoření databáze, dotazy na data (30 bodů) ====
* Transformujte relační model (CP-2) na ER model a z něho vyplývající SQL dotazy vytvářející databázi, nad touto databází formulujte dotazy na data, odevzdejte ve formě PDF dokumentu obsahující
* Obrázek - ER model a relační model
* SQL dotazy pro vytvoření databáze včetně adekvátních integritních omezení, zejména pak zavedení
* adekvátních typů u jednotlivých atributů
* atributového integritního omezení
* tabulkového integritního omezení
* cizích klíčů včetně (technicky zdůvodněné) direktivy ON UPDATE/DELETE
* klíčů a primárních klíčů, popřípadě zaveďte umělé klíče, pokud je to vhodné
* SQL dotazy pro získání údajů z databáze pokrývající alespoň jednou
* vnější spojení tabulek
* vnitřní spojení tabulek
* podmínku na data
* agregaci a podmínku na hodnotu agregační funkce
* řazení a stránkování
* množinové operace
* vnořený SELECT
* U každého dotazu slovy popište jeho činnost, uveďte dotaz a proveďte screenshot výsledku dotazu, který je vrácen klientem.
* Pro účely tohoto úkolu je nezbytně nutné
* Založit veškeré tabulky ve vaší studentské databázi na serveru slon.felk.cvut.cz
* Všechny SQL dotazy musí být (bezchybně) spustitelné na uvedeném serveru.
* Naplnit založené tabulky relevantním počtem dat
* Naplnit jednu tabulku (s klíčovým významem pro zpracovávané téma) větším množstvím (cca ~32k) “provozních” dat
* Nepoužívat ALTER TABLE pro přidávání integritních omezení.
* Doporučené nástroje:
* MicroOLAP for Postgresql
* DB Designer
* {{:courses:b0b36dbs:tutorials:senzorovasit.png|Demo ukázka ER modelu}}
==== CP-4 Pokročilé databázové technologie (10 bodů) ====
* Databázi CP-3 rozšiřte o další pokročilé technologie, do PDF dokumentu uveďte stručný komentář a potřebné SQL dotazy.
* V rámci tohoto odevzdání demonstrujte
* Zavolání transakce a sady dotazů včetně nastavení vhodné úrovně izolace, uveďte konflikt, který by mohl vzniknout, pokud by nebylo použito transakce
* Vytvoření a použití pohledu
* Vytvoření a použití triggeru
* Vytvoření a použití indexu, přičemž s pomocí relevantní analýzy diskutujte přínos využití takového indexu.
==== CP-5 Základ JPA aplikace (19 bodů) ====
* Na databází CP-3 vystavte základ javové aplikace využívající JPA, který obsahuje zejména
* datový model odpovídající celé databázi zahrnující
* Many To Many vazbu
* dědičnost
* DAO vrstva zajišťující nutný nízkoúrovňový přístup k datům včetně parametrizovaného dotazu
* Servisní vrstva volající DAO vrstvu obsahující 5 vybraných užití vašich dat, specializovaný zejména na zapisovací operace a pokrývající transakci z CP-4.
* Odevzdává se formou odevzdání relevantní části JAVA projektu, běh aplikace v rámci odevzdání je nutné předvést cvičícímu.
K vygenerování Entit z databáze je možno použít vhodného nástroje, který je součástí IDE. Viz
* ukázka generování JPA entit z databázového schématu - Netbeans
{{ :courses:b0b36dbs:tutorials:screencast_from_2.5.2024_14_56_43.webm | Ukázka generování JPA entit z databázového schematu - Netbeans}}
* poznámky ke generování JPA entit z databázoveho schematu - IntelliJ IDEA
* File -> Project Structure -> Modules -> přidat JPA
* View -> Tool Window -> Persistence -> přidat datový zdroj
* Persistence -> Persistence Generator -> By Database Schema
* (nebo) DB Viewer -> (Database) -> Create JPA Entities from DB