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


158

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

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

Ответы:


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/

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.