Object-relational impedance mismatch

Als Object-relational impedance mismatch – oft auch nur Impedance Mismatch – (englisch für etwa objektrelationale Unverträglichkeit) bezeichnet man die Herausforderung der Informatik in der Anwendungsentwicklung, Objekte aus einer objektorientierten Programmiersprache in einer relationalen Datenbank zu speichern.

Hintergrund

Objektorientierte Anwendungen kapseln ihre Daten in Objekten. Sollen die Daten gespeichert werden, so bieten sich unter anderem die Tabellen einer relationalen Datenbank an. Es stellt sich allerdings heraus, dass das relationale Datenbankmodell grundlegende Unterschiede zum objektorientierten Modell aufweist.

Die mangelnde Passgenauigkeit der Behandlung von Daten in objektorientierten Programmiersprachen und in relationalen Datenbanken erfordert komplizierte bidirektionale Abbildungen. Dies wird seit Anfang der 1980er Jahre als Impedance Mismatch bezeichnet.

Unterschiede

Das Problem liegt in den unterschiedlichen Paradigmen der beiden Systeme begründet. So lässt sich ein Objekt durch vier grundlegende Eigenschaften charakterisieren:

Ein relationales System hingegen leitet sich aus der relationalen Algebra ab und speichert Wahrheitsaussagen in sog. Relationen. Eine Relation könnte z. B. so aussehen: {Name, Firma}. Diese Relation entspricht einer Behauptung der Form: „Es existiert eine Person mit Namen NAME, die bei einer Firma FIRMA arbeitet“. Ein Tupel ist eine Wahrheitsaussage innerhalb der Relation, die z. B. so aussieht: {John Doe, ACME} (Es gibt einen John Doe, der bei ACME arbeitet.). Ein Tupel setzt sich wiederum aus Attributen (Name und Firma) zusammen. Durch Verknüpfung von Relationen lassen sich neue Relationen bilden und damit neue Wahrheitsaussagen ableiten, wie z. B. die Antwort auf „Wie viele Personen gibt es, die bei ACME arbeiten?“.

Eine nähere Betrachtung der beiden Paradigmen zeigt, dass es einige Unterschiede gibt.

Lösungsansätze

Es existieren verschiedene Lösungsansätze mit unterschiedlichen Vor- und Nachteilen.

NoSQL Datenbanken

Bei der Speicherung von Daten in schemafreien Datenbanken kann jeder Datensatz eine andere innere Struktur haben. Der Anwendungsentwickler bildet seine Anwendungsdaten nicht mehr auf ein normalisiertes Relationenmodell ab; stattdessen haben die Datensätze unterschiedliche Felder oder es wird auf eine hierarchische Datenstruktur abgebildet; oft auch denormalisiert. Die Reibungsverluste durch den Object-Relational Impedance Mismatch entfallen und es entstehen Kosten durch einen anderen Impedance Mismatch.

Objektorientierte Datenbank

Eine naheliegende Lösung ist, die relationale Datenbank durch eine objektorientierte Datenbank zu ersetzen. Die programmatische Handhabung wird dadurch erleichtert, komplexe Abfragen können aber sehr kompliziert werden. Des Weiteren stößt man damit bei Geschäftsführung und Datenbankadministratoren oft auf Ablehnung, da die Daten fest mit dem Objekt verdrahtet sind und nicht ohne die dazugehörige Anwendung sichtbar gemacht werden können. Etwaiges Mapping entfällt komplett.

Objektrelationale Datenbank

Viele der namhaften Hersteller erweiterten ihre relationalen Datenbankprodukte mit objektorientierten Features zu einem objektrelationalen Datenbankmanagementsystem (ORDBMS). Damit reagieren sie auf die Nachfrage nach objektorientierten Datenbanken. Bestehende Architekturen mit relationalen Datenbanken können durch diese Upgrades erhalten bleiben und bieten dem Entwickler eine objektorientierte Sicht auf die Daten. Der Impedance Mismatch wird damit größtenteils umgangen, je nach Datenbanksystem muss aber immer noch auf Mapping zugegriffen werden.

Programmiersprache um relationale Funktionen erweitern

Damit wird das Problem rückwärts gelöst. Durch die relationale Unterstützung der verwendeten Sprache (z. B. Embedded SQL) ist kein Mapping mehr notwendig. Diese Lösung widerstrebt allerdings vielen OOP-Entwicklern, da sie die Verwendung von Objekten meist einschränkt.

O/R-Mapper

Ein objektrelationaler Mapper ist eine Schicht zwischen der Anwendung und der Datenbank. Er kümmert sich um das komplette Mapping zwischen Objekten und Tabellen. Dieser Vorgang ist für den Entwickler unsichtbar. Heutige Mapper sind sehr performant – bei steigender Komplexität ergeben sich daraus allerdings eine Vielzahl weiterer Probleme. Je spezieller die Lösung ist, desto häufiger muss der Entwickler bestimmen, wie das Mapping zwischen den Welten geschehen soll. Dies kann mitunter äußerst kompliziert werden.

Ein O/R-Mapper muss Probleme auf verschiedenen Ebenen lösen. Ein Ansatz beschreibt vier Ebenen:

Einzelnachweise

  1. C. Copeland, D Maier: Making smalltalk a database system. In: ACM SIGMOD Records. vol. 14, 2, 1984, S. 316–325.
  2. a b c Christopher Ireland, David Bowers, Michael Newton, Kevin Waugh: A Classification of Object-Relational Impedance Mismatch. In: Advances in Databases, First International Conference on. IEEE Computer Society, 2009, ISBN 978-0-7695-3550-0, S. 36–43, doi:10.1109/DBKDA.2009.11
  3. a b c d Deborah J. Armstrong: The quarks of object-oriented development. In: Commun. ACM. Band 49, Nr. 2, Februar 2006, ISSN 0001-0782, S. 123–128, doi:10.1145/1113034.1113040
  4. Craig Russell: Bridging the object-relational divide. In: Queue. Band 6, Nr. 3. ACM, 28. Juli 2008, ISSN 1542-7730, S. 18–28, doi:10.1145/1394127.1394139
  5. a b Edgar F. Codd: The relational model for database management: version 2. Addison-Wesley Longman Publishing, Boston, MA, USA 1990, ISBN 0-201-14192-2 (acm.org ). 
  6. Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides: Design patterns: elements of reusable object-oriented software. Addison-Wesley Professional, 1995.
  7. Ted Neward: The Vietnam of Computer Science. In: Ted Neward's Blog. 26. Juni 2006, abgerufen am 2. Juni 2010 (englisch). 

Weblinks