Objektrelationale Abbildung ( ORM , O/RM oder O/R-Mapping-Tool ) ist in der Informatik eine Programmiertechnik , die Daten zwischen einer relationalen Datenbank und dem Speicher (üblicherweise dem Heap ) einer objektorientierten Programmiersprache überträgt. Dadurch entsteht im Prinzip eine virtuelle Objektdatenbank , die innerhalb des Programms genutzt werden kann.
In der objektorientierten Programmierung arbeiten Datenverwaltungsaufgaben mit Objekten , die Skalarwerte zu Objekten kombinieren . Betrachten wir beispielsweise einen Adressbucheintrag, der eine Person mit null oder mehreren Telefonnummern und null oder mehreren Adressen repräsentiert. In einer objektorientierten Implementierung könnte dies durch ein „Personenobjekt “ modelliert werden, das Attribute/Felder für die einzelnen Datenelemente des Eintrags enthält: den Namen der Person, eine Liste von Telefonnummern und eine Liste von Adressen. Die Liste der Telefonnummern wiederum enthält „Telefonnummernobjekte“ usw. Jeder solche Adressbucheintrag wird von der Programmiersprache als einzelnes Objekt behandelt (er kann beispielsweise über eine Variable referenziert werden, die einen Zeiger auf das Objekt enthält). Dem Objekt können verschiedene Methoden zugeordnet werden, etwa Methoden, die die bevorzugte Telefonnummer, die Wohnadresse usw. zurückgeben.
Im Gegensatz dazu gruppieren relationale Datenbanken wie SQL Skalare zu Tupeln , die anschließend in Tabellen aufgelistet werden . Tupel und Objekte weisen einige allgemeine Ähnlichkeiten auf, da sie beide dazu dienen, Werte in benannten Feldern zu sammeln, sodass die gesamte Sammlung als eine einzige zusammengesetzte Entität manipuliert werden kann. Es bestehen jedoch viele Unterschiede, insbesondere im Lebenszyklusmanagement (Einfügen und Löschen von Zeilen versus automatische Speicherbereinigung oder Referenzzählung ), bei Referenzen auf andere Entitäten (Objektreferenzen versus Fremdschlüsselreferenzen) und bei der Vererbung (die in relationalen Datenbanken nicht existiert). Darüber hinaus werden Objekte im Heap-Speicher verwaltet und stehen unter der vollständigen Kontrolle eines einzelnen Prozesses, während Datenbank-Tupel gemeinsam genutzt werden und Sperrmechanismen, Zusammenführung und Wiederholungsversuche beinhalten müssen. Die objektrelationale Abbildung (ORM) bietet automatisierte Unterstützung für die Abbildung von Tupeln auf Objekte und zurück und berücksichtigt dabei all diese Unterschiede. [ 1 ]
Das Kernproblem besteht darin, die logische Repräsentation der Objekte in eine atomisierte Form zu übersetzen, die in der Datenbank gespeichert werden kann, wobei die Eigenschaften der Objekte und ihre Beziehungen erhalten bleiben, sodass sie bei Bedarf als Objekte wiederhergestellt werden können. Wenn diese Speicher- und Abruffunktionalität implementiert ist, spricht man von persistenten Objekten . [ 1 ]
Überblick
Implementierungsspezifische Details von Speichertreibern werden im Allgemeinen in einer API der verwendeten Programmiersprache gekapselt, wodurch Methoden zur Interaktion mit dem Speichermedium bereitgestellt werden, die einfacher sind und besser mit den Paradigmen des umgebenden Codes übereinstimmen.
Nachfolgend ein einfaches Beispiel in C# -Code zur Ausführung einer in SQL geschriebenen Abfrage mithilfe einer Datenbank-Engine.
using System.Collections.Generic ;string sql = "SELECT id, first_name, last_name, phone, birth_date, sex, age FROM persons WHERE id = 10" ; List < Person > result = context . Persons . FromSqlRaw ( sql ). ToList (); string name = result [ 0 ][ "first_name" ];Im Gegensatz dazu verwendet der folgende Code eine ORM-Job-API, die es ermöglicht, Code zu schreiben, der die Funktionen der Sprache auf natürliche Weise nutzt.
Person person = repository.GetPerson ( 10 ) ; string firstName = person.GetFirstName ( ) ;Im obigen Beispiel wird ein Objekt verwendet, das den Speicher repräsentiert, sowie dessen Methoden. Andere Frameworks stellen möglicherweise Code als statische Methoden bereit, wie im folgenden Beispiel, und wieder andere Methoden implementieren unter Umständen gar kein objektorientiertes System. Die Wahl des Paradigmas erfolgt häufig so, dass das ORM optimal zu den Designprinzipien der umgebenden Programmiersprache passt.
Person person = Person.Get ( 10 ) ;Vergleich mit traditionellen Datenzugriffstechniken
Im Vergleich zu herkömmlichen Techniken des Datenaustauschs zwischen einer objektorientierten Sprache und einer relationalen Datenbank reduziert ORM häufig den zu schreibenden Codeumfang. [ 2 ]
Nachteile von ORM-Tools ergeben sich im Allgemeinen aus dem hohen Abstraktionsgrad, der verschleiert, was tatsächlich im Implementierungscode geschieht.
Objektorientierte Datenbanken
Ein anderer Ansatz besteht in der Verwendung eines objektorientierten Datenbankmanagementsystems (OODBMS) oder dokumentenorientierter Datenbanken wie nativer XML-Datenbanken , die mehr Flexibilität bei der Datenmodellierung bieten. OODBMS sind Datenbanken, die speziell für die Arbeit mit objektorientierten Werten entwickelt wurden. Durch die Verwendung eines OODBMS entfällt die Notwendigkeit, Daten in und aus ihrer SQL-Form zu konvertieren, da die Daten in ihrer ursprünglichen Objektdarstellung gespeichert und Beziehungen direkt abgebildet werden, anstatt dass Verknüpfungstabellen oder -operationen erforderlich sind. Das Äquivalent zu ORMs für dokumentenorientierte Datenbanken werden Objekt-Dokument-Mapper (ODMs) genannt.
Dokumentenorientierte Datenbanken ersparen dem Benutzer zudem das manuelle Zerlegen von Objekten in Tabellenzeilen. Viele dieser Systeme unterstützen außerdem die Abfragesprache XQuery zum Abrufen von Datensätzen.
Objektorientierte Datenbanken (OODBMS) werden häufig in komplexen Nischenanwendungen eingesetzt. Ein Argument gegen die Verwendung eines OODBMS ist, dass es möglicherweise keine Ad-hoc-Abfragen ausführen kann, die unabhängig von der Anwendung sind. Aus diesem Grund fühlen sich viele Programmierer mit einem Objekt-SQL-Mapping-System wohler, obwohl die meisten objektorientierten Datenbanken SQL-Abfragen zumindest in begrenztem Umfang verarbeiten können. Andere OODBMS bieten Replikation in SQL-Datenbanken, um den Bedarf an Ad-hoc-Abfragen zu decken und gleichzeitig bekannte Abfragemuster zu erhalten.
Herausforderungen
Bei der Überlegung, wie ein objektorientiertes System an eine relationale Datenbank angepasst werden kann, treten verschiedene Schwierigkeiten auf. Diese Schwierigkeiten werden als Impedanzfehlanpassung zwischen objekt- und relationalem System bezeichnet . [ 3 ]
Eine Alternative zur Implementierung eines ORM ist die Verwendung der nativen prozeduralen Sprachen, die mit jeder gängigen Datenbank bereitgestellt werden. Diese können vom Client mittels SQL-Anweisungen aufgerufen werden. Das Data Access Object (DAO)-Entwurfsmuster dient dazu, diese Anweisungen zu abstrahieren und eine schlanke, objektorientierte Schnittstelle für den Rest der Anwendung bereitzustellen. [ 4 ]
ORMs sind auf ihre vordefinierte Funktionalität beschränkt, die möglicherweise nicht alle Sonderfälle oder Datenbankfunktionen abdeckt. Sie mildern diese Einschränkung üblicherweise ab, indem sie Benutzern eine Schnittstelle zum Schreiben von Rohabfragen bereitstellen, wie beispielsweise Django ORM. [ 5 ]
Siehe auch
- Liste der objektrelationalen Mapping-Software
- Vergleich von objektrelationaler Mapping-Software
- AutoFetch – automatische Abfrageoptimierung
- Common Object Request Broker Architecture (CORBA)
- Objektdatenbank
- Objektpersistenz
- Objektrelationale Datenbank
- Fehlanpassung der objektrelationalen Impedanz
- Relationales Modell
- SQL (Structured Query Language)
- Java Data Objects (JDO)
- Java Persistence API (JPA), jetzt Jakarta Persistence
- Servicedatenobjekte
- Entity Framework
- Aktives Datensatzmuster
- Datenmapper-Muster
- Single Table Inheritance
Referenzen
- ^ a b „Was ist Objekt-Relationale Abbildung?“ . Hibernate-Übersicht . JBOSS Hibernate . Abgerufen am 27. Januar 2022 .
- ^ Barry, D., Stanienda, T. (1998). „Solving the Java object storage problem“ . Computer . 31 (11). Institute of Electrical and Electronics Engineers (IEEE): 33–40 . doi : 10.1109/2.730734 .
Für diese Übung waren mit dem ODMG Java Binding 496 Codezeilen erforderlich, im Vergleich zu 1923 Codezeilen mit JDBC.
- Objektrelationale Abbildung neu betrachtet – Eine quantitative Studie zum Einfluss von Datenbanktechnologie auf O/R-Abbildungsstrategien. M. Lorenz, J. P. Rudolph, G. Hesse, M. Uflacker, H. Plattner. Hawaii International Conference on System Sciences (HICSS), 4877–4886 (DOI:10.24251/hicss.2017.592)
- ^ Feuerstein, Steven; Bill Pribyl (September 1997). „Oracle PL/SQL Programming“ . 18.5 Modifying Persistent Objects . Abgerufen am 23. August 2011 .
{{cite web}}CS1 Wartung: Standort ( Link ) - ^ „Ausführen von SQL-Rohabfragen | Django-Dokumentation“ . Django-Projekt . Abgerufen am 8. September 2024 .
