====== 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ář}}