Databáze nejsou jen MySQL

5. ledna 2002

Většina z vás asi zná databázi MySQL, která je hojně rozšířená díky tomu, že je zadarmo. Vedle ní jsou ještě v povědomí Oracle, Postgress, MS SQL ad. Všechny tyto databázové systémy tvoří ale jen zlomek z celé oblasti věnující se databázovým aplikacím.

Relační databáze

Databázové systémy, které jsem uvedl v úvodním odstavci tohoto článku, mají společný jmenovatel. Jedná se o relační databázové systémy. Základem každé relační databáze je tabulka (neboli relace). Databázi pak tvoří soubor různých tabulek, které jsou mezi sebou různě provázány. Z článků o SQL, které na Interval.cz vycházely v roce 2000, víte, že existují takové pojmy jako primární klíč, cizí klíč, funkční závislost. Toto všechno jsou termíny, které postupně vznikaly od 60. let minulého století a o kterých je dnes na pultech knihkupectví spousta odborné literatury.

Relační databáze se vyznačují především tím, že jsou relativně jednoduché, snadno pochopitelné a díky tomu rozšířené a mezi programátory a vývojáři informačních systémů velmi oblíbené. Na běžné aplikace kancelářského typu jsou většinou postačující. Pokud byste budovali informační systém většího podniku, zcela jistě se poohlédnete mezi relačními databázovými systémy a vyberete si ten, který po stránce výkonu a spolehlivosti bude odpovídat vašim představám. Relačních databází je velmi mnoho, od různých firem. Každá nabízí určitá vylepšení, ale v základu dodržují standard dotazovacího jazyka SQL.

Objektově orientované databáze

Vedle relačních databází lidé se začal vyvíjet nový typ databázových systémů, založených na principech objektového programování. Co nového objektové databáze přináší? Tak jako jsme mohli vnímat přechod od strukturálního programování k  objektovému programování (např. klasický Turbo Pascal a Delphi), tak můžeme vnímat i přechod z relačních databází na objektové databáze. Základem OO databáze není tentokrát tabulka, ale objekt. Každý objekt má atributy/vlastnosti (zde je vidět analogie se sloupci v  tabulce) a metody, které nějakým způsobem manipulují s hodnotami vlastností. Jednotlivé „záznamy“ jsou instance objektu s  konkrétními hodnotami (v relačních databázích – 1 řádek). Lze zde využít všech výhod dědičnosti (a to i mnohonásobné), zapouzdřenosti a polymorfismu. Díky tomu OO databáze výrazně rozšiřují možnosti tvorby databázových aplikací.

Práci s databází můžeme rozdělit do dvou částí: tvorba databáze (definice tabulek, objektů) a pokládání dotazů (SELECT). V relační databázi je tvorba tabulek docela jednoduchá, zatímco v objektových databázích je tvorba celé struktury objektů mnohem složitější. Odměnou za vynaložené úsilí je však jednodušší tvorba dotazů. Dotazy jsou mnohem snadněji pochopitelné. A jak vypadají některé hodně komplikované dotazy v relační databázi, asi sami víte ze seriálu o SQL. Uvádím zde pro ilustraci jednoduchý dotaz, zapsaný relačně a objektově. Oba dva dotazy dávají tutéž odpověď (ukázka ze systému Oracle):

/* relacni */
SELECT lide.prijmeni, pobyt_rezervace.id_pokoj
FROM lide, pobyt_rezervace, lide_pobyt
WHERE den_check(pobyt_rezervace.id_pokoj,sysdate)>0
AND pobyt_rezervace.id = lide_pobyt.id_pobyt
AND lide_pobyt.id_osoba = lide.id;
/* objektove */
SELECT l.id_osoba.get_name(), l.id_pobyt.id_pokoj.id
FROM lide_pobyt l
WHERE l.id_pobyt.den_check(l.id_pobyt.id_pokoj.id, sysdate) = 1;

Jednotlivé dotazy zde nebudu vysvětlovat, slouží pouze jako ukázka. K objektovým databázím se vrátím v některém z dalších článků. Z  dalších OO databázových systému bych mohl jmenovat například: CA-Ingres, ODB II, UniSQL, O2, DB2, Poet a další. Tak jako pro relační databáze je standardem jazyk SQL, objektovým databázím velí např. standard ODMG-93. Otázka jednoznačnosti standardů v objektových databázích není stále dořešena.

Deduktivní databáze

Objektové databáze byly založeny na principech objektového programování, deduktivní databáze jsou oproti tomu založeny na principu logického programování. To již nelze vůbec srovnávat s běžně vnímaným strukturálním programováním, takže i porovnání předchozích databází s deduktivní je velmi těžké. Použití deduktivních databází je úplně jiné (zejména v aplikacích dolování dat a umělé inteligence). Jsou to typy aplikací, se kterými se běžný smrtelník už vůbec nesetká. Tyto databáze jsou nasazovány např. pro vědecké účely.

Stavebním kamenem deduktivních databází jsou relace (napevno definované vztahy mezi entitami) a deduktivní pravidla. Mějme jednoduchý (matematický) příklad. V databázi jsou uloženy následující informace:

je_mladsi(Jana,Karel);
je_mladsi(Karel,Honza);

To je relace „být mladší“, která říká, že Jana je mladší než Karel a druhá relace říká, že Karel je mladší než Honza. Mějme nyní jednoduché deduktivní pravidlo, zapsané v následujícím tvaru:

if je_mladsi(A,B) AND je_mladsi(B,C) then je_mladsi(A,C);

Toto je jednoduché deduktivní pravidlo, které jsem zapsal v syntaxi jazyka Pascal, která je všem známa, a říká, že máme-li člověka A, který je mladší než B a zárověň člověk B je mladší než člověk C (A, B, C jsou proměnné, za které lze dosadit jakékoli hodnoty z databáze), pak (dedukcí) člověk A je mladší než člověk C. Kdybychom v systému položili následující dotaz:

? je_mladsi(Jana,Honza);

Dostaneme jako odpověď „pravda“.

Reálné aplikace bývají samozřejmě mnohem složitější. Příkladem deduktivní databáze je Datalog, který vychází z jazyka Prolog. Dalšími příklady by mohly být systémy Eclipse, LDL aj.

Temporální databáze

Tento přístup je využíván v podnicích, kde je potřeba zpracovávat stará a zároveň nová data. Jedná se o burzy, pojišťovny, banky, rezervační systémy apod. Všechny předchozí typy databází, jak jsem je uvedl, jsou netemporální, neboli časově nezávislé. U nich totiž platí, že data jsou všechna platná v době dotazu. Jak lze od netemporálních databází přejít k temporálním? Do databáze zavedete např. systém tzv. časových razítek. Každý údaj bude mít svoje časové označení, podle kterého budou aplikace schopny rozpoznat, zdali se jedná o údaj nový nebo starý. Pak lze tvořit dotazy na minulost, přítomnost nebo budoucnost. Nejedná se tedy o samostatný typ databází, jako ty předchozí v tomto článku, jde v podstatě o rozšíření předchozích databází o zpracování dat s ohledem na jejich stáří (čas). Standardem pro databáze s časem je jazyk TSQL. Jeho syntaxe i sémantika je velmi podobná klasickému SQL. Je ale doplněna o další speciální klauzule (např. WHEN, FIRST, LAST apod.).

Svět databází je velmi rozmanitý a rychle se vyvíjí. Zdaleka jsem zde nevyčerpal všechny možnosti. Snažil jsem se poukázat na některé důležité přístupy v oblasti databází (založené na strukturálním, objektovém a logickém programování) a snažil jsem se jednotlivé principy mezi sebou porovnat. MySQL prostě není celý databázový svět.

Starší komentáře ke článku

Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.

Předchozí článek Nástěnka v PHP

Mohlo by vás také zajímat

Nejnovější

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *