Logická organizace báze dat

Historický vývoj směřoval od prvotního zpracování dat na úrovni fyzických záznamů přes datové záznamy bez vzájemných vazeb (na úrovni dat) až po báze dat obsahující v sobě popis dat včetně vazeb ([3], [7]).

V současné době má smysl rozebírat dva dominantní modely logické organizace bází dat: hierarchický (také hierarchicko - síťový) model a relační model ([10]).

Hierarchicko - síťový model

Model vychází z použité hierarchické struktury dat tak, jak byla kdysi zavedena pro potřeby jazyka Cobol pro zobrazení hodnot dat a jejich vzájemných vztahů (nadřízenosti a podřízenosti). Tento model se neopírá o matematickou teorii, i když přejímá část terminologie z teorie grafů. Přesto nalezl v praxi široké uplatnění.

Na hierarchickém modelu je založena řada systémů řízení báze dat, např. IMS firmy IBM, český DBS používaný kdysi v řadě EC apod.

Hierarchická struktura je taková, kde záznamy jsou v hierarchickém vztahu nadřazenosti a podřízenosti. Přitom se používá "rodinná" terminologie rodič a potomek ve zřejmém významu.

V hierarchické struktuře má každý potomek jediného rodiče, existuje jediný rodič, který není potomkem a potomek v jednom vztahu může být rodičem v jiném vztahu.

Pokud je zapotřebí popsat, na kterém místě hierarchické struktury se nějaký záznam nalézá, používá se k tomu tzv. přístupová cesta. To je možno díky popsaným vlastnostem hierarchické struktury, které zaručují, že od kořene lze dojít k danému záznamu jediným způsobem ([9]).

Často se vyžaduje (většinou z ryze praktických důvodů např. sběru dat), aby v každém záznamu existoval klíč. V takovém případě lze přístupovou cestu popsat jednoduše jako posloupnost klíčů počínaje klíčem kořenového záznamu přes klíče všech nadřízených až po klíč daného záznamu včetně.

Zmíněné pojmy z teorie grafů se při popisu hierarchických struktur využívají v tomto smyslu:



Obr. 3.1: Stromová struktura

Nevýhodou hierarchických systémů je velmi obtížná implementace odkazů. V takových případech se sice rozšiřují možnosti, snižuje redundance dat, ale současně dochází k nutnosti promíchávat otázky uložení na médiu s otázkami struktury modelu, ke znepřehlednění a zvláště ke snížení abstrakce při práci s daty.

Poznámka 1 z oblasti VS: V kapitole o grafech shora byla uvedena řada příkladů týkajících se právě VS. Je však nutno zdůraznit, že zatímco tam se grafová struktura uplatňovala pro model systému jako takový, zde slouží grafové struktury pro uložení - z hlediska teorie grafů - ohodnocení uzlů a hran grafového modelu, tedy informací o uzlech a hranách.

Poznámka 2 z oblasti VS: Tato metoda byla uvedena jen pro úplnost. V oblasti hospodaření s vodou, zvláště při modelování vodohospodřáských subsystémů, není vhodná pro základní bázi uchování dat; není totiž zřejmé, co by měl být kořenový segment (celkem vyrovnaně se přistupuje k datům jednak z hlediska míst, jednak z hlediska transportních cest). Při vlastním zpracování se však často vytváří virtuální datové struktury mající základ právě v hierarchickém modelu, i když jsou realizovány v prostředí relačních databázových systémů - o tom viz dále, zvláště poznámku o vzájemné transformaci hierarchického modelu na relační a naopak.

Relační model

Jedním z nejjednodušších zápisů dat je zápis do klasické tabulky. Takto převážně vznikají zápisy dat v terénu, obecně v neautomatizovaných částech systému. Charakteristický pro tento zápis je její členění do sloupců, z nich každý má nadpis. To je velmi podstatné, protože nadpis ve smyslu identifikace údajů automaticky indukuje také typ údajů v daném sloupci. Sloupce jsou tedy "homogenní co do typu". Snad nejpodstatnější vlastností je možnost vytvářet mezi jednotlivými tabulkami vazby ([6], [4]). Klasickým příkladem je výňatek z komplexní petrologické databáze ([35]), uvedený na následujícím obrázku.

Pevným počtem n sloupců tvoří data v řádcích uspořádané n-tice. Každý prvek n-tice, nazývaný pole, je toho typu, jaký odpovídá typu sloupce. Je tedy prvkem (konečné nebo nekonečné) jednoznačně určené množiny D i (např. množiny všech datumů, množiny všech racionálních čísel, množiny {Ano;Ne} apod).

 


Obr. 3.2: Příklad relačního modelu

Příklady z oblasti vodohospodářských systémů (VS)

V celém dalším textu budou uváděny příklady z oblasti VS. Modelovou situaci tvoří fiktivní síť studní, které do nějakého subsystému dodávají pitnou vodu. Studny jsou realizovány na základě hydrogeologických vrtů, mají jistou polohu v terénu a sleduje se jejich hladina a čerpání z nich. Vzorky vody odebírané v náhodných intervalech se analyzují v různých laboratořích.

Matematický základ relačního modelu

Množina všech uspořádaných n-tic <a1, a2, ... , an>, kde Ai jsou libovolné množiny, ai Î Ai a n je přirozené číslo, je z teorie množin známa jako kartézský součin K = A1 x A2 x ... x An, a každá podmnožina R Í K je známa jako n-ární relace v K. Je tedy možno pohlížet na každou tabulku, která je vytvořena obdobně jako tabulka shora, jako na n-ární relaci.

Pro určení relace R pro potřeby modelu báze dat je zapotřebí zadat

Relaci je tedy možno definovat jako trojici R = <F, D, T>, kde

Tabulky dat, které reprezentují relace, mají - jak již bylo uvedeno - následující vlastnosti:

  1. Každému prvku relace odpovídá jeden řádek tabulky

  2. Žádné dva řádky nejsou identické

  3. Sloupec s atributem f z F v záhlaví obsahuje jen hodnoty z domény D(f).

Okolnost, že v praxi často nebývá splněna vlastnost ad 2), se řeší "očíslováním řádků"; přidá se jeden sloupec, jehož doména je podmnožina přirozených čísel ([15]).

První normální forma

Přestože domény mohou být libovolné množiny, používá se z čistě praktických důvodů většinou jen množin, jejichž prvky jsou

Domény obsahující jen prvky analogické prvním čtyřem vyjmenovaným se nazývají jednoduché. Jestliže relace obsahuje pouze jednoduché domény, nazývá se relace v první normální formě. Proces převedení relace do první normální formy se nazývá normalizace ([11]).

Příklad z oblasti VS: Nechť do VS přispívají studny realizované jednotlivými vrty; nepravidelně je prováděno měření hladiny a sekundového odběru. Relace, která není v první normální formě, je dána např. následující tabulkou:


Obr. 3.3: Nenormalizovaná relace

Normalizace této relace může vést k jediné relaci, která již v první normální formě je:


Obr. 3.4: Normalizovaná relace

Jde o poměrně jednoduchý příklad; je však nutno upozornit na to, že procesem normalizace zvláště u složitě logicky strukturovaných relací mohou často vznikat redundantní údaje. I v tomto příkladu se redundanci dat nevyhneme: souřadnice jednoho vrtu jsou uloženy na několika různých místech. Pokud např. se posléze zjistí, že souřadnice X vrtu A12 byla zaznamenána chybně, je nutno hodnotu opravit ne na jediném, ale na několika různých místech. To je přesně ta situace, kterých by v reálné praxi mělo být co nejméně.

Některé atributy nebo jejich spojení lze v případě potřeby použít jako klíče. Označme je jako možné klíče. Klíče se používají jednak pro vyhledávání, jednak pro uspořádání. Jestliže se některý možný klíč skutečně pro daný účel použije, stává se po dobu použití primárním klíčem. Je-li klíč tvořen jediným atributem, označuje se jako jednoduchý klíč; je-li tvořen spojením dvou a více atributů, nazývá se spojený klíč. Je-li klíč vytvořen pomocí operací definovaných na hodnotách polí a na konstantách, nazývá se obecný klíč.

Pomocí klíčů lze nahradit jednu nenormalizovanou relaci více normalizovanými relacemi se stejným datovým obsahem, jak to ukazuje následující obrázek. Klíčem (a to jednoduchým) je v tomto případě atribut Vrt.


Obr. 3.5: Rozklady relace

Zápis struktury databáze

Pro formalizaci zápisu struktury se často používá notace, která je základem některých dotazovacích jazyků. V této notaci se zapíše struktura relací následovně:

VRTY (^VRT, X, Y, LABORATOŘ)
ČERPÁNÍ (^VRT, ^DATUM, HLADINA, L/SEC)

Identifikátor relace je uveden před kulatými závorkami; uvnitř nich jsou uvedeny jednotlivé atributy. Je-li před některým z nich uveden znak ^, je tím označen klíč.

Nenormalizovaná relace se pak v této notaci zapíše následovně:

VRTY (^VRT, X, Y, ČERPÁNÍ (^DATUM, HLADINA, L/SEC), LABORATOŘ)

Porovnáním zápisů obou struktur lze odhalit jeden z možných postupů tvorby klíčů při procesu normalizace, kterým vzniká více relací: každá hierarchicky vnořená relace předřadí svému vlastnímu klíči (klíčům) klíč (klíče) relace bezprostředně hierarchicky nadřazené.

Operace s relacemi

V relačním modelu je báze dat definována jako n-ární relace; takových bází dat se tedy týkají všechny vlastnosti, které lze odvodit matematickým aparátem pro relace. Tento aparát jako obecný aparát matematický je pro účely počítačového zpracování velmi dobře algoritmicky propracován. S relacemi jako takovými se pracuje poměrně jednoduše; výhoda relačních modelů databází spočívají právě v jednoduchosti práce s relacemi.

Pro relace se zavádí především operace; ze základních operací uveďme projekci a spojení jako nejčastěji vyžadované operace.

Nechť P a Q jsou relace. Operaci x nazýváme projekcí tehdy, je-li P x Q relace, která vznikne z P vynecháním atributů P, které nejsou současně atributy Q, a následným vynecháním shodných řádků. Tato operace se používá pro zbavení se nepodstatných nebo v danou chvíli nedůležitých informací.

Příklad :

VRTY x (^VRT, LABORATOŘ) = (^VRT, LABORATOŘ)

Nechť P a Q jsou relace, které mají alespoň jeden shodný atribut. Operaci + nazýváme spojením tehdy, je-li P + Q relací, která vznikne z P přidáním atributů Q, které nejsou současně atributy P, a následným vynecháním shodných řádků. Spojení vytvoří relaci z hodnot atributů obou relací, které odpovídají hodnotám shodného (shodných) atributů.

Příklad:

VRTY + (^VRT, ^DATUM, L/SEC) = (^VRT, X, Y, LABORATOŘ, ^DATUM, L/SEC)

Tyto a další operace vytváří algebru relací. Kromě operací lze vytvářet další relace také relačním kalkulem. Přitom se využívá symboliky používané obdobně v jiných partiích matematiky:

 

Symbolika

Význam

P.x

Množina dat atributu x relace P

P(Q.x, R.y)

Relace P nad hodnotami dat atributu x relace Q, atributu y relace R.

p:v

Operátor výběru: platný, nabývá-li p hodnoty v

$, "

Existenční a všeobecný kvantifikátor

Ú, Ů, Ř

Logické operátory nebo, a současně, negace

Tab. 3.1: Relační symbolika

Pomocí zavedené symboliky a relačního kalkulu můžeme zavést např. relaci U, která popisuje množinu takových čerpacích měření všech vrtů, kde vydatnost přesahuje 0.5:

U (^VRTY.VRT, ^ČERPÁNÍ.DATUM, ČERPÁNÍ.L/SEC) : ČERPÁNÍ.L/SEC > 0.5

Normální formy

V předchozích odstavcích byl zaveden termín první normální forma. Příklady osvětlily způsob převodu relace na normalizovaný tvar. Při porovnání výsledků dvou různých normalizací téže relace (do jedné a do dvou relací) a ve smyslu zavedených operací nad relacemi je vidět, že druhý způsob spočívá ve vytvoření dvou projekcí na podmnožiny atributů se stejným informačním významem a ekvivalentním datovým obsahem. Stanovení vhodné (logické) reprezentace dané relace bude cílem následujících odstavců.

Další výklad je dokreslen následujícím příkladem. Nechť je dáno několik vrtů v několika lokalitách; vzorky vod byly podrobeny chemické analýze a výsledky byly shrnuty do relace

ANALÝZA (VRT, LOKALITA,LÁTKA, MNOŽSTVÍ)

Je-li tedy

<V12, Paseky, pH, 6.7>

z relace ANALÝZA, pak to znamená, že z vody odebrané z vrtu V12, který je v lokalitě Paseky, byla provedena analýza pH. Zjištěné pH vody má hodnotu rovnu 6.7.

Z příkladu je vidět, že

Rozborem dalších možností lze odvodit, že jediným klíčem relace je {VRT, LÁTKA}; pouze tento klíč jednoznačně zpřístupňuje všechny údaje v řádku.

Mezi atributy relace se tedy mohou vyskytovat vazby, které jsou dány významem těchto atributů v reálném světě, jejich sémantikou. Formálně jsou tyto vazby označovány jako závislost.

Závislost lze definovat takto:

Definice: Nechť je dána relace R = <A, D, T>, nechť je B z A, C z A. Množinu atributů C v R nazveme závislou na množině atributů B v R, jestliže pro libovolné n Î T, v Î T platí: je-li n[b] Í B pro všechna b Î B, je n[c] = v[c] pro všechna c Î C. Skutečnost, že C je závislá na B, je symbolicky označena

® C

Pomocí závislostí atributů je možno zachytit a formalizovat část sémantického významu atributů. O tom, zda v relaci platí závislost mezi atributy, se rozhodne podle tabulky relace. Často je však možné vyjít ze vztahů mezi atributy v popisovaném reálném světě. Takovým způsobem lze definovat např. klíč v relaci.

Definice: Nechť K je podmnožina A. K je pro R[A] klíčem relace R, jestliže (a) K R A a dále (b) žádná vlastní podmnožina K nemá předchozí vlastnost.

Některé problémy mohou nastat při aktualizaci dat. Jestliže se v předchozím příkladě přestane provádět analýza pH ve vrtu V13, odstraní se z relace řádek pro V13. Tím se ovšem ztratí informace o existenci a umístění vrtu V13 (který ovšem reálně existuje dál). Pokud někde vznikne další vrt, nemůže se do relace přidat, dokud není známo, co a v jakém množství bylo analyzováno. Přejmenuje-li se lokalita, je třeba zaměnit starý údaj za nový na mnoha řádcích.

Tyto problémy jsou důsledkem toho, že LOKALITA závisí nejen na celém klíči {VRT, LÁTKA}, ale i na jeho části {VRT}. Základní myšlenkou, která z toho vyplývá, je vytvoření různých projekcí této relace a uchovávat je samostatně.

V uvedeném příkladě to znamená vytvořit projekce P1 a P2 relace ANALÝZA na množiny {VRT, LOKALITA} a {VRT, LÁTKA, MNOŽSTVÍ}.

Použitá metoda rozkladu se opírá o pojem závislosti. Každý krok rozkladového algoritmu záleží v nahrazení jedné relace dvěma jejími projekcemi, přičemž nesmí dojít ke ztrátě informace.

Lze dokázat, že z platnosti závislosti B R C v relaci R plyne rozložitelnost (bez ztráty informace) R na své projekce R [B C] a R [B C'], kde C' je doplněk množiny C do A-B.

Definujme nejprve úplnou závislost takto:

Definice: Nechť R [A] je relace, nechť je B z A, C z A. C úplně závisí na B v R, jestliže C R B a pro žádnou vlastní podmnožinu B1 z B není B1 R C.

Nyní lze definovat druhou normální formu:

Definice: Relace R [A] je relace ve druhé normální formě, jestliže

(a) R [A] je v první normální formě a dále
(b) každý atribut a Î A, jenž nepatří žádnému klíči R, úplně závisí na každém klíči K v R.

Shora uvedená relace ANALÝZA není ve druhé normální formě, protože má atribut LOKALITA, který nepatří žádnému klíči, funkčně závisí na jediném klíči {VRT, LÁTKA}, ale nezávisí na něm úplně (závisí totiž jen na jeho části VRT). Ovšem obě projekce P1 a P2 relace ANALÝZA už ve druhé normální formě jsou.

Nicméně i s relacemi ve druhé normální formě mohou nastat problémy. Uvažujme relaci VRTY (VRT, LOKALITA, SPAD), kde identifikátorem SPAD je označena celková deposice v dané lokalitě:

Jediným klíčem je {VRT}. Jestliže se však uzavře poslední vrt v Nové Vsi, ztratí se informace o spadu v dané lokalitě. Problém je zřejmě v existující závislostí LOKALITA -> SPAD; žádný z těchto atributů nepatří ke klíči relace. Tyto a obdobné obtíže se je možno odstranit přechodem k projekcím (zde na {VRT, LOKALITA}) a relacím ve třetí normální formě:

Definice: Řekneme, že relace R je ve třetí normální formě, jestliže

(a) R je ve druhé normální formě a dále
(b) množina všech atributů, které nepatří žádnému klíči (tj. množina neprimárních atributů) je nezávislá: žádný neprimární atribut nezávisí na některém z ostatních neprimárních atributů.

Uvedenou relaci VRTY lze projekcí převést na dvě relace UMÍSTĚNÍ (VRT, LOKALITA) a ZNEČIŠTĚNÍ (LOKALITA, SPAD). Toto rozdělení je konec konců i logické, protože spad závisí spíše na lokalitě jako takové než na samotném vrtu.

Elementy relace, která je ve třetí normální formě, mají následující strukturu: existují pro ně hodnoty klíčů (zpravidla klíče jediného), které tento element plně identifikují, a dále hodnoty atributů, které jistým způsobem elementy popisují. Tyto "popisné" hodnoty neprimárních (= neklíčových) atributů jsou na sobě nezávislé v tom smyslu, že žádná z nich není funkčně určena kombinací některých ostatních.

Návrh logické struktury

Shora uvedené normální formy mají nesmírný praktický význam.

Především na úrovni řízení báze dat (= úroveň programů) je evidentně zpracování relací ve vyšší normální formě daleko jednodušší a tedy rychlejší než relací v nižší normální formě (popř. zcela nenormalizované). Přestože pro koncového uživatele je to irelevantní, je na místě připomenout, že jednodušší zpracování vyžaduje i jednodušší programování a je známo, že čím jednodušší je program, tím méně potenciálních chyb obsahuje.

Daleko důležitější je však otázka praktického zpracování dat uživatelem počínaje aktualizací a konče čerpáním informací. Údržba koncovým uživatelem dat, která jsou nenormalizovaná, je bez rizika porušení integrity dat nemožná bez obslužných programových nadstaveb, specificky programovaných pouze na tuto datovou strukturu. Toto riziko se - byť v menší míře - vyskytuje i v relacích ve druhé normální formě: přidání dalšího vrtu do relace VRTY předchozího odstavce znamená, že uživatel musí zadat s kódem vrtu a lokality také přesně stejnou hodnotu spadu jako u předchozích řádků téhož vrtu! Teprve relace ve třetí normální formě plně odstraňují (až na zřejmé klíče) redundanci dat ([8]).

Protože dnes mají koncoví uživatelé obecných systémů řízení báze dat možnost plně definovat, plnit a aktualizovat své vlastní báze dat, je vhodné závěrem uvést obecný postup normalizace již ve fázi návrhu logické struktury:

 

Nenormalizovaný tvar -> první normální forma

rozložení všech datových struktur, které nejsou dvourozměrné, na dvourozměrné.

První normální forma -> druhá normální forma

odstranění neúplných závislostí neprimárních atributů na potenciálních klíčích.

Druhá normální forma -> třetí normální forma

odstranění závislostí neprimárních atributů na sobě.

Návrh logické struktury báze dat založené na relačním modelu tedy spočívá v identifikaci všech atributů postihujících existující objekty, a vzájemných vztahů mezi těmito atributy. Na základě této identifikace je třeba - s jistou dávkou opatrnosti - rozhodnout o klíčích relací.

Relační systémy jsou založeny na formalizovaných pojmech používajících matematický aparát. Lze vytvořit analytické nástroje pro automatizaci shora popsaných identifikačních činností a návrhu výsledných relací ve třetí normální formě. Ukázalo se však, že tyto nástroje jsou - zvláště díky moderním propracovaným systémům řízení bází dat - pro koncové uživatele vcelku zbytečné.

Zpracování relačních databází

Pro přístup k datům relačních databází byla vytvořena řada mechanismů. Pomineme-li čistě programátorský přístup k datům jakožto hodnotám binárního souboru, je dnes nejpoužívanějším nástrojem dotazovací jazyk implementovaný na nejrůznějších úrovních. Nejčastěji je možno setkat se s jazykem SQL a jazykem xBase.

Jazyk SQL je např. nosným dotazovacím jazykem používaným firmou Microsoft v databázovém "stroji" systémů Windows a využívaný např. databázovým programem Access a dalšími (viz např. [12]). Příkazy SQL jsou použity i pro realizaci dílčích algoritmů v informačním systému, který popisuje tato práce.

Jazyk xBase je nejen dotazovacím, ale také kompletním programátorským nástrojem pro komplexní řešení databázových aplikací. Je využívaný např. profesionálním databázovým systémem Visual FoxPro firmy Microsoft a je v něm vytvořen celý v této práci popisovaný informační systém. Blíže viz např. [13].

Souhrn o geo- aplikacích SQL a xBase je možno najít např. [14]. Zdroj [17] na úrovni SQL je pak použit i kapitole 4 této práce a v řadě dalších prací ([19], [20]).