- Impedance Mismatch
-
Als "Object-relational Impedance Mismatch" - oft auch nur Impedance Mismatch - (z.dt. etwa objekt-relationale Unverträglichkeit) bezeichnet man ein Problem der Informatik in der Anwendungsentwicklung, das auftritt, wenn Objekte aus einer objektorientierten Programmiersprache in einer relationalen Datenbank gespeichert werden.
Inhaltsverzeichnis
Hintergrund
Das Problem entstand, als sich objektorientierte Programmiersprachen in vielen Bereichen durchzusetzen begannen, während die Daten seit Jahrzehnten in relationalen Datenbanken gespeichert werden.
Problembeschreibung
Das Problem liegt in den unterschiedlichen Paradigmen der beiden Systeme begründet. So lässt sich ein Objekt durch vier grundlegende Eigenschaften charakterisieren:
- Identität
- Zustand
- Verhalten
- Kapselung
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 der 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 & 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?".
Die beiden Systeme sind offensichtlich schon sehr unterschiedlich, dennoch ergeben sich noch eine Menge weiterer Unterschiede. So gelten z. B. zwei Tupel mit den gleichen Attributen als identisch - wohingegen zwei Objekte mit den gleichen Attributen immer unterschiedlich sind. D. h. wenn man zwischen beiden Welten vermitteln will, muss man der Relation einen Unique Identifier hinzufügen, damit die Objekte eindeutig identifizierbar bleiben.
Lösungsansätze
Objektorientierte Datenbank
Die nächstliegende 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örigen Anwendung sichtbar gemacht werden können. Etwaiges Mapping entfällt komplett.
Programmiersprache um relationale Funktionen erweitern
Damit wird das Problem rückwärts gelöst. Durch die relationale Unterstützung der verwendeten Sprache 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.
Fazit
Sämtliche bisher existierenden Lösungsansätze bieten keine wirkliche Lösung an, nur eine mehr oder weniger elegante Umgehung des Problems. Egal für welche Lösung man sich entscheidet - solange die Systeme unterschiedlich sind, wird jeder Entwickler früher oder später an den Punkt gelangen, an dem seine Lösung einen oder mehrere der folgenden Punkte nicht mehr erfüllt.
- Wartbarkeit
- Performance
- Verständlichkeit
Weblinks
Wikimedia Foundation.