KIV/ZIS - semestrální práce Courseware Samostatné práce odevzdání (ideálně během semestru) předvedení prezentace (viz dále) odevzdání přes Courseware (!!) mezní termín: 3. 6. 2016 Kolikrát může být vrácena k přepracování? záleží na rozsahu vad a náladě cvičícího 1/35
KIV/ZIS - semestrální práce témata prací: viz Courseware návrh vícetabulkové databáze (ERA model) navržený model mi přineste během semestru ke kontrole dřív než začnete vytvářet databázi v Ms Access alespoň jedna vazba typu M:N Databázi následně vytvořte v prostředí MS Access. Naplňte ji skutečnými nebo fiktivními daty. 2/35
KIV/ZIS - semestrální práce Vytvořte v SQL (!) výběrové dotazy: dotaz nad jednou tabulkou, s kritériem složeným alespoň ze dvou podmínek dotaz s parametrem dotaz nad více tabulkami s jednoduchým kritériem dotaz s využitím klauzule GROUP BY, příp. HAVING a souhrnné funkce dotazy nevytvářet v návrhovém režimu 3/35
KIV/ZIS - semestrální práce Připravte krátkou prezentaci (v MS PowerPoint): formulace problému (zadání) navržený ERA model (2x před a po rozkladu vazby M:N) popis tabulek příklad výběrových dotazů v SQL zhodnocení délka prezentace cca. 3 minuty, max. 5 minut 4-6 slajdů zaměřte se opravdu jen na nejdůležitější informace 4/35
KIV/ZIS - návrh tabulek vícehodnotová položka MS Access umí vícehodnotové datové typy, ale v praxi jsou většinou nepoužitelné špatně strelec zasahy Pavel 4, 9, 2 Michal 1, 5, 7 lépe strelec zasah1 zasah2 zasah3 Pavel 4 9 2 Michal 1 5 7 Toto ve skutečnosti také není ideální. 5/35
KIV/ZIS - návrh tabulek variabilní počet sloupců MS Access (a databáze obecně) neumí např. střelci mohou mít libovolné množství zásahů naivní řešení - vytvořit mnoho fixních předpřipravených sloupců - plýtvání místem, omezené množství špatně strelec z1 z2 z3 z4 z5 z6 z7 Martin 3 3 8 Franta 9 1 5 7 2 6/35
KIV/ZIS - návrh tabulek variabilní počet sloupců správně strelec Martin Franta poradi hodnota 1 3 2 3 3 8 1 9 2 1 3 5 4 7 5 2 Jak se vytvářejí vazby bude ukázáno později. 7/35
KIV/ZIS - návrh tabulek opakující se hodnoty plýtvání místem, jsou-li (především textové) hodnoty dlouhé Hromadné upravení - např. bude tabulka, kde bude sloupeček se jménem člověka a město, kde bydlí. Když se město přejmenuje, musí se upravit všechny příslušné záznamy - zbytečná práce. špatně správně jmeno mesto jmeno Martin Franta Alena Jana Praha Plzeň Plzeň Plzeň Martin Franta Alena Jana mesto Praha Plzeň 8/35
KIV/ZIS - návrh tabulek vypočítaná položka sloupec, který se dá vytvořit výpočtem z ostatních položek v záznamu, by neměl být součástí tabulky výpočet se provede v dotazu špatně obdelnik sirka vyska obvod obsah malý 2 4 10 8 velký 30 15 90 450 9/35
KIV/ZIS - ERA model Entity (objekt z reálného světa) tabulka Relation (vztah mezi entitami) vztahy mezi tabulkami Attribute (vlastnosti entit) sloupeček tabulky ERA model je grafická reprezentace struktury databáze dělá se před vytvářením databáze!! - slouží k rozmyšlení, jak bude databáze vypadat 10/35
KIV/ZIS - ERA model Chenova notace číslo název datum spl. počet faktura obsahuje položka odběratel cena poznámka 11/35
KIV/ZIS - Chenova notace není moc přehledná problém pojmenování vazeb - směr pohledu faktura obsahuje položka nebo faktura je obsažena v položka nepoužívejte Chenovu notaci - ale letmo se naučte, kdyby se na to někdo ptal u zkoušky 12/35
KIV/ZIS - ERA model tabulková varianta (přehlednější) faktura číslo datum spl. odběratel poznámka 1 N položka název počet cena nebo v implementačním tvaru faktury cislo datum_spl odberatel poznamka 1 N polozky ID nazev pocet cena primární klíč (znázorňuje se podtržením) 13/35
KIV/ZIS - kardinalita vazeb Kolik položek z tabulky A se váže na kolik položek z tabulky B? 3 typy 1:1 - na 1 položku z tabulky A připadá maximálně 1 položka z tabulky B, ta patří jen té jediné z A 1:N - na 1 položku z tabulky A připadá libovolné množství položek z tabulky B, na 1 položku z tabulky B připadá maximálně 1 položka z tabulky A N nepředstavuje žádné konkrétní číslo M:N - bez omezení množství vazeb v obou směrech 14/35
KIV/ZIS - kardinalita vazeb 1:1 používá se jen v případech, kdy jsou některé řádky řídké Př.: marketingová firma zakoupí tabulku s 1 milionem lidí a chce z nich 10000 lidí vybrat a nabídnout jim produkt. Firma chce vést záznamy o tom, kdy jim zatelefonovali a zda jim úspěšně produkt prodali (každého budou otravovat jen 1x). Do tabulky s lidmi přidám sloupečky datum_volani a prodano s počáteční hodnotou NULL (ještě nevolali a neví, jestli prodali). Tabulka bude obsahovat 99 % řádků bez hodnot - plýtvání místem. Lepší: vytvořím extra tabulku, kam budu ukládat jen hodnoty o volání a prodeji bude mít vazbu 1:1 s původní tabulkou používejte opatrně (vědět proč) 15/35
KIV/ZIS - kardinalita vazeb 1:N jedné entitě odpovídá několik (N) jiných entit např. vztah třída - žák jeden žák navštěvuje jednu třídu jedna třída se skládá z více žáků nejběžnější případ vazby 16/35
KIV/ZIS - kardinalita vazeb M:N několika (M) entitám odpovídá několik (N) jiných entit např. vztah student - předmět jeden student studuje více předmětů jeden předmět navštěvuje více studentů nejsložitější případ vazby řeší se rozkladem na vazební tabulku a dva vztahy 1:N (více na dalším cvičení) 17/35
KIV/ZIS - kardinalita vazeb 1:1 zákazník 1 1 zatelefonování 1:N faktura 1 N položka M:N člověk M N autobus 18/35
KIV/ZIS - pojmenování vazeb pomůže lepšímu porozumění ER(A) modelu zákazník 1 1 kontaktování komu zatelefonování faktura 1 N obsahuje obsažena v položka člověk M jezdí v N vozí autobus 19/35
KIV/ZIS - mikroúkol doplňte vazby a jejich kardinality do ER modelu zaměstnanci používají služební auta kniha jízd kniha_jizd zamestnanci sluzebni_auta 20/35
KIV/ZIS - mikroúkol doplňte vazby a jejich kardinality do ER modelu zaměstnanci používají služební auta kniha jízd (každý zaměstnanec pro každé auto svou knihu jízd) kniha_jizd N N 1 zamestnanci N 1 sluzebni_auta M 21/35
KIV/ZIS úkol vytvořte tabulku evidencí závozu tankového piva datum, název piva, množství (litry), cena (litr), zaplaceno (a/n) do tabulky vložte nějaká data vytvořte formulář pro vkládání nových záznamů vytvořte dotaz, který vypíše množství zavezeného piva podle dní podle názvu piva vytvořte dotaz, který vypíše nezaplacené dodávky zkuste si vytvořit tiskovou sestavu 22/35
KIV/ZIS - (ne)povinné hodnoty Co když nechci mít některé položky vyplněné? např. mám seznam lidí a jejich adres, ale některé adresy neznám Co tam potom je, když tam nic není? NULL 23/35
KIV/ZIS - NULL Co je to ten NULL? Co je to nic? Ukažte mi nic! Sáhněte si na nic! (Bokr) NULL je beztypová hodnota, která reprezentuje nevyplněnou položku NULL není nula! úkol: zkuste u některého sloupečku tabulky nastavit povinnost vyplnění a vytvořit řádek s vynecháním hodnoty 24/35
KIV/ZIS - text s nulovou délkou textový sloupeček může mít nastavenou povinnost vyplnění, ale může obsahovat prázdný text text s nulovou délkou je stále text, není to NULL 25/35
KIV/ZIS - řazení stáhněte si databázi studenti.accdb http://home.zcu.cz/~krauz/zis/2_studenti.accdb zkuste řazení dat v tabulce podle jednotlivých sloupců (vzestupně i sestupně) zkuste řazení podle jednotlivých sloupců ve formuláři 26/35
KIV/ZIS - filtry databáze studenti.accdb formulář studenti_form vyzkoušejte: jednoduché filtrování filtrování podle výběru (jedné/více položek) filtrování podle formuláře totéž vyzkoušejte i přímo na tabulce studenti 27/35
KIV/ZIS - index index slouží k urychlenému hledání nebo řazení př.: mám tabulku se 100 miliony záznamů a chci najít záznamy týkající se konkrétního datumu prohledat všechny záznamy trvá dlouho př.: mám tabulku se 100 miliony záznamů a chci vypsat prvních 1000 podle abecedy seřadit 100 mil. záznamů trvá věčnost 28/35
KIV/ZIS - kdy použít index u tabulek s málo záznamy (desítky) nemá index význam bude-li tabulka objemná a budu-li v ní hledat/budu-li záznamy řadit zapnout indexování u potřebných sloupců Nastavit index jen u skutečně potřebných sloupců! 29/35
KIV/ZIS - unikátní hodnoty chci sloupeček, který bude obsahovat unikátní hodnoty např. evidence výrobků a jejich výrobní čísla chci, aby mi databáze nedovolila vložit duplicitní hodnotu úkol: vyzkoušejte 30/35
KIV/ZIS - dotaz s výpočtem př.: mám tabulku sklad, která má sloupce pocet_kusu a cena_za_kus, a chci tabulku vypsat s extra sloupečkem, kde bude celková cena výrobků na skladě (pocet_kusu * cena_za_kus) 31/35
KIV/ZIS - dotaz s řazením a filtrováním př. opět sklad, chci vypsat jen položky s cenou mezi 10 a 13 a chci je vypsané podle množství od nejpočetnějších filtraci a řazení lze aplikovat i na vypočtené sloupečky 32/35
KIV/ZIS - řazení/filtrování vypočtených MS Access neumí indexovat vypočtené hodnoty př.: mám tabulku se 100 miliony záznamů a chci vypsat všechny, jejichž součin ceny a kusů je v nějakém rozmezí To je PROBLÉM! 33/35
KIV/ZIS - řazení čísel je-li sloupeček číselného typu, pak se není čemu divit řazení numerické 1, 2, 3,..., 10, 11, 12,... 20, 21,... je-li sloupeček textového typu a obsahuje čísla, pak se může člověk divit řazení alfanumerické 1, 10, 11, 12, 13,..., 19, 2, 20, 21,... 34/35
KIV/ZIS Děkuji za pozornost. 35/35