Relační vs. objektově-relační vs. objektové databáze


Za posledních 25 let vývoje počítačů a programování aplikací můžeme vysledovat mohutný trend přechodu od strukturovaného k objektově orientovanému programování. Toto platí i v oblasti zpracování dat a databází. V osmdesátých létech způsobily revoluci relační databáze, v létech devadesátých s mohutným nástupem objektově orientovaného programování začaly vznikat i objektově orientované databáze, které si kladou za cíl ulehčit a zrychlit práci s daty. Ovšem situace není zdaleka tak jednoduchá, protože relační a objektový přístup je od základu rozdílný. Existuje jak mnoho výhod, tak i mnoho nevýhod pro relační i objektové databáze.

Na současném databázovém trhu existují tři základní typy – relační databáze (Relational Database Management System, RDBMS), objektově-relační ("Object Relational" Database Management System, ORDBMS) a objektové (Object Database Management System, ODBMS). V tabulce jsou uvedeny podle prodávajích.

Databázové systémy podle prodávajícího, 1997

  Produkty
Prodávající RDBMS ORDBMS ODBMS
Oracle Oracle 7.x Oracle 8.x  
Sybase System 10/11    
Informix Dynamic Server Universal Server (Illustra)  
IBM DB/2 Universal Database (DB/2 Extenders )  
UniSQL   UniSQL/X  
Unisys   OSMOS  
Computer Associates OpenIngres   Jasmine
Gemstone     Gemstone
O2     O2
Object Design     Object Store
Objectivity     Objectivity/DB
Versant     Versant ODBMS
Zdroj: International Data Corporation, 1997

Hlavní rozdělení

Jak už bylo naznačeno v úvodu, lze databáze rozdělit podle nějakých kriterií. Je to však spíše dohadování, než konečné rozdělení, proto se v následující části rozdělíme databáze do několika kategorií a pokusíme se je navzájem odlišit. Popis každého typu rozdělíme na tři části:

Pro potřeby tohoto článku se ovšem omezíme na základní rysy. Bližší informace lze získat na níže uvedených adresách.

Relační databáze

Technologie relačních databází byla původně navržena E.F.Coddem a později ji implementovala IBM a jiní. Standard je popsán ANSI a ISO normou, časteji se na ni ovšem odvoláváme jako na SQL + číslo verze. Poslední je tedy SQL2. Novější verze SQL3 obsahuje navíc některá objektová rozšíření.

Datový model

RDBMS uchovává data v databázi skládající se z řádků a sloupců. Řádek odpovídá záznamu (record, tuple); sloupce odpovídají atributům (polím v záznamu). Každý sloupec má určen datový typ. Datových typů je omezené množství, typicky 6 nebo víc (např. znak, řetězec, datum, číslo...). Každý atribut (pole) záznamu může uchovávat jedinou hodnotu. Vztahy nejsou explicitní, ale spíše plynou z hodnot ve speciálních polích, tzv. cizí klíče (foreign keys) v jedné tabulce, který se rovná hodnotám v jiné tabulce.

Dotazovací jazyk

Pohled (view) je podmnožina databáze, která je výsledkem vyhodnocení dotazu. V RDBMS je pohled tabulka. RDBMS využívá SQL pro definici dat, řízení dat a přístupu a získávání dat. Data jsou získávána na základě hodnoty v určitém poli záznamu.

Výpočetní model

Veškeré zpracováváni je založeno na hodnotách polí záznamů. Záznamy nemají jednotné identifikátory, které jsou neměnné po dobu existence záznamu. Neexistují žádné odkazy z jednoho záznamu na jiný. Vytvoření výsledku je prováděno pod kontrolou kurzoru, který umožňuje uživateli sekvenčně procházet výsledek po jednotlivých záznamech. Totéž platí pro update.

Objektová databáze

Pro objektové databáze neexistuje žádný oficiální standard. Standardem je de facto kniha Morgana Kaufmana The Object Database Standard: ODMG-V2.0. Důraz ODBMS je na přímou korespondenci mezi následujícími:

Datový model

Objektové databáze využívají datového modelu, který má objektově orientované aspekty jako třídy s atributy a metodami a integritními omezeními; poskytují objektové identifikátory (OID) pro každou trvalou instanci třídy; podporují zapouzdření (encapsulation); násobnou dědičnost (multiple inheritance) a podporují abstraktní datové typy.

Objektové databáze kombinují prvky objektově orientovaného programování s databázovými schopnostmi. Rozšiřují funkčnost objektových programovacích jazyků (C++, Smalltalk, Java) a poskytují plnou schopnost programování databáze. Datový model aplikace a datový model databáze se ve výsledku hodně shodují a výsledný kód se dá mnohem efektivněji udržovat.

Dotazovací jazyk

Objektově orientovaný jazyk (C++, Java, Smalltalk) je jazykem jak pro aplikaci, tak i pro databázi. Poskytuje těsný vztah mezi objektem aplikace a uloženým objektem. Názorně je to vidět v definici a manipulaci s daty a v dotazech.

Výpočetní model

V RDBMS rozumíme dotazovacím jazykem vytváření, přístup a aktualizaci objektů, ale v ODBMS, ačkoliv je to stále možné, je toto prováděno přímo pomocí objektového jazyka (C++, Java, Smalltalk) využitím jeho vlastní syntaxe. Navíc každý objekt v systému automaticky obdrží identifikátor (OID), který je jednoznačný a neměnný během existence objektu. Objekt může mít buď vlastni OID, nebo může ukazovat na jiný objekt.

Objektově-relační databáze

"Rozšířená relační" a "objektově-relační" jsou synonyma pro databázové systémy, které se snaží sjednotit rysy jak relačních, tak objektových databází. ORDBMS je specifikována v rozšíření SQL standardu — SQL3. Do této kategorie patří např. Informix, IBM, Oracle a Unisys.

Datový model

ORDBMS využívají datový model tak, že "přidávají objektovost do tabulek". Všechny trvalé informace jsou stále v tabulkách, ale některé položky mohou mít bohatší datovou strukturu, nazývanou abstraktní datové typy (ADT). ADT je datový typ, který vznikne zkombinováním základních datových typů. Podpora ADT je atraktivní, protože operace a funkce asociované s novými datovými typy mohou být použity k indexování, ukládání a získávání záznamů na základě obsahu nového datového typu. ORDBMS jsou nadmnožinou RDBMS a pokud nevyužijeme žádné objektové rozšíření jsou ekvivalentní SQL2. Proto má omezenou podporu dědičnosti, polymorfismu, referencí a integrace s programovacím jazykem.

Dotazovací jazyk

ORDBMS podporuje rozšířenou verzi SQL — SQL3. Důvodem je podpora objektů (tj. dotazy obsahující atributy objektů). Typická rozšíření zahrnují dotazy obsahující vnořené objekty, atributy, abstraktní datové typy a použití metod. ORDBMS je stále relační, protože data jsou uložena v řádcích a sloupcích tabulek a SQL, včetně zmíněných rozšíření, pracuje právě s nimi.

Výpočetní model

Jazyk SQL s rozšířením pro přístup k ADT je stále hlavním rozhraním pro práci s databází. Příma podpora objektových jazyků stále chybí, což nutí programátory k překladu mezi objekty a tabulkami.

Databáze a programování

Nyní se pokusíme srovnat relační a objektové databáze z hlediska programování a vývoje aplikací v objektově orientovaných jazycích.

Relační databáze a objektově orientované jazyky

Relační databázové systémy jsou dobré pro řízení velkého množství dat; objektově orientované programovací jazyky ve vyjadřování složitých vztahů mezi objekty. RDBMS jsou dobré pro vyhledávání dat, ale poskytují nízkou podporu pro manipulaci s nimi; objektově orientované programovací jazyky jsou výborné při manipulaci s daty, ale poskytují malou nebo žádnou podporu pro neměnnost a vyhledávání dat. Bohužel, vzhledem k tomu, že tyto přístupy jsou protichůdné, je jejich skloubení poněkud komplikované.

Objektově orientovaný model tedy poskytuje základní vlastnosti objektů — zapouzdření, dědičnost a polymorfismus. Navíc má každý objekt jednoznačnou identifikaci, která umožňuje používání referencí. Naproti tomu RDBMS poskytují vlastnosti, které OO programovací jazyky nemají, jako např. rychlé vyhledávání, sdílení objektů mezi programy, propracovaný systém oprav chyb pro databázové operace, trvalé uložení, atd.

Existují několik různých obecných přístupů, jak skloubit relační databázový systém s objektovým programováním. Buď se pokusíme vymodelovat databázi v objektově orientovaném programu, nebo se můžeme pokusit vymodelovat aplikaci v databázi, nebo se můžeme pokusit zjednodušit přístup k databázi tak, že problémy už nebudou tak závažné.

První případ znamená vybudovat OO aplikaci kolem relačního model. Musíme ošetřít veškeré manipulace s daty a v každé třídě všechno zvlášť naprogramovat. Tato práce je většinou netriviální problém. Ve druhém případě se snažíme zobrazit objektový model do relační databáze, což je ještě složitější než první případ, protože relační databáze je velice omezená a spoustu věcí v ní nemůžeme provést přímo (např. dědičnost, ukazatele, polymorfismus). Pokud naše aplikace využívá pouze jednoduchých datových typů a nemáme hodně vztahů, můžeme využít třetí způsob, tedy pouze řádkově orientovaný přístup k databázi. Toto nám ohromně usnadní práci.

Objektově orientované databáze

Skutečná objektová databáze podporuje všechny vlastnosti nutné k práci s objekty, tedy:

S objekty se dá pracovat přímo v programovacím jazyku vytvářením a přístupem přes metody. Není tedy nutný žádný mezistupeň pro práci s daty, jako je například SQL.

Srovnání DBMS

Srovnání databázových systemů

Kriterium RDBMS ORDBMS ODBMS
Definovaný standard SQL2 (ANSI X3H2) SQL3/4 (in process) ODMG-V2.0
Podpora pro objektově orientované programování Špatná; programátoří stráví 25% času kódování mapováním objektového programu do databáze Omezená hlavně na nové datové typy Přímá a rozsáhlá
Jednoduchost používání Strukturám tabulky je jednoduché porozumět; mnoho dostupných nástrojů pro koncové uživatele Totéž co RDBMS, navíc s nějakými matoucími rozšířeními OK pro programátory; nějaký SQL přístup pro koncové uživatele
Jednoduchost vývoje Poskytuje nezávislost dat z aplikace, dobrá pro jednoduché vztahy Poskytuje nezávislost dat z aplikace, dobrá pro jednoduché vztahy Objekty jsou přirozenou cestou k modelu; může vyhovět širokým rozsahem typů a vztahů
Rozšiřitelnost a obsah Žádná Omezená hlavně na nové datové typy Může pracovat s libovolnou složitostí; uživatelé mohou psát metody a jakékoliv struktury
Složité datové vztahy Pro model obtížné Pro model obtížné Může pracovat s libovolnou složitostí; uživatelé mohou psát metody a jakékoliv struktury
Výkon versus spolupracovatelnost Úroveň bezpečnosti se mění s dodavatelem, je třeba vzájemně porovnat; dosáhnutí obého vyžaduje rozsáhlé testování Úroveň bezpečnosti se mění s dodavatelem, je třeba vzájemně porovnat; dosáhnutí obého vyžaduje rozsáhlé testování Úroveň bezpečnosti se mění s dodavatelem; většina ODBMSs dovoluje programátorům rozšířit funkčnost DBMS definováním nových tříd
Distribuce, replikace, a spojené databáze Rozsáhlá Rozsáhlá Podle dodavatele; pár jich poskytuje rozsáhlou podporu
Vyspělost produktu Velmi vyspělé Nezralé; rozšíření jsou nová, stále se definují a jsou relativně neprozkoušená Relativně vyspělé
Podpora pro lidi a univerzálnost SQL Široká podpora nástrojů a trénovaných vývojářů Může využívat výhod nástrojů RDBMS a vývojářů Vybaveno SQL, ale určeno pro objektově orientované programování.
Softwarové ekosystémy Poskytováno hlavními RDBMS společnostmi Poskytováno hlavními RDBMS společnostmi ODBMS výrobci začínají emulovat RDBMS výrobce, ale žádný nenabízí velký obchod jiným ISV
Životaschopnost výrobce Očekávaná pro hlavní zaběhnuté RDBMS výrobce Očekávaná pro hlavní RDBMS výrobce; UniSQL bojuje Menší než se čekalo; stále se očekává zmenšování
Zdroj: International Data Corporation, 1997

Shrnutí

Relační model je jednoduchý a elegantní, ale je naprosto rozdílný od objektového modelu. Relační databáze nejsou navrhovány pro ukládání objektů a naprogramování rozhraní pro ukládání objektů v databázi je velmi složité. Relační databázové systémy jsou dobré pro řízení velkého množství dat, vyhledávání dat, ale poskytují nízkou podporu pro manipulaci s nimi. Jsou založeny na dvourozměrných tabulkách a vztahy mezi daty jsou vyjadřovány porovnáváním hodnot v nich uložených. Jazyky jako SQL umožňují tabulky propojit za běhu, aby vyjádřily vztah mezi daty.

Naproti tomu objektově orientovaný model je založen na objektech, což jsou struktury, které kombinují daný kód a data. Objektové databázové systémy umožňují využití hostitelského objektového jazyka jako je třeba C++, Java, nebo Smalltalk přímo na objekty "v databázi"; tj. místo věčného přeskakování mezi jazykem aplikace (např. C) a dotazovacím jazykem (např. SQL) může programátor jednoduše používat objektový jazyk k vytváření a přístupu k metodám. Krátce řečeno, ODBMS jsou výborné pro manipulaci s daty. Pokud navíc opomeneme programátorskou stránku, dá se říct, že některé typy dotazů jsou efektivnější než v RDBMS díky dědičnosti a referencím.

Odkazy

Object-Oriented Database Design: What is the Difference with Relational Database Design
The Object Database Management Group — standard ODMG-V2.0
Object database vs. object relational database
Object oriented databases
A Comparison Between Relational and Object Oriented Databases
OO vs. RDBS resources
Srovnani OO databazi O2, Objectivity, ObjectStore a Versant