Modul 5
Použití databází
Co je to databáze? Databáze v pravém slova smyslu je prostorem obsahujícím data, případně ještě metadata (tedy data o datech - nesoucí například informace o struktuře databázových tabulek). Databáze tedy není ve skutečnosti konkrétní programový produkt, databáze není ani Oracle Database, ani Sybase, IBM DB2 či MS SQL Server 2005, nebo MS Office Access 2007. A to ani přes to, že se o jednotlivých produktech významných databázových firem můžeme dočíst jako o databázích. Ve skutečnosti se jedná o databázové platformy.
Data a informace Zjednodušeně lze data charakterizovat jako libovolnou posloupnost znaků, přičemž se nemusí jednat pouze o bity či bajty, tedy o data tak, jak je chápeme v oblasti výpočetní techniky. Pod posloupností se mohou skrývat libovolné znaky, třeba i ty, které vůbec neznáme. Data nám mohou, ale nemusí něco konkrétního říkat. V souvislosti s databázovými technologiemi je zřejmé, že nás zajímá především uložení, správa, zpracování a přenos dat. Pořád mluvíme jen o datech, ale v reálné praxi nám přijde jednodušší použít pojem informace. Chceme informaci o tom, kolik je průměrný plat. Chceme informaci o tom, kolik zaměstnanců máme. Chceme informaci, kdy nám letí letadlo. Důležitý je význam dat, proto je pojem informace spojen až s nějakým konkrétním významem, tzv. sémantikou dat. Z dat se stávají informace teprve tehdy, pokud jsme z nich (tedy v roli příjemce) schopni získat nějaké poznatky, vědomosti, znalosti. Pokud tedy příjemce rozumí významu v datech ukrytém, znamenají pro něj data také nějakou informaci. Pro správné pochopení vztahu pojmu data a informace je nezbytné si uvědomit, že ne všechna data musí nést nějakou informaci. Ve světě počítačů je tento vztah mezi daty a informacemi docela markantní. Jako příklad si můžeme uvést např. obrázek. Je to v podstatě jen soubor dat z jedniček a nul. Teprve až v případě použiti správného prohlížeče grafických dat získáme z obrázku informaci. Jiným příkladem muže byt posloupnost nul a jedniček vylisovaných na hudebním CD. Až v případě, že vložíme CD do přehrávače, bude mít pro nás audio nahrávka nějaký význam, tedy bude možné tyto data považovat za informaci.
5
Modul 5
Použití databází
Databáze Jak jsme již řekli v úvodu, databáze je jenom prostorem kde máme uložené data, ze kterých je mezné získat informace. Databáze jsou dneska všude kolem nás. I vy jistě vlastníte nějakou databázi. Příkladem muže byt např. vás mobilní telefon. Mimo spousty jiných v něm máte databázi kontaktů, SMS zpráv, historie hovorů atd. Existují ale mnohem větší databáze. Typickým příkladem je nemocnice, kde se vede, kromě toho jako v každé jiné firmě evidence pracovníků, také velká databáze pacientů a s nimi spojené chorobopisy, záznamu o výkonech pro zdravotní pojišťovny atd. Další příklad kdy je možné s úspěchem použít databázi, je rezervační systém. Ať už pro hotely, nebo např. systém rezervací u letecké společnosti, kde může být databáze roztroušena doslova po celém světě. I vaše banka má údaje o vašich účtech uložené v databázi, stejně jako státní správa o tom jestli a jak platíte daně a odvody. Ve vašem oblíbeném obchodě používají databázi pro evidenci a správu prodávaných položek. A takhle můžeme určitě pokračovat hodně dlouho.
Struktura databáze Databáze jako datový prostor nám bez konkrétní databázové platformy, resp. nástroje, který bude schopen databázová data interpretovat, je na nic. Vždy když chceme použit databázi, musíme se rozhodnout pro nějakou databázovou platformu. Dnes jsou populární dva druhy databázi. Relační model databázi, o který se budeme pravě zajímat a ne-relační model. Relační typ databáze má několik základních prvků:
Tabulky Tabulka je základním kamenem každé databáze, obsahuje v sobě data, které jsou uspořádány do záznamů (řádky v tabulce) a do polí (sloupce v tabulce). Jedné buňce z tabulky říkáme položka, která vždy patři konkrétnímu záznamu (řádku) a konkrétnímu poli (sloupců). V jednu chvíli muže byt v jedné položce jen jedna hodnota. Než tisíc slov nám pomůže situaci objasnit obrázek:
1. 2. 3. 4.
Definice polí v tabulce Záznam v tabulce Pole tabulky položka tabulky
6
Modul 5
Použití databází
Tabulka je tedy jedním z databázových objektů, tak jak je chápe aplikace Access. Dalšími objekty jsou Dotazy, Formuláře a Sestavy. Tabulky můžete upravovat: přidávat, odebírat záznamy i pole. Musíte si však dávat pozor na definování nových polí, existují totiž jen určité typy polí. Pokud chceme do pole zadávat např. časový údaj, použijeme datový typ „datum a čas“ pro pole s touto informací. Pokud potřebujeme uložit informaci o adrese, jméně a podobně, použijeme jedno, resp. více polí typu „Text a podobné“.
Datové typy Aplikace Access 2007 podporuje 10 různých druhů datových typu. Datový typ Text Poznámka /BLOB Číslo Datum/čas Měna
/MEMO
Popis Alfanumerická data (text, čísla) Alfanumerická data (text, čísla) Číselná data Datumové a časové údaje Peněžní data
Automatické číslo
Vytvoření jedinečné hodnoty
Ano/Ne Objekt OLE Hypertextový odkaz Příloha
logická hodnota (true/false) Propojeni s jinými aplikacemi Webové adresy datové soubory
Poznámka/omezeni Umožňuje uložení až 255 znaků. Umožňuje uložení až 2 GB dat, odlišný přistup k datům, nedá se indexovat
pracuje jako číslo, ale zaokrouhluje se dle národní měny a automaticky doplňuje symbol měny za číslo používá se pro vytvoření identifikace záznamu, při jeho vložení do tabulky
Určit každému poli jeho datový typ je velice důležité z hlediska budoucího použití a využití informací uložených v těchto polích. Pokud budeme chtít např. informaci o všech zaměstnancích, kteří mají plat vyšší než já, budeme potřebovat porovnávat číselné datové typy. S textovým popisem kolik toho na výplatní pásce má ten či onen zaměstnanec si počítač neporadí. Proto je potřeba vždy věnovat návrhu datových typů v tabulce patřičnou pozornost. Tabulka představuje většinou popis jen jednoho druhu objektu. Jako nejjednodušší příklad databáze si můžeme za vzor vzít evidenci u praktického lékaře. Celou evidenci má na starosti sestřička. Takže když si vede evidenci pacientů, má je přehledně uspořádané v kartotéce a má o všem přehled. Jedna taková kartotéka muže představovat pravé naši tabulku a v ní má jenom jeden druh informací o pacientovi. Jméno, příjmení, rodné číslo atd. Pan doktor ke svojí práci potřebuje ještě někoho, kdo mu bude dodávat zdravotnický materiál, papíry, kancelářské potřeby atd. Evidenci dodavatelů ale určitě nebude mít sestřička v té samé kartotéce jako pacienty. Bude mít zavedenou jinou evidenci v jiné skříni. Podobné je to s tabulkami v databázi. Každá tabulka představuje jenom jeden typ subjektu. Jak jsme již naznačili, každý záznam v tabulce musí být jednoznačné identifikovatelný. K tomuto účelu slouží v tabulce Primární klíč. V naší tabulce může být za takovýto klíč považováno rodné číslo (jedná se totiž o údaj, který je pro každého člověka unikátní). V ostatních případech nemůžeme zaručit jednoznačnost dat, tedy že každý záznam bude mít danou položku jinou. Jako příklad si uvedeme situaci z naší ordinace. Když sestřička zavolá do ordinace Nováka, může se ji stát, že ji ve dveřích bude stát těch Nováku pět. Když ale upřesní svůj požadavek a zavolá si Nováka "ročník 77", ta šance, že 7
Modul 5
Použití databází
přijde ten pravý je již docela velká, stalé však to není jednoznačné určení. Rodné číslo nám určitou jistotu jednoznačnosti dává. Přesto však doporučujeme pro jednoznačnou identifikaci záznamu v tabulce používat číslo, které nenese pro záznam v tabulce žádnou informaci. Ideální je pravé použiti Automaticky generovaného čísla.
Indexy Efektivní vyhledávání dat v databázi je obrovský problém, zejména s ohledem na neustále se zvyšující objem zpracovávaných dat. Jedna z technologií, které nám v tomto mohou pomoci, jsou databázové indexy. Jednotlivé záznamy jsou v databázových tabulkách obvykle uloženy neuspořádaně – nemůžeme se tedy spolehnout na to, že jsou záznamy nějak vnitřně tříděny podle hodnot atributů. Vyhledat konkrétní záznam v neuspořádaném prostoru je neefektivní – při hrubé síle se musí v nejhorším možném případě projít všechny záznamy, v průměru se dostáváme k náročnosti rovné polovině počtu záznamů. Použijeme-li ovšem index, který obsahuje indexovaná data v uspořádané podobě, postačí nám při vyhledávání najít požadovanou hodnotu v indexu a pomocí jednoznačného identifikátoru záznamu vrátit konkrétní požadovaný záznam. Podobně to funguje i u složených indexů (tedy indexů obsahujících více než jeden atribut, například příjmení+jméno+datum narození). Jako příklad si uvedeme situaci z naší ordinace. Záznamy je možné do kartotéky vkládat zcela náhodně – a pak vyhledávání znamená projití všech záznamů – nebo nějakým způsobem uspořádaně, například abecedně podle příjmení a jména pacienta. Obsahuje-li kartotéka oddělovací lístky například s počátečním písmenem, vyhledání konkrétního záznamu pro pacienta Novák František znamená nalezení oddílu pro N a poté konkrétního záznamu. Výkonový zisk je patrný na první pohled. Struktura indexu (oddělovací lístky) samozřejmě mohou jít do libovolné hloubky dle konkrétní potřeby. Například je také možné záznamy rozdělit do více polic či skříní. Jednu výhodu ovšem neupořádaná kartotéka má. Velmi rychlé je oproti vyhledávání vkládaní nových záznamů, sestra či lékař se nemusí nijak rozhodovat o tom, kam záznam vloží. U uspořádané kartotéky musí zjistit, kam daný záznam o pacientovi vlastně vložit. A naprosto stejné je to i u databázových indexů, které vkládání záznamů a případnou změnu dat nad indexovanými atributy mohou výrazně zpomalit. Nevýhodou indexované kartotéky může být i situace, kdy potřebujeme záznamy o pacientech přeskládat podle jiného kritéria či rozdělit do jiných poliček. A již vůbec nám takto řešená kartotéka nepomůže ve chvíli, kdy potřebujeme najít konkrétní záznam či více záznamů podle jiného kritéria, než je příjmení a jméno pacienta, například podle data posledního očkování na tetanus. V databázi bychom toto naštěstí řešili pomocí dalších indexů – u kartotéky bychom mohli založit pomocnou kartotéku se základními údaji. Ta by pak obsahovala například odkaz na konkrétní kartotéku, poličku atd. Přijde ale zase zpomalení, při zakládání nového pacienta, resp. přeočkování stávajícího pacienta, protože by musela sestra konkrétní záznam najít a přeskládat na jinou pozici, kterou musí vyhledat. A podobné jako pomocná kartotéka, tak i nový index bude zabírat nějaké místo. Takže abychom si shrnuli výhody a nevýhody indexu:
8
Modul 5
Použití databází
Výhody – zrychlují významným způsobem vyhledávaní dat, což je v případě databázi její klíčová vlastnost. Nevýhody – vložení nového záznamu má větší režii na zpracování, a každý nový index zabírá svými daty místo na disku. I když nad touto nevýhodou se v dnešním světě Terabytových disků dá úspěšné polemizovat. Závěr je takový, že použití indexu má svůj vyznám a určitě se oplatí indexy používat, ale všeho s mírou.
Relace Relace je velmi důležitým pojmem v relačních databázích. Je to způsob propojení jednotlivých tabulek tak, aby spolu mohly komunikovat a aby jejich propojení umožňovalo svázat vzájemně související data. Při návrhu databáze je totiž běžné, že jsou data rozdělena do jednotlivých tabulek, které jsou propojeny pomocí vybraných údajů ve vybraných sloupcích. Důležité pro nás je zejména to propojení tabulek. Tomuto propojení se říká relace. Sloupec, podle kterého se tabulky propojují, je označen jako primární klíč. Primární klíč je atribut, jehož hodnota je pro každý záznam jedinečná. V relačních databázích jsou 3 typy relací: 1) Relace typu 1:1- je taková relace, že právě jednomu záznamu v jedné tabulce odpovídá právě jeden záznam v tabulce druhé. Jednotlivé záznamy v obou tabulkách jsou spojeny přímo. Tento typ relace se málo kdy používá, protože takto spojené údaje lze vlastně umístit pouze do jedné tabulky. Relace samotná pak slouží zejména pro lepší přehlednost. Relace 1:1 má význam zejména u velmi rozsáhlých tabulek s mnoha sloupci. V takovém případě slouží druhá propojená tabulka jako „odlehčení“ té první, zejména v případě že se s hodnotami v druhé tabulce příliš často nepracuje.
2) Relace typu 1: N - je nejpoužívanějším typem. Vyjadřuje, že právě jednomu záznamu v první tabulce odpovídá více záznamů v tabulce druhé. Důležité je zvolit si primární klíč v tabulce, která bude tvořit relaci 1, na sloupec který bude propojen s druhou tabulkou (N)
3) Relace typu N: N (někdy také označována jako N: M) - Relace tohoto typu je méně častá. Definuje, že několika záznamům v první tabulce odpovídá několik záznamů v tabulce druhé. V případě používání takové relace, je pro její vytvoření nutná tzv. dekompozice vztahů neboli jejich rozdělení vytvořením tzv. spojovací tabulky. Tím se vlastně vytvoří pomocná tabulka spojením dvou primárních klíčů, ta je pak definována relací typu 1:N.
Příkladem relace mezi tabulkami muže byt záznam pacienta v primární tabulce a druhá tabulka, která bude obsahovat záznamy o jeho návštěvách v ordinaci. Daný pacient je z pravidla u svého lékaře víckrát na návštěvě z nejrůznějšího důvodu, a proto je každá návštěva zaznamenaná do jiného záznamu v tabulce o návštěvách. Tato tabulka ale musí obsahovat identifikaci pacienta pravé přes primární klíč a tím bude možné určit, kterému pacientovi záznam o návštěvě patři.
9
Modul 5
Použití databází
Při navrhování databáze minimalizujete redundanci (duplicitu) dat rozdělením informací do mnoha tabulek s různými předměty. Potom tyto data spojíme prostřednictvím relací a to umístěním společných polí do souvisejících tabulek. Například relaci typu 1:N vyjádříte tak, že primární klíč z tabulky „1“ přidáte jako další pole do tabulky „N“. Aplikace Access data opět spojí tak, že vezme hodnotu z tabulky „N“ a vyhledá odpovídající hodnotu v tabulce „1“. Tímto způsobem hodnoty v tabulce „N“ odkazují na odpovídající hodnoty v tabulce „1“.
Referenční integrita Jak vidíme na obrázku, je na něm graficky znázorněna pravé tato situace. Všechno krásně funguje, ale jsou tu jisté situace, které nám můžou toto krásné fungování relace narušit. Pokud smažeme lékařský záznam, nic se nestane, pacient bude mít jen o jeden záznam míň. Co se ale stane, když odstraníme pacienta? V tabulce obsahující lékařské záznamy nám zůstanou osiřelé záznamy, které nikomu nepatří, přesto v tabulce zabírají místo. Na první pohled se zdá, že je vše v pořádku, vždyť takové záznamy nebudou narušovat data jiných pacientů, ani jejich záznamy, takže nějaké osiřelé záznamy nás nemusí zajímat. Opak je pravdou. Smyslem databází je ne jenom jejich schopnost data shromaždovat za účelem jejich “ploché” interpretace. Databáze poskytuje i jiný druh informací zprostředkovaný skrze statistiky a různé přehledy. Tady nám situace s osiřelými záznamy hodně zkreslí informaci o počtu návštěv za nějaké období za všechny pacienty. Jeden příklad za všechny: Pan Novák má 4 lékařské záznamy, pan Král má 2 záznamy a pani Fialová má 5 záznamů o návštěvě lékaře. Dohromady 11 záznamů o lékařské kontrole. Teď vymažeme záznam paní Fialové a počet záznamů o lékařské kontrole je pořád 11, ale jen dva pacienti. Pak si necháme vypsat podrobný rozpis o lékařských záznamech dle pacientů a zjistíme, že 4+2 je 11. Tomuto problém můžeme předejít mechanizmem, který je nazýván: Referenční integrita. Tato vlastnost relace bude mít za následek, že pokus vymazání pacienta skončí chybovým hlášením, že na daného pacienta jsou navázány přes relaci
10
Modul 5
Použití databází
jiné záznamy a tudíž není možné tento záznam smazat. Správně musíme odstranit všechny záznamy o lékařských záznamech daného pacienta a potom smazat pacienta. Tedy účelem referenční integrity je zabránit vzniku osiřelých záznamů a udržovat reference synchronní, aby k této hypotetické situaci nikdy nedošlo.
11
Modul 5
Použití databází
Návrh databáze Správně navrhnout databázi, která by například dokázala pokrýt potřeby nějaké ordinace je velice těžký úkol a zpravidla se nepovede napoprvé ani profesionálům, kteří spravují takou ordinaci. Zpravidla je potřebné správným návrhem databáze pověřit databázového specialitu, který ale musí být zároveň zběhlý i v řízení nějaké ordinace, vyznat se ve výkazech pojišťoven, vědět jaké data vyžaduje statistický úřad od lékařů atd. Proto u zrodu dobře navržené a správně fungující databáze většinou stojí celý vývojový tým lidí. Další vlastnost, kterou je potřebné v databázích nastavit je oprávnění vstupu. Ne každý uživatel má právo na zápis do databáze. Příkladem muže být editace a přidáváni lékařského záznamu. Tady musí být oprávnění přístupu do databáze nastaveno přibližně takto: 1) 2) 3) 4)
Sestřička nemá právo přidávat, nebo upravovat lékařské záznamy Sestřička ale může číst lékařské záznamy, protože si pacienti volají o výsledky svých vyšetření. Sestřička může zadávat pacientské údaje do databáze a musí je upravovat a udržovat je aktuální. Doktor muže v databázi upravovat jakýkoli záznam. Tedy pokud se jedná o databázi, jak jsme si ji načrtli v našem příkladu. Jiná situace by byla v nemocnici, kde je víc oddělení, je jasné, že oční doktor nebude upravovat záznamy o chirurgických operacích velkých kloubů, obzvláště když na tomto oddělení je primářem doktor Sova.
Když je databáze správně navržena se všemi definicemi referenčních integrit, se všemi pomocnými nástroji, pak je předaná do užívání uživateli, který je od té chvíle plně zodpovědný za svá data. Tyto data musí udržovat aktuální, musí zadávat data nové a je vyškolen jak z databáze získávat informace. Nejčastěji jde právě o statistické údaje, data vypovídající o vývoji nějaké skutečnosti atd.…atd. O data v databázi je, jak už jsme se dověděli, potřeba se řádné starat. Ovšem k této činnosti patři ještě jedna důležitá činnost. A sice zálohovaní dat. Tento úkon má zpravidla na starosti správce databáze. Tento člověk nemá o obsahu databáze ani tušení, nepotřebuje vědět jaký je obsah databáze. Tento správce databáze se musí postarat o to, aby v případě havárie, či už hardwarové, nebo softwarové, nejčastěji však havárii způsobené lidskou chybou, byl schopen ve velice krátkém časovém úseku (okamžitě) obnovit databázi z poslední zálohy a minimalizoval tak ztráty způsobené nějakou mimořádnou událostí.
12