Objekt -Relationskartierung

Objekt -Relationskartierung (Orm, O/rm, und O/R -Mapping -Tool) in Informatik ist ein Programmierung Technik zum Konvertieren von Daten zwischen Typsysteme Verwendung objektorientierter Programmiersprachen. Dies schafft tatsächlich eine "virtuelle Objektdatenbank"Das kann innerhalb der Programmiersprache verwendet werden. Es gibt sowohl kostenlose als auch kommerzielle Pakete, die Objekt -Relationskartierungen durchführen, obwohl einige Programmierer ihre eigenen Orm -Tools konstruieren.

Im Objekt orientierte Programmierung, Datenmanagement Aufgaben wirken auf Objekte das sind fast immer nichtSkalar Werte. Betrachten Sie beispielsweise einen Adressbucheintrag, der eine einzelne Person zusammen mit null oder mehr Telefonnummern und Null oder mehr Adressen darstellt. Dies könnte in einer objektorientierten Implementierung durch eine "Person modelliert werden Objekt" mit einem Attribut/Feld So halten Sie jedes Datenelement, das der Eintrag umfasst: der Name der Person, eine Liste von Telefonnummern und eine Liste von Adressen. Die Liste der Telefonnummern würde selbst "PhoneNumber -Objekte" und so weiter enthalten. Jeder solcher Adressbucheintrag wird von der Programmiersprache als einzelnes Objekt behandelt (er kann durch eine einzelne Variable, die zum Beispiel einen Zeiger auf das Objekt enthält). Verschiedene Methoden kann dem Objekt zugeordnet werden, z. B. Methoden zur Rückgabe der bevorzugten Telefonnummer, der Heimatadresse usw.

Im Gegensatz dazu viele beliebte Datenbankprodukte wie z. Sql Datenbankmanagementsystem (DBMs) sind nicht objektorientiert und können nur speichern und manipulieren Skalar Werte wie Ganzzahlen und Strings organisiert innerhalb Tische. Der Programmierer muss entweder die Objektwerte in Gruppen einfacherer Werte für den Speicher in der Datenbank umwandeln (und sie beim Abrufen wieder umwandeln) oder nur einfache Skalarwerte innerhalb des Programms verwenden. Objekt -Relational Mapping implementiert den ersten Ansatz.[1]

Das Herzstück des Problems besteht darin, die logische Darstellung der Objekte in eine atomisierte Form zu übersetzen, die in der Datenbank gespeichert werden kann und gleichzeitig die Eigenschaften der Objekte und ihrer Beziehungen bewahrt, damit sie bei Bedarf als Objekte neu geladen werden können. Wenn diese Speicher- und Abruffunktionalität implementiert wird, sollen die Objekte sein hartnäckig.[1]

Überblick

Implementierungsspezifische Details von Speichertreibern werden im Allgemeinen in eine API in der verwendeten Programmiersprache eingewickelt und Methoden für die Interaktion mit dem Speichermedium auf eine Weise ausgesetzt, die einfacher und mehr mit den Paradigmen des umgebenden Code entspricht.

Das Folgende ist ein einfaches Beispiel, geschrieben in C# Code, um eine in geschriebene Abfrage auszuführen Sql Verwenden einer Datenbankmotor.

var sql = "Wählen Sie ID, First_Name, last_name, Telefon, birg, sex, sex, Alter von Personen, wobei id = 10"; var Ergebnis = Kontext.Personen.Von sqlraw(sql).Auflisten(); var Name = Ergebnis[0]["Vorname"]; 

Im Gegensatz dazu nutzt das folgende ORM-Job-API, mit dem Code geschrieben wird, der natürlich die Merkmale der Sprache verwendet.

var Person = Repository.Getperson(10); var Vorname = Person.GetFirstname(); 

Der obige Fall verwendet ein Objekt, das das Speicherrepository und die Methoden dieses Objekts darstellt. Andere Frameworks bieten möglicherweise Code als statische Methoden, wie im folgenden Beispiel, und andere Methoden implementieren möglicherweise überhaupt kein objektorientiertes System. Oft wird die Wahl des Paradigmas für die beste Anpassung des Orm in die Designprinzipien der umliegenden Sprache getroffen.

var Person = Person.Erhalten(10); 

Normalerweise enthüllt das Framework einige Filter- und Abfragungsfunktionen für den Zugriff und die Änderung von Teilmengen der Speicherbasis. Der folgende Code fällt nach Personen in der Datenbank ab, deren ID -Wert '10' ist.

var Person = Person.Erhalten(Person.Eigenschaften.Ausweis == 10); 

Vergleich mit herkömmlichen Datenzugriffstechniken

Im Vergleich zu traditionellen Austauschtechniken zwischen einer objektorientierten Sprache und einer relationalen Datenbank reduziert ORM häufig die Menge an Code, die geschrieben werden muss.[2]

Nachteile von ORM -Tools stammen im Allgemeinen aus dem hohen Niveau von Abstraktion Verschleierung dessen, was tatsächlich im Implementierungscode passiert. Außerdem wurde eine starke Abhängigkeit von ORM -Software als Hauptfaktor für die Herstellung von schlecht gestalteten Datenbanken angeführt.[3]

Objektorientierte Datenbanken

Ein anderer Ansatz ist die Verwendung eines objektorientiertes Datenbankverwaltungssystem (Oodbms) oder dokumentorientierte Datenbanken wie einheimisch XML -Datenbanken Das bietet mehr Flexibilität bei der Datenmodellierung. OODBMSS sind Datenbanken, die speziell für die Arbeit mit objektorientierten Werten entwickelt wurden. Die Verwendung eines OODBMS eliminiert die Notwendigkeit, Daten in und aus seinem SQL -Form zu konvertieren, da die Daten in ihrer ursprünglichen Objektdarstellung gespeichert sind und Beziehungen direkt dargestellt werden, anstatt dies zu verlangen Tische verbinden/Operationen. Das Äquivalent von Ormen für dokumentorientierte Datenbanken werden als Objektdokument-Mapper (ODMS) bezeichnet.

Dokumentorientierte Datenbanken verhindern auch, dass der Benutzer Objekte in Tabellenreihen "zerstören" muss. Viele dieser Systeme unterstützen auch die XQuery Abfragesprache zum Abrufen von Datensätzen.

Objektorientierte Datenbanken werden tendenziell in komplexen Nischenanwendungen verwendet. Eines der Argumente gegen die Verwendung eines OODBMS besteht darin, dass es möglicherweise nicht in der Lage ist, AD-hoc, anwendungsunabhängige Abfragen auszuführen. Aus diesem Grund sind viele Programmierer mit einem Objekt-SQL-Zuordnungssystem mehr zu Hause, obwohl die meisten objektorientierten Datenbanken SQL-Abfragen in begrenztem Maße verarbeiten können. Andere OODBMs bieten eine Replikation zu SQL-Datenbanken, um die Notwendigkeit von AD-hoc-Abfragen zu beheben und bekannte Abfragemuster beizubehalten.

Herausforderungen

Es tritt eine Vielzahl von Schwierigkeiten auf, wenn man überlegt, wie ein Objektsystem mit einer relationalen Datenbank übereinstimmt. Diese Schwierigkeiten werden als die bezeichnet Objekt -Relationalimpedanz -Missverhältnis.[4]

Eine Alternative zur Implementierung von ORM ist die Verwendung der nativen prozeduralen Sprachen, die mit jeder wichtigen Datenbank bereitgestellt werden. Diese können vom Client mithilfe von SQL -Anweisungen aufgerufen werden. Das Datenzugriffsobjekt (DAO) Entwurfsmuster wird verwendet, um diese Aussagen abstrahieren und dem Rest der Anwendung eine leichte objektorientierte Schnittstelle anzubieten.[5]

Siehe auch

Verweise

  1. ^ a b "Was ist Objekt-/Relational Mapping?". Hibernate -Überblick. Jboss Hibernate. Abgerufen 27. Januar 2022.
  2. ^ Douglas Barry, Torsten Stanienda, "Lösung des Java -Objektspeicherproblems", Computer, Vol. 31, nein. 11, S. 33-40, November 1998, http://www2.computer.org/portal/web/csdl/doi/10.1109/2.730734 , Auszug bei http://www.service-architecture.com/object-relational-mapping/articles/transparent_persistence_vs_jdbc_call-level_interface.html. Codezeilen, die O/R verwenden, sind nur ein Bruchteil derjenigen, die für eine Schnittstelle auf Call-Ebene benötigt werden (1: 4). Für diese Übung wurden 496 Codezeilen unter Verwendung der ODMG -Java -Bindung im Vergleich zu 1.923 Codezeilen mit JDBC benötigt.
  3. ^ Josh Berkus, "Rätsel deiner Datenbank", Computer, August 2009, https://www.toolbox.com/tech/data-management/blogs/wracking-your-database-080509/
  4. ^ Objekt -Relational -Mapping Revisited - Eine quantitative Studie über die Auswirkungen der Datenbanktechnologie auf O/R -Mapping -Strategien. M Lorenz, JP Rudolph, G Hesse, M Uflacker, H Plattner. Hawaii International Conference on System Sciences (HICSS), 4877-4886 (Doi: 10.24251/hics.2017.592)
  5. ^ Feuerstein, Steven; Bill Pribyl (September 1997). "Oracle PL/SQL -Programmierung". 18.5 Modifizierung anhaltender Objekte. Abgerufen 23. August 2011.{{}}: CS1 Wartung: Standort (Link)

Externe Links