Was ist der Unterschied zwischen einem ORM und einem ODM?

156

Ich versuche herauszufinden, was der Unterschied zwischen ORM und ODM ist. Soweit ich das Konzept verstehe, bildet ORM (Object Relational Mapper) die Beziehungen zwischen Daten ab, wobei ODM (Object Document Mapper) Dokumente behandelt. Habe ich Recht, wenn ich annehme, dass mySQL ein Beispiel für ORM und MongoDB ein Beispiel für ODM ist?

Wie Sie sicher sehen können, bin ich mit der Theorie des Konzepts nicht allzu vertraut. Könnte jemand bitte die Unterschiede zwischen den beiden klären?

Odyss3us
quelle

Antworten:

173

MySQL ist ein Beispiel für eine relationale Datenbank. Sie würden ein ORM verwenden, um zwischen Ihren Objekten im Code und der relationalen Darstellung der Daten zu übersetzen.

Beispiele für ORMs sind nHibernate , Entity Framework , Dapper und mehr ...

MongoDB ist ein Beispiel für eine Dokumentendatenbank. Sie würden ein ODM verwenden, um zwischen Ihren Objekten im Code und der Dokumentdarstellung der Daten zu übersetzen (falls erforderlich).

Mandango ist ein Beispiel für ein ODM für MongoDB.

Oded
quelle
8
Sie können hybride ORM / ODM-Frameworks wie mORMot für Delphi , Doctrine für PHP oder Hibernate OGM für Java verwenden . Einige SQL-Datenbanken unterstützen Dokumente nachdrücklich, z. B. das großartige PostgresSQL mit JSON- oder JSONB-Datentypen, sodass Sie RDBMS und dokumentenorientierten Speicher in derselben Tabelle mischen können, einschließlich Indizes und erweiterter Abfragen!
Arnaud Bouchez
Sie sagen also, die Dokumente sind Dokumente ... das macht Sinn!
HashRocketSyntax
Mungo ist ein ODM oder ORM?
YL
1
Mungo, Mungo sind alle ODMs. Ich denke für ein noSQL können wir nur ODMs haben.
Luna Lovegood
27

Ein ORM wird zwischen einem Objektmodell und einer relationalen Datenbank zugeordnet. Ein ODM wird zwischen einem Objektmodell und einer Dokumentendatenbank zugeordnet. MySQL ist kein ORM, sondern eine relationale Datenbank, genauer gesagt eine SQL-Datenbank. MongoDB ist kein ODM, sondern eine Dokumentendatenbank.

Jörg W Mittag
quelle
Tolle Erklärung! Ich bin mir immer noch nicht sicher, ob ODM / ORM Abstraktionsschichten sind, die von der zugrunde liegenden Datenbank oder von den Treiberbibliotheken bereitgestellt werden, oder ob es sich um eine separate Schicht zwischen dem Treiber und der Datenbank handelt. Kann es einen ORM-Treiber für eine Dokumentendatenbank geben und umgekehrt?
Pooya13
10

Im Wesentlichen verwendet ein ORM einen SQL-Datenbanktreiber wie ODBC, JDBC oder OLEDB, um die Objektnotation in eine relationale Notation zu übersetzen, und ein ODM verwendet eine JSON- oder JSONB-API, um die Objektnotation in eine Dokumentnotation zu übersetzen.

Unter der Haube gibt es verschiedene Arten von Implementierungen.

PS: JSONB ist eine JSON-Textdokumentnotation, die in einem von MongoDB verwendeten Binärformat gespeichert ist.

Fernando Santucci
quelle
1
Technisch gesehen sind ODBC und JDBC API-Spezifikationen, die ein Treiber implementiert.
Asgs
2
Postgres unterstützt auch JSONB
Luna Lovegood
3

Wenn Sie zum ersten Mal lernen, wie Sie mit Datenbanken arbeiten, gibt es zwei Arten von Datenbankeinstellungen: ORM (Object Relation Mapping) und ODM (Object Document Mapping).

ORM, das ein Objekt mit einer relationalen Welt abbilden soll, konvertiert grundsätzlich Daten zwischen inkompatiblen Typen in objektorientierten Programmiersprachen. ORM packt die implementierungsspezifischen Details von Speichertreibern in eine API (Anwendungsprogrammschnittstelle) und ordnet die relationalen Felder einem Objektelement zu. Wenn ich beispielsweise eine Tabelle mit Mitarbeitern habe, wird diese für alle Mitarbeiter einem einzelnen Objekt zugeordnet, mit verschiedenen Methoden.

ODM hingegen ist ein Object Document Mapper, der Objekte mit einer Dokumentendatenbank wie MongoDB abbildet.

Der Hauptunterschied besteht darin, dass ORM für MySQL-Datenbanken vorgesehen ist, während ODM die Zuordnung für die Dokumentendarstellung von Daten übernimmt. Der beste Weg, sich daran zu erinnern, was ORM tut, wäre, es als eine Excel-Tabelle mit Zeilen und Spalten zu betrachten. Wenn Sie dieses Setup verwenden, möchten Sie sicher sein, dass Sie einen guten Plan haben, wie Sie die aktuelle Anwendung angehen möchten. Es sind nicht so viele Änderungen zulässig wie bei ODM. Mit ODM können wir problemlos neue Felder und Eigenschaften hinzufügen. Mit ORM müssen Sie jedoch beim Hinzufügen eines neuen Felds berücksichtigen, dass nichts leer bleibt, sodass ein Wert als Standard festgelegt werden muss, es sei denn, Sie möchten in jedes Feld gehen und Änderungen vornehmen.

sajjad jafari bojd
quelle
2

Mongoose ist ein gutes Beispiel für ODM (Object Data Model) für MongoDB, in dem Sie Operationen mit Objekten direkt ausführen können und das in die entsprechende Abfrage und das entsprechende Schema übersetzt wird. Es kann hier unter https://mongoosejs.com/ gefunden werden.

Arjun Agarwal
quelle