Чим відрізняється 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 для перекладу між вашими об'єктами в код і поданням документа (якщо потрібно).

Манданго - приклад ODM для MongoDB.


8
Ви можете мати гібридні рамки ORM / ODM, як mORMot для Delphi , доктриною для PHP або глибокого сну OGM для Java . І деякі бази даних SQL підтримують документи, наприклад, великий PostgresSQL, який містить типи даних JSON або JSONB, щоб ви могли змішувати RDBMS та документоорієнтоване сховище в одній таблиці, включаючи індекси та розширений запит!
Арно Бушез

Отже, ви говорите, що документи - це документи ... це має сенс!
HashRocketSyntax

мангуст - це ODM чи ORM?
YL

1
мангуст, мангоїд - все ОДМ. Я думаю, що для noSQL у нас можуть бути лише ODM.
Luna Lovegood

29

ORM відображає між об'єктною моделлю та реляційною базою даних. ODM відображає між об'єктною моделлю та базою даних документа. MySQL не є ОРМ, це реляційна база даних, точніше, база даних 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

2

Mongoose - хороший приклад для ODM (Object Data Model) для MongoDB, в якому ви можете безпосередньо виконувати операції з об'єктами і перетворюватися на відповідні запити та схеми. Його можна знайти тут за посиланням https://mongoosejs.com/

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.