{"id":20665160,"url":"https://github.com/martan03/ids-project","last_synced_at":"2026-02-05T20:34:13.377Z","repository":{"id":238652029,"uuid":"755145150","full_name":"Martan03/IDS-project","owner":"Martan03","description":"Project to the IDS subject","archived":false,"fork":false,"pushed_at":"2024-05-07T07:53:08.000Z","size":243,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-07-24T15:12:01.292Z","etag":null,"topics":["er-diagram","fit-vut","ids","sql","use-case-diagram"],"latest_commit_sha":null,"homepage":"","language":"TeX","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Martan03.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-02-09T14:14:11.000Z","updated_at":"2025-05-13T09:24:56.000Z","dependencies_parsed_at":"2024-05-07T10:07:24.662Z","dependency_job_id":null,"html_url":"https://github.com/Martan03/IDS-project","commit_stats":null,"previous_names":["martan03/ids-project"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Martan03/IDS-project","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Martan03%2FIDS-project","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Martan03%2FIDS-project/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Martan03%2FIDS-project/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Martan03%2FIDS-project/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Martan03","download_url":"https://codeload.github.com/Martan03/IDS-project/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Martan03%2FIDS-project/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29133400,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-05T19:36:52.185Z","status":"ssl_error","status_checked_at":"2026-02-05T19:35:40.941Z","response_time":65,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["er-diagram","fit-vut","ids","sql","use-case-diagram"],"created_at":"2024-11-16T19:28:51.295Z","updated_at":"2026-02-05T20:34:13.361Z","avatar_url":"https://github.com/Martan03.png","language":"TeX","funding_links":[],"categories":[],"sub_categories":[],"readme":"# IDS - Knihovna 1\nProjekt do předmětu IDS (databázové systémy)\n\n## Popis projektu\n\nCílem řešeného projektu je **návrh a implementace relační databáze** na zvolené\ntéma. Projekt se řeší ve dvoučlenných týmech. Je možné pokračovat na projektu z\npředmětu IUS. Pokud se studenti rozhodnou v projektu z IUS nepokračovat, pak si\npříslušné téma dvojice vybere ze seznamu témat.\n\nZvolené téma není potřeba předem nikde hlásit, avšak všechny výsledky musí\nobsahovat název zvoleného tématu *(např. jako komentář v SQL skriptech, či\nvyznačený v diagramech nebo dokumentaci).*\n\nProjekt sestává ze **čtyř částí**, které se odevzdávají ve stanovených\ntermínech do IS VUT. Všechny odevzdávané SQL skripty musí být určené pro systém\nřízení báze dat *(SŘBD)* **Oracle 12c** a musí umožňovat opakované volání, tedy\nodstranění a opětovné vytvoření, nebo rovnou přepsání, objektů v databázi a\njejich dat *(je v pořádku, když při prvním volání skriptu proběhnou neúspěšné\npokusy o odstranění neexistujících databázových objektů).*\n\nČást projektu s diagramy se odevzdává vždy jako jeden PDF soubor. Části\nprojektu s SQL skripty se odevzdávají jednotlivě vždy v jednom souboru s\nprostým textem v kódování znaků UTF-8.\n\n### 1. část - Datový model (ERD) a model případů užití\n\n- Datový model *(ER diagram)* zachycující strukturu dat, resp. požadavky na\ndata v databázi, vyjádřený v notaci UML diagramu tříd *(jako na přednáškách)*\nnebo jako ER diagram např. v tzv. Crow's Foot notaci a model případů užití\nvyjádřený jako diagram případů užití v notaci UML reprezentující požadavky na\nposkytovanou funkcionalitu aplikace používající databázi navrženého datového\nmodelu. Datový model musí obsahovat alespoň jeden vztah\ngeneralizace/specializace *(tedy nějakou entitu/třídu a nějakou její\nspecializovanou entitu/podtřídu spojené vztahem generalizace/specializace; vč.\npoužití správné notace vztahu generalizace/specializace v diagramu)*.\n- Odevzdává se dokument obsahující výše uvedené modely včetně stručného popisu\ndatového modelu. Z popisu musí být zřejmý význam jednotlivých entitních a\nvztahových množin.\n\n### 2. část - SQL skript pro vytvoření objektů schématu databáze\n\n- SQL skript vytvářející základní objekty schématu databáze, jako jsou tabulky\nvč. definice integritních omezení *(zejména primárních a cizích klíčů)*, a\nnaplňující vytvořené tabulky ukázkovými daty. Vytvořené schéma databáze musí\nodpovídat datovému modelu z předchozí části projektu a musí splňovat požadavky\nuvedené v následujících bodech *(je samozřejmě vhodné opravit chyby a\nnedostatky, které se v ER diagramu objevily, popř. provést dílčí změny vedoucí\nke kvalitnějšímu řešení)*.\n- V tabulkách databázového schématu musí být alespoň jeden sloupec se\nspeciálním omezením hodnot, např. rodné číslo či evidenční číslo pojištěnce\n*(RČ)*, identifikační číslo osoby/podnikatelského subjektu *(IČ)*,\nidentifikační číslo lékařského pracoviště (IČPE), ISBN či ISSN, číslo\nbankovního účtu *(vizte také tajemství čísla účtu)*, atp. Databáze musí v tomto\nsloupci povolit pouze platné hodnoty *(implementujte pomocí CHECK integritního\nomezení)*.\n- V tabulkách databázového schématu musí být vhodná realizace vztahu\ngeneralizace/specializace určená pro čistě relační databázi, tedy musí být\nvhodně převeden uvedený vztah a související entity datového modelu na schéma\nrelační databáze. Zvolený způsob převodu generalizace/specializace do schéma\nrelační databáze musí být stručně vysvětlen *(v komentáři SQL kódu)*.\n- Skript také musí obsahovat automatické generování hodnot primárního klíče\nnějaké tabulky ze sekvence *(např. pokud bude při vkládání záznamů do dané\ntabulky hodnota primárního klíče nedefinována, tj. NULL)*.\n\n\n### 3. část - SQL skript s dotazy SELECT\n\n- SQL skript, který nejprve vytvoří základní objekty schéma databáze a naplní\ntabulky ukázkovými daty *(stejně jako skript v bodě 2)* a poté provede několik\ndotazů SELECT.\n- Konkrétně musí tento skript obsahovat alespoň dva dotazy využívající spojení\ndvou tabulek, jeden využívající spojení tří tabulek, dva dotazy s klauzulí\nGROUP BY a agregační funkcí, jeden dotaz obsahující predikát EXISTS a jeden\ndotaz s predikátem IN s vnořeným selectem *(nikoliv IN s množinou konstantních\ndat)*, tj. celkem minimálně 7 dotazů. U každého z dotazů musí být *(v komentáři\nSQL kódu)* popsáno srozumitelně, jaká data hledá daný dotaz *(jaká je jeho\nfunkce v aplikaci)*.\n\n\n### 4. část - SQL skript pro vytvoření pokročilých objektů schématu databáze\n\n- SQL skript, který nejprve vytvoří základní objekty schéma databáze a naplní\ntabulky ukázkovými daty (stejně jako skript v bodě 2), a poté zadefinuje či\nvytvoří pokročilá omezení či objekty databáze dle upřesňujících požadavků\nzadání. Dále skript bude obsahovat ukázkové příkazy manipulace dat a dotazy\ndemonstrující použití výše zmiňovaných omezení a objektů tohoto skriptu (např.\npro demonstraci použití indexů zavolá nejprve skript EXPLAIN PLAN na dotaz bez\nindexu, poté vytvoří index, a nakonec zavolá EXPLAIN PLAN na dotaz s indexem;\npro demostranci databázového triggeru se provede manipulace s daty, která\nvyvolá daný trigger; atp.).\n- Tento SQL skript musí konkrétně obsahovat vše z následujících\n    - vytvoření alespoň dvou netriviálních databázových triggerů vč. jejich\n    předvedení,\n    - vytvoření alespoň dvou netriviálních uložených procedur vč. jejich\n    předvedení, ve kterých se musí (dohromady) vyskytovat alespoň jednou\n    kurzor, ošetření výjimek a použití proměnné s datovým typem odkazujícím se\n    na řádek či typ sloupce tabulky (table_name.column_name%TYPE nebo\n    table_name%ROWTYPE),\n    - explicitní vytvoření alespoň jednoho indexu tak, aby pomohl optimalizovat\n    zpracování dotazů, přičemž musí být uveden také příslušný dotaz, na který\n    má index vliv, a na obhajobě vysvětlen způsob využití indexu v tomto dotazu\n    (toto lze zkombinovat s EXPLAIN PLAN, vizte dále),\n    - alespoň jedno použití EXPLAIN PLAN pro výpis plánu provedení databazového\n    dotazu se spojením alespoň dvou tabulek, agregační funkcí a klauzulí GROUP\n    BY, přičemž na obhajobě musí být srozumitelně popsáno a vysvětleno, jak\n    proběhne dle toho výpisu plánu provedení dotazu, vč. objasnění použitých\n    prostředků pro jeho urychlení (např. použití indexu, druhu spojení, atp.),\n    a dále musí být navrnut způsob, jak konkrétně by bylo možné dotaz dále\n    urychlit (např. zavedením nového indexu), navržený způsob proveden (např.\n    vytvořen index), zopakován EXPLAIN PLAN a jeho výsledek porovnán s\n    výsledkem před provedením navrženého způsobu urychlení,\n    - definici přístupových práv k databázovým objektům pro druhého člena týmu,\n    - vytvoření alespoň jednoho materializovaného pohledu patřící druhému členu\n    týmu a používající tabulky definované prvním členem týmu (nutno mít již\n    definována přístupová práva), vč. SQL příkazů/dotazů ukazujících, jak\n    materializovaný pohled funguje,\n    - vytvoření jednoho komplexního dotazu SELECT využívajícího klauzuli WITH a\n    operátor CASE. V poznámce musí být uvedeno, jaká data dotaz získává.\n- Řešení projektu může volitelně obsahovat také další prvky neuvedené\nexplicitně v předchozích bodech či větší počet nebo složitost prvků uvedených.\nTakové řešení pak může být považováno za nadstandardní řešení a oceněno dalšími\nbody. Příkladem nadstandardního řešení může být řešení obsahující\n    - klientskou aplikaci realizovánou v libovolném programovacím jazyce,\n    přičemž práce s aplikací odpovídá případům užití uvedených v řešení 1.\n    části projektu – tedy aplikace by neměla pouze zobrazovat obecným způsobem\n    tabulky s daty a nabízet možnost vkládání nových či úpravy a mazání\n    původních dát, ale měla by odpovídat pracovním postupům uživatelů (např.\n    knihovník po příchodu čtenáře žádá ID průkazky čtenáře, systém vypíše\n    existující výpůjčky čtenáře s vyznačením případných pokut, knihovník má\n    možnost označit jednolivé výpůjčky jako právě vrácené, případně inkasovat\n    pokuty spojené s výpůjčkami, či přidat nové výpůjčky daného čtenáře),\n    - SQL dotazy a příkazy ukazující transakční zpracování, vč. jejich popisu a\n    vysvětlení na obhajobě – např. ukázka atomicity transakcí při souběžném\n    přístupu více uživatelů/spojení k jedněm datům, ukázka zamykání, atp.\n- Jednotlivé části tohoto skriptu bude potřeba na obhajobě vysvětlit, zejména\nčást s příkazem EXPLAIN PLAN. K tomuto účelu doporučujeme, aby si studenti\npřipravili (nepovinně) k obhajobě poznámky ve formátu krátkého textového\ndokumentu, které mohou být součástí odevzdání.\n\n**Tip:** pro ladění PL/SQL kódu v uložených procedurách či databázových\ntriggerech můžete použít proceduru DBMS_OUTPUT.put_line(...) pro výstup na\nterminál klienta.\n\n## Organizace projektu, řešení a obhajoby\n\nStudenti řeší projekt ve dvojici (v týmu). Každý z výsledků projektu musí být\nvypracován v souladu se studijními předpisy VUT a FIT a autorským zákonem, tj.\nzejména samostatně dvojicí studentů (týmem), která jej předkládá, jako svůj\nvýsledek (viz čl. 11 Směrnice děkana FIT doplňující Studijní a zkušební řád\nVUT).\n\nPro řešení studenti využívají čas volného využití v počítačových učebnách CVT\nnebo řeší na svých počítačích. Cvičící poskytují zájemcům konzultace. Kromě\ntoho jsou zařazena do programu přednášek témata na podporu řešení projektů\nzaměřená na seznámení s prostředím, které budou studenti využívat k řešení\nprojektů, např. databázový server Oracle 12c, vývojové prostředí Oracle SQL\nDeveloper a jazyk PL/SQL – viz výše v části o přednáškách.\n\nSoučástí 4. části je závěrečná obhajoba projektu. Cílem obhajob je zdůvodnit a\ndiskutovat prezentované řešení a prokázat samostatnou práci (na obhajobě můžete\nbýt požádáni o vysvětlení či upřesnění kterékoliv části projektu).\n\n## Hodnocení řešení projektu\n\nZa projekt lze získat celkem 34 bodů, z toho za poslední část lze získat až 19\nbodů. Za výsledek obsahující další funkcionalitu či prvky nepožadované\nexplicitně v zadání projektu lze získat další prémiové body.\n\nCelkově lze dosáhnout nejvýše 34 bodů. Za jednotlivé části řešení je\nnásledující počet bodů:\n\n- **Datový model (ERD) a model případů užití** – max. 5 bodů\n- **SQL skript pro vytvoření základních objektů schématu databáze** – max. 5\nbodů\n- **SQL skript s několika dotazy SELECT** – max. 5 bodů\n- **SQL skript pro vytvoření pokročilých objektů schématu databáze**\n(s obhajobou) – max. 19 bodů\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmartan03%2Fids-project","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmartan03%2Fids-project","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmartan03%2Fids-project/lists"}