El Mapeo Objeto-Relacional es un técnica usada en programación para convertir los tipos de dato con los que trabaja un lenguaje orientado a objetos a tipos de dato con los que trabaja un sistema de base de datos relacional para la persistencia de datos. Básicamente consiste en una técnica que nos permite mapear cada una de las filas de nuestras tablas en la base de datos a objetos, en donde las columnas de la tabla corresponden a las propiedades de estos objetos.

Mientras que ORM es el nombre de la técnica, también se suele conocer como ORMs a los frameworks que la implementan, como EntityFramework en .NET, Hibernate en Java y ActiveRecord en Ruby. Estos ORMs usan convenciones de nombres, archivos de configuración en XML o anotaciones dentro del código para configurar la relación que existe entre una clase de nuestro lenguaje orientado a objetos y una tabla en la base de datos.

El uso de una herramienta de ORM introduce una capa de abstracción entre la base de datos y el desarrollador, ya que gracias a este mapeo, los ORM evitan que el desarrollador tenga que escribir consultas "a mano" para recuperar, filtrar, agrupar, eliminar, actualizar o insertar datos en la base, será tarea del ORM transformar las operaciones hechas a nivel orientado a objetos a sentencias SQL con las que la base de datos puede trabajar.

Ventajas

Entre las ventajas de los ORMs tenemos que para ellos es necesario escribir muy poco código, ya que no tenemos que escribir las consultas directamente en nuestro código o en procedimientos almacenados, ni es nuestra tarea escribir los métodos que tomen los datos de la base y convertirlos nosotros mismos a algo procesable en nuestro lenguaje.

Otra ventaja de una herramienta de este tipo es que otorga además la posibilidad de cambiar el sistema de base de datos sin tener que modificar el código de nuestra aplicación, ya que bastaría con cambiar la parte del ORM que se conecta a la base de datos y transforma las operaciones para esta. Generalmente estas herramientas, los ORMs, tienen módulos intercambiables conocidos como conectores o adaptadores, quienes son los encargados de realizar esta tarea.

Algunos ORM pueden intentar mejorar el desempeño mediante dos formas:

  • Empleando un sistema de caché para reducir el número de consultas a la base de datos para tablas o registros muy solicitados y,
  • A través de la carga retrasada, lo cual significa que únicamente recuperará la información de la base de datos cuando la necesitemos

Estas dos características a pesar de que que están diseñadas para beneficiarnos, si no entendemos correctamente su uso, pueden convertirse en una desventaja.

Desventajas

Los ORM destacan por su utilidad cuando de desarrollar aplicaciones sencillas que solo requieren de realizar operaciones básicas: crear, leer, actualizar y eliminar. Y comienzan a mostrar sus flaquezas cuando de realizar operaciones más complejas se trata. Y es que los ORM tienden a ser muy genéricos pues ese es su propósito, tratar de realizar consultas más complejas u operaciones que requieran de operaciones específicas de la base de datos es llevarlos al límite.

También es necsario decir que el uso de un ORM puede llegar a impactar en el desempeño, a diferencia de usar otros métodos de acceso en los que el desarrollador puede priorizar el desempeño de acuerdo a lo que está desarrollando.

En lo personal

Como conclusión diría que los ORMs usadas de manera correcta son herramientas muy poderosas que facilitan y aceleran tareas simples como la recuperación e inserción de información en una base de datos relacional, pero como consejo te digo: no dejes que el usar un ORM te aleje de aprender propiamente SQL, y más aún si tu trabajo requiere el desarrollo con bases de datos relacionales.

También es importante que identifiques si tu aplicación es compatible con alguna herramienta de ORM o no, en particular si tu aplicación se compone de algo que es directamente mapeable a objetos, como la consulta de inventarios o la administración de usuarios. Por ejemplo, un sistema de reporteo en donde tengas que aplicar funciones de agregación, relacionar muchas tablas o una consulta pueda regresar un número variable de columnas , tal vez no sea de entrada un buen candidato para ser desarrollada usando ORM.

Y por último, en determinado momento puedes mezclar las formas de acceso, tal vez usar un ORM para las partes en las que tenga más sentido usarlo mientras que para las otras tareas usar otros métodos más manuales de acceder y manipular la información.

Hice una pequeña aplicación en donde muestro un uso sencillo de Entity Framework como ORM, toma en cuenta que usar bien Entity Framework requiere de un poco más de trabajo, pueden ver el video en este enlace.