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.