# Objektdatenbank

Eine Objektdatenbank oder objektorientierte Datenbank ist eine Datenbank, die auf dem Objektdatenbankmodell basiert. Im Unterschied zur relationalen Datenbank werden Daten hier als Objekte im Sinne der Objektorientierung verwaltet. Das zugehörige Datenbankmanagementsystem wird als das objektorientierte Datenbankmanagementsystem bezeichnet. Objektdatenbank und Objektdatenbankmanagementsystem bilden gemeinsam das Objektdatenbanksystem.
Ein Objekt modelliert normalerweise einen Gegenstand oder Begriff und enthält insbesondere dazugehörige Attribute; so gehört zum Beispiel die Farbe und das Gewicht eines Autos zu dem Objekt Auto. Attribute beschreiben ein Objekt näher. Daten und Methoden (die Funktionen zum Zugriff auf die Daten) werden in den Objekten zusammen abgelegt.

## Objektdatenbankmanagementsystem

Das Datenbankmanagementsystem (DBMS) ist die Software, die zur Verwaltung einer Datenbank benötigt wird. Im Falle einer Objektdatenbank wird diese als das Objektdatenbankmanagementsystem (ODBMS) bezeichnet. Das ODBMS ist für die Speicherung und den zuverlässigen Zugriff auf die Daten zuständig. Neben den klassischen Eigenschaften eines DBMS hat es folgende zusätzliche Anforderungen zu erfüllen, um als vollwertiges ODBMS verwendbar zu sein:
* Verwaltung komplexer Objekte. Ein Objekt setzt sich aus beliebigen anderen Datentypen zusammen.
* Sicherstellung der Objektidentität. Jedes Objekt bekommt eine systemweit eindeutige Identifikation OID.
* Kapselung der Objekte nach dem Konzept der objektorientierten Programmierung. Der Zugriff auf das Objekt findet über Methoden statt.
* Objekte sind einer Objektklasse zugeordnet.
* Objektklassen sind in einer Klassenhierarchie angeordnet.
* Durch späte Bindung werden bei vererbten Objekten die überladenen Methoden verwendet.
* Das ODBMS muss eine Turing-vollständige Manipulationssprache (DML) bereitstellen.
Neben diesen Eigenschaften gibt es eine Reihe optionaler Anforderungen, die hier nicht im Einzelnen dargestellt sind. Sie wurden auf der Konferenz DOOD’98 festgelegt.
Als Abfragesprache wurde von der ODMG die Sprache Object Query Language (OQL) standardisiert. Als Datenmanipulationssprache wird Object Definition Language (ODL) verwendet.

## Vorteile

Objektdatenbanksysteme schließen eine Lücke, die bei der Programmierung moderner Datenbankanwendungen entsteht, wenn die Anwendung in einer objektorientierten Programmiersprache entwickelt wurde, die Datenbank jedoch ein klassisches relationales Datenbanksystem ist. Beide Konzepte widersprechen sich in einigen wichtigen Punkten. Dieses Problem wird allgemein als der „object-relational impedance mismatch“ bezeichnet. Als Lösung für das Problem werden sogenannte objektrelationale Abbildungen verwendet. Dies sind Softwarekomponenten, die zwischen einer relationalen Datenbank und einer objektorientierten Software vermitteln. Durch die Verwendung eines Objektdatenbanksystems wird diese Vermittlung überflüssig. Die Anwendung kann direkt mit der Datenbank kommunizieren.
Das Zusammensetzen komplexer Datenobjekte mittels Joins über mehrere Datenbanktabellen entfällt. Objekte können einfach über die in der Datenbank gespeicherten Beziehungen abgefragt werden.
Weiterhin hilft ein ODBMS beim Zugriff auf Daten. Da Objekte eine komplexe Struktur haben können, sind semantische Zusammenhänge zwischen Objekten dem Datenbanksystem bekannt. Das Datenbanksystem hat also ein Verständnis davon, welche Daten zusammengehören. Dieses Wissen kann bei der Abfrage der Daten mittels einer Abfragesprache wie OQL verwendet werden. Im Gegensatz zu relationalen Datenbanksystemen ist das Ergebnis einer Anfrage nicht eine Menge von Datensätzen. OQL erlaubt die Abfrage einzelner Objekte.
Außerdem wird das Problem der Objektidentität gelöst. Während bei relationalen Datenbanken der Datenbankentwickler oft einen künstlich erzeugten Schlüssel (Surrogate Key) zu seinen Daten hinzufügen muss, wird dies von einem ODBMS automatisch in Form eines OIDs gemacht. Die Verwaltung dieser IDs wird dabei vollständig vom System übernommen.

## Nachteile

Objektdatenbanken haben bis heute nur eine geringe Verbreitung. Entsprechend sind viele Schnittstellen und Tools wie JDBC/ODBC, ETL oder OLAP für den Einsatz mit einem ODBMS nicht vorbereitet.
Die Schnittstellen zwischen Anwendungsprogramm und Objektdatenbank sind nicht standardisiert, sodass sich bei Problemen das Datenbanksystem nur mit immensem Aufwand nachträglich durch ein leistungsfähigeres ersetzen lässt. Bei den objektrelationalen Abbildungen dagegen gibt es mehrere etablierte Lösungen, die den Zugriff auf im Masseneinsatz erprobte und in unzähligen Projekten verwendete relationale Datenbanksysteme bieten.
Bei bestimmten Anfragen sind Objektdatenbanken noch immer im Nachteil gegenüber relationalen Datenbanken. Dies ist beispielsweise durch Zugriffspfade zu Objekten über mehrere Pfadarten (bspw. Vererbung und Assoziation) verursacht. Dies führt bei Schreiboperationen in der Sperrverwaltung zu einer exponentiellen Komplexität und somit zu Performanceproblemen. Die Leistungsprobleme wurden in den objektrelationalen Datenbanken aufgegriffen, in denen nur die Konstrukte aus objektorientierten Datenbanken mit niedrigerer Komplexität (bspw. $n\cdot \log(n)$) übernommen wurden.

## Geschichte

Objektdatenbanken wurden Ende der 1980er Jahre entwickelt. Somit gehören sie zu den vergleichsweise neuen Datenbankkonzepten. Bis heute spielen sie auf dem Datenbankmarkt, der von den relationalen Datenbanksystemen dominiert wird, eine eher geringe Rolle. Dennoch sind seit 2004 mehrere Objektdatenbanksysteme wie zum Beispiel db4o entwickelt worden, deren Weiterentwicklung im Jahr 2011 eingestellt wurde, die zum Teil als Open Source verfügbar sind.