První databáze byly zpravidla tvořeny na míru v nějakém vyšším programovacím jazyce, jako např. COBOL nebo PL/I, a měly zásadní nedostatek - nebyly univerzální. Jakékoli rozšiřování bylo velmi složité, a přestože takto psané systémy ještě stále běží (někdy ještě na původním hardwaru), jakékoli přenesení dat na nový systém je pro jejich majitele mnohdy neřešitelný problém.
Vývoj univerzálních databázových systémů začal v šedesátých letech minulého století. S rostoucím počtem uživatelů začal také stoupat zájem o nějaký standard. Tak vznikla skupina "Database Task Group" uvnitř skupiny CODASYL, jejímž produktem byl standard jazyka COBOL. Přístup skupiny DTG nakonec vedl ke standardu, který uchovával data jako zřetězený seznam. Veškeré vyhledávání a zpracování dat se tak odehrávalo sekvenčně. Bylo tedy nutné projít všechna data uložená v databázi, což bylo vzhledem k faktu, že data byla uložena na magnetických páscích, stejně nezbytné.
Podobných systémů bylo mnoho. S pevnými disky získaly počítače náhodný přístup k datům a sekvenční přístup začal být neefektivní. Tehdy přišel Edgar Codd, zaměstnanec IBM, s relačním modelem databází a pravidly pro jejich návrh. Coddovy návrhy byly implementovány v komerčních i nekomerčních systémech, jedním z nejdůležitějších byl INGRES, vytvořený týmem profesora Michaela Stonebrakera.
Během vývoje relačních databází vzniklo pár dotazovacích jazyků, jako byl QUEL, SEQUEL a nakonec SQL, u jehož zrodu stála firma IBM. Jazyk SQL byl standardizován Americkým národním standardizačním institutem (ANSI) a později byl přijat i Mezinárodním standardizačním institutem (ISO).
Pro firmy i jednotlivce je těžké se v podstatě zříci té obrovské výhody, kterou je hluboká probádanost oboru relačních databází. Dalo by se říci, že moderní databázové systémy jsou doslova nabity špičkovými algoritmy a postupy. Historie objektových databází je ve své praktické podstatě malá.
Proto má dnes velký význam takzvané O-R mapování (objektově relační), které řeší perzistenci objektů v relačních databázích. Jde o to nějakým způsobem uložit objekty do relační databáze (a poté je pochopitelně bezpečně z databáze vybrat). Slouží k tomu různé knihovny (Hibernate a spol.), frameworky (J2EE, Spring), návrhové vzory, specifikace (JDO) či doporučení.
Jazyk SQL umožňuje popisovat strukturu a operace s daty velmi jednoduchým způsobem, a také databáze, v tomto článku testované a popisované, podporují (aspoň částečně) jazyk SQL. Většina databází pracuje se standardem SQL99, který je dnes sice již zastaralý (poslední verze je SQL2003), ale stále velmi oblíbený.
Mimo databází kompilovaných pro jeden druh procesorů existují také databáze napsané v Javě. Ty sice nemusí poskytovat tak vysoký výkon (zvláště pro velké objemy dat), ale zato mají jednu velikou výhodu - jsou spustitelné všude, kde je Java, a tudíž jsou nezávislé na platformě.
Popisované servery
PostgreSQL 8.1.4
Databázový systém PostgreSQL je následovníkem systému POSTGRES, který byl vytvořen týmem profesora Stonebrakera na základě zkušeností s projektem INGRES. Databáze POSTGRES přinesla systémy pravidel, uložené procedury a další pokročilé vlastnosti. Jedna z komerčních odnoží POSTGRESu byla Illustra, která byla posléze koupena firmou Informix, jež je v oblasti databází velmi známá. Illustra (a s ní POSTGRES) byla začleněna do Informix Universal Serveru. Poslední velkou událostí bylo koupení firmy Informix společností IBM, která pokračuje v prodeji a podpoře Informixu.
V roce 1995 se dva postgraduální studenti, Andrew Yu a Jolly Chen rozhodli systém POSTGRES rozšířit, nahradili jazyk POSTQUEL jazykem SQL a nakonec systém přejmenovali na Postgres95. Komunita vývojářů začala systém rozšiřovat, opravovat chyby a přidávat automatické testy. Vznikla také dokumentace, která je, dle mého názoru, jedna z nejkvalitnějších. V roce 1997 došlo k přejmenování na PostgreSQL.
Vývojáři PostgreSQL tvrdí, že jejich databáze je nejpokročilejší open-source databáze na světě. Netroufám si posoudit, zda je to pravda, faktem je, že databáze podporuje velkou část standardu SQL2003, stejně jako starší verze standardů SQL99 a SQL92.
Firebird 1.5.3
V osmdesátých letech probíhal vývoj databázových systémů i ve firmě DEC. Zaměstnanec DEC, Jim Starkey, navrhl a implementoval databázi Jrd, která používala multigenerační architekturu, díky které měla tato databáze velmi vysokou propustnost dat. Avšak firma DEC měla ještě další databáze a neměla vůli podporovat je všechny. Nakonec tedy Jim Starkey založil vlastní firmu Groton Database Systems, která byla později přejmenována na InterBase. Díky rychlosti si získala mnoho příznivců, včetně firmy Ashton-Tate, která ji nejprve podporovala a nakonec ji úplně odkoupila. Firmu Ashton-Tate však okolo roku 1990 koupila firma Borland, která tak kromě původního produktu Ashton-Tate dBase získala i InterBase.
Ze svých počítačových začátků si dobře pamatuji na databázi dBase jakožto standard, kterému obstojně konkurovala FoxPro. Formát DBF byl používán téměř všemi databázovými systémy a některými tabulkovými procesory. Ačkoli byla InterBase dodávána spolu s Delphi, poprvé jsem se o ní dozvěděl jako o samostatném produktu v roce 1996 v časopise CHIP. Další setkání s ní nastalo až v roce 2000, kdy bylo uvolnění zdrojových kódů bráno jako veliká senzace.
Ve stejném roce začala skupina vývojářů uvolněné zdrojové kódy přepracovávat a upravovat, a tím dali vzniknout systému Firebird. Firma Borland si pravděpodobně uvědomila, že databáze InterBase má stále co nabídnout, a tak se rozhodla dále vyvíjet uzavřenou verzi InterBase, která je nyní ve verzi 7.5.1.
Firebird byl v podstatě od základů přepsán do jazyka C++, bylo provedeno velké množství oprav a změn a dnes je tento systém velmi stabilní. Poslední stabilní verze (v okamžiku psaní) je 1.5.3, ale verze 2.0 je téměř "za dveřmi".
MySQL 5.0.22
Databáze MySQL vznikla jako reakce na nedostatečnou flexibilitu a rychlost již existující databáze mSQL, která neumožňovala použít vlastní modul pro ukládání dat (ISAM). MySQL tak do velké míry kopíruje API původní mSQL, aby zajistila kompatibilitu aplikací.
Na stránkách www.mysql.com je tvrzení, že databáze MySQL je nejpopulárnější databáze na světě. Programátoři PHP ji používají téměř výhradně, přestože, podle mého názoru, postrádá některé důležité vlastnosti.
SQLite 3.3.6
Databáze SQLite je obsažena v malé knihovně a přistupuje se k ní pomocí volaných funkcí. Byla autorem uvolněna jako public domain, což z ní činí naprosto nejvolněji použitelnou databázi. Díky tomu, že má formu knihovny a nepotřebuje naprosto žádné další programy, je často používána i místo interního datového formátu programů.
IBM DB/2 Express-C 9
Databáze DB/2 byla vyvíjena jako následovník Systemu R, což byla jedna z databází firmy IBM. Firma IBM v té době (devadesátá léta) nevěřila návrhu architektury doktora Edgara Codda, a tak byl systém DB/2 implementován skupinou programátorů mimo Coddovu kontrolu, takže mnoho Coddových pravidel bylo porušeno. Výsledkem jejich činnosti byl mimo jiné jazyk SEQUEL (Structured English QUEry Language). Toto jméno již bylo registrováno, proto byl jazyk přejmenován na SQL (Structured Query Language).
První verze DB/2 byly určeny výhradně pro mainframové počítače firmy IBM. Poté byla DB/2 portována pod různé druhy Unixů, Windows a dokonce byla dodávána spolu s několika verzemi operačního systému OS/2. Dalším počinem bylo vytvoření verze pro Linux a dokonce i pro PDA. Současná verze je IBM DB/2 9 Viper.
Vytvoření databáze Express-C bylo reakcí na uvedení Oracle XE a MS SQL Server 2005 XE. Tato databáze má omezení na 4 GB RAM a maximálně dva procesory.
Oracle XE 10.2.0.1
Firma Oracle byla založena Larrym Ellisonem v roce 1977, tehdy pod jménem Software Development Laboratories. Po dvou letech se společnost přejmenovala na Relational Software a uvedla na trh produkt Oracle V2 (V2 není technicky vzato přesné, protože V1 nikdy nebyla na trhu). Databáze podporovala základní SQL, ale neměla transakce. Jméno Oracle nebylo zvoleno náhodou, ale bylo to údajně krycí jméno projektu financovaného CIA, na kterém Larry Ellison ještě s Bobem Minerem a Edem Oatsem pracovali ve firmě Ampex.
V roce 1983 se firma přejmenovala na Oracle Corporation. Systém byl přepsán v jazyce C a byly do něj přidány transakce. Postupně byl systém portován pod Unix, převeden na model klient/server a rozšířen o PL/SQL. V roce 1992 byla přidána podpora pro referenční integritu, uložené procedury a spouště (triggery). Postupně byly přidávány vlastnosti jako objektový přístup, podpora internetu, Javy a práce s XML. Mimo základní větve Oracle existuje ještě Oracle Lite, který je určen pro mobilní zařízení.
Sybase ASE Express Edition 15.0
Společnost Sybase byla založena roku 1984 Markem Hoffmanem a Bobem Epsteinem v Berkeley v Kalifornii. Databázový systém Sybase je založen, stejně jako mnoho dalších, na původním systému INGRES, který byl obohacen o SQL rozhraní. Databáze Sybase byla do poloviny osmdesátých let minulého století druhou nejpoužívanější databází po Oraclu. Zhruba v této době se Microsoft se Sybase dohodly na sdílení zdrojového kódu a obě firmy tak vyvíjely téměř shodný systém. SQL Server byl uveden pod OS/2, ale v době okolo vzniku verze 4.9 se Sybase a Microsoft neshodly na další spolupráci a obě firmy se vydaly různou cestou. Microsoft nepokračoval ve vývoji unixové části databáze a soustředil se pouze na svou platformu, zatímco Sybase dále podporovala většinu původních platforem. S uvedením Informixu ale Sybase ztrácela své pozice na trhu a nyní je její produkt až za Oraclem, IBM DB/2 a MS SQL Serverem, který paradoxně vychází ze stejných základů. Pozice firmy Sybase se zhoršovala, ale díky novým produktům jako SQL Anywhere Studio se podařilo společnost opět vzkřísit. Původní stěžejní produkt se jmenoval SQL Server, ale byl v roce 1996 přejmenován na Adaptive Server Enterprise.
Za zmínku stojí také menší open-source databáze McKoi DB nebo HSQLDB (Hypersonic SQL). První jmenovaná je určena k nasazení a má velmi malé požadavky. Databáze Hypersonic je určena k testování a vývoji, ale její nasazení se nevylučuje.
Apache Derby 10.1.3.1
V roce 1996 vznikla v Oaklandu v Kalifornii společnost Cloudscape, Inc. Jejím záměrem bylo vyvinutí databázové technologie na platformě Java. Java byla velmi mladá, číslo verze bylo tehdy 1.0 (Java opustila Sun Microsystems teprve v roce 1995). V roce 1997 byla na trh uvedena databáze JBMS, později přejmenovaná na Cloudscape. V roce 1997 byla databáze Cloudscape i s firmou odkoupena společností Informix, kterou v roce 2001 získala firma IBM. Databáze byla přejmenována na IBM Cloudscape a byla dále prodávána společně s dalšími produkty firmy IBM. V srpnu 2004 se firma IBM rozhodla uvolnit zdrojové kódy a celý kód věnovala Apache Software Foundation. Vývoj probíhá nadále komunitním způsobem, firma IBM čas od času vytvoří novou verzi pod původním jménem, ke které zajišťuje placený servis, další podpůrné programy a manuály.
Databáze psané v Javě obvykle poskytují vysokou škálovatelnost, podporu standardů a transakcí. Z nejdůležitějších relačních databázových systémů psaných v Javě jmenujme například IBM Cloudscape a Sun Java (dostupná také jako open-source projekt pod názvem Apache Derby), Pointbase nebo rychlá H2 (brzy bude vydána pod open-source licencí, zřejmě MPL).
HSQLdb 1.8.0.5
HSQLdb je databáze v jazyce Java, původně známá jako Hypersonic SQL. Její autor, Thomas Mueller, byl nucen v roce 2001 její vývoj ukončit kvůli práci ve společnosti PointBase. HSQLdb se vyvinula ve velmi oblíbenou databázi, která je např. používaná kancelářským softwarem OpenOffice.org. Thomas Mueller nadále vyvíjí další databázi psanou v Javě - H2.
Výhodou databází psaných v Javě je výborné napojení na knihovnu JDBC nebo O-R mappery (nebo také ORM). Drtivá většina obchodních aplikací (jinými slovy databázových aplikací) vyvíjených v současné době je totiž psaná v Javě.
Konfigurace zkušebního stroje
Srovnání databází jsem prováděl na stroji, který sice dle mého názoru ještě úplně nepatří mezi běžný domácí standard, ale na druhou stranu umožňuje naplno využít vlastností databázových serverů.
Počítač je založen na procesoru Intel Pentium D na 3 GHz, 2 GB RAM, 8 GB swap, 2x72 GB a 2x320 GB, spojeno do softwarového RAID1, běžící na distribuci CentOS 4.3 pro architekturu x86_64, JDK 1.5.0.
Instalace
Komerční databáze jsou distribuovány buď v balíku tgz, nebo v RPM. Instalace z RPM balíku je velice jednoduchá (v případě, že používáte distribuci, která RPM balíky podporuje) a nevyžaduje žádný zdlouhavý popis.
Instalační RPM Oracle XE před instalací zkontroluje požadavky na systém a pokud nemáte aspoň 256 MB RAM, 1,5 GB volného místa na disku a swapovací prostor aspoň o dvojnásobku velikosti fyzické RAM, pak vás instalace dále nepustí. Nároky jsou opravdu poměrně vysoké, avšak opodstatněné. Po instalaci a spuštění si na testovacím stroji Oracle "ukrojil" 630 MB paměti a 1 GB místa na disku.
IBM DB/2 se instalovala pomocí příjemného grafického rozhraní. Při instalaci zřídila tři nové uživatelské účty a zabrala přibližně 550 MB na disku, po spuštění si z operační paměti vzala přes 450 MB.
Sybase ASE se instaluje velice obdobně jako IBM DB/2 pomocí dodávaného instalačního programu, který je možné spustit jak v textovém, tak v grafickém režimu. Instalace je rychlá a jednoduchá. Trochu mne zklamalo, že standardně je instalováno pouze kódování ISO Latin-1, což znamená, že doinstalování kódování ISO Latin-2 (a případně dalších) je nutné provést až po instalaci. Po spuštění si program zabral skoro 300 MB RAM a 560 MB diskového prostoru.
MySQL, PostgreSQL a Firebird je možno instalovat jak z předem vytvořených balíků RPM nebo DEB, stejně jako instalací ze zdrojových kódů. Vyzkoušel jsem oba způsoby a oba fungují bez problémů, snad až na nekompatibilitu Firebirdu s GCC 3.4. Verze 3.2 funguje bez problémů. Tyto databáze zabírají suverénně nejméně paměti, což je způsobeno tím, že běží skutečně jen databázový server, bez dalších podpůrných programů, nicméně to z těchto databází činí poměrně jasné volby na slabší stroj.
Instalace javovských databází probíhá jednoduše rozbalením distribučního ZIP souboru do libovolného adresáře. Apache Derby zabrala 20 MB kvůli velmi rozsáhlé dokumentaci a zdrojovým kódům. Při spuštění si Apache Derby i HSQLdb zabraly 18 MB, ale alokovaly si virtuální paměť 257 MB.
Dokumentace
Dokumentace je velmi důležitou součástí každého programu. U databází je ještě mnohem důležitější, neboť jen v ní najdeme ověřené informace o způsobu konfigurace k dosažení co největšího výkonu a k využití všech vlastností, které databáze nabízí.
U open-source databází PostgreSQL a MySQL je dokumentace na velmi vysoké úrovni, ale je v angličtině. Manuál je přibalen přímo v distribuovaném souboru, ale není problém ho stáhnout z internetu. Obsahuje historii, vlastnosti, ukázkový příklad databáze, referenční příručku SQL jazyka, popis API a pomocných nástrojů a ještě mnoho dalších informací. Totéž můžeme říci o databázích HSQLdb a SQLite. Dokumentace komerčních databází je taktéž na velmi vysoké úrovni.
Jen dvě databáze byly svou dokumentací zvláštní. Po instalaci Firebirdu nenajdete v instalačním adresáři mimo pár souborů README ani jeden soubor s dokumentací, ani informaci, kde by bylo možné dokumentaci najít. Po prohledání internetu zjistíte, že existuje původní dokumentace firmy Borland k InterBase 6.0, která již ale na stránkách Borlandu není. Proto je nutné ji stáhnout ze stránek IBPhoenixu, což je firma podporující Firebird. Najdete zde dokumentaci k InterBase ve verzi 3.0, 4.0, 5.5 a 6.0. K tomu si ještě můžete stáhnout poznámky k verzi Firebirdu, kde jsou shrnuty změny a vylepšení. To je volně dostupná dokumentace. Po pravdě řečeno, tato forma dokumentace mne moc nepřesvědčila, ale při procházce ve svém oblíbeném knihkupectví jsem narazil na knihu Pavla Císaře "InterBase/Firebird - Tvorba, administrace a programování databází". I přes to, že kniha není právě levná, obsahuje velmi praktické informace, které jsou psané srozumitelně, česky a jsou prakticky strukturované tak, aby bylo možné najít hledanou informaci poměrně rychle. Jediné, co bych této publikaci mohl vytknout, je rejstřík, ve kterém (podle mého názoru) chybí mnoho položek, a tím je hledání trochu zpomaleno. Jinak je tato kniha výborná a autorovi patří poděkování.
Další databáze se zvláštní dokumentací je Apache Derby. Její dokumentace je převedena z původní dokumentace firmy IBM a přes to, že je kompletní, není graficky právě úhledná. Těm, kteří si potrpí na úhlednou dokumentaci, doporučuji manuály volně dostupné ze stránek IBM, které jsou velmi pěkně zpracovány.
Ještě bych dodal, že nejen dokumentace může být užitečná. Spoustu informací lze také nalézt v nejrůznějších diskuzních skupinách a v mailových konferencích. Také bych rád pozitivně ohodnotil stránky developerWorks a alphaWorks od IBM, kde se můžeme dozvědět mnoho praktických postupů pro práci s databázemi (a nejen s nimi), stejně jako stránky pro vývojáře firmy Oracle, kde jsou k dispozici vývojářské nástroje, dokumentace a videa, která jsou velmi hezky zpracována.
Mimo to existuje také množství knih na českých pultech, které ale trochu straní databázi MySQL. O databázi PostgreSQL vyšel překlad knihy Bruce Momjiana, která ale reflektuje stav ve verzi 7.4, což je přece jen dávno. Dále objevíme knihy o Oraclu, objektové databázi Caché, ale monografii o IBM DB/2, Sybase ASE nebo dokonce Apache Derby bychom hledali marně. Velmi užitečné, leč objemné a drahé, jsou knihy obecně věnované SQL. V knize Jamese R. Groffa a Paula N. Weinberga "SQL - Kompletní průvodce" je mimo obecného popisu SQL také popis zvláštností tohoto jazyka databází Oracle, DB/2, Sybase ASE a MySQL. Bohužel, není mi známá žádná publikace zabývající se javovskými databázemi.
Porovnání vlastností serverů
Úplné porovnání vlastností jednotlivých serverů podle standardu ANSI/ISO by bylo velmi zdlouhavé, nudné a v konečném důsledku by bylo zbytečné, protože mnoho vlastností je naprosto nevyužitých, a pokud je někdo využije, tak je pravděpodobně již rozhodnut pro nějaký konkrétní systém. Pokusím se tedy nastínit klíčové vlastnosti, které jsou u testovaných programů zajímavé a zvláštní.
Velmi důležitou vlastností je schopnost práce s transakcemi. Transakce zajišťují atomičnost operací, což znamená, že buď proběhnou kompletně, nebo vůbec. Všechny testované systémy umožňují práce s transakcemi, ačkoli se jejich implementace poněkud liší. Například tím, zda transakce provádějící čtení dat při souběžné transakci zapisující data uvidí data již z části aktualizovaná nebo data ve stavu před započetím zapisující transakce. Databáze MySQL je v tomto bodě poněkud specifická - umožňuje provádět transakce pouze tehdy, pokud používáme tzv. "storage enginy" (moduly provádějící zpracování dat), které umějí pracovat s transakcemi. Tyto "enginy" jsou v tuto chvíli tři: InnoDB, BerkeleyDB a NDB Cluster. Faktem je, že jak InnoDB, tak BerkeleyDB byl nedávno odkoupen firmou Oracle, takže budoucnost těchto enginů v MySQL se mi jeví jako nejistá. Povzbudivé je, že původní autor multigenerační architektury a tvůrce InterBase, Jim Starkey, je v současné době u MySQL AB zaměstnán a pracuje na firemním transakčním enginu. (Dnes už používá MVCC architekturu mnoho databází, například Oracle, PostgreSQL, MS SQL a pochopitelně také Firebird/InterBase. Pozn. redakce.)
Pokud pracujeme na databázi, v níž jsou data uložena ve více tabulkách (což jsou dnes prakticky všechny), je obvykle nutné specifikovat vztah mezi daty pomocí vztahu mezi primárními a cizími klíči, čemuž se souhrnně říká referenční integrita. Tím si při další manipulaci s daty ušetříme notnou dávku programování, neboť správnost vložených dat nám zaručuje přímo databáze. Databáze SQLite vůbec referenční integritu nepodporuje (SQL definici přečte, ale nezpracovává ji), systém MySQL ji podporuje jen pro tabulky typu InnoDB.
K uložení dat v tabulkách potřebujeme datové typy. V tomto bodě není se žádnou databází problém, datových typů je dostatek u všech. Některé databáze poskytují navíc např. rozšířené číselné typy, časové údaje nebo dokonce datové typy pro geografickou lokaci, včetně schopnosti s těmito údaji počítat. U databáze PostgreSQL je možné definovat uživatelský datový typ pomocí externího modulu v jazyce C, obdobné vlastnosti nabízejí i další databáze.
V dnešní době užitečnou vlastnost, přímé zpracování XML dat, podporují pouze databáze Oracle, IBM DB/2 a Sybase. MySQL umí exportovat data ve formě XML jako zálohu, u ostatních systémů je zpracování XML možné jen pomocí externích softwarových modulů.
K přístupu k databázi jsou všechny databáze vybaveny klasickým řádkovým rozhraním, které pro základní manipulaci s daty a zpracování skriptů postačuje. Dále mají databáze aplikační rozhraní (API) pro jazyk C (kromě databází v Javě), dostupná jsou rozhraní pro C++, Javu, PHP, Perl, Python a mnoho dalších jazyků, jako třeba Ada, PL/I nebo COBOL. Všechny databáze mají také rozhraní ODBC a/nebo JDBC (to je u javovských databází dokonce jediné podporované). Pro přístup k databázi Derby/Cloudscape uvolnila firma IBM ODBC ovladač.
Podpora dotazovacího jazyka SQL je velmi dobrá u všech databází, jediné, co může být pro uživatele matoucí, je částečně odlišná syntaxe např. agregačních funkcí. Všechny systémy podporují dotazy, spojení tabulek, agregaci, seskupení a seřazení výsledků, ačkoliv způsob řazení parametrů jednotlivých funkcí a operátorů se někdy liší. Matoucí je např. odlišnost operátoru spojení řetězců - . (tečka) a || (dvě roury).
Aktualizovatelné dotazy (tj. dotazy, do kterých je možné vkládat data) jsou podporovány u všech databází s výjimkou HSQLdb, SQLite a PostgreSQL. Nicméně u všech těchto databází je možné tento drobný nedostatek obejít za použití spouští (triggerů).
Dále bych měl zmínit vlastnost, která umožňuje velmi usnadnit použití databází, a to jsou pohledy, což jsou pojmenované dotazy. Často používané dotazy, zvláště využívají-li spojení několika tabulek, je výhodné definovat pomocí pohledů.
Velmi užitečné nástroje jsou také uložené procedury, spouště (triggery) a pravidla (rules), které umožňují definovat často používané operace nad databází, obtížně popsatelné pomocí pohledů (např. aktualizace většího počtu tabulek, komplexní ověřování uživatelů, větší množství složitých výběrů, atd.) a události, které nastanou při změně do tabulky. Tyto funkce využíváme i tehdy, nejsme-li si toho vědomi, neboť referenční integrita a omezení hodnot je obvykle implementováno právě pomocí triggerů definovaných přímo databází.
Uložené procedury jsou programovány většinou pomocí dialektu jazyka SQL, např. PL/SQL nebo Transact-SQL. Javovské databáze podporují uložené procedury výhradně v jazyce Java a ostatní databáze mají podporu také většinou pro Javu. U databáze PostgreSQL je možné definovat uložené procedury a triggery také v jazycích Perl, Python, Tcl a R (statistické výpočty), u většiny databází jde naprogramovat uživatelské funkce v libovolném kompilovaném jazyce a přidat je k databázi pomocí knihovny.
Vlastnost, která je jedinečná a má ji standardně pouze Oracle, je hierarchický dotaz. Pokud máme např. strukturu zaměstnanců, kde každý je identifikovaný svým číslem a každý má položku ŠÉF, která označuje nadřízeného zaměstnance, pak je možné v databázi Oracle provádět dotazy na celou stromovou strukturou těchto zaměstnanců. Existují však moduly například do PostgreSQL, které obdobnou vlastnost umožňují. Uživatelé jiných systémů musí vyřešit problém hierarchických stromů jinými, méně intuitivními metodami - např. rekurzivními uloženými procedurami.
Databázové servery umožňují, aby s databází pracovalo několik uživatelů najednou. Ověřování uživatelský práv, stejně jako jejich přidělování (GRANT) a rušení (REVOKE) je pro databáze používané pouze jako zapouzdřené bezpředmětné, takže je u SQLite nenajdeme.
Budoucnost databází je pravděpodobně v objektově orientovaných a v XML databázích, ale jak se zdá, relační databáze se budou ještě nějakou dobu vyvíjet a používat. Proto některé firmy dodávají takzvané hybridy, tedy objektové databáze s relačním přístupem a naopak (např. Intersystems Caché).
Objektové databáze se liší především svoji strukturou. Nevystupují v nich pojmy, jako je tabulka nebo relace, ale objekt, kolekce, odkaz. Tento přístup má zdá se více výhod než nevýhod, avšak na masivní rozšíření objektových databází se ještě čeká.
Používání databází
Všechny databáze mají velmi podobné řádkové rozhraní, užitečné například pro spouštění skriptů. Toto rozhraní je více méně standardní, nemá tedy cenu se jím příliš podrobně zabývat.
Pro běžnou práci většina uživatelů používá grafické rozhraní. Pro databázi Oracle existují dvě - webové rozhraní Application Express a volně stáhnutelná aplikace v Javě jménem SQL Developer. Měl jsem možnost používat obě, ale webové rozhraní mi velmi přirostlo k srdci. Umožňuje velmi pohodlnou správu databáze, vytváření tabulek, pohledů a dalších databázových objektů a také tvorbu aplikací, které budou tyto objekty využívat.
IBM DB/2 má kombinované prostředí - webový prohlížeč s dokumentací a z něj jsou spouštěné další programy. Při používání mi připadlo, že názvy programů jsou zkrácené až moc a že se názvy špatně pamatují, zvláště je-li jich pět podobných.
Sybase ASE mě zarazil tím, že pokud nedetekuje jemu známé locale (v mém případě cs_CZ.ISO8859-2 nebo cs_CZ.UTF-8), odmítne spustit klienta, což znamená, že musíme před spuštěním nastavit locale třeba na C. Nezkoušel jsem české třídění. Poněkud zmaten jsem byl řádkovým SQL klientem, ve kterém se musí každý příkaz potvrdit příkazem go. Existuje i grafický klient, ale s tím jsem se nějak nemohl skamarádit.
Databáze PostgreSQL, MySQL a Firebird nejsou dodávány s žádným grafickým klientem, což jim příliš neuškodilo, neboť ke všem existují kvalitní klienty jako externí projekty. Je na výběr jak z klientů napsaných v PHP, tak přímo nativních aplikací. phpMyAdmin se stejně jako pgAdmin III a FlameRobin používá snadno a intuitivně. Klienty v PHP dokáží s uživatelem komunikovat česky.
Databáze SQLite obsahuje jen řádkový klient, což je u databáze, která je používána jako knihovna, celkem pochopitelné. Její velikost je bezkonkurenčně nejmenší.
Nakonec jsem si nechal Java databáze, ke kterým, jak jinak, patří javovský klient. Výborná aplikace je SQuirreL, která umožňuje připojit se k libovolné databázi, pro kterou má JDBC ovladač.
Závěr
Velkým překvapením pro mne byla databáze Oracle XE díky svému intuitivnímu ovládání, pěknému rozhraní, dokumentaci a dalšími materiály přímo od firmy Oracle. Obdobně mě potěšila IBM DB/2, která byla taktéž relativně bezproblémová.
Zklamala mne Sybase ASE nemožností práce s českým prostředím a také neintuitivním ovládacím rozhraním. Dokumentace je psána sice pěkně, ale některé příkazy prostě nefungují (pravděpodobně kvůli zmíněnému českému prostředí).
Na trhu jsou pochopitelně i čistě objektové databáze, ale zatím jich není mnoho. Prim na tomto poli hraje zřejmě firma GemStone, velmi populární je v poslední době databáze DB4J. Z open-source objektových databází vybíráme například Ozone, Zope ZODB nebo unixová EyeDB.
U PostgreSQL a MySQL jsou dobré (nízké) paměťové nároky, stejně jako u Firebirdu a SQLite. PostgreSQL a MySQL bych také rád pochválil za dokumentaci, která je více než vyčerpávající, naproti tomu dokumentace dodávaná s Firebirdem by mohla být kompletnější. Dokumentace k javovským databázím je také dost dobrá.
Doufám, že článek poskytl jakýsi obecný přehled o volně dostupných databázích pro Linux. Vůbec nebyl prostor věnovat se komerčním databázím, kde je trh značně rozsáhlý a bylo by nutné se věnovat i méně známým databázovým systémům (např. 602SQL Server).