165 votos

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

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

Como estoy seguro de que puedes ver, no estoy demasiado familiarizado con la teoría del concepto. ¿Podría alguien aclarar las diferencias entre ambos?

189voto

Oded Puntos 271275

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

Algunos ejemplos de ORM son nHibernate , Marco de Entidades , Dapper y más...

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

Mandango es un ejemplo de ODM para MongoDB.

29voto

Jörg W Mittag Puntos 153275

Un ORM se relaciona con un modelo de objetos y una base de datos relacional. Un ODM se relaciona con 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.

11voto

Fernando Santucci Puntos 422

Esencialmente, un ORM utiliza un controlador de base de datos SQL como ODBC, JDBC u OLEDB para traducir la notación de objetos a notación relacional y un ODM utiliza una api JSON o JSONB para traducir la notación de objetos a notación de documentos.

Hay diferentes tipos de implementaciones bajo el capó.

PS: JSONB es una notación de documento de texto JSON almacenado en un formato binario como el utilizado por MongoDB.

4voto

Arjun Agarwal Puntos 61

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

3voto

Adam Zerner Puntos 353

Para entender la diferencia entre un ORM y un ODM, creo que sería útil repasar primero las diferencias entre una base de datos relacional y una base de datos documental. Lo haré de un modo un poco complicado.

Una base de datos relacional es a la que probablemente estés acostumbrado. La que almacena los datos en tablas, así:

enter image description here

Ejemplos comunes de bases de datos relacionales son MySQL, Postgres y SQLite. Para consultar una base de datos relacional, se utiliza SQL.

¿Y las bases de datos de documentos? Pues bien, con las bases de datos de documentos, los datos se almacenan en JSON en lugar de en tablas.

enter image description here

En realidad, eso no es 100% exacto. MongoDB explica :

Los documentos almacenan datos en pares campo-valor. Los valores pueden ser de distintos tipos y estructuras, como cadenas, números, fechas, matrices u objetos. Los documentos pueden almacenarse en formatos como JSON, BSON y XML.

Bien, ¿qué es un ORM, qué es un ODM y cómo se comparan?

Bueno, ORM significa... en realidad, dejaré que esta respuesta explicar:

El mapeo objeto-relacional (ORM) es una técnica que permite consultar y manipular datos de una base de datos utilizando un paradigma orientado a objetos. Cuando se habla de ORM, la mayoría de la gente se refiere a una biblioteca que implementa la técnica de mapeo objeto-relacional, de ahí la frase "un ORM".

Básicamente, en el código de tu aplicación, sueles tratar con objetos. Pero en tu base de datos, tienes tablas. Un ORM es una librería que mapea entre los dos. Como dice Wikipedia explica :

Esto crea, en efecto, una "base de datos de objetos virtuales" que puede utilizarse desde el lenguaje de programación.

He aquí un ejemplo. Registro activo es un popular ORM para Ruby on Rails. Con Active Record, podrías hacer algo como User.find_by(name: 'David') y obtendrá algo como { id: 1, name: 'David' } . Así que el ORM está haciendo la siguiente asignación para usted:

enter image description here

Y luego con un ODM, es básicamente hacer lo mismo, excepto para las bases de datos de documentos. Es el mapeo de los objetos en tu código de aplicación a los documentos en la base de datos. Mangosta es un buen ejemplo de ODM. Funciona con MongoDB.

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X