Es una técnica de programación muy utilizada en paradigmas orientados a objetos, que te permite 'mapear' (es decir, emparejar un par de entidades de tu programa): por un lado una base de datos relacional y por otro lado objetos.
Por poner un ejemplo sencillo, una agenda con personas / direcciones y teléfonos.
En la base de datos relacional, pueden haber tablas para:
- Las personas, con datos como su nombre completo, edad, género
- Los teléfonos, con el dato del número telefónico y relacionados con las personas a través de una llave foránea (si la relación es 1-N) o una tabla de rompimiento (si la relación es N-M)
- Las direcciones, con datos para calle, número exterior e interior, colonia, etc. y relacionados con las personas, también a través de una llave foránea.
Por otro lado, en tu programa podrías tener los siguientes objetos:
- Un objeto persona, con una propiedad cadena para el nombre, una propiedad entera para la edad, una propiedad de una enumeración para el género.
- Un objeto telefono, con una propiedad cadena para el número telefónico.
- Un objeto direccion, con una propiedad cadena para cada campo de la misma tabla
Pero además, en tu objeto persona podrías tener lo siguiente:
- Una propiedad lista de objetos telefono
- Una propiedad de objeto direccion
Y de esta manera, una persona tiene uno o mas números telefónicos, y una dirección asociada.
Ahora bien, el ORM, además de permitirte modelar tu información de manera que utilices objetos para representar las relaciones de la base de datos, también puede permitirte la llamada
persistencia. Esta propiedad se refiere al hecho de que, a través del motor del ORM y gracias al mapeo establecido (por ejemplo en un archivo de configuración XML) entre los objetos y las tablas de la base de datos, se consigue que los datos manipulados en los objetos se reflejen en la base de datos, y que cualquier cambio en los objetos mismos dentro del programa permita que el mapeo, además de ser declarativo (que establece el mapeo en sí entre objeto y relación), sea también del contenido.
En los lenguajes orientados a objetos existen muchos motores o frameworks que permiten implementar ORM en un sistema. Sin embargo, a veces es necesario o más sencillo implementar uno propio, con o sin persistencia.
En cuanto a los frameworks existentes, y que pueden usarse para desarrollar sistemas con un ORM, se encuentran por ejemplo:
- Hibernate, para el lenguaje Java
- Propel, para el lenguaje PHP
- SQLAlchemy, para el lenguaje Python
- Doctrine, también para PHP
- etc...