Databáze I

ÚVOD DO DATABÁZÍ I

ZÁKLADNÍ SYSTÉMOVÉ POJMY

Cíl:

Cílem této kapitoly je seznámit čtenáře se základními systémovými pojmy, které budou dále

využívány a na něž bude v ostatních kapitolách odkazováno. Čtenář by měl pochopit, co je

to systém, informační systém, informační systém s databází a databázový systém. Čtenář

získá představu o tom, k čemu slouží informační systémy a jakou úlohu v nich hrají

databáze. Stěžejními pojmy této kapitoly jsou pojmy data a informace. Čtenář se naučí mezi

těmito pojmy rozlišovat a bude umět definovat, co to jsou data a co to jsou informace.

Klíčová slova:

Systém, struktura, informační systém, databázový systém, data, báze dat, informace, systém

řízení báze dat.

1.1.1 Systém

Systém je abstrakce, kterou tvoříme v procesu poznávání reálných objektů, přičemž bereme

v úvahu pouze podstatné vlastnosti zkoumaných objektů.

Reálným objektem nazýváme určitou část toho, co skutečně existuje kolem nás. Objekty

můžeme zpravidla členit na části a vymezit některé jejich vlastnosti. Účelnost definování

systému na reálném objektu spočívá v tom, že abstrahujeme od některých, z hlediska

zkoumání nepodstatných, vlastností objektu.

Systém je tedy odrazem - modelem - objektivní reality.

Systém S=(P,R) je účelově definovaná množina prvků P={pi} a množina vazeb R={rij}

mezi prvky pi, pj, kde i,j jsou prvky množiny indexů. Tato množina prvků a vazeb má jako

celek určité vlastnosti.

Prvky systému pi jsou nejmenší, elementární části systému, na zvolené rozlišovací úrovni

dále nedělitelné. Množinu všech prvků systému nazýváme univerzum systému.

Vazby rij jsou vzájemné závislosti, působení, návaznosti, způsoby spojení mezi prvky pi,

pj. Množina prvků pi a vazeb rij se nazývá struktura systému S.

1.1.2 Základní rozdělení systémů

Obecné systémy jsou abstraktní modely, které jsou přesně definovány. Jsou to formální

systémy, které nemají konkrétní obsah. Příkladem může být soustava lineárních rovnic.

Reálné systémy jsou zavedeny na konkrétních reálných objektech. Vymezení reálného

systému závisí na účelu, pro který tento systém konstruujeme. Proces se nazývá

definování reálného systému na objektu. Reálné systémy jsou popsány verbálně, graficky,

někdy částečně pomocí matematických prostředků.

Okolí systému je účelově definovaná množina prvků, které nejsou prvky daného systému,

avšak mají k němu vazby. Vazby, které uskutečňují působení systému na okolí jsou

výstupy systému. Vazby, kterými okolí působí na systém, jsou vstupy.

Prvky okolí, které mají vazbu na systém, nazýváme hraničními prvky. Existuje-li alespoň

jeden prvek systému, který působí na okolí nebo opačně, jedná se o systém otevřený. V

opačném případě se jedná o systém uzavřený. Struktury systémů se popisují nejčastěji

pomocí blokových schémat a jednoduchých grafů.

1.1.3 Informační systémy s databází

Systém (z hlediska teorie systémů) je množina prvků a vazeb mezi nimi, které jsou účelově

definovány na určité objektivní realitě. Touto objektivní realitou budeme rozumět

uživatelskou aplikaci. Uživatelská aplikace je tedy výsek reálného světa či světa objektů.

Informační systém je systém, který zpracovává data a zabezpečuje komunikaci informací

mezi jeho prvky. IS se často člení na systém zpracování dat a komunikační systém.

Informačním systémem rozumíme systém pro sběr, uchovávání, vyhledávání a

zpracování dat za účelem poskytnutí informace o daném vymezeném světě objektů.

Dále budeme hovořit pouze o takových IS, které obsahují automatizovanou složku, tj.

budeme mít na mysli AIS. IS obsahují pouze data, která se informacemi stávají až jejich

interpretací uživatelem.

Data jsou údaje získané pozorováním, měřením, atd. Jsou to např. čísla, znaky, slova,

jména.

Informace jsou pouze taková data, která nám mohou být k něčemu užitečná. Taková, která

se dají rozumně interpretovat.

Informace je sdělení (vygenerované na základě dat uložených v databázi), které v

příjemci odstraňuje neurčitost (neznalost).

1.1.4 Vývoj k informačním systémům s databází

Vývoj informačních systémů směrem k IS s databází můžeme rozdělit do 3 etap:

1. Polovina 50.let, zpracování bylo organizováno způsobem "vše v programu", tj.

v programu byly popisy dat, data, algoritmy, případně různé typy zpracování.

2. Polovina 60.let, tzv. systémy s monitorem. Data byla oddělena od programů, ale

jejich popis zůstal v programu. Data mohla být zpracovávána více programy

současně. Popis fyzického záznamu však stále zůstával v programech.

Nevýhodou byla redundance dat (stejná data se objevovala v různých

souborech) a nekonzistence dat, protože nebyla řízená aktualizace dat od

různých uživatelů.

3. Druhá polovina 60.let se vyznačovala snahou vytvoření prvních systému řízení

báze dat. Data byla uložena v databázi, většinou centralizovaně na jednom místě,

jejich popis nebyl součástí uživatelského programu. Tím, že se programy

osvobodily od popisů dat, staly se do značné míry nezávislé na fyzickém uložení dat.

Data byla udržována jednotně, jejich struktury byly navrhovány centrálně, a bylo

dosaženo mnohem menší redundance a lepší konzistence dat.

1.1.5 Pojem databázový systém

Velmi často se v databázové literatuře setkáme s následující „rovnicí“:

SŘBD + DB = DBS

Systém řízení báze dat + báze dat = databázový systém

SŘBD je programové vybavení, které řídí všechny přístupy k datům v bázi dat. DB je

množina vzájemně propojených dat, která slouží mnoha aplikacím. Data jsou uložena v

paměti způsobem vylučujícím nežádoucí redundanci.

Popis dat vytváří tzv. schéma databáze (též databázové schéma). Schéma databáze

popisuje jisté objekty a vztahy mezi nimi. Databázový model je kolekce (souhrn) pojmů, na

kterých je vybudován jazyk pro definici dat. Jde o formalizmus, který umožňuje popsat

část schématu databáze. Této části se obvykle říká logické schéma databáze, na rozdíl od

fyzického schématu databáze, které popisuje uložení dat na vnějších pamětech, resp.

způsob přístupu k nim. Databázový model je prostředek modelování. Výsledkem tohoto

prostředku je schéma databáze. Databázový model tedy není výsledkem modelování, ale

jeho prostředkem. Zmíněné popisy se pak ukládají do katalogu dat (slovníku dat). Katalog

tedy obsahuje zásadní informace o datech, není součástí databáze. Definuje typy dat a

typy vztahů mezi nimi. Konkrétní datové struktury jsou definovány pomocí definičního

jazyka JDD (jazyk pro definování dat). Katalog dat uchovává data o datech neboli

metadata. Operace nad daty jsou univerzální pro všechny organizace dat. Pojem katalog se

vztahuje jednak k programovým prostředkům pro organizování popisu dat, jednak k

výsledkům tohoto popisu, tj. k samotným metadatům. Katalog je tedy jakýmsi systémem

řízení báze metadat. V katalogu dat je uloženo vždy příslušné interní datové schéma báze

dat. Skutečnost, že si SŘBD vede katalog dat, je charakteristickým rysem databázové

technologie. K manipulaci dat v databázi slouží speciální databázové jazyky JMD (Jazyky

pro manipulaci s daty). Obsahují obvykle primitivní operace pro vkládání, odebírání a

změnu dat v databázi a důležité prostředky pro výběr dat.

Pojmy k zapamatování:

Systém

Struktura

Informační systém

Databázový systém

Data
Báze dat

Informace

Systém řízení báze dat

1.2 CHARAKTERISTICKÉ RYSY DATABÁZOVÉ TECHNOLOGIE

Cíl:

Cílem kapitoly je upozornit na některé vlastnosti databázové technologie a dále vysvětlit

všeobecně akceptovaný pojem "tříúrovňové architektury databází". Čtenář by měl po

přečtení této kapitoly při pohledu na data rozlišovat mezi jednotlivými úrovněmi abstrakce.

Podstatné pro čtenáře je, aby si uvědomil, jaké základní výhody při práci s daty poskytují

databázové technologie a jaké charakteristické rysy databázové technologie vykazují.

Klíčová slova:

Nezávislost dat, sdílení dat,redundance, konzistence, integrita, interní struktura, externí

struktura, konceptuální model.

Databázovou technologií nazýváme soubor pojmů, prostředků a technik pro vytváření

informačních systémů s databází. Přitom za hlavní paradigma databázové technologie je

považována vzájemná nezávislost dat a aplikačních programů.

1.2.1 Vlastnosti databázové technologie

Mezi základní vlastnosti (charakteristické rysy) databázové technologie patří nezávislost dat,

přístup k informacím, sdílení dat, ochrana a utajení dat, konzistence a integrita dat.

Nezávislost dat

Data a programy jsou vzájemně nezávislé, tzn. že změna vyvolaná v datech nevyvolá

nutnost změny aplikačního programu a naopak. Fyzická nezávislost dat znamená, že

pracujeme s objekty nezávisle na jejich vnitřní interpretaci. Metoda uložení dat není

podstatná.

Přístup k informacím a sdílení dat

Cílem databázové technologie je poskytnout uživateli informačního systému efektivní

prostředky přístupu k informacím báze dat. Možnost sdílet data různými oprávněnými

uživateli je jednou z velkých výhod IS založených na databázové technologii.

Prostředky ochrany dat a jejich utajení

Jedná se o ochranu dat proti neoprávněnému přístupu, zneužití resp. zničení dat. Jedná

se o problematiku archivace dat a stanovení individuálních přístupových práv k datům.

Redundance, konzistentnost a integrita dat

Redundancí rozumíme vícenásobné uchovávání týchž dat v rámci databáze. Tato vlastnost

působí četné potíže. Vysoké nároky na paměť nejsou ty nejhorší. Redundantní data

působí problémy při jejich aktualizaci. Data se vyskytují opakovaně a při aktualizaci je třeba

všechny jejich výskyty správně aktualizovat. Chyby při aktualizaci redundantních dat

vedou k narušení konzistence (slučitelnosti) dat. SŘBD disponují prostředky na hlídání

integrity databáze. Integrita databáze se hlídá na základě definovaných integritních omezení,

která jsou součástí schématu databáze. Integrita dat se zkoumá ve třech oblastech:

- Doménová integrita

- Entitní integrita

- Referenční integrita

Průvodce studiem:

S bližším vysvětlením těchto pojmů a hlavně s jejich užitím se budete v textu setkávat velmi

často. Zatím pouze zaregistrujte, že existují uvedené tři typy integritních omezení. Zopakuji

tedy a vy si zapamatujte: doménové integritní omezení (IO), entitní IO, referenční IO.

Vztahy mezi daty

Databázová technologie může vyjadřovat vztahy mezi datovými strukturami bez použití

algoritmů. Logické vazby lze definovat mezi různými typy záznamů v rámci různých

databázových souborů. Způsob, jakým se vazby definují je dán použitým databázovým

modelem.

1.2.2 Tříúrovňová architektura databáze

Interní struktura

je nejblíže paměťové struktuře uložení dat. Využívá funkcí a vlastností konkrétního

operačního systému. Uživatel se touto interní strukturou nemusí zabývat. Změna interní

struktury se nesmí odrážet v koncepční struktuře databáze.

Externí struktura

představuje uživatelovy požadavky. Tyto jsou vyjadřovány v nějakém jazyku. Pomocí nich

uživatel formuluje své datové objekty a vztahy mezi nimi. K jednomu internímu záznamu je

možno sestavit více uživatelských externích pohledů. Externí struktura je závislá

především na použitých jazycích. Změny v uživatelských pohledech by se neměly

projevit ve změně koncepčního modelu.

Koncepční struktura - konceptuální model

představuje celý informační obsah databáze. Měl by být nezávislý jak na fyzickém řešení,

tak na okamžitých uživatelských potřebách.

Pojmy k zapamatování:

Nezávislost dat

Sdílení dat

Redundance

Konzistence

Integrita

Interní struktura

Externí struktura

Konceptuální model.

Kontrolní otázky:

1. Co je to systém, informační systém, informační systém s databází?

2. Co to jsou data a informace?

3. Co je to systém řízení báze dat?

4. Vysvětlete pojmy data a metadata.

5. Jaké potíže činí redundance v databázi?

1.3 HISTORIE DATABÁZOVÝCH MODELŮ

Cíl:

Kapitola se věnuje dvěma problematikám. Nejdříve krátce informuje o historii databázových

systémů, dále se zabývá definováním báze dat. Z hlediska dalšího výkladu je problematika

definování báze dat klíčovou, proto ji nedoporučuji podcenit. Čtenář by si měl osvojit postup

pro definování báze dat a bude mít možnost si tento postup v dalších kapitolách ověřit.

Veškeré pojmy, které jsou v kapitole "Fáze definování báze dat " zavedeny, jsou velmi

důležité a pro další pochopení problematiky nepostradatelné, proto by je měl čtenář po

prostudování kapitoly znát.

Klíčová slova:

Analýza uživatelských požadavků, logický návrh, fyzická realizace, konceptuální

modelování, datové modelování.

Databázová technologie disponuje specifickými prostředky. Jedním z nich je modelování.

Model je prostředek pro vytváření schémat. Obvykle se setkáváme s definicí modelu jako

souboru prostředků pro definování báze dat. K popisu struktur dat a jejich vzájemných

vazeb slouží databázové definiční jazyky.

1.3.1 Historie databázových modelů

Průvodce studiem:

Kapitolu 1.3.1. a kapitolu 1.3.2. chápejte jako přehledové, které slouží k vytvoření celkového

přehledu o vzniku a vývoji databázové technologie. Nejsou pro další studium nijak

podstatné, takže není třeba si veškeré údaje, v nich uvedené, pamatovat. Protože do

kontextu databázové problematiky patří, rozhodla jsem se je do textu zařadit.

Ze současného pohledu můžeme sledovat 4 generace modelů:

- Primitivní databázové modely.

- Klasické databázové modely.

- Sémantické databázové modely - konceptuální.

- Aplikačně orientované databázové modely.

1.3.1.1 Primitivní databázové modely

Tato generace chápe popis světa objektů v řeči počítačů, tj. ve strukturách

programovacích jazyků vhodných pro hromadné zpracování dat. Jde vlastně o popis

vybraných informací o světě objektů pomocí souborů skládajících se z vět, které obsahují

položky. Veškeré souvislosti mezi jednotlivými záznamy, ať už různého nebo stejného

typu, omezení na hodnoty atributů atd. realizoval programátor ve svých programech.

Definice souborů byly stále součástí uživatelských programů.

1.3.1.2 Klasické databázové modely

Tato generace je charakterizována síťovými modely a rozvojem hierarchických modelů,

který se jeví jako speciální případ síťového modelu. Jednotkou pohledu na svět objektů

je opět typ záznamu a záznam. Vztahy mezi objekty světa objektů se realizují vztahy mezi

záznamy. Podstatné na těchto modelech je to, že jsou vybaveny silnými manipulačními

prostředky. V podstatě však představují pouze jiný styl programování. Průlomem v oblasti

modelování se stal v roce 1970 návrh relačního modelu dat (RMD), který přinesl několik

zcela nových pohledů na databázové modelování. Především výrazně zvýšil nezávislost dat

na implementaci. Tento způsob modelování využívá prostředků predikátového kalkulu

1.řádu ( interpretace predikátových symbolů jsou totiž relace) a prostředků relační algebry.

Všechny tři typy modelů (síťový, hierarchický a relační) jsou souborově orientované. Tento

rys jim předurčuje jisté konceptuální meze, které mají blíže k počítačově orientovanému

světu objektů než ke světu objektů danému uživatelskou aplikací.

1.3.1.3 Sémantické - konceptuální - databázové modely

Jsou založeny na kvalitativně odlišné úrovni v otázce vztahu databázových modelů ke

světu objektů. Objevují konstrukty podporující přesnější vyjádření vztahů ve světě

objektů. Jsou to konstrukty založené na pojmech entita, vztah, vlastnost, atribut, objekt

apod. Tyto databázové modely se nazývají sémantické, případně konceptuální.

Původcem těchto modelů je Chenův E-R model, založený na pojmech entita (Entity),

vztah (Relationship) a atribut (Attribute). Obvykle částí těchto modelů bývají

transformační algoritmy převádějící konceptuální schéma v jednom modelu na schéma v

jiném modelu.

1.3.1.4 Aplikačně orientované databázové modely

Tato generace je založena na zjištění neúspěšnosti vytvořit "univerzální databázový

model". Vytvářejí se speciální databázové modely pro zpracování vědeckých a

experimentálních dat, modely pro grafické databáze, nestrukturované databáze textů,

inženýrské aplikace (CAD/CAM) atd.

1.3.2 Programování databázových aplikací

V této oblasti můžeme vysledovat 3 proudy, respektive metodiky přístupu:

1. Konvenční přístup

Tento přístup k programování databázových aplikací je založen na vymezení potřebných

datových typů pomocí konstruktorů zvaných datové struktury a na popisu funkční složky

systému - algoritmu zpracování vstupních dat na data výstupní. Datové typy poskytují

funkční složce nutné pozadí. Samotná data v konvenčním přístupu nemají povahu

hotového výrobku, ale jsou podporou pro algoritmy. Těžiště konvenčního přístupu

spočívá v rovině funkčního modelování.

2. Přístup z pohledu databázového modelování

Báze dat, která představuje strukturovaný datový typ vysoké úrovně, nemá již jen

pomocnou funkci pro algoritmické zpracování dat, ale sama o sobě je hotovým výrobkem -

datovou základnou informačního systému. Vytvářet aplikační programy lze v tomto

přístupu až po té, kdy byla vytvořena báze dat jako nutné pozadí databázových aplikací.

Programy v tomto přístupu obvykle představují manipulaci s informacemi, které jsou

obsažené nebo odvoditelné z báze dat. Jazyky pro manipulaci s daty jsou hlavním nástrojem

pro tvorbu uživatelských aplikací. Dalším prostředkem, který mohou uživatelské aplikace

využívat jsou, dotazovací jazyky.

3. Objektově orientovaný přístup

Tento přístup představuje významnou změnu v pojetí databázového modelování. Každý

objekt, představující zpravidla menší a co do funkčnosti autonomní výsek světa objektů,

má sám pro sebe své pozadí i své popředí (tedy datovou úroveň a funkční úroveň).

Objekt má samostatný život a možnost komunikace s dalšími objekty. Využitím

objektové orientace se dosahuje větší flexibility a snadnější udržovatelnosti bází dat.

1.3.3 Fáze definování báze dat

Průvodce studiem:

Na rozdíl od předchozích dvou kapitol, tato kapitola je velmi důležitá. Zavádí totiž základní

kroky pro definování báze dat. Vytvoření báze dat, respektive její struktury, je základním

krokem na cestě k budování databázových systémů. Bez správně navržené struktury není

možno vytvořit kvalitní databázi. Kvalitou přitom rozumíme hlavně integritu a konzistenci

databáze. Abyste strukturu báze dat správně navrhli, musíte dodržovat některé postupy. A s

těmito postupy vás právě seznámí následující text.

Proces databázového modelování probíhá v těchto fázích:

- Analýza uživatelských požadavků.

- Fáze logického návrhu.

- Fáze fyzické realizace.

Fáze logického návrhu má 3 etapy:

- Konceptuální modelování.

- Výběr vhodného systému řízení báze dat (SŘBD).

- Transformace konceptuálního modelu na datový model.

Analýza požadavků

V této fázi pracuje konstruktér databázového návrhu na tzv. uživatelské úrovni. Svět

objektů popisuje obvyklými vyjadřovacími prostředky. Různí uživatelé mohou mít různé nebo

překrývající se požadavky na data. Tím jsou vymezeny jednotlivé uživatelské pohledy na

bázi dat. Je třeba poznat modelovanou realitu a veškeré požadavky uživatelů na budoucí

aplikaci.

Logický návrh báze dat

Probíhá obvykle ve dvou krocích:

1. Modelování v rámci jednotlivých uživatelských pohledů na data

Produktem modelování je popis dat a jejich vzájemných vztahů - dílčí schéma. Integrací

dílčích schémat vzniká celkový formalizovaný popis báze dat bez ohledu na to,

jakými programovými prostředky bude dále zpracováván. Produktem této integrace je

konceptuální schéma. Definiční jazyk konceptuálního modelování (tzv. konceptuální model)

používá speciálních pojmů a grafických symbolů. V současné době jsou nejvyspělejší

konceptuální modely součástmi systémů CASE. Konceptuální modelování popisuje svět

objektů pomocí pojmů entita, atribut, vztah.

2. Výběr vhodného SŘBD

Při výběru se řídíme mnoha různými hledisky. K nejpodstatnějším patří:

- Současný přístup k datům pro více uživatelů.

- Ochrana dat.

- Prostředky pro centrální správu dat.

- Nezávislost dat na aplikacích.

- Možnost vytváření složitých datových struktur.

- Architektura desktop/klient, server.

- Vyhledávací mechanizmy.

- Fyzická implementace souborů (jak jsou řešeny primární soubory, indexy).

3. Transformace konceptuálního modelu na datový

Konceptuální model je převeden do popisu v jazyce pro definování dat, který je již závislý

na použitém SŘBD. Touto transformací vzniká datový model, který je již méně abstraktním

pohledem na bázi dat. Datový model pracuje s pojmy strukturovaných datových

typů - položka, záznam, soubor. Datovým modelem jsou data předepsaným způsobem

strukturalizována, aby je bylo možno zobrazit ve fyzické bázi dat. Nejznámější datové

modely jsou síťový, hierarchický a relační.

4. Generování schématu databáze

Posledním krokem na cestě k tvorbě schématu databáze (struktura báze dat) je

vygenerování konkrétního schématu z datového modelu. Obvykle je tato činnost

automatizována a provádějí ji nástroje nazývané CASE.

Fyzická úroveň

Na fyzické úrovni se zabýváme strukturou souborů dat a způsobem jejich uložení na vnějších

paměťových médiích. Dále se zabýváme způsoby zpřístupnění dat (poskytování informací z

databáze), vyhledávacími mechanizmy, optimalizací ukládání, čtení, vyhodnocování dotazů,

atd. Velmi důležitou problematikou jsou transakce.

Pojmy k zapamatování:

Analýza uživatelských požadavků

Logický návrh

Fyzická realizace

Konceptuální modelování

Datové modelování

Generování schématu databáze.

1.4 SÍŤOVÉ A HIERARCHICKÉ DATABÁZOVÉ MODELY

Cíl:

Tato kapitola je pouze informativní a seznamuje čtenáře s některými, dnes již překonanými,

přístupy k databázovému modelování. Po jejím přečtení by měl mít čtenář přehled o

možnostech síťových a hierarchických datových modelů. Není nutné, aby čtenář přesně znal

jednotlivé konstrukty, stačí mít o síťových a hierarchických modelech rámcovou představu.

Klíčová slova:

Síťový model, hierarchický model.

1.4.1 Síťové databázové modely

Síťové modely jsou založeny na souborech a vztazích mezi záznamy souborů. Jde

o souborově orientované modely s možností zapsání schématu databáze buď vhodným

jazykem pro definování dat nebo s možností použití pomocné - diagram datové struktury

(též Bachmanův diagram).

1.4.1.1 Atributy záznamů v síťových modelech mohou být 4 druhů

jednoduché - dále nedělitelné (atomické)

vícehodnotové (např. knihy s více autory)

složené (např. adresa, kterou lze rozdělit na č.,ul.)

složené, opakující se (taky může být adresa, např. instituce v několika pobočkách)

Vztahy mezi záznamy se modelují pomocí tzv. spojek. Zadáním jmen položek, ev. jejich

druhu získáme typ záznamu. Výskyty typu záznamu jsou reprezentovány jednotlivými

záznamy danými nějakou kombinací hodnot odpovídajících položek.

1.4.1.2 Typy vztahů

Nejrozšířenějším typem vztahu je binární vztah mezi objekty. O binárním vztahu hovoříme

tehdy, jestliže do vztahu vstupují dva objekty. U takových vztahů zjišťujeme jejich

kardinalitu. Kardinalitu vztahů sledujeme u všech typů databázových modelů.

1.4.1.3 Kardinality

a) 1:1

Příklad:

- Učitel učí maximálně jeden předmět.

- Předmět je vyučován maximálně jedním učitelem.

Tento vztah zahrnuje i případy 1:0 a 0:1

b) 1:N

Příklad:

- Učitel může učit více než jeden předmět.

- Předmět může být vyučován maximálně jedním učitelem.

Tento vztah zahrnuje i případy 1:0, 0:1 a 1:1

c) M:N

Příklad:

- Učitel může učit více než jeden předmět.

- Předmět může být vyučován více než jedním učitelem.

Tento vztah zahrnuje i případy 1:0, 0:1,1:1 a 1:N

1.4.1.4 Diagram datové struktury

skládá se ze 3 komponent:

- Obdélníky představuje typ záznamu.

- Čáry představuje typy vztahů.

- Pojmenování čar představuje jména typů vztahů.

U síťového modelu jsou povoleny pouze vztahy 1:1 a 1:N, to znamená pouze

funkcionální vztahy.

Příklad síťového modelu:

Příklad je z prostředí knihovny.

Čtenáři budou zobrazeni na záznamy typu:

ČTENÁŘ(Č-ČT, JMÉNO, ADRESA),

Knihy na záznamu typu:

KNIHA(ISBN, AUTOR, TITUL),

Jednotlivé exempláře na záznamu typu:

EXEMPLÁŘ(INV-Č, D-NÁKUPU),

Další typ záznamu bude:

VÝPUJČKA(Č-ČT,INV-Č,D-ZPĚT) a ZÁZNAM(ISBN, D-REZ, Č-ČT).

Dále je třeba definovat typy vztahů:

SI-PŮJČIL:(ČTENÁŘ, VÝPŮJČKA)

JE-PŮJČEN:(EXEMPLÁŘ, VÝPŮJČKA)

MÁ-KOPIE:(KNIHA, EXEMPLÁŘ)

MÁ-ZÁZNAMY:(KNIHA, ZÁZNAM)

MÁ-REZERVACE:(ČTENÁŘ, ZÁZNAM)

1.4.1.5 Schéma databáze v síťovém modelu

Schéma se skládá z typů záznamů, které obsahují popisy datových položek včetně

domén a typů C-množin, které definují vztahy mezi záznamy. Každý záznam má přiřazen

databázový klíč, což je disková adresa spojená se záznamem. C-množiny jsou uspořádané
dvojice typů záznamů. Typy záznamů z hlediska vztahů (C-množin) se nazývají vlastník

(owner) a člen (member). C-množina se sestává z jednoho výskytu vlastníka a několika

(ev. žádného) výskytu člena. Síťový model umožňuje pouze vztahy 1:N. Je-li třeba

modelovat vztahy typu M:N, je třeba provést transformaci na vztahy 1:N.

Typy vztahů

Vztahy jsou v síťových modelech nazývány CS - typ nebo C - množina.

V CS - typu figuruje 1 typ záznamu (typ vlastníka) s jedním nebo více typy záznamů (typ

člen)

Implicitní IO

Žádný záznam nemůže být členem ve více než jednom výskytu daného CS - typu.

1.4.1.6 Tři typy začlenění nového typu záznamu do CS - typu

FIXED

Stane-li se záznam členem ve výskytu CS-typu, nemůže být přepojen do jakéhokoli výskytu

jiného CS-typu. Jedině ho lze odstranit, znovu vytvořit a zapojit do jiného CS-typu.

MANDATORY

Záznam může být členem ve výskytu více CS-typů.

OPTIONAL

Záznam může být z CS-typu rozpojen a přepojen do jiného CS-typu.

Příklad:

DEFINICE SCHÉMATU DATABÁZE SÍŤOVÉHO MODELU

2 oblasti : OBLAST - STUDENTA

OBLAST - UČITELE

1 SCHEMA NAME IS EVIDENCE - STUDENTA.

2 AREA NAME IS OBLAST - STUDENTA.

3 AREA NAME IS OBLAST - UČITELE.

4 RECORD NAME IS STUDENT;

5 LOCATION MODE IS CALC USING CISLO - STUDENTA

6 DUPLICATES ARE NOT ALLOWED;

7 WITHIN OBLAST - STUDENTA

8 02 CISLO - STUDENTA; TYPE IS FIXED DECIMAL 9.

9 02 JMENO; TYPE IS CHARACTER 20.

10 02 ADRESA; TYPE IS CHARACTER 40.

11 02 ROCNIK ; TYPE IS FIXED DECIMAL 2.

12 RECORD NAME IS UČITEL;

13 LOCATION MODE IS CALC USING CISLO -ZAMESTNANCE

14 DUPLICATES ARE NOT ALLOWED;

15 WITHIN OBLAST - UČITELE.

16 02 CISLO - ZAMESTNANCE; TYPE IS FIXED DECIMAL 9.

17 02 JMENO; TYPE IS CHARACTER 20.

18 02 KATEDRA; OCCURS

19 ..........

1.4.2 Hierarchické datové modely

Hierarchické modely jsou opět souborově orientované modely. Z matematického hlediska

jsou hierarchie speciální případ síťových modelů. Diagram datové struktury je v tomto

případě strom, případně les (několik stromových struktur).

Typy záznamů u hierarchických modelů jsou podobné síťovým, ale jsou jednodušší,

protože obsahují pouze jednoduché položky, případně opakující se položky.

Datové schéma je tedy tvořeno zadáním typů záznamů a hierarchické struktury tzv.

definičních stromů. Tyto databázové stromy lze vždy spojit jedním prázdným

(systémovým) uzlem - kořenem - do jednoho stromu. Prázdnému kořenu může

odpovídat prázdný typ záznamu v databázovém schématu.

Důležitým pojmem u hierarchických modelů je hierarchická cesta. Tato udává nějakou

cestu v odpovídajícím definičním stromě od kořene k nějakému typu záznamu.

1.4.2.1 Rušení záznamů v hierarchické databázi

Každý záznam má v hierarchické databázi jednoznačně určenou množinu předchůdců. Proto

při rušení záznamů mohou nastat tyto problémy:

- Existují závislé záznamy.

- Rušení záznamu mění hierarchickou strukturu.

- Při rušení je třeba zrušit všechny následníky. To je tzv. vynucené rušení

(TRIGGERED DELETE).

- V případě, že chceme následníky uchovat, musíme použít prázdný záznam.

Problémy s vyhledáváním záznamů:

1. Vybírání záznamů - předchůdců = vzestupná hierarchická normalizace.

2. Vybírání záznamů - následníků = sestupná hierarchická normalizace.

Příklad:

DEFINICE SCHÉMATU DATABÁZE HIERARCHICKÉHO MODELU.

DATABAZE NAME IS STUDENT;

1 CISLO STUDENTA (INTEGER (9)):

2 JMENO STUDENTA (NON-KEY NAME X (20)):

3 ADRESA (NON-KEY NAME X(40)):

4 ROCNIK (NON-KEY INTEGER 9 (2)):

5 PREDNASKA STUDENTA (RG):

. POPIS SKUPINY

.

DATABAZE NAME IS UCITEL:

1 CISLO ZAMESTNANCE (INTEGER 9(9)):

2 JMENO UCITELE (NON-KEY NAME X (20)):

.

.

Příklad aktualizace:

1. Zvýšení všech bodových hodnocení přednášky 2301 o 10%.

CHANGE BODOVE HODNOCENI TO (BODOVE HODNOCENI * 1,1) CISLO

PREDNASKY STUDENTA EQ 2301

2. Zrušení v databázi učitele s číslem 03167895.

REMOVE UCITELCISLO WHERE UCITELCISLO EQ 03167895;

REMOVE TREE UCITEL WHERE CISLO ZAMESTNANCE EQ 03167895

2 MODUL 2

2.1 KONCEPTUÁLNÍ MODELOVÁNÍ

Cíl:

Cílem této kapitoly je, aby čtenář pochopil základní koncepty (pojmy) konceptuálního

modelování a činnosti spojené s tvorbou konceptuálního modelu. Tvorba konceptuálního

modelu má jisté formální požadavky, které by měl čtenář zvládnout. Podstatné ovšem je, aby

správně pochopil význam jednotlivých konceptů, které se v modelu vyskytují a význam

konceptuálního modelu jako celku. Po prostudování této kapitoly by měl být čtenář schopen

vytvořit korektní konceptuální model výseku reality.

Klíčová slova:

entita, vztah, atribut, doména, instance, identifikační (primární) klíč, integritní omezení,

kardinalita vztahu, ISA hierarchie, cizí klíč.

Průvodce studiem:

Konceptuální modely jsou pokusem umožnit vytvoření popisu dat v databázi nezávisle na

jejich uložení. Jsou prvním krokem na cestě k vytvoření databázového schématu, jako

struktury, do které budou data ukládána. Konceptuální model představuje formální popis

modelované reality, která nás zajímá a o které budeme v budoucí databázi shromažďovat

data. Má-li být budoucí databáze správně navržená s cílem minimalizovat nadbytečná data,

bez konceptuálního modelu se neobejdeme.

2.1.1 Úvod

Na úvod je třeba se seznámit se základními koncepty (pojmy), se kterými konceptuální

model pracuje. Jsou jimi tyto abstrakce:

Entita resp. Objekt

Relationship resp. Vztah

Atribut resp. Vlastnost

Průvodce studiem:

Hned v úvodu upozorňuji na častou chybu, které se studenti dopouštějí. Chybou je

nerozlišování od abstraktního pojmu objekt, vztah, atribut a konkrétního výskytu (instance)

objektu, vztahu, či atributu.

Objektem může být "Student", instancí konkrétní Student popsaný konkrétními hodnotami

atributů. Vztahem může být "patří do" (např. Student patří do Skupiny), instancí vztahu může

být Král patří do AI1. Atributem může být "Příjmení", instancí (hodnotou atributu) pak může

být Král.

Entita je objekt reálného světa, který je schopen nezávislé existence a je jednoznačně

odlišitelný od ostatních objektů. Např. "Student", "Předmět", "Kniha", "Pojišťovna". Konkrétní

výskyty entit se nazývají instance.

Atributem budeme rozumět funkci přiřazující entitám či vztahům hodnotu popisného typu,

určující některou podstatnou vlastnost entity nebo vztahu. Hodnoty atributů jsou vybírány z

jednotlivých domén.

Doména je množina homogenních dat, spojená s konkrétním atributem. Je-li např. doména

množina všech celých čísel z intervalu <0,150), může se jednat o doménu atributu věk.

Příklad:

Mějme entitu Pacient s atributy Rodné číslo, Jméno, Příjmení, Datum narození, Pojišťovna.

Doména atributu Rodné číslo je množina textových řetězců délky 10 alfabetických znaků,

doména atributu Jméno je množina textových řetězců délky max. 15 alfabetických znaků,

doména atributu Příjmení je množina textových řetězců délky max. 15 alfabetických znaků,

doména atributu Datum narození je množina datumových hodnot, doména atributu

Pojišťovna je množina přirozených čísel z intervalu (100, 1000).Pro všechny atributy entity

Pacient provedeme jedno možné přiřazení jméno atributu = hodnota z odpovídající domény.

Tímto způsobem získáme jednu instanci entity Pacient, která by mohla vypadat následujícím

způsobem:(5562290800,Jan,Novák,29.12.1955, 111)

Vztah je vazba mezi dvěma entitami (obecně i více entitami). Např. Student studuje

Předmět. "Student" a "Předmět" jsou entity, zatímco "studuje" je vztah.

Příklad:

Mějme entity Pacient a Pojišťovna. Strukturu entity Pacient jsme již nadefinovali, zbývá

definice entity Pojišťovna, která by mohla být následující: Kod, Název, Adresa. Bude-li

atribut Pojišťovna entity Pacient definován nad stejnou doménou, jako atribut Kod entity

Pojišťovna, je možné mezi těmito dvěma entitami nadefinovat vztah, např. vztah

je_pojištěn_u.

Průvodce studiem:

Vymezení pojmů entita, vztah a atribut je dosti volné. Správné nalezené entit modelované

reality patří k nejtěžším úkolům a vyžaduje kromě velmi dobré znalosti modelované reality i

jistou zkušenost návrháře. Vodítkem Vám v začátcích může být to, že entity označujeme

obvykle podstatnými jmény a vztahy slovesy. Ne ovšem každé podstatné jméno neformálně

popsané reality je entitou. Může se jednat i o atribut. Atribut, na rozdíl od entity, není

schopen samostatné existence, nemá svou identitu. Atribut je např. "barva", "datum

narození".

Kontrolní otázky:

1. Pokuste se najít výsek reality, který je Vám blízký a neformálně jej popište.

2. Najděte na tomto výseku reality entity.

3. Pokuste se definovat, do jakých vztahů nalezené entity vstupují.

2.1.2 Tvorba konceptuálního modelu

Konceptuální model (někdy taky označován jako E-R model) je množina pojmů, které nám

pomáhají, na konceptuální úrovni abstrakce, popsat realitu za účelem následně

specifikovat strukturu databáze. Konceptuální úrovní abstrakce přitom máme na mysli tu

skutečnost, že v popředí zájmu je pouze modelovaná reality. Na této úrovni se ještě

nestaráme o to, jak bude budoucí databáze technicky spravována a řízena.

2.1.2.1 Činnosti při tvorbě konceptuálního modelu

Průvodce studiem:

Následující řádky berte jako doporučení, jak postupovat při tvorbě konceptuálního modelu.

Je rozumné se těchto doporučení držet, abyste se aspoň v počátcích tvorby konceptuálního

modelu nedopustili zbytečných chyb.

1. Identifikace entit jako množiny objektů stejného typu.

Např. KNIHA, ABONENT_KNIHOVNY, ZAMESTNANEC označují typy entit.

2. Identifikace vztahů, do kterých entity mohou vstupovat.

Např. ABONENT(entita) MA_PUJCEN (vztah) daný EXEMPLAR (entita).

3. Na základě přiměřené úrovně abstrakce přiřazení jednotlivým entitám a vztahům

popisné atributy.

Např. PRIJMENI (popisný atribut) daného ZAMESTNANCE (entita),

DATUM (popisný atribut), do kdy si daný ABONENT (entita) VYPUJCIL

( vztah) daný EXEMPLAR (entita).

4. Formulace integritních omezení (IO) vyjadřujících s větší či menší přesností soulad

schématu s modelovanou realitou.

2.1.2.2 Způsoby zápisu konceptuálního modelu

Existují dva způsoby zápisu konceptuálního modelu:

- Lineární textový.

- E-R diagramy.

Syntaxe lineárně textového zápisu

Entita

Entity - obdélníky

Vztahy - kosočtverce

Hrany ukazují, které entity vstupují do kterých vztahů. Každému uzlu grafu je přiděleno

jméno.

Průvodce studiem:

Nyní jste se setkali se značným množstvím nových pojmů. Nenechejte se odradit, v

následujícím textu se seznámíte s jejich definicemi a hlavně s příklady jejich použití.

Doporučuji Vám, abyste se po prostudování kapitoly 2.2.3. ke kapitole 2.2.1.a 2.2.2 ještě

jednou vrátili a přesvědčili se o tom, zda Vám jsou všechny pojmy jasné.

2.1.2.3 Integritní omezení

Integritní omezení je množina pravidel, kterou si na modelované realitě definujeme proto,

abychom měli data v budoucí databázi korektní a v souladu s modelovanou realitou.

Rozeznáváme tři typy integritních omezení: Entitní, doménové a referenční.

Entitní Integritní omezení

někdy taky označované jako integritní omezení pro entity, je omezením v tom smyslu, že

každá entita může obsahovat pouze navzájem různé instance (tzn. výskyty entity). K definice

entitního integritního omezení potřebujeme identifikační klíč. Je nutné, aby každá entita měla

identifikační klíč. S jeho nalezením mohou někdy být potíže, jak vyplyne z následujícího textu

(slabý entitní typ).

Identifikační klíč

Každá entita musí být jednoznačně identifikovatelná. Atribut (skupina atributů), jehož

hodnota slouží k indentifikaci konkrétní entity se nazývá identifikačním klíčem. Entitní typ

může mít několik kandidátů na roli identifikačního klíče. V každém konkrétním případě je

třeba zvažovat a potom volit tak, aby zvolené atributy skutečně plnily úlohu

identifikačního klíče a jejich použití bylo efektivní z hlediska časových a paměťových nároků.

Konkrétní výskyt vztahu může být identifikován identifikačními klíči entit, které ve vztahu

vystupují.

Např. vztah MA_ZAPSAN mezi STUDENTEM S1 a PREDMETEM P7 může být vyjádřen

dvojicí S1, P7.

Příklad:

Máme-li entitu Student s atributy Číslo studenta, Jméno, Příjmení, atd., atribut Číslo

studenta zajistí, že všechny instance entity Student budou navzájem různé. Nemohou totiž

existovat dva různí studenti s stejným Číslem studenta.

Atributy, které mají výše uvedenou vlastnost, totiž, že identifikují jednotlivé instance entit, se

nazývají identifikační klíče (primární klíče).

Průvodce studiem:

Při nalezení jakékoli entity se hned zamýšlejte nad tím, co (který atribut/atributy) ji bude

identifikovat. Nalezený atribut nebo skupinu atributů označte jako identifikační klíč. Pokud

není možné v entitě najít žádnou kombinaci atributů, které by ji jednoznačně identifikovaly,

bude se patrně jednat o slabou entitu (její definici najdete níže). Taková entita bude

identifikovatelná až po zakreslení vztahu. Je ovšem třeba vždy velmi pečlivě zvážit, zda

skutečně neexistuje možnost definovat vlastní identifikační klíč.

Integritní omezení pro domény

nazývané doménové integritní omezení zajišťuje, že hodnota atributu smí být vybrány vždy

pouze z předem definované a přiřazené domény. Základní možností pro definici

doménového IO je definice datového typu. Dále pak můžeme stanovit různé podmínky

platnosti.

Doména je tedy množina hodnot konkrétního atributu. Analogie z matematiky je definiční

obor.

Příklad:

Pro výše uvedenou entitu Student doménové integritní omezení přiřadí pro atributy Číslo

studenta, Jméno, Příjmení jejich domény např. následujícím způsobem:

Číslo studenta Celé číslo z intervalu 1 - 10000

Jméno Text maximálně na 15 znaků, přičemž znakem může být pouze písmeno

Příjmení Text maximálně na 20 znaků, přičemž znakem může být pouze písmeno

Referenční Integritní omezení

se někdy označuje jako IO pro vztahy a má několik složek:

Typ vztahu

Většina vztahů mezi entitami, které se na úrovni konceptuálního modelu zkoumají, jsou

binární vztahy, tj. vztahy mezi dvěma entitami.

V rámci binárního vztahu může být entita:

- Nezávislá (nemá povinné členství ve vztahu).

- Existenčně závislá (má povinné členství ve vztahu).

- Identifikačně závislá (má povinné členství ve vztahu a je slabou entitou).

Členství ve vztahu

O entitách, které jsou zapojeny do vztahu říkáme, že jsou členy vztahu. V této souvislosti

mluvíme o povinném (obligatorním) a nepovinném členství ve vztahu.

Příklad:

- Každý zaměstnanec musí být zařazen do některého oddělení.

- Oddělení může existovat i bez zaměstnanců.

Členství entity ZAMESTNANEC ve vztahu je povinné. Entita ODDELENI má členství ve

vztahu nepovinné.

Existenční závislost

Povinné členství ve vztahu bývá označováno a v konceptuálním modelu modelováno jako

tzv. existenční závislost. Proto si zapamatujte následující definici: Entita E1 je existenčně

závislá na entitě E2, jestliže nemůže existovat ani jedna instance entity E1, která by

nevstoupila do vztahu s entitou E2.

Příklad:

Mějme entitu Pacient, která charakterizuje jednotlivé Pacienty přicházející k lékaři a entitu

Návštěva, která bude charakterizovat vlastnosti konkrétních onemocnění daného Pacienta,

způsob léčby tohoto onemocnění, atd. Je zřejmé, že Pacient může existovat, aniž by byl na

Návštěvě u lékaře s nějakou chorobou. Prostě se pouze u lékaře zaregistroval a zatím je

zcela zdráv. Entita Návštěva je ovšem ve vztahu závislosti resp. nezávislosti v naprosto

jiném postavení. Návštěva vypovídá o chorobě konkrétního Pacienta. Entita Návštěva je tedy

existenčně závislá na entitě Pacient. Nemůže existovat žádný výskyt entity Návštěva, ke

které by neexistoval výskyt entity Pacient. Lékař nemůže ošetřit neexistujícího Pacienta.

Identifikační závislost

Entita E1 je identifikačně závislá na entitě E2, je-li na ní existenčně závislá a navíc neexistuje

žádná možnost u entity E1, jak definovat identifikační klíč s použitím pouze jejích atributů.

Pro definování identifikačního klíče je nutné použít identifikační klíč entity E2. Entita E1 je

nazývána slabá entita, entita E2 identifikační vlastník.

Příklad:

Zaměstnanci školy mohou vypisovat témata diplomových prací, která mohou být stejná. Je

nutné je rozlišit např. identifikátorem zaměstnance (Č_ZAM). Entita TEMA_DIPLOM je tedy

identifikačně závislá na entitě ZAMESTNANEC. Dědí atribut Č_ZAM a teprve s ním je možno

vytvořit skutečný identifikační klíč dané slabé entity. Jestliže doplníme entitě

TEMA_DIPLOM nový vlastní atribut, např. Č_TEMATU, který bude schopen plnit

úlohu identifikačního klíče, entita přestane být slabá, existenční závislost však zřejmě

zůstane. Na následujícím obrázku je slabá entita označena dvojitým obdélníkem.

Vztahová integrita je ve většině datových modelů modelována pomocí cizího klíče.

Rozhodnout, zda pojem cizí klíč je pojmem datového či konceptuálního modelu, je poměrně

složité. Čistě formálně vzato, cizí klíč je pojem datového modelu, nicméně z praktických

důvodů (většina CASE nástrojů to tak chápe) vysvětlíme pojem cizího klíče již na tomto

místě.

Cizí klíč

je atribut nebo skupina atributů, které jsou v nezávislé entitě identifikačním klíčem. Cizí klíč u

entity tedy signalizuje, že entita je závislá na jiné entitě, se kterou tato entita vstupuje do

vztahu. Pokud je cizí klíč součásti identifikačního klíče této entity, jedná se o slabou entitu.

Většina CASE nástrojů vytváří cizí klíče automaticky po zakreslení vztahu mezi entitami.

Kardinalita vztahu

Kardinalita vztahu je číslo, které udává počet instancí (výskytů) entity, kterými vstupuje do

vztahu s instancemi druhé entity.

Konceptuální model připouští následující kardinality:

1:1 Jedna instance entity E1 vstupuje do vztahu s jednou instancí entity E2 a jedna

instance entity E2 vstupuje do vztahu s jednou instancí entity E1.

1:N Jedna instance entity E1 vstupuje do vztahu s více instancemi entity E2 a jedna

instance entity E2 vstupuje do vztahu s jednou instancí entity E1.

M:N Jedna instancí entity E1 vstupuje do vztahu s více instancemi entity E2 a jedna

instancí entity E2 vstupuje do vztahu s více instancemi entity E2.

Příklad:

Učitel učí Předmět

Kardinalita 1:1 znamená, že jeden učitel učí jeden předmět a zároveň jeden předmět je

vyučován jedním učitelem.

Kardinalita 1:N znamená, že jeden učitel učí více předmětů a zároveň jeden předmět je

vyučován jedním učitelem.

Kardinalita M:N znamená, že jeden učitel učí více předmětů a zároveň jeden předmět je

vyučován více učiteli.

min-max io

Mějme typ vztahu R(E1, E2). Potom E1:(min1, max1), E2:(min2, max2) označuje

minimální, resp. maximální počet výskytů entity daného typu ve vztahové množině R. Nula

jako minimum vyjadřuje nepovinné členství ve vztahu. Nepovinné členství ve vztahu vyjadřuje možnost nezávislé existence entity daného typu na entitě druhého typu.

Naopak, je-li minimum > 0, je entita existenčně závislá na jiné entitě.

Příklad:

VÝPUJČKA (ČTENÁŘ:(0,4), EXEMPLÁŘ:(0,1))

Konkrétní čtenář nemusí mít vypůjčenou žádnou knihu, může mít současně vypůjčeny až

4 exempláře.

Konkrétní exemplář může být buď v regálu nebo je půjčen vdaném okamžiku jen jednomu

čtenáři.

Dekompozice M:N vztahu

Konceptuální model sice připouští kardinalitu N:M, ovšem z hlediska dalšího zpracování

směrem k vytvoření schématu databáze musíme obvykle tuto kardinalitu N:M eliminovat.

Situace se řeší dekompozicí, což znamená zařazení další entity. Tato entita je označována

jako začlenění.

Příklad:

Výrobek Součástka

V1 ----------------------- S1

V1 ----------------------- S4

V2 ----------------------- S4

V2 ----------------------- S2

V2 ----------------------- S3

V3 ----------------------- S3

Zavedeme entitu Začlenění

Výrobek Začlenění Součástka

V1 ---------------- Z1 -------------- S1

V1 ---------------- Z2 -------------- S4

V2 ---------------- Z3 -------------- S4

V2 ---------------- Z4 -------------- S2

V2 ---------------- Z5 -------------- S3

V3 ---------------- Z6 -------------- S3

Odpovídající E-R diagram:

2.1.2.4 Přiřazení popisných atributů

Entity a vztahy jsou popsány úplně, až když je jim přidělena množina popisných atributů.

- Pro každou entitu je nutno vytvořit samostatnou tabulku atributů, kde se uvádí

jméno atributu a IO.

- Typ atributu se zadá hodnotovou množinou (doménou).

- U klíčového atributu je třeba zadat příznak pro identifikační klíč.

- Někdy se určuje, zda atribut může mít prázdnou hodnotu. Obvykle se označuje

NULL.

Je zřejmé, že identifikační klíč nesmí nabývat hodnoty NULL.

Kombinace E-R diagramu a tabulek, popisujících atributy jednotlivých entit a vztahů,

tvoří úplné schéma E-R modelu.

Příklad:

Entity:

PACIENT(RODNE ČÍSLO, JMÉNO, ADRESA, VÁHA, VÝŠKA, POČET_LŮŽEK...)

POKOJ(ČÍSLO POKOJE,POČET_LŮŽEK,LOKALITA...)

Pro všechny entity je třeba vytvořit následující tabulku.

Tabulka pro entitu PACIENT:

PACIENT RODNÉČÍSLO JMÉNO ADRESA VÁHA VÝŠKA ....

typ N:10 X:25 X:25 N:3 N:3

NULL ne ne ano ano ano

klíč ano ne ne ne ne

Vztahy:

JE_UMÍSTĚN_NA (PACIENT, POKOJ, N:1)

resp.JE_UMÍSTĚN_NA(PACIENT:(1:1), POKOJ:(0:N))

2.1.2.5 ISA hierarchie, podtypy entit

Speciální atributy představují v konceptuálním modelování takové atributy, které danému

typu entity přiřazují jeho nadtyp. Atribut je pak podtypem svého nadtypu. Jde o tzv. ISAhierarchii.

Graficky se ISA-hierarchie zobrazuje takto:

 

Abstraktní entitní typ (entita) OSOBA se zavádí z praktických důvodů proto, že existuje

řada společných atributů entit UČITEL a STUDENT a proto má smysl zavést jediný

společný entitní typ. Pak je třeba připustit existenci hodnot NULL u těch atributů, které jsou

irelevantní s ohledem na konkrétní typ osoby. Entitní typy (entity) STUDENT a UČITEL

jsou podtypy entitního typu OSOBA. Platí STUDENT JE OSOBA (anglicky IS A). V oblasti

umělé inteligence se tomuto vztahu říká ISA vztah.

Neatomické atributy

Konceptuální model, na rozdíl od např. relačního modelu (jak se dovíte později),

připouští neatomické atributy. V souvislosti s návazností na příslušný databázový model,

konceptuální model má nástroje, jak strukturu atomických atributů vytvořit. Atributy, které

lze rozčlenit, se nazývají skupinové (grupped). Některé konceptuální modely připouštějí

zavedení vícehodnotového atributu. Např. Autor knihy může být vícehodnotový, tzn., že

může existovat více autorů jednoho titulu. Přitom dopředu nevíme, kolik hodnot tento atribut

bude mít. Jedná se tedy o vektor proměnné délky.

Korektní konceptuální schéma

- Žádný entitní typ nemá v konceptuálním schématu více než jeden zdroj ISA

hierarchie.

- ISA vztahy netvoří v E-R diagramu orientovaný cyklus.

- Identifikační typy vztahů netvoří v E-R diagramu orientovaný cyklus (jinak by jeden

typ entity byl identifikován pomocí sebe sama) .

- yp entity v ISA hierarchii, který není zdrojem není identifikačně závislý na žádném

entitním typu (je totiž již identifikován svým zdrojem ISA hierarchie).

- Jména typů entit a vztahů jsou jednoznačná globální jména, jména atributů jsou

jednoznačná lokální jména.

- Je-li typ entity zdroj ISA hierarchie, pak má identifikační klíč. Ostatní typy v ISA

hierarchii nemají identifikační klíč.

Shrnutí:

Základem tvorby jakékoliv databáze je vytvoření jejího schématu. Abychom byli schopni

schéma databáze vytvořit, musíme sestavit model reality. Na nejvyšší úrovni abstrakce

(nejblíže k modelované realitě) se vytváří konceptuální model. Konceptuální model je tedy na

začátku každé rozumně navržené databáze. Vytvořit konceptuální model znamená

především znát modelovanou realitu a také znát zásady tvorby konceptuálního modelu.

Koncepty (pojmy) konceptuálního modelu jsou entity, vztahy a atributy. U entit je

nejdůležitější se zabývat jejich identifikací (identifikační klíč), u vztahů pak typem vztahů a

kardinalit. Typy vztahů pak automaticky definují cizí klíče závislých entit. Pro jednotlivé

atributy pak je nutné definovat množiny jejich možných hodnot (domény). Konceptuální

model lze zapsat buď v lineárně textovém zápisu nebo pomocí tzv. E-R diagramu.

Nejnáročnější pasáží tvorby konceptuálního modelu je nalezení entit. Proto je nutné se

zabývat všemi výseky reality, které jeví známky samostatnosti v existenci či chování. To jsou

potencionální entity. Velmi důležité je si uvědomit, co jsou ony abstrakce, o nichž budeme v

budované databázi uchovávat data.

Kontrolní otázky:

1. Zakreslete E-R diagram se dvěma entitami, které vstupují do existenčního typu

vztahu.

2. Vysvětlete rozdíl mezi existenčním a identifikačním typem vztahu.

3. Charakterizujte entitní, doménovou a referenční integritu.

Pojmy k zapamatování:

Entita

Vztah

Atribut

Doména

Instance

Identifikační (primární) klíč

Integritní omezení

Existenční a identifikační závislost

Kardinalita vztahu

ISA hierarchie

Cizí klíč

Průvodce studiem:

Jste u konce velmi náročné kapitoly. Pokud jste byli schopni odpovědět na kontrolní otázky a

jsou Vám jasné pojmy k zapamatování, jste na nejlepší cestě k pochopení problematiky

konceptuálního modelování. Dejte si pauzu a pak se pusťte do studia CASE nástroje Erwin.

CASE nástroje na datové modelování, k nimž Erwin patří, Vám umožní efektivním

způsobem vytvářet konceptuální a později datové modely. Je však nutné, abyste si osvojili

základní dovednosti v práci s tímto softwarovým nástrojem. Pojmový aparát, který Erwin

používá je Vám již znám. Následující kapitola Vám přinese návod na to, jak s Erwinem

pracovat a jak v něm konceptuální model reality zakreslit.

2.2 CASE NÁSTROJ ERWIN

Cíl:

Cílem je naučit čtenáře obsluhovat CASE nástroj pro datové modelování Erwin. Pojmy, které

se vyskytují v textu této kapitoly, nejsou vysvětlovány, jejich znalost se již předpokládá a

čtenář se je naučil v předchozích kapitolách. Po prostudování této kapitoly bude čtenář umět

nakreslit konceptuální model v prostředí CASE nástroje Ewin. Je vhodné, ne-li nezbytné, si

při studiu tohoto textu spustit Erwin a všechny vysvětlované pasáže si rovněž ihned prakticky

vyzkoušet.

Klíčová slova:

entita (objekt), vztah (relationship), nezávislé a existenčně závislé objekty (entity),

identifikačně závislý objekt (entita), slabý entitní typ, členství ve vztahu, kardinalita, primární

klíč, cizí klíč, datový typ, index, target server.

Průvodce studiem:

Nejdříve Vás musím upozornit, že by bylo ztrátou Vašeho času začít číst tuto kapitolu,

pokud pojmy, které jsou uvedeny v klíčových slovech ještě neznáte nebo přesně nevíte, co

znamenají. V takovém případě si raději ještě jednou přečtěte předcházející kapitolu (2.1.).

Návod na obsluhu nástroje Erwin je velice stručný a popisuje jen základní charakteristiky a

způsob obsluhy systému Erwin. Není možné popsat všechny funkce, kterými software

disponuje. Pokud by se stalo, že příslušnou funkci v návodu nenajdete, pokuste se využít

nápovědy / Helpu, který je součástí software. Pokud se v textu objeví podtržený pojem, je

Vám tím dáváno na vědomí, že pojem je vysvětlen v předchozím textu a tudíž s jeho pravým

významem se můžete (lépe řečeno jste se mohli) seznámit v předchozím textu. Abyste měli

celý návod na obsluhu Erwina pohromadě, jsou v této kapitole popsány i aktivity (kap.

2.2.2.), které budou teoreticky vysvětleny až v následujících kapitolách. Na místo, kde máte

přerušit čtení, budete upozorněni. Po vysvětlení příslušného teoretického aparátu Vás opět

odkážu na dočtení této kapitoly.

Pokud ještě nemáte na svém počítači nainstalován produkt Erwin, udělejte tak a při studiu si

ihned veškeré funkce ověřujte.

2.2.1 Konceptuální model v Erwinu

Po spuštění programu ERWIN se objeví následující obrazovka:

Budeme hlavně pracovat s těmito nástroji:

- Hlavní nabídka.

- File, Edit, Server, Report, Option, Windows.

- Toolbar.

- Jednotlivá tlačítka pod hlavní nabídkou.

- Toolbox.

- Erwin Toolbox je umístěn na pracovní ploše.

Nejdříve si vysvětlíme jednotlivá tlačítka Toolboxu, která budeme potřebovat:

Umožňuje uchopovat objekty (entity)

Umožňuje zakreslovat nezávislé a existenčně závislé objekty (entity). Pokut má obdélník

zakulacené rohy , představuje identifikačně závislý objekt (entitu), někdy označovanou

slabý entitní typ .

Umožňuje zakreslit identifikační závislost. Objekt, u kterého je plné kolečko, představuje

závislý objekt, objekt s prázdným kolečkem je nezávislý. Identifikačně závislý objekt má

povinnou účast ve vztahu. Nezávislý objekt má nepovinnou účast ve vztahu.

Umožňuje zakreslit existenční závislost. Objekt, u kterého je plné kolečko , představuje

závislý objekt, objekt s prázdným kolečkem je nezávislý. Existenčně závislý objekt má

povinnou účast ve vztahu. Nezávislý objekt má nepovinnou účast ve vztahu.

Umožňuje zakreslit vztah, kdy o žádném objektu se nedá říci, že by byl závislý resp.

nezávislý. Jedná se o objekty, které mají nepovinné členství ve vztahu. Pomocí tohoto typu

vztahu modelujeme kardinalitu N:M

Rozbalení dalších nabídek v hlavní nabídce:

Po zmáčknutí volby Option se rozbalí nabídka. Zaškrtněte volby Show Display Menu a Show

Editor Menu. Pokud to provedete správně, přibude v hlavní nabídce volba Editor a Display.

Z volby Editor budeme používat tyto volby:

- Entity-Attribute, pro definování objektů, jejich vlastností a vztahů.

- … Database Scheme, pro definování datových typů jednotlivých atributů.

- … Index, pro definování indexů.

Definování objektů, vztahů a atributů:

Do pole Entity Name zapíšeme jméno objektu, do pole Primary Key napíšeme atribut nebo

skupinu atributů, které budou Identifikačním klíčem, do pole Non-Key Attributes napíšeme

ostatní, tzv. popisné atributy.

Takovým způsobem nadefinujeme všechny objekty v modelu.

Příklad nadefinovaného objektu by mohl být:

Průvodce studiem:

Nepoužívejte diakritiku (háčky a čárky), jedná se o demo verzi Erwina, která diakritiku neumí

rozpoznat. Vyhnete se tak zbytečným potížím. Jistě jste si všimli, že Erwin používá místy

trošku jiné termíny, než je standard. Proto je třeba si uvědomit:

Primary key = identifikační klíč. V dalším textu, který se bude týkat datových modelů,

budeme také používat označení pro atribut/y, který identifikuje entitu pojem primární klíč. Na

úrovni konceptuálního modelování je však standardně používán pojem identifikační klíč.

Dále si jistě všimnete, že Erwin označuje jako Independant pouze entitu identifikačně

nezávislou. Ve standardním pojetí je ovšem třeba připustit, že Independent je rovněž entita

existenčně nezávislá. Snad Vás tato nejednotnost příliš nezmate.

Mezi atributy objektu nezapisujte atributy jiných objektů. Ty se do objektu natáhnou

automaticky po zakreslení vztahů mezi objekty (myslí se tím identifikační klíče).

Příklad:

Jednoduchý model objektů by mohl být následující:

Všimněte si, že objekt “Navsteva” nemá dostatečný Identifikační klíč. “Datum Navstevy” totiž

ještě nemůže identifikovat každou instanci objektu “Navsteva”. Další klíčové atributy se do

objektu “Navsteva” automaticky převedou po zakreslení vztahů mezi objekty “Lekar”,

“Navsteva” a “Pacient”.V těchto vztazích bude totiž “Navsteva” závislá jak na “Pacientovi”,

tak na “Lekari”. Není možné uskutečnit návštěvu, pokud není pacient resp. lékař. Tuto

skutečnost zakreslíme do modelu použitím vhodných vztahů. V našem případě se bude

jednat o vztahy identifikační, protože “ICO” lékaře a “Rodne cislo” pacienta budou

nápomocné k identifikaci instance objektu “Navsteva”.Tento model představuje základní

definici objektů, atributů a vztahů na úrovni Entity-Attribute. Pokud se Vám nezobrazují názvy

vztahů, zadejte volbu: Display/Verb Phrase.

Shrnutí:

Při tvorbě konceptuálního modelu pomocí CASE nástroje Erwin je třeba nejdříve nalézt a

zakreslit entity modelované reality. U každé entity najít identifikační (primární) klíč. Dále

rozhodnout, které entity do jakých vztahů vstupují a zakreslit vztahy. Erwin automaticky

rovněž přenese primární klíč nezávislé entity do závislé entity, kde se tento stane cizím

klíčem. Pokud použijeme identifikační typ vztahu, cizí klíč se umístí do primárního klíče

závislé entity (slabá entita), pokud použijeme existenční závislost, cizí klíč se umístí mezi

ostatní atributy. Nakonec pro všechny entity definujeme popisné atributy. Nejdůležitější při

celém procesu tvorby modelu je mít stále na paměti modelovanou realitu a snažit se model

udělat co nejvěrnější. Samozřejmě s přihlédnutím k určití míře zjednodušení, která vyplývá z

požadavků uživatele na budoucí databázi.

Kontrolní otázky:

1. Co je to Identifikační, resp. primární klíč?

2. Co je to cizí klíč?

3. Jaké typy vztahů znáte?

Pojmy k zapamatování:

Identifikační / primární klíč (Primary key)

Popisné / neklíčové atributy

Závislá entita (existenčně, identifikačně)

Nezávislá entita

Existenční typ vztahu

Identifikační typ vztahu

Cizí klíč (Foreign key)

Průvodce studiem:

Na této úrovni máme vytvořen konceptuální model. Následující aktivity se již budou týkat

datového modelu. Proto zde přerušte čtení, dejte si pauzičku a pak si prohlédněte vyřešené

příklady, které jsou uvedeny v následující kapitole.

2.2.2 Datový model v Erwinu

Průvodce studiem:

Datový model je na nižší úrovni abstrakce. Znamená to, že již musíme přihlížet ke

skutečnosti, v jakém prostředí (Systém Řízení Báze Dat) budou data uchovávána,

aktualizována, organizována a řízena. V současné době existuje několik typů datových

modelů. Z historického hlediska se jedná o modely síťové a hierarchické, v současnosti

nejvíce používaný je model relační, jehož pozici se již delší dobu snaží získat model

objektový. Nicméně většina současných databází je založena na relačním datovém modelu, i

my se budeme v následujících textech věnovat hlavně modelům relačním. Máme-li vytvořen

konceptuální model, musíme jej (jako 2. krok tvorby schématu databáze) transformovat na

model datový. V našem případě to bude relační datový model. S transformací do relačního

datového modelu jsou spojeny následující činnosti:

Definování datových typů jednotlivých atributů:

Pro definování datových typů je třeba se v hlavní nabídce přepnout na volbu:

Editor/…Database Scheme. Tři tečky znázorňují tu skutečnost, že na tomto místě se mohou

vyskytovat různé tzv. target servery. Target server je vlastně systém řízení báze dat

(SŘBD), ve kterém se budou modelovaná data zpracovávat. Proto v této fázi se musíme

rozhodnout, který SŘBD budeme dále používat. Výběrem SŘBD se již dostáváme k

definovaní datového modelu. Předcházející kroky byly součástí tzv. konceptuálního

modelování. Způsob výběru Target serveru je popsán na konci textu. Máme-li vybrán Target

server, nastavenou volbu Editor/…Database Scheme a vybereme libovolný objekt, zobrazí

se nám následující dialogové okno, do kterého budeme moci zapisovat pro jednotlivé atributy

jejich datové typy.

Všimněte si, že Erwin implicitně nastavuje veškeré datové typy atributů na CHAR(18). To

samozřejmě budeme potřebovat změnit. Proto pro každý vybraný atribut vybereme z nabídky

datových typů ten, který se nám zdá pro daný atribut nejvhodnější.

Chceme-li si nadefinované datové typy zobrazit, vybereme tlačítko Physical view z Toolbaru.

Definování indexů:

Indexy jsou pomocné datové struktury (pro jednoduchost si je můžeme představit jako

tabulky), které potřebujeme pro rychlé vyhledávání v databázi. Na úrovni modelování si

můžeme vybrat atributy, na které budeme indexy vytvářet. Tyto atributy se nazývají

vyhledávací klíče.

Nejdříve je třeba volbou Editor nastavit na vytváření indexů a to je volba …Index. Význam tří

teček je stejný, jako bylo uvedeno výše. Po zadání volby … Index a vybrání kterékoliv

tabulky se nám objeví následující dialogové okno:

V tomto okně je možno vytvářet nové indexy volbou NEW. Po zadání NEW si vybereme

atribut nebo skupinu atributů, na které chceme vytvořit index. Pro index lze nastavovat tyto

charakteristiky:

- Clustered: umožňuje zadat, že daný index bude clusterovaný, hasovaný. Podrobne

se s problematikou hašování můžete seznámit v teoretické části kurzu. Volba Size

Rows odkazuje na velikost alokovaného prostoru, který je vytvořen pro hašovaný

soubor.

- Unique: pokud je volba unique zadána, pak se jedná o tzv. alternativní klíč a tudíž

hodnoty tohoto klíče nemohou být duplicitní. Není-li volba unique vybrána, jedná se o

klíč inverzní a tudíž hodnoty tohoto klíče mohou být duplicitní.

- Descenting: tato volba umožní zadat způsob třídění hodnot v indexu. Implicitně je

nastavena volba Ascending (vzestupné třídění). Můžete však vybrat volbu

Descending (sestupné třídění).

Po zadáví všech vyhledávacích klíčů (resp. indexů) a zadání volby Display/Alternate key si

můžete nastavení indexů prohlídnout.

Jedno z možných nastavení indexů je na následujícím obrázku.

V tomto okamžiku lze říci, že datový model je hotov.

Všimněte si 2 úrovní abstrakce, kterých jsme použili. Na 1. Úrovni abstrakce jsme definovali

tzv. E-R model (konceptuální model), tj. zajímaly nás pouze objekty, atributy a vztahy. Na 2.

Úrovni abstrakce jsme již začali definovat datové typy, ale ty mohou být různé pro různé

systémy řízení báze dat (SŘBD). Proto bylo třeba nejdříve vybrat, který SŘBD (target server)

bude tím, v němž budeme data zpracovávat. Tím se ovšem posouváme na jinou úroveň

abstrakce. Ve 2. Úrovni vytváříme tzv. datový model. Třetí úrovní abstrakce je generování

datových schémat, což odpovídá imlementaci souborů a databází, jedná se tedy o fyzickou

(implementační) úroveň.

Vygenerovat schémata databáze můžeme dvěma základními způsoby:

- Přímo z Erwina volbou generovat (tato volba není v demo verzi přístupná).

- Přes tzv. skript, což je soubor příkazů jazyka SQL spustitelný v příslušném SŘBD.

Obě tyto možnosti zabezpečuje volba Server/ Schema Generation.

Definování Target serveru:

Vybráním volby Server/Target server se nám otebře následující dialogové okno:

Máme možnost vybírat ze dvou skupin target serverů (SŘBD):

- SQL servery jsou takové SŘBD, které pracují na bázi architektury Klient/Server.

- Desktop servery sice umožňují sdílet databázi, uloženou na jednom počítači, ovšem

toto sdílení nefunguje na principu Klient/Server.

Pro více informací musíte sáhnout po skriptech a teoretických textech.

Zajisté jste si všimli starých verzí nabízených SŘBD. Aktuální verze Erwina podporuje

všechny frekventované SŘBD v nejnovějších verzích. Aktuální ostrou verzi tohoto CASE

nástroje Vám bohužel nemohu poskytnout.

Pouze pro srovnání zde uvádím výběr Target serverů novější verze Erwina:

Kontrolní otázky:

1. Co je to datový tap atributu a jak závisí na vybraném target serveru (SŘBD)?

2. Co je to index a jak souvisí s pojmem vyhledávací klíč?

3. Jaké typy target serverů nabízí Erwin?

Pojmy k zapamatování:

Datový typ atributu

Vyhledávací klíč

Index

Target server

Průvodce studiem:

Po prostudování tohoto stručného návodu a příslušných teoretických kapitol byste měli být

schopni vytvořit konceptuální model zadané reality a transformovat jej do relačního datového

modelu dle vybraného SŘBD (target serveru). Pro prověření znalostí si ještě pečlivě

prostudujte kapitolu 3.7. - řešené příklady a pak se pusťte do řešení korespondenčního

úkolu. Jestliže jste byli při čtení pozorní a všechny funkce si prakticky vyzkoušeli, jistě

nebudete mít problémy s jeho řešením.

2.3 ŘEŠENÉ PŘÍKLADY

Cíl:

Cílem kapitoly Řešené úkoly je demonstrovat proces tvorby konceptuálního modelu na

zadaném výseku reality. Čtenář by se měl zamýšlet hlavně nad tím, jak:

- Hledat entity z neformálního popisu reality.

- Hledat identifikační klíče entit.

- Hledat vzájemné vztahy mezi entitami.

- Vybrat popisné atributy, jako podstatné vlastnosti nalezených entit.

Klíčová slova:

Neformální popis reality, konceptuální model reality, Erwin.

Průvodce studiem:

Věnujte, prosím, této kapitole mimořádnou pozornost. Jakmile Vám bude řešení uvedených

příkladů jasné, můžete přistoupit ke korespondenčnímu úkolu, jehož zadání najdete v

následující kapitole.

2.3.1 Popis modelované reality:

Následující text je jednoduchým popisem výseků realit, které by mohly být předmětem

databázového modelování. Popis je velmi zjednodušen. Každé zadání obsahuje vždy možné

řešení v prostředí Erwin.

Příklad:

Realita – ordinace u lékaře

Vytvořte model lékařské ordinace, který bude postihovat následující skutečnosti. Lékaři mají

smlouvy s pojišťovnami a to tak, že více lékařů může mít smlouvu s toutéž pojišťovnou a

zároveň jeden lékař může uzavřít smlouvu s více pojišťovnami. Pacienti jsou pojištěni vždy u

jedné pojišťovny. Pacienti chodí na návštěvy k lékařům, na kterých lékaři stanoví diagnózu a

předepíší recepty na léky. Atributy a klíče volte dle vlastní zkušenosti. Následuje jedno z

možných řešení.

Konceptuální model ordinace

 

Příklad:

Realita – lázně

Vytvořte model lázeňské péče. Hosté jezdí do lázní a jejich pobyty jsou evidovány v knize

hostů. Bude se jednat o lázně, kde bude u pacientů hlavně sledována jejich hmotnost v

souvislosti s jejich konstitucí. Informace o různých konstitucích se nachází v hmotnostní

tabulce. Hosté budou pravidelně váženi a naměřené hmotnosti budou zapisovány do tabulky

vážení. Host si bude moci připlatit dodatečnou péči, která je nad rámec běžného programu.

Bude nás zajímat, na kterých pokojích jsou kteří hosté umístěni. Následuje jedno z možných

řešení.

Konceptuální model lázní

Příklad:

Realita – knihovna

Vytvořte model půjčovny knih v knihovně. Knihovna vlastní exempláře mnoha různých knih.

Tyto knihy si mohou půjčovat čtenáři, kteří mají u této knihovny zřízen čtenářský průkaz. Je-li

kniha k dispozici, čtenář si půjčí odpovídající exemplář. Pokud kniha momentálně k dispozici

není, čtenář si může na tuto knihu vytvořit záznam, pomoci kterého si ji rezervuje, až k

dispozici bude. Následuje jedno z možných řešení.

 

 

3 MODUL 3

3.1 RELAČNÍ DATOVÝ MODEL

Cíl:

Cílem této kapitoly je, aby se čtenář seznámil se zatím nejvyužívanějším datovým modelem,

kterým je relační datový model. Kapitola přináší základní ideje, na kterých je model založen,

definici relačního modelu dat, základní pojmy. Čtenář se rovněž seznámí se základními

manipulačními prostředky, které lze v relačním datovém modelu nad daty využít. Po

prostudování textu by měl mít čtenář představu o strukturách, do kterých se ukládají data v

databázi, kterými jsou databázové relace. Dále by měl již naprosto přesně umět definovat

pojmy uvedené v klíčových slovech. Co se týká databázových operací, čtenář by měl po

přečtení této kapitoly o nich získat základní přehled. V následujících textech ještě bude

databázovým operacím věnována značná pozornost.

Klíčová slova:

RMD, databázová relace, 1NF, doména, primární klíč, cizí klíč, operace relační algebry.

3.1.1 Úvod

Relační datový model (RDM) byl poprvé popsán v roce 1970 E.F. Coddem a je zatím

nejrozšířenějším datovým modelem, na kterém je založen návrh a tvorba databází.

Základní ideje relačního modelu

- RMD důsledně odděluje data, která jsou chápána jako relace, od jejich

implementace.

- Přístup k datům je symetrický, tj. při manipulaci s daty se nezajímáme o přístupové

mechanizmy k datům.

- Pro manipulaci s daty jsou k dispozici dva silné prostředky - relační kalkul a relační

algebra.

- Pro omezení redundance dat v relační databázi jsou navrženy pojmy umožňující

normalizovat relace.

Průvodce studiem:

RMD má jediný konstrukt, kterým je databázová relace. Proto při transformaci

konceptuálního modelu na model relační je třeba celou složitou realitu transformovat na

množinu vcelku jednoduchých relací. Již tento fakt naznačuje, že bude skutečně velmi složité

a někdy dokonce nemožné realitu natolik zjednodušit. Tato úvaha vede ke snaze vývoje

datových modelů založených na objektových principech. To je ovšem v této kapitole ještě

téma předčasné, přesto je dobré si uvedenou skutečnost uvědomit.

Základní definice RMD

Mějme množiny D1, D2, D3,.......Dn. Z každé vybereme 1 prvek. Tím vytvoříme

uspořádanou n-tici. Kartézský součin D1 x D2... je množina všech posloupností (x1,x2,...)

kde x1 je prvkem D1 ... Relace je každá podmnožina kartézského součinu. Z hlediska

databázových systémů jsou množiny D1, D2,.. množina hodnot atributů a označují se jako

domény.

Od matematické relace se liší v několika aspektech:

- Relace je vybavena pomocnou strukturou, které se říká schéma relace. Schéma

relace se skládá ze jména relace, jmen atributů a domén.

- Prvky domén, ze kterých se berou jednotlivé komponenty prvků relace, jsou

atomické (dále nedělitelné) hodnoty. Tomuto omezení se říká 1.normální forma

relací (1NF).

Schéma relace R se vytvoří nad množinou atributů A1:D1,...An:Dn, kde Ai jsou jména

atributů a Di jsou domény. Dvojici Ai:Di se říká atribut relace. Schéma relace lze zapsat

R(A1:D1,....An:Dn). Relace R nad množinou A je libovolná podmnožina kartézského

součinu domén D1 x...x Dn. Doména náležící atributu C se označuje jako dom(C).

Domény jsou obvykle primitivní typy dat (STRING, INTEGER...).

Prvkům relace se říká n-tice, přičemž n určuje řád relace. Relační schéma databáze je

dvojice (R,I), kde R je množina schémat relací a I je množina integritních omezení. Jedno

z významných IO na relaci R(A) je existence primárního klíče.

Primární klíč je množina atributů K z A, jejichž hodnoty jednoznačně určují n-tice

relace R. K je minimální v tom smyslu, že z ní nelze odebrat žádný atribut, aniž by to

narušilo identifikační vlastnost.

Atribut, který je součástí nějakého klíče se nazývá klíčový.Atributy, které nejsou

součástí žádného klíče se nazývají neklíčové. Z podstaty RMD vyplývá, že každá

relace má klíč. Protože relace jsou množiny, nesmí relace obsahovat duplicitní prvky.

Dalším důležitým IO je referenční integrita. Toto omezení popisuje vztahy mezi daty ve

dvou relacích. Atribut, kterého se referenční integrita týká se nazývá cizí klíč (foreign key).

Takové dvě relace se obvykle nazývají master/ detail nebo parent/child nebo

independent/dependent. Česky obvykle hlavní/závislá někdy taky nezávislá/závislá,

nadřazená/podřízená. Cizí klíč je atribut relace, který se v nadřazené relaci primárním

klíčem.

Příklad:

Hlavní relace:

UCITELE(CISLO,JMENO,PLAT,PRIPLATEK,...)

Závislá relace:

PREDMETY(ZKRATKA,NAZEV,......,GARANT)

CISLO z relace UCITELE je primární klíč a objevuje se v relaci PREDMETY jako položka

GARANT. Položka GARANT je tzv. cizí klíč.

Přípustnou relační databází se schématem (R, I) nazýváme množinu relací R1,...Rk

takových, že jejich prvky vyhovují I. O takové množině relací říkáme, že je konzistentní.

Formou reprezentace relací může být dvojrozměrná tabulka.

Podmínky, které musí splňovat relační tabulka:

- Všechny hodnoty v tabulce musí být elementární - tz. dále nedělitelné - podmínka

1.NF.

- Sloupce mohou být v libovolném pořadí.

- Řádky mohou být v libovolném pořadí.

- Sloupce musí být homogenní, tzn. ve sloupci musí být údaje stejného typu.

- Každému sloupci musí být přiřazeno jednoznačné jméno (tzv. atribut).

- V relační tabulce nesmí být dva zcela stejné řádky. Tzn., že každý řádek je

jednoznačně rozlišitelný.

Shrnutí:

Doména: je množina datových hodnot stejného typu. Tyto hodnoty popisují nějakou

vlastnost objektu.

Relace: je každá podmnožina kartézského součinu, jejíž konkrétní n-tice vznikly vybráním

příslušných prvků z domén.

Atribut: je pojmenování pro každé užití hodnoty z domény v relaci.

Záhlaví relace: obsahuje jméno relace a jména atributů v relaci. Je v čase neměnné.

Tělo relace: obsahuje v čase proměnnou množinu n-tic hodnot, jejichž pořadí je dáno

záhlavím relace.

Stupeň relace: je počet atributů relace.

Kardinalita relace: je počet řádků relace.

Primární klíč: je atribut nebo množina atributů, který jednoznačně určuje n-tice relace.

Pokud je třeba použít více atributů pro jednoznačné určení n-tice, potom hovoříme o tzv.

složeném primárním klíči. Pokud je více atributů, které splňují pravidlo pro primární klíč,jeden

zvolíme jako primární a ostatní jsou alternativní klíče.

Definice primárního klíče:

Primární klíč je podmnožina atributů relace, která

1) jednoznačně identifikuje každý prvek relace

2) není redundantní, tj. žádný její atribut nelze vynechat, aniž by podmínka 1) přestala platit.

Kandidáti primárního klíče:

primární klíč - pouze jeden

alternativní klíče - více.

Kontrolní otázky:

1. Co je to databázová relace a čím se liší od relace matematické?

2. Jak lze vytvořit každou instanci databázové relace?

3. Čím lze identifikovat jednotlivé n-tice relace?

4. Kolik může mít relace primárních klíčů?

Pojmy k zapamatování:

Doména

Atribut

Relace

Kandidáti primárního klíče

Primární klíč

Alternativní klíč

Kardinalita relace

Stupeň relace

Cizí klíč

1NF

3.2 KLÍČE V DATABÁZOVÉ TECHNOLOGII

Cíl:

Cílem této kapitoly je zopakovat již zavedené pojmy týkající se klíčů v relačních datových

modelech, přehledně uvést základní definice a na příkladech ozřejmit použití různých typů

klíčů. Čtenář po prostudování této kapitoly musí umět definovat co to je klíč, vyjmenovat typy

klíčů a charakterizovat je.

Klíčová slova:

Primární klíč, cizí klíč, alternativní klíč, inverzní klíč.

Průvodce studiem:

Tuto kapitolu je třeba chápat jako kapitolu přehledovou. Nedovíte se v ní v podstatě nic

nového, pouze se přehledově zopakujete čtyři již zmiňované pojmy (klíče) a na příkladem si

připomenete jejich význam a použití. Pro ty, kteří studovali poctivě to bude skutečně snadná

záležitost.

3.2.1 Primární klíč (Primary Key)

je atribut nebo množina atributů K z A (kde A je množina všech atributů relace R), jejichž

hodnoty jednoznačně určují n-tice relace R. K je minimální v tom smyslu, že z ní nelze

odebrat žádný atribut, aniž by to narušilo identifikační vlastnost. Pokud je atributů, které

splňují tuto vlastnost v relaci R více, nazýváme je kandidáty primárního klíče. Kandidátů

primárního klíče smí být v dané relaci R více, primární klíč však smí být pouze jeden (to

nevylučuje možnost, že tento jeden primární klíč je složen z více atributů). Výběr primárního

klíče je veden několika kritérii, kterým se budeme věnovat později.

Příklad:

Mějme relaci Pacient, která má následující atributy:

Rodné číslo

Jméno

Příjmení

Datum narození

Ulice

Číslo domu

Město

Telefon

Kód pojišťovny

Nad každým atributem se zamyslíme a zvážíme, zda splňuje identifikační vlastnost, tj. zda

jeho hodnota jednoznačně identifikuje každou n-tici relace Pacient. Je zřejmé, že můžeme

mít více různých pacientů téhož jména, příjmení, data narození, atd. Je však nemožné

(aspoň doufám, po všech kontrolách, které byly provedeny v souvislosti se zavedením

zdravotních pojišťoven), aby dva různí pacienti měli totožné rodné číslo. Proto Rodné číslo je

kandidátem primárního klíče. Dá se předpokládat, že rovněž složený atribut (Jméno,

Příjmení, Datum narození) by mohl být kandidátem primárního klíče. Při rozhodování, který

ze dvou kandidátů bude vhodnějším primárním klíčem, rozhoduje jednoduchost a tudíž jako

PK vybereme Rodné číslo.

3.2.2 Cizí klíč (Foreig Key)

Cizí klíč je atribut nebo množina atributů, které jsou v nadřazené relaci primárním klíčem.

Nadřazenou relací budeme označovat takovou relaci, která vznikla z nadřazené entity,

podřízenou relaci, která vznikla z podřízené entity. Existence vztahu mezi entitami v

konceptuálním modelu je v relačním modelu zachycena právě cizím klíčem. Obsahuje-li

relace cizí klíč znamená to, že je v podřízeném vztahu s jinou relací.

Příklad:

Mějme relaci Pacient z předchozího příkladu a relaci Pojišťovna, která bude mít následující

atributy:

Kód pojišťovny

Název

Ulice

Číslo

Město

Telefon

V konceptuálním modelu platilo, že entita Pacient je existenčně závislá na entitě Pojišťovna,

tzn., že nemůže existovat žádná instance entity Pacient, která by nevstupovala do vztahu s

entitou Pojišťovna. Jednoduše řečeno všichni pacienti musí být pojištěni u nějaké pojišťovny.

Tato skutečnost byla zakreslena existenčním typem vztahu.

Relační model disponuje pouze jediným konstruktem a tím je relace, vztah se modeluje cizím

klíčem (FK). Proto primární klíč nadřazené relace se stane cizím klíčem podřízené relace.

Nadřazená relace je Pojišťovna (její PK je Kód pojišťovny)

Podřízená relace je Pacient (její PK je Rodné číslo). Kód pojišťovny je FK v relaci Pacient.

Výsledná definice klíčů:

Pojišťovna

Kód pojišťovny PK

Název

Ulice

Číslo

Město

Telefon

Pacient

Rodné číslo PK

Jméno

Příjmení

Datum narození

Ulice

Číslo domu

Město

Telefon

Kód pojišťovny FK

3.2.3 Vyhledávací klíče

Vyhledávací klíč je atribut nebo množina atributů, které složí k rychlému vyhledávání v

databázi. Na tyto klíče se vytvoří pomocné datové struktury, tzn. indexy a ty způsobí, že

záznam se zadanou hodnotou vyhledávacího klíče se najde v databázi rychleji. Více

informací o indexech najdete v následujících kapitolách, proto se zde omezíme pouze na

definici vyhledávacích klíčů.

Vyhledávací klíče mohou být dvojího typu:

Alternativní klíč (Alternate Key)

Je vyhledávací klíč, jehož hodnoty nesmí být duplicitní. Jedná se v podstatě o nevybraného

kandidáta primárního klíče. Alternativní klíč (AK) totiž musí, stejně jako primární klíč,

splňovat podmínku jednoznačné identifikace.

Příklad:

Složený kandidát primárního klíče z relace Pacient (Jméno, Příjmení, Datum narození) by

mohl být alternativním klíčem.

Inverzní klíč (Inverse Key)

Inverzní klíč (IE) je atribut nebo množina atributů k rychlejšímu vyhledávání v databázi. Jeho

hodnoty mohou být duplicitní.

Příklad:

Příkladem by mohl být atribut jakýkoliv atribut relace Pacient, podle jehož hodnot chceme v

databázi hledat záznamy. Obvykle chceme najít pacienta podle Příjmení.

Úkol k zamyšlení:

Popište neformálně výsek reality, ve kterém nalezněte aspoň dvě entity, které spolu vstupují

do vztahu. Zamyslete se na těmito entitami a nalezněte kekich primární klíče, alternativní

klíče, inverzní klíče a určete, která z nich bude obsahovat cizí klíč a jak bude tento cizí klíč

vypadat.

3.3 NORMALIZACE RELAČNÍCH SCHÉMAT

Cíl:

Cílem kapitoly Normalizace relačních schémat je objasnit, jak lze nalézt v navržených

relacích zdroje redundancí dat a jak tyto zdroje redundance odstranit. Čtenář po

prostudování kapitoly bude schopen posuzovat jednotlivé atributy v rámci navržené relace z

pohledu funkčních závislostí a bude schopen stanovit, ve které normální formě se relace

nachází. Bude schopen nalézt uzávěr množiny funkčních závislostí s využitím

Armstrongových axiomů a dodatečných deduktivních pravidel.

Klíčová slova:

funkční závislosti atributů, 1NF, 2NF, 3NF, BCNF, dekompozice relačních schémat, uzávěr

množiny funkčních závislostí, Armstrongovy axiomy, dodatečná deduktivní pravidla.

Průvodce studiem:

Relační databázové modely disponují aparátem pro odstranění redundantních dat z

databáze. Redundance v databázi jsou potencionálně velkým problémem. Ne proto, že by

data zbytečně zabírala místo na paměťových médiích, ale hlavně proto, že redundantně

vyskytující se data se jen velmi těžko dají uchovávat v konzistentním stavu. Z tohoto pohledu odstranění redundancí je základní podmínkou pro udržení konzistence databáze.

Prostředkem pro návrh databáze bez redundancí je tzv. normalizace relačních schémat.

Každý krok směrem k vyšší normalizaci relačních schémat je zároveň krokem ke kvalitnějším

a spolehlivějším datům. proto je problematika normalizace velmi důležitá. K čemu by nám

byla data, o kterých bychom věděli, že se na jejich správnost nedá spoléhat?

3.3.1 První normální forma relace

Báze dat je nejjednodušší a nejpřehlednější, jsou-li relace, které ji reprezentují, definovány

nad doménami, jejichž prvky jsou jednoduché (nejsou to opět relace). O takových relacích se

říká, že jsou v první normální formě a příslušné atributy se nazývají jednoduchými

(atomickými, dále nedělitelnými).

Relace je v první normální formě (1NF), jsou-li všechny její atributy atomické

(nedělitelné)

Atributy, které nejsou jednoduché, jsou složené. Některé relace v první normální formě však

mají i negativní vlastnosti z hlediska redundance a konzistence dat. Problémy spojené s

redundancí dat vyplývají zpravidla ze skutečnosti, že hodnota některého atributu může zcela

určovat hodnoty jiných atributů. Sdružování takových atributů v jedné relaci se ukazuje jako

nevhodné. Problematice dekompozice relací neboli jejich normalizaci budou proto věnovány

následující odstavce.

Příklad:

Příkladem relace, která je v 1NF, ale není v žádné vyšší NF je relace, která nemá primární

klíč.

Relace dodavatelů automobilů

Název Stát Město Název auta Počet

D1 ČR Mladá Boleslav Škoda Favorit 67

D1 ČR Mladá Boleslav Škoda Favorit 80

D3 SRN Kolín n.Rýnem Opel Vectra 9

D3 SRN Kolín n.Rýnem Opel Vectra 44

D3 SRN Kolín n.Rýnem Opel Vectra 48

D6 Francie Paříž Renault 19 10

Relace je nejvýše v 1NF, protože má atomické atributy, ale nemá PK.

3.3.2 Funkční závislosti atributů

Problém, který byl nastíněn v předcházejícím odstavci, spočívá ve vzájemných závislostech

atributů jedné relace. Pro tuto závislost se zpravidla používá termínu funkční závislost, i když

z hlediska matematického nejde o funkci, stejně jako pojem relace zcela neodpovídá

matematickému pojetí (v databázovém pojetí se totiž relace stejně jako funkční závislosti

mění v čase ).

Nechť R(A:D) je relační schéma a X, Y jsou jednoduché nebo složené atributy. Atribut Y je

funkčně závislý na atributu X, ( X -> Y ), platí-li pro každou instanci relace R, že pro libovolné

dva prvky relace, které se shodují v hodnotě atributu X, platí, že se shodují i v atributu Y.

Atribut Y je úplně funkčně závislý na složeném atributu X, je-li na X funkčně závislý a

zároveň není funkčně závislý na žádné z jeho složek.

3.3.3 Druhá normální forma relace

Požadavek, aby se relace nacházela v první normální formě, tj. aby každý atribut relace byl

definován na jednoduché doméně, nevede vždy k nejžádanějším výsledkům.

Relace R je ve druhé normální formě (2NF), je-li v první normální formě a jestliže pro

každý neklíčový atribut platí, že je úplně funkčně závislý na primárním klíči.

Proces redukce relace v nižší normální formě (zde v 1.NF) na relaci ve vyšší normální formě

(zde ve 2.NF) se nazývá normalizace relace. Relace v některé z vyšších normálních forem je

zároveň relací ve všech vůči ní nižších normálních formách. Je zřejmé, že vyšší normální

formu relace lze vytvořit vhodnou dekompozicí relace původní. Požaduje se však, aby

výchozí relace byla z výsledných komponent rekonstruovatelná, tj. aby při dekompozici

nedošlo ke ztrátě informace.

Příklad:

Relace dodavatelů automobilů

Název Stát Město Název auta Počet

D1 ČR Mladá Boleslav Škoda Favorit 67

D2 ČR Praha Škoda Favorit 50

D3 SRN Kolín n.Rýnem Opel Vectra 9

D4 SRN Wolfsburg VW Golf 22

D5 SRN Mnichov VW Golf 14

D6 Francie Paříž Renault 19 10

Název je PK v relaci relace je aspoň ve 2NF.

Funkční závislosti atributů:

Název Stát

Název Město

Název Název auta

Název Počet

Město Stát

Název Město & Město Stát Název Stát

Stát je tranzitivně závislý na Názvu.

Proto relace není v 3NF, ale pouze v 2NF.

Příklad:

Relace stromů v lese:

Číslo Typ Druh Výška

1 smrk jehličnatý 5

2 jedle jehličnatý 3

3 smrk jehličnatý 8

4 dub listnatý 12

5 dub listnatý 8

Číslo je PK

Funkční závislosti atributů:

Číslo Typ

Číslo Druh

Číslo Výška

Typ Druh

Číslo Typ & Typ Druh Číslo Druh

relace není v 3NF – tranzitivní závislost

Úkoly k zamyšlení:

1. Pokuste se navrhnout relaci, která bude v 1NF a zároveň nebude v 2NF z toho

důvodu, že její atributy nebudou úplně funkčně závislé na primárním klíči.

2. Navrhněte relaci, která bude v 2NF.

3.3.4 Třetí normální forma relace

Nechť X, Y, Z jsou atributy (jednoduché nebo složené) daného relačního schématu a nechť

mezi dvojicemi atributů platí:

Pak je atribut Z tranzitivně závislý na atributu X.

Nutnost podmínky nezávislosti X na Y vyplývá ze skutečnosti, že v opačném případě by v

každém relačním schématu se dvěma a více možnými klíči byly všechny neklíčové atributy

tranzitivně závislé na kterémkoliv z klíčů.

Relace R je v třetí normální formě (3NF), je-li ve druhé normální formě a platí-li, že žádný

neklíčový atribut není tranzitivně závislý na žádném klíči relace R.

Z definice relace ve třetí normální formě vyplývají tyto její vlastnosti :

- Žádný neklíčový atribut relace není ani částečně ani tranzitivně závislý na nějakém

klíči relace, jsou tedy úplně závislé na primárním klíči.

- Neklíčové atributy jsou navzájem nezávislé.

Problémy, které mohou u relací v třetí normální formě nastat, mohou však vyplynout ze

vzájemně částečně nebo tranzitivně závislých klíčových atributů. Kandidátní klíče, pokud

klíče nejsou jednoduché, se totiž mohou částečně překrývat. Dekompozice relací, které

vedou ke třetí normální formě, mohou navíc být nejednoznačné a vést k nestejně kvalitním

výsledkům.

Příklad:

Dekompozicí relace v 2NF dostaneme relace v 3NF.

Číslo Typ Výška

1 smrk 5

2 jedle 3

3 smrk 8

4 dub 12

5 dub 8

Číslo je PK

Typ Druh

smrk jehličnatý

jedle jehličnatý

dub listnatý

Typ je PK

Obě relace obsahují pouze závislosti neklíčových atributů na primárním klíči. Jsou

odstraněny všechny tranzitivní závislosti. Proto jsou obě relace ve 3NF.

Úkoly k zamyšlení:

1. Navrhněte relaci, ve které bude existovat tranzitivní závislost atributu(ů) na primárním

klíči.

2. Navrhněte vhodnou dekompozici.

3.3.5 Boyce-Coddova normální forma relace

Nedostatky plynoucí ze vzájemných závislostí klíčových atributů eliminuje Boyce - Coddova

normální forma BCNF, která vylučuje všechny netriviální funkční závislosti atributů kromě

závislostí na klíčích relace.

Schéma relace R(A:D) je v Boyce-Coddově normální formě ( BCNF), je-li v první normální

formě a platí-li pro každou funkční závislost atributu A na atributu X , která není triviální, že X

je klíčem v R a A je neklíčový atribut.

Je zřejmé, že každé relační schéma, které je v BCNF je též ve třetí normální formě, nikoliv

však naopak. Existují relační schémata ve třetí normální formě, která nejsou v BCNF.

Příklad:

Zaměstnanec (Číslo_zam, RČ, Jméno, Příjmení, Funkce)

Kandidáti PK: Číslo_zam a RČ

Funkční závislosti:

Kromě všech závislostí neklíčových atributů na kandidátech PK, ex. i závislost kandidátů PK

navzájem. Proto relace není v BCNF.

Pro převedení relace do BCNF je vhodné jeden z atributů (Číslo_zam, resp. RČ) vypustit a

tím zajistit jediný typ úplné funkční závislosti. Totiž závislosti, kdy neklíčový atribut je závislý

na klíč.

Relace v BCNF by potom mohla vypadat takto:

Zaměstnanec (Číslo_zam, Jméno, Příjmení, Funkce)

Pokud v databázi potřebujeme oba atributy, pak je vhodné je umístit do různých relací.

3.3.6. Další funkční závislosti

3.3.6.1. Množina funkčních závislostí

Nechť R je relační schéma a A, B, C je podmnožina jeho atributů. Dále předpokládejme

funkční závislosti A B a B C. Z těchto závislostí lze předpokládat A C (tranzitivita).

Označme F jako množinu funkčních závislostí pro R (A B a B C) a X Y jako

libovolnou funkční závislost. Řekneme-li, že F logicky implikuje X Y, pak každý prvek

relačního schématu R, který splňuje závislosti v F, splňuje i závislost X Y a zapisujeme

F |= X Y

V našem případě relačního schématu R pak tuto skutečnost zapíšeme:

{ A B, B C}|= A C

3.3.6.2. Uzávěr množiny funkčních závislostí

F+ je uzávěrem F tehdy, platí-li, že všechny závislosti v F+ jsou logickými důsledky v F. Tuto

skutečnost zapisujeme:

F+ = { X Y | F |= X Y}

3.3.6.3. Kandidáti primárního klíče a funkční závislosti

Mějme schéma R(A1,A2,....,An) a funkční závislosti F. Nechť X je podmnožina {A1, A2, ....,

An}. Pak o X lze říci, že je kandidátem primárního klíče v R, jestliže:

1. X A1A2,....An je v F+

Závislost všech atributů A1,A2,....,An na atributu X je daná nebo logicky vyplývá.

2. Neexistuje Y X, pro které by platilo Y A1A2,....An v F+.

3.3.6.4. Armstrongovy axiomy

1. Reflexivita

Jestliže Y X U, pak závislost X Y je logicky implikována. Na složeném atributu

A1A2,....An je funkčně závislý každý atribut Ai, který je jeho složkou.

2. Augmentace

Jestliže platí X Y ve schématu R a Z je podmnožinou atributů U, pak taky platí:

XZ YZ (XZ je zkrácené označení X Z).

3. Tranzitivita

Jestliže platí X Y a zároveň Y Z, pak taky platí X Z

Příklad:

Mějme schéma R(A,B,C,D) s funkčními závislostmi A C, B D. Zvolme primárním klíčem

složený atribut AB jako jediný. Dokažte, že AB je jediným kandidátem primárního klíče.

1. A C daná závislost

2. AB ABC augmentace atributy AB

3. B D daná závislost

4. ABC ABCD augmentace atributy ABC

5. AB ABCD tranzitivita

Všechny atributy relačního schématu R jsou závislé na klíči AB a přitom nejsou závislé na

jeho složkách A, B.

3.3.6.5. Dodatečná deduktivní pravidla

1. Pravidlo spojení

{ X Y, X Z} |= X YZ

2. Pravidlo pseudotranzitivity

{ X Y, WY Z} |= WX Z

3. Dekompoziční pravidlo

Jestliže X Y & Z Y, pak X Z

Úkoly k zamyšlení:

Pokuste se s využitím Armstrongových axiomů dokázat výše uvedená tři dodatečná pravidla.

Řešení:

Pravidlo 1

X Y daná závislost

X XY augmentace X

X Z daná závislost

XY YZ augmentace Y

X XY & X Z YZ X YZ

Pravidlo 2

X Y daná závislost

WX WY augmentace W

WY Z daná závislost

WX Z tranzitivita

Pravidlo 3

Y Z vyplývá z reflexivity

X Y daná závislost

X Z tranzitivita

Příklad:

Mějme schéma R(A,B,C) a F = { A B, B C}. Určete F+.

Řešení:

1. Za X dosaďte postupně všechny atributy, obsahující A.

ABC AB dekompoziční pravidlo

A C tranzitivita, vyplývající z F

ABC BC augmentace B

2. Za X dosaďte postupně všechny atributy, které obsahují B, ale neobsahují A.

BC B dekompoziční pravidlo

B C předpoklad

B 0 reflexivita

3. Za X dosaďte všechny atributy, které obsahují C, ale neobsahují ani A, ani B.

C C reflexivita

C 0 reflexivita

0 0 reflexivita

Shrnutí:

Problematika normalizace relačních schémat je velmi důležitá a není možné se jí vyhnout,

chceme-li navrhnout smysluplné schéma databáze. Jejím hlavním úkolem je nalézt zdroje

redundance dat, které v konečném důsledku vedou k nekonzistenci databáze. Pro stanovení,

ve které normální formě se relace nachází, je třeba nalézt všechny funkční závislosti atributů.

Kromě triviální funkční závislosti (atribut je závislý sám na sobě) sledujeme tranzitivní funkční

závislost a úplnou funkční závislost. Při každé závislost musíme stanovit, zda se jedná o

závislost na primárním klíči, na jeho složce či na neklíčovém atributu. Ideální situace je,

pokud všechny navržené relace se vyskytují v BCNF. Někdy je ovšem těžké tohoto stavu

docílit a můžeme připustit 3NF. V žádném případě však není možné, aby byly relace v nižší

než 3NF. Pro účinné nalezení všech funkčních závislostí (uzávěr množiny funkčních

závislostí) lze s úspěchem použít tzv. Armstrongových axiomů a dodatečných deduktivních

pravidel.

Kontrolní otázky:

1. Kdy se nachází relace v 1NF, 2NF, 3NF, CBNF?

2. Kdy můžeme říci, že atribut A je funkčně závislý na atributu B?

3. Čeho musíme dbát při dekompozici relačních schémat?

4. Co je to uzávěr množiny funkčních závislostí?

5. K čemu slouží a z čeho jsou odvozena dodatečná deduktivní pravidla?

Pojmy k zapamatování:

Funkční závislost atributů

Úplná funkční závislost

Tranzitivní funkční závislost

1NF, 2NF, 3NF, BCNF

Dekompozice relačních schémat

Uzávěr množiny funkčních závislostí

Armstrongovy axiomy

Dodatečná deduktivní pravidla

Průvodce studiem:

Pro úplnost ještě uvádím, že v problematice normalizace relačních schémat se rovněž

vyskytuje pojem 4NF, jehož vysvětlení je nad rámec tohoto textu. Pokud má čtenář zájem se

s problematikou seznámit, může sáhnout např. po publikaci [1].

3.4 TRANSFORMACE KONCEPTUÁLNÍCH SCHÉMAT

Cíl:

Jak již z předcházejících kapitol vyplynulo, postup při vytváření schématu databáze je

následující:

1. Vytvoření konceptuálního schématu modelované reality.

2. Transformace konceptuálního modelu na model datový (my jsme se zabývali pouze

relačním datovým modelem).

3. Vygenerování schématu do příslušného systému řízení báze dat.

Následující kapitola shrnuje, jakými problémy se musí návrhář zabývat, když transformuje

konceptuální model na relační datový model. Cílem kapitoly je zopakovat probrané učivo z

předcházejících kapitol a systematizovat postup při transformaci konceptuálního modelu na

datový. Čtenář si musí osvojit postup při vytváření schématu databáze a musí se řídit

principy, definovanými v této kapitole.

Klíčová slova:

Entita, vztah, atribut, identifikační klíč, relace, primární klíč, alternativní klíč, inverzní klíč, cizí

klíč, silné entity, slabé entity, reprezentace entit, reprezentace vztahů.

Průvodce studiem:

Z předcházejících kapitol již bylo zřejmé, že po vytvoření konceptuálního modelu je třeba se

rozhodnout, do jakého datového modelu budeme konceptuální model transformovat.

Naznačili jsme, že se v dalším textu budeme zabývat pouze datovými modely relačními, i

když existují i jiné datové modely, které jsou však v současné době rozšířeny v podstatně

menší míře. Pozorný čtenář již získal představu o tom, jak konceptuální model na model

relační transformovat. Nicméně mohou vzniknout situace, kdy si nebudete vědět rady. Proto

je pro Vás připravena následující kapitola, která diskutuje případy, které při transformaci

mohou nastat. Zároveň chápejte tuto kapitolu jako poslední, která se problematice

modelování zabývá. Proto ji prostudujte velmi pozorně a pokud Vám bude něco nejasné,

vraťte se k předcházejícím kapitolám a znovu si je pozorně pročtěte. Pokud budou

pochybnosti či nejasnosti přetrvávat, kontaktujte tutora.

3.4.1 Nejpoužívanější konstruktory E - R modelu

Systematický přístup k transformaci konceptuálního modelu na relační datový model

vyžaduje, abychom se zabývali všemi konstrukty, které se v obou typech modelů vyskytují.

konceptuální model disponuje dvěma základními konstrukty, kterými jsou entita a vztah.

Relační model disponuje pouze jediným konstruktem a tím je databázová relace. Nejdříve si

vyjmenujme, jaké entity, vztahy a atributy se mohou vyskytnout v konceptuálním modelu.

ENTITA

- Obecná = bez rozlišení druhu.

- Silná (kmenová, základní, regulární) = existuje nezávisle na jiných entitách.

- Slabá (popisná) = identifikačně závislá na jiných entitách.

- Vazební (asociativní) = realizuje vazbu mezi entitami.

- Generalizace (nadtyp).

- Specializace (podtyp).

VZTAH

- N -ární = mezi více než dvěma entitami.

- Binární.

- Kardinalita (max. a min. počet výskytů zúčastněné entity ve vztahu).

- Výlučnost (exkluzivita) = pro jeden výskyt entity může být realizován právě jeden

ze vztahů.

- Existenční závislost (povinné členství).

- Identifikační závislost .

ATTRIBUT

- Jednoduchý (atomický) = dále nedělitelný.

- Složený.

- Základní = který nelze odvodit z jiných atributů.

- Odvoditelný.

- Vícehodnotový.

KLÍČ

- Identifikační.

- Alternativní.

- Cizí.

- Inverzní.

3.4.2 Principy transformace E-R schématu do relačního datového modelu

Základním problémem je skutečnost, že konceptuální model disponuje dvěma základními

konstrukty, kterými jsou entita a vztah, kdežto relační datový model disponuje jediným

konstruktem, kterým je databázová relace. Je třeba se tedy zabývat, jak konstrukty E-R

modelu převést na relace. Entitní a vztahové typy se převádějí na relace. Čtenář relačního

schématu, který nezná konceptuální schéma tedy obecně nemusí být schopen rozlišit, která

relace odpovídá entitnímu a které vztahovému typu.

3.4.3 Převedení silného entitního typu

- Entita se převede na relaci.

- Identifikační klíč se převede na primární klíč.

- Popisné atributy definují domény relace.

Problém může nastat v souvislosti s normalizací relací. Cílem je, aby výsledná tabulka byla

aspoň v 3. NF nebo v BCNF. Dekompozice pak způsobí nárůst relací, které neznají

odpovídající entitu v E-R diagramu. Do jisté míry toto lze řešit pohledy.

3.4.4 Reprezentace vztahů

vztahy 1 : 1

a) Mějme entity E1 a E2, které vstupují do vztahu V. Má-li E1 i E2 nepovinné členství ve

vztahu V, vzniknou transformací 3 relace E1 - R1 , E2 - R2 , V - R. R bude

obsahovat klíče schémat R1 a R2 ,jako cizí klíče. Libovolný z nich může v R být

primárním klíčem. Další atributy v R budou odpovídat atributům ve V.

b) Má-li E1 nepovinné a E2 povinné (nebo obráceně), budou se vytvářet pouze relace

R1 a R2. Existenční závislost E2 na E1 vyjádříme tak, že k R2 připojíme jako cizí

klíč klíčové atributy R1. Atributy vztahu V budou umístěny do R2.

c) Mají-li obě entity povinné členství, můžeme vytvořit jediné schéma relace R, které

vznikne z těchto dvou entit. Primárním klíčem bude libovolný z identifikačních klíčů,

přidáme atributy V.

vztahy 1 : N

Ve vztahu s kardinalitou 1 : N je entita, vstupující n instancemi do vztahu, nazývána

determinantem vztahu.

a) Má-li determinant (E1) povinnou účast ve vztahu V, definujeme 2 relace R1 a R2. Ke

schématu R1 připojíme klíčové atributy R2. Primární klíč R1 odpovídá identifikačnímu

klíči determinantu E1. K ještě připojíme atributy vztahu V.

b) Má-li determinant (E1) nepovinnou účast ve vztahu V, definujeme tři relace R1, R2,

R. R bude obsahovat klíče schémat R1 a R2 jako cizí klíče. Klíč schématu R1 bude v

R primárním klíčem. Další atributy budou odpovídat atributům vztahu V.

3.4.5 Reprezentace vícehodnotových atributů

Analytik může sestavit konceptuální schéma tak, že použije vícehodnotový atribut. Tuto

skutečnost konceptuální model připouští, nepřipouští ji však relační datový model. Jak

převést takovou entitu na relaci (relace)?

1. Některé relační SŘBD připouštějí tabulky s vícehodnotovými sloupci (výjimečný

případ).

2. Jestliže se vícehodnotový atribut váže na maximální počet výskytů m a databázový

model připouští hodnotu NULL ve sloupci tabulky, budou vícehodnotové atributy

transformovány na m atributů a nevyužité atributy budou mít hodnotu NULL.

3. Většinou je třeba provést dekompozici entity na dvě relace.

Příklad:

ZAMĚSTNANEC (OSOBNÍ ČÍSLO, ..... RODNÉ_ČÍSLO_DÍTĚTE: Multi)

RODNÉ_ČÍSLO_DÍTĚTE je vícehodnotový atribut. Obecně nevíme, kolik dětí zaměstnanec

má. Tuto situaci vyřešíme tak, že provedeme dekompozici na dvě relace:

ZAMĚSTNANEC (OSOBNÍ ČÍSLO, ....)

DATA_NAROZENÍ (OSOBNÍ ČÍSLO, RODNÉ ČÍSLO DÍTĚTE)

Každému dítěti bude odpovídat jedna n -tice v relaci data_narození.

Konstrukce klíče je nejednoznačná:

a) Klíčem může být složený klíč např. OSOBNÍ ČÍSLO, RODNÉ ČÍSLO DÍTĚTE.

b) Klíčem může být pouze vícehodnotový atribut RODNÉ ČÍSLO DÍTĚTE.

3.4.6 Reprezentace skupinových atributů

Skupinové atributy mohou být navrženy např. v případě, kdy u jedné entity jsou atributy více

používané a atributy, které více nejsou pominutelné, ale jsou méně používané.

Příklad:

E(KLIČ_E, FREKV_ATR1, FREKV_ATR2,...., LEŽÁKY (L_ATR1, L_ATR2,...))

Tuto situaci musíme převést na 2 relace:

E1 (KLÍČ_E, FREKV_ATR1,...)

LEŽÁKY (KLÍČ_E, L_ATR1,...)

Na úrovni pohledu je pak možno používat schéma E se všemi atributy, na databázové úrovni

však jsou dvě relace E1 a LEŽAKY.

3.4.7 Reprezentace slabého entitního typu

Slabý entitní typ je reprezentován relací, která kromě svých atributů má i atributy

identifikačního vlastníka. Je třeba dbát na to, aby identifikační vlastník byl pouze jeden.

Identifikační klíč je pak tvořen množinou atributů slabého entitního typu + atributy

identifikačního vlastníka.

3.4.8 Rozdíl mezi entitním podtypem a slabým entitním typem

Entitní podtyp nemá obecně žádný parciální identifikační klíč. Dědí klíč zdroje ISA hierarchie,

který musí být pouze jeden. Definujeme tedy schéma, obsahující atributy odpovídající

vlastním atributům entitního podtypu, a k nim přidáme atributy odpovídající identifikačnímu

klíči zdroje ISA hierarchie. Primární klíče relací, vzniklých z jedné ISA hierarchie, jsou tedy

všechny stejné.

Shrnutí:

Chceme-li vytvořit korektní datové schéma, které jediné je zárukou kvalitní databáze,

musíme postupovat následujícím způsobem:

1. Vytvoříme konceptuální model reality. Při tvorbě modelu musíme znát modelovanou

realitu a požadavky budoucího uživatele. Jedině tehdy správně navrhneme entity,

vztahy a atributy konceptuálního modelu.

2. Vybereme vhodný SŘBD, který bude budovanou bázi dat spravovat. Při výběru se

řídíme hlavně tím, jak robustní bude budovaná databáze, jaké nároky budou kladeny

na komunikaci, kolik uživatelů bude s bází dat pracovat, jaké budou požadavky na

bezpečnost dat, atd. Při rozhodování hraje rovněž roli cena jednotlivých SŘBD.

3. Výběrem SŘBD již jsou dány podmínky pro tvorbu modelu datového. Při transformaci

konceptuálního modelu na datový se řídíme zásadami, definovanými v této kapitole.

Kontrolní otázky:

1. Jaké typy entit znáte?

2. Jaké typy vztahů znáte?

3. Jak lze transformovat 2 entity na relace, má-li pouze jedna z nich povinně členství ve

vztahu?

4. Jaké máme možnosti při transformaci vícehodnotového atributu?

Pojmy k zapamatování:

Entita

Vztah

Atribut

Identifikační klíč

Relace

Primární klíč

Alternativní klíč

Inverzní klíč

Cizí klíč

Silné entity

Slabé entity

Reprezentace entit

Reprezentace vztahů

3.5 INTEGRITA RELAČNÍCH SCHÉMAT

Cíl:

Cílem této kapitoly je znovu čtenáře přimět k zamyšlení nad nutností správného definování

integritních omezení. Bází dat v relačním pojetí je totiž chápána jako množina relací a

integritních omezení. Čtenář po prostudování této kapitoly bude vědět, jaká existují integritní

omezení, k čemu slouží a kdy a jak je správně definovat. Déle bude umět vyjmenovat, jaké

existují způsoby zachování referenční integrity.

Klíčová slova:

Doménová integrita, entitní integrita, referenční integrita, restrict, cascade, set null.

3.5.1 Úvod

Požadavek integrity dat v databázi (jejich souladu se zobrazovaným světem objektů) vede k

nutnosti definovat pro domény atributů jednotlivých relačních schémat a jejich vzájemné

vztahy jistá omezení, která zabraňují možnostem atributů nabývat nereálných hodnot. Tato

omezení se formulují pomocí soustavy uzavřených logických formulí v jazyce predikátové

logiky. Pro relační báze dat je kromě skutečnost,že entity i vztahy se reprezentují stejným

způsobem, tj. pomocí relací, charakteristickým rysem i to, že splňují tři pravidla integrity.

Prvním z těchto pravidel je pravidlo entitní integrity pro relační báze dat a spočívá v

požadavku, aby primární klíč relace měl pro všechny její prvky (n-tice) svou hodnotu.

Druhé pravidlo integrity je doménová integrita, která požaduje, aby hodnoty atributů

odpovídaly předem definovaným doménám (množinám hodnot atributů).

Třetí je pravidlo referenční integrity (vztahové), které se týká možností používání "cizích"

klíčů relací a spočívá v požadavku, aby ke každé definované hodnotě cizího klíče existoval

odpovídající prvek nadřazené (nezávislé) relace.

Jednou z podstatných výhod SŘBD je ta skutečnost, že uživatel se nemusí starat o to, jak

jsou integritní omezení kontrolována. Kontrola IO je plně v kompetenci SŘBD. Uživatel

(správce databáze) má povinnost integritní omezení správně definovat. Při všech

aktualizačních operacích, u kterých by mohlo dojít k narušení integrity, jsou pak tato omezení

automaticky kontrolována systémem řízení báze dat ( SŘBD)..

3.5.2 Doménové integritní omezení

Doménové integritní omezení je především definováno přiřazením datových typů pro

jednotlivé atributy a dále podmínek platnosti, které musí hodnoty atributů splňovat.

Příklad:

Atribut Jméno je datového typu text s délkou max. 15 znaků, přičemž jednotlivé znaky jsou

pouze alfabetické. Atribut Věk je datového typu celé číslo, které je kladné a není větší než

130.

3.5.3 Entitní integritní omezení

Entitní integritní omezení je definována primárním klíčem. Primární klíč zajišťuje entitní IO.

Proto je naprosto nutné, aby každá relace měla primární klíč.

Příklad:

Relace Pacient, která má atributy Rodné číslo, Jméno, Příjmení, atd. bude mít Rodné číslo

definováno jako primární klíč. Tento atribut totiž splňuje podmínky pro PK, že hodnota PK

jednoznačně identifikuje instanci (výskyt, n-titu) relace.

Na primární klíč jsou kladeny následující podmínky:

- Hodnota primárního klíče musí být unikátní.

- Entitní typ může mít pouze jeden primární klíč.

- Primární klíč může být i složený klíč, tj. složený z více atributů.

- Každá složka primárního klíče musí být definována jako NOT NULL.

3.5.4 Referenční integritní omezení

K definování referenční integrity slouží primární klíč(Primary Key) nezávislé entity a cizí klíč

(Foreign Key) závislé entity. Nadefinováním cizího klíče jsme již vytvořili referenční IO. SŘBD

se bude při aktualizačních operacích starat o to, zda hodnota cizího klíče je správná.

Podmínky kladené na cizí klíč:

- Cizí klíč a primární klíč se musí skládat ze stejného počtu atributů.

- Pokud primární klíč nezávislého entitního typu slouží k definování vztahu, musí být

na tento primární klíč vytvořen unikátní index.

- Atributy musí být definovány nad stejnými doménami a jejich pořadí musí být stejné.

- Závislý entitní typ může mít více cizích klíčů a tím i odkazy na více entit.

- Cizí klíč může nabývat hodnoty NULL, pokud definuje existenční typ vztahu.

- Cizí klíč nesmí nabývat hodnoty NULL, pokud definuje identifikační typ vztahu.

- Cizí klíč nabývá hodnoty NULL, pokud aspoň jedna jeho složka nabývá hodnoty

NULL.

Pro nezávislé entitní typy je referenční integrita hlídána u operací DELETE a UPDATE. Pro

závislé entitní typy je hlídána operace INSERT a UPDATE.

3.5.5 Způsoby zachování referenční integrity

RESTRICT - při mazání a aktualizaci v nezávislém entitním typu se restriktivně vyžaduje,

aby v podřízeném entitním typu byla nejdříve vymazána nebo aktualizována svázaná

instance. Není-li tomu tak, mazání resp. aktualizace v nadřazeném entitním typu je

zakázáno. Zápis nové instance do podřízeného entitního typu je zakázán, nenachází-li se

odpovídající instance v nadřazeném entitním typu.

CASCADE - způsobí kaskádovou aktualizaci resp. mazání v podřízeném entitním typu při

aktualizaci resp. mazání v entitním typu nadřízeném. Tento způsob může způsobit

kaskádovité mazání velkého počtu instancí, proto je třeba jeho použití bedlivě zvážit.

SET NULL - při aktualizačních operacích je možno z důvodu zachování referenční integrity

použít nastavení cizího klíče na hodnotu NULL. Tento způsob nelze použít u identifikačního

typu vztahu, kde cizí klíč podřízeného entitního typu je součástí primárního klíče. Primární

klíč (a to žádná jeho složka, pokud se jedná o složený klíč) nesmí nabývat hodnoty NULL.

Příklad:

Příklad nastavení pravidel pro zachování referenční integrity:

Typ entity/operace Identifikační vztah Existenční vztah

Závislá/Delete Bez omezení Bez emezení

Závislá/Insert Restrict Set Null

Závislá/Update Restrict Set Null

Nezávislá/Delete Cascade Set Null

Nezávislá/Insert Bez omezení Bez omezení

Nezávislá/Update Cascade Set Null

Shrnutí:

Hlavním cílem této kapitoly mělo být vysvětlit čtenáři, jak bezpodmínečně nutné je

nadefinovat všechna integritní omezení. Jedná se o doménové IO, entitní IO a referenční

IO. Po nadefinování všech IO je již v kompetenci SŘBD se starat o to, aby data uvedená IO

splňovala. SŘBD tedy při každé aktualizační operaci (vkládání dat, mazání dat a změně dat)

kontroluje, zda data splňují podmínky integrity.

Doménová integrita je definována datovými typy jednotlivých atributů a podmínkami

platnosti.

Entitní integrita je definována primárním klíčem.

Referenční integrita je definována cizím klíčem a tzv. způsobem zachování referenční

integrity (restrict, cascade, set null).

Otázka k zamyšlení:

Pokuste se najít v realitě několik příkladů dvou entit, které spolu vstupují do vztahu a pokuste

se definovat integritní omezení pro tento vztah. Hlavně se zamyslete nad tím, která z obou

entit je závislá a která nezávislá, kolika instancemi entity vstupují do vztahu, jaký typ vztahu

mezi entitami je a jak má být zabráněno narušení referenční integrity.

Pojmy k zapamatování:

Doménová integrita

Entitní integrita

Referenční integrita

Restrict

Cascade

Set Null

3.6 TRANSFORMACE KONCEPTUÁLNÍHO MODELU

Cíl:

Cílem této kapitoly je na řešených příkladech demonstrovat proces transformace

konceptuálního modelu na relační datový model. Čtenář by se měl zamýšlet hlavně nad tím,

jak:

- Transformovat entity na relace.

- Transformovat vztahy se zvláštním zřetelem na vztah s kardinalitou N:M.

- Definovat datové typy jednotlivých atributů.

- Definovat alternativní a inverzní klíče, které mají za následek tvorbu pomocných

datových struktur, kterými jsou indexy.

- Dále je třeba podrobit navržené relace procesu normalizace. Každá navržená relace

musí být minimálně v 3NF.

Klíčová slova:

Relace, dekompozice, datové typy, vyhledávací (alternativní a inverzní) klíče, normalizace.

Průvodce studiem:

Věnujte, prosím, této kapitole mimořádnou pozornost. Jakmile Vám bude řešení uvedených

příkladů jasné, můžete přistoupit ke korespondenčnímu úkolu, jehož zadání najdete v

následující kapitole.

Příklad:

Realita – ordinace u lékaře

Vytvořte model lékařské ordinace, který bude postihovat následující skutečnosti. Lékaři mají

smlouvy s pojišťovnami a to tak, že více lékařů může mít smlouvu s toutéž pojišťovnou a

zároveň jeden lékař může uzavřít smlouvu s více pojišťovnami. Pacienti jsou pojištěni vždy u

jedné pojišťovny. Pacienti chodí na návštěvy k lékařům, na kterých lékaři stanoví diagnózu a

předepíší recepty na léky. Atributy a klíče volte dle vlastní zkušenosti. Následuje jedno z

možných řešení.

Konceptuální model ordinace

Relační datový model

 

Příklad:

Realita – lázně

Vytvořte model lázeňské péče. Hosté jezdí do lázní a jejich pobyty jsou evidovány v knize

hostů. Bude se jednat o lázně, kde bude u pacientů hlavně sledována jejich hmotnost v

souvislosti s jejich konstitucí. Informace o různých konstitucích se nachází v hmotnostní

tabulce. Hosté budou pravidelně váženi a naměřené hmotnosti budou zapisovány do tabulky

vážení. Host si bude moci připlatit dodatečnou péči, která je nad rámec běžného programu.

Bude nás zajímat, na kterých pokojích jsou kteří hosté umístěni. Následuje jedno z možných

řešení.

Konceptuální model lázní

Relační datový model

 

Příklad:

Realita – knihovna

Vytvořte model půjčovny knih v knihovně. Knihovna vlastní exempláře mnoha různých knih.

Tyto knihy si mohou půjčovat čtenáři, kteří mají u této knihovny zřízen čtenářský průkaz. Je-li

kniha k dispozici, čtenář si půjčí odpovídající exemplář. Pokud kniha momentálně k dispozici

není, čtenář si může na tuto knihu vytvořit záznam, pomoci kterého si ji rezervuje, až k

dispozici bude. Následuje jedno z možných řešení.

Konceptuální model knihovny

4 MODUL 4

4.1 ZÁKLADNÍ ORGANIZACE DATOVÉ STRUKTURY SOUBOR

Cíl:

Cílem kapitoly je seznámit čtenáře se základy implementačních technik, tj. technik ukládání

dat na vnější paměťová média. Po prostudování této kapitoly bude čtenář schopen

vyjmenovat typy souborů a vysvětlit základní rozdíly mezi nimi. Dále bude znát způsob

ukládání dat ne vnějších paměťových médiích a způsobem čtení dat do operační paměti.

Klíčová slova:

Primární soubor, index, buffer, sekvenční soubor, indexový soubor, soubor s přímým

přístupem.

Průvodce studiem:

Následující kapitola je úplně z jiného soudku, než kapitoly předchozí. Zavádí nás do

problematiky úzce spjaté s fyzickým ukládáním dat na paměťová média. V předchozích

kapitolách jsme se zabývali databázovou problematikou z naprosto jiného úhlu pohledu

(úrovně abstrakce). Zajímala nás realita, o které chceme uchovávat data, zajímalo nás, jak

navrhnout struktury, do kterých by se dala data o realitě ukládat. Vysvětlili jsme si, že

nejpoužívanějšími strukturami pro ukládání dat jsou databázové relace. Jak ale ve

skutečnosti jsou tyto relace uloženy na disku? Následující kapitola se pokusí Vám ozřejmit,

jak navržené databázové relace jsou převedeny (mapovány) na soubory dat. Jak již určitě

víte, veškerá data, která se na vnějších pamětech ukládají, se ukládají do souborů. Čili

naším tématem nyní bude, jak převést (mapovat) relace na soubory. Samozřejmě si musíme

nejdříve definovat základní pojmy, pak na příkladech bude ukázáno, jak si lze představit

sekvenční soubor, index, atd.

4.1.1 Úvod

Soubor je považován jako základní konstrukt, se kterým je schopen pracovat operační

systém. Veškerá data, která jsou uložena na vnějších pamětech počítačů, jsou uložena v

souborech. Soubor je logicky organizován jako posloupnost záznamů, které se skládají z

položek. Záznamy jednotlivých souborů jsou ukládány (mapovány) do diskových bloků. Na

úrovni operačního systému mají bloky konstantní délku (fyzický blok se obvykle rovná 512

B). Ve skutečnosti však jednotlivé výskyty objektů a tedy i instance různých relací mají délku

různou.

Existuje několik přístupů, jak tento rozpor vyřešit. Jednou možností je mapovat databázi do

několika různých souborů, přičemž jednotlivé soubory budou mít pevnou délku záznamu.

Další možností je strukturovat databázový soubor tak, abychom mohli využívat proměnnou

délku záznamu. Implementace pevné délky je snadnejší, ovšem většina současných

systémů využívá proměnnou délku záznamu z důvodu efektivnějšího přístupu k datům. Při

mapování relačních dat do souboru je tedy využíváno dvou technologií. Jedna z nich vytváří

pro každou relaci zvláštní soubor s pevnou délkou záznamu. Mnoho rozsáhlých

databázových systému však využívá vlastních správců ukládání dat a mapuje celou relační

databázi do jednoho souboru. Všechny relace jsou uloženy v jednom souboru. Tento způsob

zpracování muže podstatným způsobem urychlit vyhledávání dat v souboru tím, že

umožňuje ukládat záznamy z různých relací do stejného bloku souboru.

Na soubor nahlížíme jako na kolekci záznamu. Data mezi vnější a vnitřní pamětí jsou

přenášena po logických blocích, které mohou obsahovat různý počet záznamů. Logický blok

(cluster, stránka, page) se může skládat z více fyzických bloků. Máme-li soubor vytvořen

jako kolekci záznamů s různou délkou, můžeme uchovávat několik záznamů s různou délkou

v jednom bloku. Důležité je, že jeden záznam nemůže být uložen ve dvou různých logických

blocích.

Výkonnost databázového zpracování je závislá především na minimalizaci počtu přístupů na

vnější paměťové médium, tzn. uchovávání co možná největšího počtu bloků v operační

paměti. Cílem je maximalizovat šanci, že jsou-li potřebná data, pak jsou přítomna v operační

paměti. Paměťový prostor, určený pro ukládání bloků souboru, se nazývá vyrovnávací paměť

neboli buffer.

Buffer je část operační paměti, dostupná k ukládání kopií bloků souboru na vnějším

paměťovém médiu. Subsystém, zodpovědný za efektivní přidělování paměti, se nazývá

buffer manager. Buffer manager interpretuje všechny požadavky na bloky databáze a

zjišťuje, je-li požadovaný blok v bufferu, či nikoli. Není-li blok v bufferu, zajistí jeho načtení z

disku a umístění do bufferu. Žadateli poskytne adresu bloku v operační paměti. Není-li v

bufferu dostatek místa pro načítaný blok, musí být před tímto čtením uvolněn prostor.

Obvykle bývá odstraněn ten blok, na něhož nebyl vznesen nejdéle žádný požadavek. Tento

blok je zapsán z bufferu do souboru na disk. Cílem celé strategie je minimalizace přístupu na

disk. Jednou z nejčastěji používaných částí databáze je katalog (viz. níže). Ten bývá

permanentně umístěn v operační paměti.

V klasickém zpracování dat jsou nejpoužívanější sekvenční, indexsekvenční, indexové

soubory a soubory s přímým přístupem.

4.1.2 Sekvenční soubor

Je kolekce záznamu, obvykle pevné délky, umísťovaných ve vymezeném prostoru na

vnějším paměťovém médiu sekvenčně za sebou. Sekvenční soubor muže být neuspořádaný

nebo uspořádaný podle klíče (nejčastěji podle primárního klíče). Vkládání záznamu do

uspořádaného sekvenčního souboru se provede zařazením vkládaného záznamu na

příslušné místo (dle hodnoty klíče), je-li toto místo volné. Jestliže je místo obsazeno jiným

záznamem, vkládaný záznam se umístí do přetokové oblasti. Jestliže je pouze relativně málo

záznamu umístěno v přetokové oblasti, rychlost přístupu k záznamům to podstatně neovlivní.

Při velkém počtu záznamů v přetokové oblasti je třeba provést reorganizaci souboru, tj.

řazení záznamu souboru sekvenčně setříděně podle klíče.

4.1.3 Mapovaní relačních dat do sekvenčního souboru

Některé relační databázové systémy uchovávají každou relaci ve zvláštním souboru. V tomto

případě mohou být n-tice relace ukládány do záznamu pevné délky. Tato jednoduchá

struktura umožňuje plně využívat služeb operačního systému ke správě datových souborů.

Ovšem většina rozsáhlých databázových systémů uchovává mnoho relací v jednom souboru

s proměnnou délkou záznamu. Řízení takového souboru je plně v kompetenci systému

řízení báze dat.

Příklad:

Následující příklad demonstruje způsob uložení záznamů v sekvenčním souboru. Soubor je

setříděn podle hodnoty primárního klíče.

4.1.4 Ukládání datového slovníku

Kromě dat, která jsou v relacích a ukládají se do souboru, relační databázový systém

potřebuje ukládat i data o relacích, která se nazývají metadata (datový slovník, systémový

katalog).

Je třeba uchovávat tyto typy informací:

- Jména relací.

- Jména atributu každé relace.

- Domény atributu.

 

- Jména a definice pohledu na databázi.

- Integritní omezení na všechny relace.

- Jméno indexu.

- Jméno relace, na kterou je vytvořen index.

- Jména atributu, na které je vytvořen index.

- Typ indexu.

Navíc mnoho systému udržuje dodatečné informace:

- Jména autorizovaných uživatelů.

- Počet n-tic v každé relaci.

- Metoda ukládání dat (např. clustered, nonclustered).

4.1.5 Indexování

Je metoda, která umožňuje zrychlit přístup k datům na disku. Kromě primárního souboru,

obsahujícího všechna data databáze, který je výsledkem mapování relací, databáze může

obsahovat přídavnou datovou strukturu, spojenou vždy s vybranou položkou (položkami)

primárního souboru. Tato položka (atribut) se nazývá vyhledávací klíč a datová struktura se

nazývá index.

Existují dva typy indexu:

- hustý index

je taková datová struktura, která obsahuje všechny hodnoty vyhledávacího klíče a příslušné

odkazy do primárního souboru

- řídký

je vytvořen pouze na některé hodnoty vyhledávacího klíče. Při hledání záznamu s hodnotou

vyhledávacího klíče, která se v indexu nenachází, se použije odkaz přirazený nejbližší nižší

hodnotě vyhledávacího klíče a v primárním souboru se hledaný záznam dohledá

sekvenčním způsobem.

Příklad:

Příklad hustého indexu:

Index                                                                                                                                         Primární soubor

Příklad:

Příklad řídkého indexu:

 

4.1.6 Index-sekvenční soubor

Je soubor tvořen primárním souborem, tj. setříděným sekvenčním souborem (setříděným

podle primárního klíče) a přídavnou datovou strukturou nazývanou index. Vyhledávacím

klíčem muže být libovolný atribut a lze vytvářet libovolné množství indexů. Protože velikost

indexu je závislá na počtu záznamů primárního souboru, bývají indexy rozsáhlých souboru

velké, což kromě nároků na paměť způsobuje i zpomalování aktualizačních operací.

Aktualizace záznamu v primárním souboru totiž vyžaduje i aktualizace indexu. Aby nebylo

nutno v souvislosti s aktualizačními operacemi měnit uložení záznamu v primárním souboru,

využívají se přetokové oblasti.

Přetoková oblast je přídavný prostor pro ukládání záznamu do primárního souboru. Je

svázána s primárním souborem prostřednictvím směrníků. To vyžaduje, aby fyzické

záznamy primárního souboru obsahovaly položku "ukazatel" pro umístění směrníku do

přetokové oblasti. Po mnoha aktualizačních operacích (mazání záznamu, vkládání záznamu)

s využitím přetokových oblastí se soubor stává příliš komplikovaný. To má za následek

zpomalení přístupu k záznamům souboru. Proto je třeba soubor přeorganizovat, tj. uložit

nově zařazené záznamy na patřičné místo v primárním souboru. Počet přístupů na disk je

možno snížit umístěním indexu do operační paměti, avšak v souvislosti s dostupnou

operační pamětí a počtem a rozsahem indexu.

4.1.6.1 Implementace index-sekvenčního souboru metodou kapes (BUCKETS)

Základní charakteristiky:

- Primární soubor je rozmístěn do kapes.

- V kapse je předem definovaný počet záznamů.

- Informace o obsazených pozicích se uchovává v bitové mapě.

- "0" na i-té pozici označuje volné místo pro i-tý záznam.

- Prázdná kapsa je rezervována pro záznamy s klíčem menším než klíč prvního

záznamu v primárním souboru.

- Počet záznamů (počet pozic) v kapse se nazývá blokovací faktor.

Příklad:

Mějme soubor indexů:

Hodnoty klíče Adresy bloků

00

Adámek 10

Král 20

Dále mějme primární soubor rozmístěn do kapes:

Bitová mapa Záznam Záznam Záznam Záznam Záznam Ukazatel

(00)00000 0

(10)11111 Adámek Dlouhý Čížek Frič Hynek 0

(20)11110 Král Křivý Malý Kyselý 0

Proveďme aktualizační operace: D(Dlouhý), I(Dvořák), I(Březina), I(Novák), I(Adam)

Dostaneme následující soubor indexů:

Hodnoty klíče Adresy bloků

00

Adámek 10

Král 20

A následující primární soubor:

Bitová mapa Záznam Záznam Záznam Záznam Záznam Ukazatel

(00)10000 Adam 0

(10)11111 Adámek Dvořák Čížek Frič Hynek 30

(20)11111 Král Křivý Malý Kyselý Novák 0

(30)10000 Březina 0

4.1.7 Indexový soubor

Je tvořen primárním souborem a indexy pro různé vyhledávací klíče. Indexovány jsou

záznamy (hustý index), proto na rozdíl od index-sekvenčního souboru nemusí být primární

soubor setříděn a nevyžaduje umístění do souvislé části paměti počítače. Rovněž neuvažuje

přetokové oblasti. Je-li index vytvořen na inverzní klíč (tj. takový, který připouští duplicitní

hodnoty), může se v indexu opakovat stejná hodnota vícekrát.

4.1.8 Soubor s přímým přístupem

Metoda přímého přístupu umožňuje rychlý způsob vyhledávání záznamů podle hodnoty

primárního klíče i jeho aktualizaci. Princip souborů s přímým přístupem spočívá v tom, že při

jeho ukládání do paměti se podle určitého algoritmu vypočte z hodnoty primárního klíče

adresa bloku (stránky) disku, na níž má být daný výskyt záznamu uložen. Hodnota

primárního klíče je vstupem a adresa stránky je výstupem algoritmů, které se nazývají

hašovací algoritmy.

Soubor s přímým přístupem má primární záznamy rozptýleny v paměťovém prostoru velikosti

M * R, kde M >= N (N … počet záznamu v souboru, R … velikost záznamu v bytech) pomocí

hašovací funkce f definované z K do {0,1, …, M-1}. Interval <0, M-1> se nazývá adresový

prostor a množina K je množina všech hodnot primárního klíče. Hašovací funkce je

výpočetně jednoduchý předpis, který transformuje hodnotu klíče do relativních adres.

Absolutní adresy se vypočtou lineární transformací.

Jednou z nejefektivnějších transformací je funkce f = k mod M', kde M' je nejbližší prvočíslo

menší než M a k je číselná hodnota klíče. Funkce f není obvykle prostá. Tato skutečnost

může způsobit kolize, tzn. že několik záznamů má být umístěno na stejné adrese. Kolize lze

řešit tzv. otevřeným hašováním, kdy kolidovaný záznam se umístí na nejbližší volné místo s

vyšší adresou, rehašováním, kdy kolidovaná adresa se stane vstupem do hašovací funkce a

výstupem je rehašovaná adresa, eventuálně lze využít přetokových oblastí, kdy kolidující

záznamy jsou zřetězeny pomocí ukazatelů. Je-li hašovací funkce prostá, hovoříme o

perfektním hašování.

Při použití statických hašovacích metod musíme vyřešit při zakládání souboru některé volby.

Jedná se o výběr hašovací funkce na danou velikost souboru. Toto může způsobit problémy,

jakmile se databáze rozroste. Lze sice horní odhad udělat tak, aby nemohlo dojít k zaplnění

vyhrazeného prostoru, ale tím se plýtvá místem na disku. Obvykle je velikost prostoru volena

N = 0,8 M

Nutnost pevného stanovení prostoru pro ukládání záznamu souboru je tedy vážným

problémem statických hašovacích technik. Statické hašování vede ke třem třídám voleb a to

k výběru hašovací funkce založeném na současné velikosti souboru, výběru hašovací funkce

založeném na předpokládané velikosti souboru a na periodické reorganizaci hašovací

struktury v důsledku růstu souboru dat. Reorganizace zahrnuje výběr nové hašovací funkce,

přepočtení hašovací funkce pro všechny záznamy v souboru a generování nových adres .

Tato operace je velmi časově náročná a navíc po dobu reorganizace je zakázán přístup k

souboru pro jakékoli operace.

Z praktických důvodů je vhodnější využívat takové struktury, které umožňují pružnou změnu

externí paměti potřebné pro uložení databáze. Takovéto techniky jsou nazývány dynamické

hašovací funkce.

Shrnutí:

Základní strukturou pro ukládání dat na vnější paměťové médium je soubor. Soubor se skládá z jednotlivých záznamů, které se skládají z položek. Můžeme mít soubor s pevnou délkou nebo soubory s proměnnou délkou. Co se týká typu souborů, je možno používat soubory sekvenční, index-sekvenční, indexové a soubory s přímým přístupem. Data, uložená v souborech se dají zpracovávat pouze v operační paměti. Přesouvání dat z vnější do operační paměti se děje prostřednictvím bufferů (vyrovnávacích pamětí). Jednotkou přenosu dat je tzv. logický blok (cluster, page, stránka). Základní ideou při fyzické implementaci souborů a databází je minimalizace přístupů na disk při zpracování dat. Přístupy na disk totiž nejvíce zpomalují celý proces zpracování dat. Počet přístupů na disk je samozřejmě závislý na tom, s jak robustní databází pracujeme, záleží ovšem rovněž na tom, jak jsou data organizována, jakým postupem se příslušná data vyhledávají, atd. Nejsnadnější, ovšem nejpomalejší způsob je ukládání dat do sekvenčních souborů. Zrychlení představuje setřídění záznamů podle primárního klíčem vytvoření indexů na různé vyhledávací klíče, vytvoření souboru s přímým přístupem, atd.

Kontrolní otázky:

1. Co je to buffer a k čemu se používá?

2. Jaký je rozdíl mezi fyzickým a logickým blokem?

3. Jak je možno ukládat primární soubor?

4. Co je to index a jaké typy indeků znáte?

Pojmy k zapamatování:

Primární soubor

Index

Buffer

Logický blok (cluster, page, stránka)

Sekvenční soubor

Indexový soubor

Soubor s přímým přístupem.

Průvodce studiem:

Výborně! Zvládli jste to, prokousali jste se tímto textem a tak Vám blahopřeji! Pokud navíc umíte odpovědět na kontrolní otázky, je to úplně skvělé. Určitě si odpočiňte, než začnete studovat následující kapitolu.

4.2 PŘÍSTUPOVÉ TECHNIKY

Cíl:

Cílem kapitoly je rozšířit čtenáři vědomosti o možnostech rychlejšího vyhledání záznamů v souborech. Jsou zde popsány dvě statické organizace, řetězená organizace a indexy. Obě organizace jdou vylepšením klasických sekvenčních souborů. Po prostudování kapitoly by měl čtenář dokázat vysvětlit rozdíl mezi pojmem klíč a index a měl by umět popsat algoritmus tvorby řetězené a invertované organizace (indexy).

Klíčová slova:

Řetězení, hustý index, řídký index, vyhledávací klíč.

4.2.1 Úvod

Jak již bylo uvedeno v kapitole 4.1., problematika uložení záznamů do souborů a způsoby vyhledání příslušných záznamů na vnějším paměťovém médiu podstatně ovlivní celkovou dobu zpracování dat. Sekvenční soubory mohou být vylepšeny tzv. řetězenou organizací, která pro daný vyhledávací klíč vytváří směrníky na příslušné (podle daného klíče setříděné)

záznamy. Další zrychlení vyhledávání je možno realizovat vytvořením přídavných datových struktur, tzv. indexů. V této kapitole se budeme věnovat technice řetězení. Indexy, které jsme již uvedli v kapitole předchozí, ještě doplníme. Techniky, které jsou popsány v této kapitole se nazývají technikami statickými. Důvodem je ta skutečnost, že záznam, jednou zapsaný na

určitou adresu na vnější paměťové médium, na této adrese zůstává až do okamžiku, kdy je smazán nebo kdy je celý soubor tzv. reorganizován. Reorganizace je operace, která čte jednotlivé záznamy souboru a zapisuje je setříděně podle hodnoty (většinou) primárního klíče.

4.2.2 Řetězení

je spojení záznamů pomocí nasměrování na následující záznam. Řetězení realizují směrníky (poiters). Směrníky jsou položky záznamu, které oznamují, kde se nachází následující záznam se stejnou hodnotou alternativního resp. inverzního klíče. Logický směrník je tedy přidanou položkou do záznamu. První záznam s danou hodnotou alternativního klíče se nazývá záhlavím a je označen zvláštním směrníkem. Poslední záznam řetězu má hodnotu směrníku rovnu NULL. K provozování zřetězeného seznamu je třeba zadat vstupní směrník, který ukazuje na záhlaví seznamu a při každém nalezení dalšího záznamu testovat, zda směrník nemá hodnotu NULL.

4.2.2.1 Databázové operace ve zřetězených organizacích

Operace FETCH (operace načítání logických bloků do bufferu) znamená u řetězené organizace postupné sledování směrníků a testování, zda-li jde o hledaný záznam.

Operace UPDATE (operace změny hodnota databázové položky) se uskuteční tak, že potřebné položky změní svou hodnotu a směrník zůstane stejný.

Operace DELETE (operace smazání záznamu) musí dbát na to, aby směrník záznamu ukazujícího na rušený záznam se nahradil směrníkem rušeného záznamu. Záznam určený ke smazání se označí za neplatný. Řetězec se zkrátí o jeden záznam - vznikne prázdný prostor (díra), do kterého je možno operací Insert zapsat záznam, který logicky na toto místo

patří.

Operace INSERT (operace vložení záznamu) způsobí, že se řetězec prodlužuje o jeden záznam včetně příslušného směrníku. Na vkládaný záznam bude ukazovat směrník dosud posledního záznamu, kde nahradí koncovou hodnotu NULL. Nově vzniklý směrník je adresa prvního volného prostoru (díry).

Příklad:

Mějme relaci R(id_v, jméno_v, stát_v, město_v)

Vyhledávací klíč: stát_v

Vytvořte zřetězení pro výrobce ze SRN

Záhlaví pro stát_v = SRN je V4 - směrník na první záznam, kde stát_v = SRN

Zřetězená organizace je následující:

id_v       jméno_v            stát_v                  město_v             směrník

V1        Škoda               ČR                    M.Boleslav

V2        Renault Francie Paříž

V3        Opel                  USA                  Detroid

V4        Ford                  SRN                  Kolín n/R           V5

V5        Volksw. SRN                  Wolfsburg          V27

.

.

.

.

V27 ..............................                                               NULL

4.2.3 Invertované seznamy - indexy

Nejjednodušší způsob indexu je tzv. hustý index, který tvoří tabulka se dvěma sloupci. První sloupec je sloupec hodnot vyhledávacího klíče a druhý sloupec je odkaz na záznam do primárního souboru - adresa záznamu v primárním souboru. Tato tabulka tvoří pomocnou datovou strukturu a její záznamy jsou setříděny podle hodnoty vyhledávacího klíče. Je možno vytvořit libovolně mnoho indexů na libovolné atributy (vyhledávací klíče). Pokud atribut nebo skupina atributů nepřipouští duplicitu hodnot, jedná se o alternativní klíč a index na alternativní klíč. Pokud atribut nebo skupina atributů duplicitu připouští, jedná se o klíč inverzní.

Nehusté indexování je takové, kdy směrník neukazuje na adresu záznamu, ale na adresu logického bloku, který je zaveden do operační paměti. V tom případě je třeba po zavedení bloku prohledat obsah bloku a nalézt požadovaný záznam. Nehusté indexy jsou zpravidla méně náročné na paměť.

Výše popsané indexy jsou tzv. statickými strukturami a to proto, že jednotlivé záznamy v indexové struktuře nemění své místo po celou dobu existence indexu, resp. po dobu existence příslušného záznamu v indexu. Výjimku tvoří reorganizace souboru, která provede celkové přeorganizování záznamů jak vprimárním souboru, tak ve všech indexech. Operace

reorganizace je velmi náročná a po dobu této operace je celá databáze uzamčena pro jakékoli další operace.

Úkoly k zamyšlení:

1. Mějme relaci Student (Osobní_čislo, Jméno, Příjmení, Ročník, Skupina). Navrhněte několik instancí této relace a proveďt mapování relace do sekvenčního souboru s využitím řetězené organizace pro vyhledávací klíč Příjmení.

2. Na výše popsanou relaci vytvořte hustý index na Osobní_číslo.

3. Na výše popsanou relaci vytvořte řídký index na Příjmení.

4.3 DYNAMICKÉ ORGANIZACE

Cíl:

Základním cílem kapitoly je ukázat čtenáři rozdíl mezi statickými a dynamickými strukturami a poukázat na výhody dynamických struktur. Dynamické struktury jsou demonstrovány na indexu a souboru s přímým přístupem. V případě indexu je dynamicko strukturou tzv. Bstrom, v případě primárního souboru s přímým přístupem je dynamickou strukturou tzv.

dynamické hašování. Po prostudování kapitoly by měl být čtenář schopen vysvětlit rozdíly statické a dynamické struktury, vysvětlit výhody dynamických struktur. Dále by měl být schopen sestrojit B-strom a aktualizovat jej v souvislosti s operacemi Insert a Delete (štěpení a slévání uzlů).

Klíčová slova:

Statická struktura, dynamická struktura, B-strom, neredundantní B-strom, dynamické

hašování.

4.3.1 Úvod

Dynamickými organizacemi budeme rozumět takové struktury, které se v čase mění, tzn. Že pozice záznamu v takové struktuře není neměnná, ale mění se podle toho, jak probíhají aktualizační operace. Jednou zapsaný záznam na nějaké adrese může tuto adresu opustit z toho důvodu, že na tuto adresu logicky patří jiný záznam. Dynamické organizace proto nemusí využívat přetokových oblastí a časová náročnost vyhledávání záznamů není tudíž zvětšována nutností hledání záznamů v přetokových oblastech. Z dynamických organizací, kterých je samozřejmě více typů, se budeme zabývat pouze B-stromy a krátce se zmíním o dynamickém hašování.

4.3.2 B – stromy

B-strom je dynamická indexová struktura. Z důvodu efektivity operací INSERT a DELETE je tato struktura nejpoužívanější indexovou strukturou. Struktura je založena na vyváženém stromu, ve kterém každá cesta od kořene k listu má stejnou délku, což znamená, že doba vyhledání libovolného záznamu je stejná. B-strom se chová dynamicky, tzn. dochází při aktualizačních operacích ke štěpení uzlů (bloků záznamů), se kterou souvisí alokace dalších uzlů a ke slévání uzlů. B – stromy jsou víceúrovňové indexy, přičemž jednotlivé úrovně se vytvářejí následujícím způsobem:

1. Primární soubor je indexován podle dané položky (vyhledávací klíč) a tím je vytvořen

index I1.

2. Vytvořený index I1 je znovu indexován a tím je vytvořen index I2.

3. Druhý krok je možno podle potřeby opakovat.

B – stromy obsahují tři typy údajů:

1. Směrníky na indexy.

2. Hodnoty vyhledávacího klíče, podle něhož je soubor indexován.

3. Směrníky na výskyty záznamu, tj. odkazy do primárního souboru.

Algoritmus vytváření B – stromu začíná od listu, tj. uzlu stromu, který obsahuje pouze odkazy na záznamy primárního souboru. Algoritmus musí zachovávat vyváženost stromu. Mějme B

– strom, který bude obsahovat n-1 hodnot vyhledávacího klíče a označme je K1, K2, …., Kn-

1 a n ukazatelů P1, P2, …,Pn . Hodnoty vyhledávacího klíče jsou setříděné, tzn. je-li i < j, je

taky Ki < Kj.

Struktura listu je pak následující:

Příklad:

Následující příklad Vám ukáže, jak dochází k postupnému vzniku B-stromu. Všimněte si, kdy dochází ke štěpení uzlu a jaký to má dopad na celou B-strukturu. Rovněž si všimněte, kdy dochází ke zvýšení počtu úrovní B-stromu. Označení 0, 1, 2, … jsou odkazy na další uzel B

– stromu, označení Z0, Z1, … jsou odkazy do primárního souboru.

 

 

Vložení záznamu s hodnotou vyhledávacího klíče Matějka způsobilo alokaci dalších dvou bloků o adresách 1 a 2.

 

Neredundantní B-stromy

Neredundantní B – stromy jsou modifikací B – stromů. Neredundantní B-strom je sice vyvážený strom, odkaz do primárního souboru však lze najít dříve než v listu stromu. Doba vyhledání záznamu je pak stejná jako u redundantních B-stromů, pouze je-li hodnota vyhledávacího klíče rovna hodnotě uvedené v uzlu, je doba vyhledání kratší. Neredundantní B-strom je tedy vylepšením B-stromu. Vyžaduje však přidání odkazu do primárního souboru do všech uzlů B-stromu, tedy ne jen do listu, jak je tomu u B-stromu. Prohledávání v neredundantních B – stromech nemusí dospět až do listu. Odkaz na záznam do primárním

souboru se může vyskytovat v kterémkoli uzlu.

Příklad:

Následující příklad ukazuje, jak může vypadat neredundantní B-strom. Je-li hodnota vyhledávacího klíče menší než Konvička, postupujeme ve vyhledávání na adrese 0 (další blok B-stromu). Je-li hodnota vyhledávacího klíče větší než Konvička, postupujeme ve vyhledávání na adrese 3 (další blok B-stromu). Je-li hodnota vyhledávacího klíče rovna

Konvička, najdeme v uzlu B-stromu přímo odkaz do primárního souboru (adresa Z0).

 

4.3.4 Dynamické hašování

Cíl

Základním cílem kapitoly je seznámit studenta se základními myšlenkami rozšiřitelného hašování. Po prostudování této kapitoly bude student umět rozlišovat mezi statickými a dynamickými organizacemi souborů a databází, bude umět sestavit algoritmus zápisu záznamů do souboru s využitím rozšiřitelného hašování.

Klíčová slova

Rozšiřitelné hašování, hašovací funkce, adresář, logický blok (kapsa) primárního souboru. Dynamické hašování je metoda průběžné rekonstrukce (reorganizace) datových struktur. Poprvé popsána v roce 1981.

Jedná se o modifikaci periodické rekonstrukce, která se liší:

V průběhu rekonstrukce se nezastaví zpracování (modifikace databáze, vyhledávací operace, atd.).

Operace se provádějí nad původní strukturou a paralelně probíhá reorganizace (vzniká nová datová struktura).

Po vytvoření nové struktury se stará „zapomene" a operace se provádějí nad touto novou strukturou.

Základní důvody pro přechod na dynamické hašování:

Velikost externí paměti, potřebné pro ukládání dat, by se měla pružně měnit podle stávajícího objemu dat.

Počet přístupů na disk pro většinu požadavků by měl být konstantní.

ROZŠIŘITELNÉ HAŠOVÁNÍ

Zavádí pomocnou strukturu - adresář.

Záznamy adresáře obsahují odkazy do primárního souboru. Některé záznamy adresáře mohou obsahovat totožné odkazy (odkazy do totožných logických bloků tzv. kapes).

Hašovací funkce h

Transformuje hodnotu primárního klíče k na adresu, která spadá do intervalu <0,2r+1-1>

r+1 Délka reprezentace hodnoty h(k) v bitech (počet bitů). Typická hodnota je 32.

Mějme klíč k a hašovací funkci

h(k) = brbr-1 .... bo

Z adresy brbr-1 .... bo vybereme pouze část (d bitů) a těchto d bitů se jako offset adresy vloží

do přidané struktury, adresáře. Velikost d se mění v souvislosti s nárůstem záznamů v

databázi.

Prázdný soubor

Adresář             Logický blok (kapsa) primárního souboru

 

 

Je-li i=1, pak adresář obsahuje pouze dva záznamy:

0 Odkaz na záznamy, jejichž adresa začíná 0.

1 Odkaz na záznamy, jejichž adresa začíná 1.

Příklad:

Mějme následující záznamy, které se budou zapisovat do databáze pomocí rozšiřitelného hašování.

Předpokládejme, že primárním klíčem je atribut Město a hašovací funkce h generuje následující adresy:

Dále předpokládejme, že každá kapsa smí obsahovat (pro jednoduchost) maximálně 2

záznamy.

Uložte záznamy (Opava, Lipová 5), (Zlín, Úzká 8), (Lipník, Anglická 142/a)

Zatím jsme vystačili s jedním bitem offsetu. Záznamy se ukládaly do dvou různých kapes. V jedné kapse jsou záznamy, jejichž adresa začíná 0, v druhé kapse záznamy, jejichž adresa začíná 1(tato kapsa je plná).

Uložte záznam (Ostrava, Nádražní 128), přičemž kapsa, kde se má záznam ukládat je zaplněna. Je nutno alokovat další kapsu (logický blok) a přeorganizovat záznamy včetně úpravy adresáře.

Uložte záznam (Brno, Dlouhá 25)

 

Uložte záznam (Kroměříž, Jánská 100)

 

Uložte záznam (Olomouc, Francouzská 1725). Kapsa, do které je nutno umístit záznam, je zaplněna. Proto dojde ke štěpení kapsy a zároveň se zvětší offset.

 

OBECNÉ SCHÉMA ROZŠIŘITELNÉHO HAŠOVÁNÍ

Adresář                         Kapsy primárního souboru

i Počet bitů offsetu (adresy, která je umístěna v adresáři).

ji Počet bitů, v kolika se shodují adresy záznamů, uložených v i-té kapse.

Je-li ji =1, v dané kapse je uložena polovina všech záznamů souboru.

S nárůstem záznamů se zvětšuje zaplněnost kapes. Je-li kapsa zaplněna, musí se alokovat

nová kapsa (logický blok). Zároveň se musí zvětšit počet bitů v adresáři o 1 a dynamicky se

musí přesunout (reorganizovat) příslušné záznamy v primárním souboru.

Shrnutí

Dynamické struktury jsou v databázové technologii velmi důležité, protože zajišťují konstantní počet přístupů na vnější paměťová média a zajišťují pružnou změnu uložení záznamů v souborech v závislosti na aktualizaci databáze. V současných systémech řízení báze dat převazují dynamické organizace nad organizacemi statickými. K velmi efektivním metodám patří tzv. dynamick hašování. Dynamika spočívá v postupném aktualizaci adresáře a v závislosti na změně adresáře se i mění umístění záznamů souboru do logických bloků. Reorganizace tedy probíhá paralelně s aktualizačními operacemi (delete,

insert, update).

Kontrolní otázky

Jaký je rozdíl mezi statickou a dynamickou organizací dat?

Popište algoritmus zápisu záznamů do souboru s využitím rozšiřitelného hašování.

V čem spočívá dynamické hašování?

4.4 REDUKCE DAT

Cíl:

Základním cílem kapitoly je seznámit čtenáře s příčinami redundance dat a základními principy a metodami redukce dat. P prostudování této kapitoly bude čtenář umět rozlišovat mezi kompresí a kompakcí, bude umět vypočítat délku kódového slova při metodách komprese s pevnou délkou kódového slova a bude umět stanovit kódová slova s využitím

Huffmanova kódování a kódování pomocí adaptivního slovníku.

Klíčová slova:

Redundance, redukce, kód, kódové slovo, komprese, kompakce, adaptivní slovník, regál.

4.4.1 Úvod

Díváme-li se na soubory jako na texty, pak jsou tyto texty redundantní. Redundance dat je situace, která v žádném případě nepřispívá ke kvalitě databáze. Redundance ovšem může být způsobena několika příčinami. V předcházejících kapitolách jsem se věnovali redundanci vyplývající z nekorektně navrženého schématu databáze. Pokud se v rámci jedné relace vyskytují atributy, které jsou na sobě závislé a přitom nejsou ve vztahu Primární

klíč - neklíčový atribut. Takovému typu redundance je třeba se vyvarovat a provést

příslušnou normalizaci relačních schémat. Redundance však může mít i jiné příčiny. Těmito příčinami a jejich řešením se budeme zabývat v kapitole Redukce dat.

4.4.2 Příčiny redundance

Redundance dat také vyplývá z toho, že:

- Některé fráze nebo slova v textu se opakují.

- Existuje závislost mezi po sobě následujícími znaky v textu.

Existuje řada technik, jak redukovat množství ukládaných dat, aniž by došlo ke ztrátě informace. Uvědomme si, že podstatnou vlastností databáze je smysluplné poskytování pravdivých, relevantních informací. Kolik dat k tomu potřebujeme mít explicitně uloženo v databázi, to je již druhá vět. Je jasné, že méně dat, které poskytují totéž kvantum informací, je výhodné.

Výhody redukce

- Snížení velikosti vnějších médií.

- Zkrácení času přístupu k datům.

- Zkrácení času přenosu dat.

Nevýhody redukce

- Přídavná složitost odpovídajících algoritmů.

- Manipulace s proměnnou délkou kódu.

- Manipulace s jednotlivými bity.

4.4.3 Základní pojmy redukce dat

Metody redukce jsou z větší části založeny na kódování.

KÓDOVÉ SLOVO je symbol či posloupnost symbolů, kterými kódujeme zdrojový objekt (jednotku). KÓD je množina všech kódových slov. Důležitá vlastnost kódu je jednoznačná dekódovatelnost. Kódy s pevnou délkou jsou snadno dekódovatelné. U kódů s proměnnou délkou se posuzuje bezprostřední rozhodnutelnost. Kód je bezprostředně rozhodnutelný, jestliže poznáme konec kódového slova bezprostředně po příjmu jeho posledního znaku. Kódy jsou bezprostředně rozhodnutelné, když mají tzv.

prefixovou vlastnost. Prefixová vlastnost znamená, že žádné kódové slovo kódu není předponou nějakého jiného kódového slova kódu. Pro měření vhodnosti kompresní techniky slouží kompresní poměr (v %). Kompresní poměr je relativní množství paměti ušetřené po kódování.

D...velikost původního zdrojového řetězce

... velikost zakódovaného řetězce

Kompresní poměr K = (D - D´) / D

4.4.4 Metody redukce

KOMPRESE je takový způsob redukce dat, kdy vždy existuje možnost dekomprese, při které se neztrácí informace. U KOMPAKCE je zachována pouze jistá nutná informace, neexistuje inverzní proces dekódování. Např. zkracování klíčů v souborech indexů, kdy pro rozlišení stačí pouze některá místa klíče.

4.4.5 Kódy s pevnou délkou

Chceme-li zakódovat (m výskytu) n jednotek, lze to udělat kódovými slovy délky I a platí: I =

log2n

n ... počet jednotek

Příklad:

Uvažujeme text složený z 10 slov (n = 10), THE, OF, AND, TO, A, IN, THAT, IS, IT, ON Původní délka textu při délce pro 1 znak= 1 byte, byla 23 bytů, tj. 23x8=184 bitů. Délka textu po zakódování s pevnou délkou kódového slova:

I = log210

Délka kódového slova (v bitech) je nejbližší celé číslo, vetší než l a to je 4 bity. Celý text je

tedy zakódován do délky 4x10=40 bitů. Známe-li pravděpodobnosti výskytu jednotlivých slov, pak kompresní poměr vypočteme

podle vzorce:

Ii ..... délky slov

pi .... pravděpodobnosti výskytu

4.4.6 Huffmanovo kódování

Používá kódy proměnné délky, bylo vyřešeno v r. 1952. Huffmanovo kódování je založeno neorientovaných binárních stromech.

Vstup: n jednotek ke kódování a pravděpodobností pi jejich výskytu. Pro každou jednotku i vytvoříme list o(pi) binárního stromu, tj. uzel ohodnocený pi. Z pravděpodobností se vyberou dvě nejmenší nenulové pr a ps a vypočte se q = pr + ps.

Vytvoří se uzel o ohodnocený q a hrany se ohodnotí 0 resp. 1. Tímto způsobem se sestrojí binární strom.

Příklad

Jsou dána slova: THE, OF, AND, TO, A, IN, THAT, IS, IT, ON, která se vyskytují s pravděpodobností (po řadě): 0,270, 0,170, 0,131, 0,099, 0,088, 0,074, 0,052, 0,043, 0,040, 0,033. Sestrojte binární strom a naznačte sestavení kódových slov pro jednotlivá slova textu.

Např. Slovo of se zakóduje 00

is 1101

Kód se čte od kořene k listu. Huffmanovo kódování vyžaduj známé a neměnící se pi.

Příklad

Nechť (setříděné) četnosti slov 9ti znakové abecedy v textu tvoří posloupnost (1,1,1,1,3,3,3,3,7). Sestrojte binární strom a

k němu Huffmanův kód.

4.4.7 Komprese dat adaptivním slovníkem

Techniku vynalezl Jakobsson. Jedná se o techniku komprese obecných textových řetězců pomocí slovníku, který vzniká v paměti souběžně s kódovaným textem. Slovník je po zakódování z paměti odstraněn a při dekódování je opět paralelně generován.

Experimentálně byl zjištěn kompresní poměr 50 %. Podstatou metod je konstrukce datové struktury - lesu. Ke každému znaku použité n-prvkové abecedy je přirazen jeden odpovídající kořen stromu. Stromy jsou n-ární a mají hloubku h (parametr metody). Pro daný řetězec S se definuje regál slovníku Fh(S), kde každá cesta z kořene odpovídá podřetězci z S a

naopak. Každý podřetězec délky menší nebo rovné h lze v lese nalézt jako cestu z nějakého

kořene. Uzly jsou ohodnoceny znaky abecedy. Kódování řetězce S spočívá v náhradě podřetězců adresami, které odpovídají adrese posledního znaku podřetězce, který ještě existuje ve slovníku. Metoda je jednoprůchodová, tj. text se čte sekvenčně znak po znaku pouze jednou.

Příklad

Nechť h = 3, abeceda = (a, b, c)

S = abbbcabbbbbcb

Regál slovníku má tvar:

Pojmy k zapamatování:

Statická struktura

Dynamická struktura

B-strom

Neredundantní B-strom

Dynamické hašování

4.5 ŘEŠENÉ PŘÍKLADY B-STROMŮ

Cíl:

Cílem této kapitoly je na řešených příkladech demonstrovat proces postupného vkládání záznamů do B-stromu a s tím souvisejícího štěpení uzlů. Čtenář by se měl zamýšlet hlavně nad tím, jak:

- Vypadá struktura B-stromu.

- Lze provádět odkazy na další uzly B-stromu.

- Lze provádět odkazy na záznamy primárního souboru.

- Dochází ke štěpení uzlů.

- Zajistit vyváženost B-stromu.

Klíčová slova:

B-strom, Insert, Delete, štěpení uzlu, alokace uzlu.

Příklad:

Na primární soubor, obsahující 6 záznamů vkládaných v pořadí Z0, Z1, …

Matka                Karla                 Poklad               Babička             Pustina              F.L.Věk

Z0                    Z1                    Z2                    Z3                                Z4                    Z5

vytvořte B-strom, jestliže velikost uzlu = 3. V tabulce jsou uvedeny pouze hodnoty

vyhledávacího klíče Příjmení.

 

 

Úkoly k zamyšlení:

Pokuste se navrhnout primární sekvenční soubor a zkonstruujte na něj B-strom. Dále se pokuste primární soubor aktualizovat přidáváním a mazáním záznamů a ukažte, jaký vliv tyto operace mají na B-strom.

Průvodce studiem:

Pokud jste pochopili jak teoretickou část modulu o B-stromech, tak všechny uvedené příklady, dá se předpokládat, že nebudete mít potíže s vypracováním korespondenčního úkolu, který obsahuje problematiku B-stromu. Pokud Vám je ještě něco nejasné, prostudujte příslušné kapitoly ještě jednou, ev. kontaktujte tutora. Určitě však zasloužíte pochvalu za snahu. Věřte, že Vás chápu a dokážu se vžít do Vaší situace. Studium distanční formou určitě není nic snadného.