¿Cuál es la diferencia entre un ORM y un ODM?

158

Estoy tratando de averiguar cuál es la diferencia entre ORM y ODM, por lo que entiendo el concepto, ORM (Object Relational Mapper) asigna las relaciones entre los datos, mientras que ODM (Object Document Mapper) se ocupa de los documentos. ¿Estoy en lo cierto al suponer que mySQL es un ejemplo de ORM y MongoDB es un ejemplo de ODM?

Como estoy seguro de que puede ver, no estoy muy familiarizado con la teoría del concepto. ¿Podría alguien aclarar las diferencias entre los dos?

Odyss3us
fuente

Respuestas:

173

MySQL es un ejemplo de una base de datos relacional: usaría un ORM para traducir entre sus objetos en código y la representación relacional de los datos.

Ejemplos de ORM son nHibernate , Entity Framework , Dapper y más ...

MongoDB es un ejemplo de una base de datos de documentos: usaría un ODM para traducir entre sus objetos en código y la representación de los datos en el documento (si es necesario).

Mandango es un ejemplo de ODM para MongoDB.

Oded
fuente
8
Puede tener marcos híbridos de ORM / ODM, como mORMot para Delphi , Doctrine para PHP o Hibernate OGM para Java . Y algunas bases de datos SQL tienen un fuerte soporte para documentos, por ejemplo, el gran PostgresSQL que presenta tipos de datos JSON o JSONB para que pueda mezclar RDBMS y almacenamiento orientado a documentos dentro de la misma tabla, ¡incluidos índices y consultas avanzadas!
Arnaud Bouchez
Entonces estás diciendo que los documentos son documentos ... ¡eso tiene sentido!
HashRocketSyntax
mangosta es un ODM u ORM?
YL
1
mangosta, mongoide son todos ODM. Supongo que para un noSQL solo podemos tener ODM.
Luna Lovegood
29

Un ORM se asigna entre un modelo de objetos y una base de datos relacional. Un ODM se asigna entre un modelo de objetos y una base de datos de documentos. MySQL no es un ORM, es una base de datos relacional, más específicamente, una base de datos SQL. MongoDB no es un ODM, es una base de datos de documentos.

Jörg W Mittag
fuente
¡Gran explicación! Todavía no estoy claro si ODM / ORM son capas de abstracción proporcionadas por la base de datos subyacente o por las bibliotecas de controladores, ¿o son una capa separada entre el controlador y la base de datos? ¿Puede haber un controlador ORM para una base de datos de documentos y viceversa?
pooya13
10

Esencialmente, un ORM usa un controlador de base de datos SQL como ODBC, JDBC u OLEDB para traducir la notación de objeto a notación relacional y un ODM usa una API JSON o JSONB para traducir la notación de objeto a notación de documento.

Hay diferentes tipos de implementaciones bajo el capó.

PD: JSONB es una notación de documento de texto JSON almacenada en formato binario como la utilizada por MongoDB.

Fernando Santucci
fuente
1
técnicamente hablando, ODBC y JDBC son especificaciones de API que implementa un controlador.
pregunta el
2
Postgres también es compatible con JSONB
Luna Lovegood
3

Cuando aprende por primera vez a trabajar con una base de datos, todo se reduce a dos tipos de configuraciones de bases de datos que son ORM (asignación de relación de objeto) y ODM (asignación de documento de objeto)

ORM, que consiste en mapear un objeto con un mundo relacional, básicamente convierte datos entre tipos incompatibles en lenguajes de programación orientados a objetos. ORM envuelve los detalles específicos de implementación de los controladores de almacenamiento en una API (interfaz del programa de aplicación) y asigna los campos relacionales a los miembros de un objeto. Por ejemplo, si tengo una tabla de empleados, se asigna a un solo objeto para todos los empleados, con varios métodos asociados.

ODM, por otro lado, es un Object Document Mapper, que asigna objetos con una base de datos de documentos como MongoDB.

La principal diferencia es que ORM es para bases de datos MySQL, mientras que ODM hace el mapeo para la representación de datos en el documento. La mejor manera de recordar lo que hace ORM sería pensarlo como una hoja de cálculo de Excel, con filas y columnas. Al usar esta configuración, desea asegurarse de tener un gran plan sobre cómo desea abordar la aplicación actual, no permite tantas modificaciones como lo hace ODM. Con ODM podemos agregar nuevos campos y propiedades fácilmente, pero con ORM al agregar un nuevo campo, debe tener en cuenta que nada queda vacío, por lo que necesita un valor predeterminado, a menos que desee entrar en cada uno y modificarlo.

sajjad jafari bojd
fuente
2

Mongoose es un buen ejemplo de ODM (Modelo de datos de objetos) para MongoDB en el que puede realizar operaciones directamente con objetos y eso se traduce en la consulta y el esquema adecuados. Se puede encontrar aquí en https://mongoosejs.com/

Arjun Agarwal
fuente