В чем разница между ORM и ODM?

158

Я пытаюсь выяснить, в чем разница между ORM и ODM, насколько я понимаю концепцию, ORM (Object Relational Mapper) отображает отношения между данными, где ODM (Object Document Mapper) работает с документами. Прав ли я, предполагая, что mySQL является примером ORM, а MongoDB является примером ODM?

Как я уверен, вы можете видеть, я не слишком знаком с теорией концепции. Может ли кто-нибудь прояснить разницу между ними?

Odyss3us
источник

Ответы:

173

MySQL является примером реляционной базы данных - вы использовали бы ORM для перевода между вашими объектами в коде и реляционным представлением данных.

Примерами ORM являются nHibernate , Entity Framework , Dapper и другие ...

MongoDB является примером базы данных документов - вы бы использовали ODM для преобразования между вашими объектами в коде и представлением данных в документе (если это необходимо).

Mandango является примером ODM для MongoDB.

Одед
источник
8
У вас могут быть гибридные платформы ORM / ODM, такие как mORMot для Delphi , Doctrine для PHP или Hibernate OGM для Java . И некоторые базы данных SQL имеют сильную поддержку документов, например, отличный PostgresSQL, который имеет типы данных JSON или JSONB, так что вы можете смешивать RDBMS и Document-ориентированное хранилище в одной таблице, включая индексы и расширенный запрос!
Арно Бушез
Итак, вы говорите, что документы являются документами ... это имеет смысл!
HashRocketSyntax
мангуст это ODM или ORM?
YL
1
мангуст, монгоид - это все ODM. Я предполагаю, что для noSQL у нас могут быть только ODM.
Луна Лавгуд
29

ORM отображается между объектной моделью и реляционной базой данных. ODM сопоставляет объектную модель и базу данных документов. MySQL - это не ORM, это реляционная база данных, точнее, база данных SQL. MongoDB - это не ODM, это база данных документов.

Йорг Миттаг
источник
Отличное объяснение! Мне до сих пор не ясно, являются ли ODM / ORM уровнями абстракции, предоставляемыми базовой базой данных или библиотеками драйверов, или это отдельный уровень между драйвером и БД? Может ли быть драйвер ORM для базы данных документов и наоборот?
pooya13
10

В сущности, ORM использует драйвер базы данных SQL, такой как ODBC, JDBC или OLEDB, для перевода нотации объекта в реляционную нотацию, а ODM использует API JSON или JSONB для перевода нотации объекта в нотацию документа.

Есть разные виды реализаций под капотом.

PS: JSONB - это нотация текстового документа JSON, хранящаяся в двоичном формате, используемом MongoDB.

Фернандо Сантуччи
источник
1
технически говоря, ODBC и JDBC - это спецификации API, которые реализует драйвер.
просит
2
Postgres также поддерживает JSONB
Luna Lovegood
2

Mongoose является хорошим примером ODM (Object Data Model) для MongoDB, в которой вы можете напрямую выполнять операции с объектами, и это переводится в соответствующий запрос и схему. Это можно найти здесь на https://mongoosejs.com/

Арджун Агарвал
источник