====== 1. konzultace ====== Jeden týden po této konzultaci by jste měli odevzdat [[https://cw.fel.cvut.cz/wiki/courses/bd6b33dbs/semestralni_prace|zadání semestrální práce]]. Pokud zadaní odevzdáte v průběhu příštího týdne, můžete jej ještě po prokonzultovat. Osnova celého předmětu: - Typy architektury informačního systému, informační toky - Základy modelování dat, E-R diagramy, relační model, integritní omezení, referenční integrita, normální formy - Dotazování v relačních databázích, jazyk SQL, zálkadni a pokročilé dotazy, agregační funkce, vnořené dotazy - Transakce, jejich serializovatelnost, zamykání, stupně izolovanosti, uváznutí transkací, jejich prevence a řešení - Objektově-orientované databáze, objektově-relační mapování, JDBC, JPA 2 - Cursor, view, uložené procedury, triggery, indexy, efektivní implementace stromových struktur v databázích - Stromové struktury v relační databázi - High availability, load balancing, replikace dat - GIS (geografické informační systémy), prostorové indexační techniky, datové sklady - Moderní trendy databázových systémů Literatura: - Pokorný J., Valenta M.: Databázové systémy, Nakladatelství ČVUT, Praha, 2013, ISBN 978-80-01-05212-9 Osnova 1. konzultace: - seznámení s předmětem (konzultace, semestrální práce, kontrolní body) - podmínky zápočtu (průběžná práce: odevzdané všechny části semestrální práce, kontrolní body, včas odevzdaná semestrální práce: max 35 bodů, penalizace za podní odevzdání) - podmínky úspěšného zakončení předmětu (zkouška: max 65 bodů) - ukázka modelu databáze - ukázka připojení k databázi - konzultace možných zadání semestrální práce ===== Slovo úvodem ===== Vážení studenti, níže jsou informace k vaší první konzultaci. Dle pokynů je nezbytné, aby jste si vybrali téma své semestrální práce a popsali co bude váš systém dělat. Téma semestrální práce si můžete vymyslet sami. Celý semestr se budeme v tomto předmětu zabývat databázemi. Konkrétně vás budeme učit pracovat s OpenSource databázovým systémem [[http://www.postgresql.org/|PostgreSQL]]. V každém cvičení jsou vám prezentovány ukázky, které by vám měli pomoci zvládat výuku. Věnujte proto prosím pozornost sekci s důležitými odkazy, které budou vždy uvedeny ve spodní části. ===== Náměty na zadání semestrálních prací ===== ** Při vypracovávání semestrálních prací dbejte na zabezpečení dat proti zneužití.** - **Informační systém dopravního podniku.** Navrhněte strukturu databáze a naprogramujte aplikaci, která bude evidovat linky, zastávky, jízdní řády, vozidla z jednotlivých vozoven / garáží a zejména aktuální záznam o projeté trase (po zastávkách). - **Informační systém knihovny.** Navrhněte strukturu databáze a naprogramujte aplikaci, která bude evidovat knihy, exempláře, autory, výpůjčky. - **Podnikový informační systém.** Navrhněte strukturu databáze a naprogramujte aplikaci, která bude evidovat zakázky, objednávky, faktury, platby, pohledávky a závazky. - **Informační systém pojišťovny.** Navrhněte strukturu databáze a naprogramujte aplikaci, která bude evidovat pojistky, klienty, pobočky, pojistná plnění, pohledávky a závazky. - **Informační systém školy.** Navrhněte strukturu databáze a naprogramujte aplikaci, která bude evidovat předměty, učitele, žáky, zkoušky, zápočty. - **Rezervační systém místností.**Navrhněte strukturu databáze a naprogramujte aplikaci, která bude evidovat místnosti, zájemce o rezervaci místnosti, požadavky na rezervaci a rezervace. - **Informační systém skladového hospodářství.** Navrhněte strukturu databáze a naprogramujte aplikaci, která bude sloužit pro správu skladových zásob, evidenci objednávek, dodavatelů, zboží na skladě, aktuálních cen a pohybu zboží. - **Informační systém sítě supermarketů.** Navrhněte strukturu databáze a naprogramujte aplikaci, která bude evidovat supermarkety, zboží na pultech a na skladě, ceny, prodeje, pokladny a vydávat účtenky, příp. generovat objednávky dalšího zboží. - **Finanční informační systém banky.** Navrhněte strukturu databáze a naprogramujte aplikaci, která bude evidovat klienty, úvěry, konta, zůstatky, vydávání platebních karet. - **Burzovní informační systém.** Navrhněte strukturu databáze a naprogramujte aplikaci, která bude evidovat cenné papíry, ceny vč. historie, držitele CP, makléře a uskutečněné obchody. Data lze zadávat, modifikovat a prohlížet. - **Letištní informační systém.** Navrhněte strukturu databáze a naprogramujte aplikaci, která bude evidovat letadla, lety, linky, přílety + odlety, cestující, kapacitu linek. - **Evidence vědeckých projektů.** Navrhněte strukturu databáze a naprogramujte aplikaci, která bude evidovat projekty, přidělené finance, úlohy, účastníky projektu, dokumenty, vyvinuté výstupy a sledovat původní plán. - **Armádní informační systém.** Navrhněte strukturu databáze a naprogramujte aplikaci, která bude evidovat vojáky, zbraně, útvary, techniku, dovolenky a pod. - **Evidence obyvatelstva (zdravotní pojišťovny).** Navrhněte strukturu databáze a naprogramujte aplikaci, která bude evidovat základní údaje o obyvatelstvu, tj. osobní údaje, údaje o jejich příjmech v jednotlivých měsících, odvody na zdravotní a sociální pojištění, výdaje za výkony zdrav. pojišťovny. - **Systém zdravotnických informací.** Navrhněte strukturu databáze a naprogramujte aplikaci, která bude evidovat statistické údaje o nemocnosti obyvatelstva, tj. údaje o nemocnicích, zdravotních zařízeních, specializovaných pracovištích, provedených výkonech, jejich hrazení pojišťovnami a procentech úspěšnosti. Uživatel by měl mít možnost nadefinování vlastního analytického dotazu. - **Nemocniční informační systém.** Navrhněte strukturu databáze a naprogramujte aplikaci, která bude evidovat základní údaje o pacientech v nemocnici, tj. osobní údaje, jejich zdravotní karty, zdrav. pojišťovnu, osobní anamnézu, průběhu hospitalizace, užitých lécích a provedených výkonech. - **Systém plánování výroby.** Navrhněte strukturu databáze a naprogramujte aplikaci, která bude evidovat komponenty - součástky, výrobní postupy, výrobní kapacity, objednávky a dodávky a sledovat stav/vytížení výrobní linky. - **IS charterové letecké společnosti.** Navrhněte strukturu databáze a naprogramujte aplikaci, která bude evidovat letadla, destinace, objednávky, cestující, palivo, plán oprav. Data lze zadávat, modifikovat a prohlížet. - ** Platební karty.** Evidujte karty, prostředky na účtu, zákazníky, platební místa, bankomaty včetně jejich aktuální hotovosti, transakce ===== Popis semestrální práce ===== Jako první kontrolní bod je po vás vyžadováno vytvoření vašeho zadání či zvolení navrhovaného zadání. Kromě toho, je potřeba, aby jste vypracovali dokument, v kterém několika věty 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. Vypracování této části semestrální práce je povinné, nicméně není bodované. Slouží hlavně pro vás, aby jste si ujasnili co za systém vlastně vytváříte. ===== Typy architektury informačního systému, analýza informačních toků, základy modelování dat, E-R diagramy, relační model ===== - informační systémy (základy z pohledu databází) {{:courses:bd6b33dbs:ds-1.ppt| osnova1}} - základní typy (klient-server, multi-tier, tenký klient) - informační toky - modelování dat (pro relační databáze) {{:courses:bd6b33dbs:ds-2.ppt| osnova2}} - základy modelování dat - E-R diagramy - relační model ===== Testovací SQL ===== SQL nebo-li Structured Query Language se používá k ovládání relačních databází. Slouží k vytváření tabulek a práce s nimi. Základní tutoriál je například na stránce [[http://www.w3schools.com/sql/|w3schools.com]]. Všechny SQL skripty je nutné pouštět nad funkční relační databází. Funkční relační databázi vám poskytneme, nicméně je vhodné, aby jste si PostgreSQL nainstalovali i na vaše lokální vývojové stanice. Pomůže vám to k tomu, aby jste pochopili jak databáze fungují. CREATE TABLE osoby ( id serial NOT NULL, jmeno character varying(100), prijmeni character varying(100), CONSTRAINT pk_osoby PRIMARY KEY (id) ); CREATE TABLE adresy ( id serial NOT NULL, osoba_id integer, ulice character varying(200), CONSTRAINT pk_adresy PRIMARY KEY (id), CONSTRAINT fk_adresy_osoby FOREIGN KEY (osoba_id) REFERENCES osoby (id) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION ); INSERT INTO osoby(jmeno, prijmeni) VALUES ('jiri', 'novak'), ('petr', 'konecny'); INSERT INTO adresy(osoba_id, ulice) VALUES ((SELECT id FROM osoby WHERE jmeno='jiri'), 'dlouha'), ((SELECT id FROM osoby WHERE jmeno='jiri'), 'kratka'), ((SELECT id FROM osoby WHERE jmeno='petr'), 'u zatacky'); SELECT a.ulice FROM adresy a, osoby o WHERE a.osoba_id=o.id AND o.jmeno='jiri'; Změna hesla: ALTER USER jmeno WITH PASSWORD 'nove_heslo' ===== Další důležité odkazy ===== Tutoriál na SQL: [[http://www.w3schools.com/sql/|SQL - w3schools.com]] Tutorial na postgreSQL a pgAdmin: https://www.youtube.com/watch?v=ghTksCsFBcI https://www.youtube.com/watch?v=1wvDVBjNDys Návrh databáze: Pokorný J., Valenta M.: Databázové systémy (kap. 3) https://www.zdrojak.cz/clanky/navrh-databaze-nosql-vs-sql http://www.root.cz/clanky/modelovani-databazi/ http://www.embt.cz/cs/novinky/37-7-smrtelnych-hrichu-navrhu-databaze.html E-R modelování: https://www.youtube.com/watch?v=Wv1c9K4788A [[https://www.visual-paradigm.com/download/|Visual Paradigm]] [[http://ocw.cvut.cz/moodle/course/view.php?id=157|Enterprise architect]] [[https://www.microolap.com/products/database/postgresql-designer/?FAMILY_CODE=database|MicroOLAP for Postgres]] [[http://sourceforge.net/projects/dbdesigner-fork/|DB Designer Fork]] {{:courses:a4b33ds:erm4-23-with_help.zip| E-R modelář}}