Saltar al contenido principal

¿Qué es el mapeo objeto-relacional (ORM)?

El mapeo objeto-relacional (ORM) es el proceso de abstraer la conexión entre las entidades (objetos) del lenguaje de programación y sus correspondientes elementos de base de datos.

Al crear aplicaciones, los programadores definen objetos en código, que corresponden a conceptos del mundo real. Los datos de los objetos se manipulan en código, pero se almacenan en una base de datos tal como se define en el diseño del sistema de datos. Por ejemplo, puede tener un objeto de cliente que contenga información del cliente en su código, pero la base de datos subyacente podría almacenar esos datos en varias tablas.

El mapeo objeto-relacional es una capa de software que traduce los datos de los objetos a la base de datos subyacente, abstrayendo los detalles de la base de datos del programador. De esta forma, el código permanece inalterado incluso si las bases de datos subyacentes se intercambian por diseños nuevos o diferentes. El mapeo objeto-relacional permite la creación de aplicaciones modulares que son fáciles de administrar y mantener.

¿Cómo funciona el mapeo objeto-relacional?

El mapeo objeto-relacional (ORM) conecta las aplicaciones escritas en un lenguaje de programación orientada a objetos (OOP) a una base de datos subyacente. Estos tipos de aplicaciones y bases de datos a menudo se usan juntas, pero cada una maneja los datos de manera diferente. Agregar un mapeo objeto-relacional entre ellos permite que cada uno envíe datos en un formato que el otro comprenda. Puede modificar una sin afectar a la otra.

Lenguaje de programación orientado a objetos

Los lenguajes OOP organizan los datos en objetos, que son estructuras de código con uno o más atributos. Por ejemplo, en una aplicación OOP, puede definir un objeto representado como una clase de datos persistentes, como un automóvil, con atributos como marca, modelo, VIN, color y kilometraje.

Algunos de los lenguajes de programación orientada a objetos (OOP) más populares incluyen Python, Java, JavaScript y .NET/C#.

Bases de datos relacionales

Las bases de datos relacionales estructuran datos en tablas, de forma similar a una serie de hojas de cálculo conectadas. Cada tabla consta de un conjunto de columnas con registros únicos en cada fila.

Por ejemplo, la base de datos de su automóvil podría tener varias tablas. Una podría contener datos de marca, como marca, modelo y VIN. Otra tabla podría almacenar los atributos de los automóviles individuales, como el propietario, color y kilometraje. Algunas de las bases de datos relacionales más populares incluyen MySQL, PostgreSQL y SQL Server.

En el desarrollo web, una herramienta de mapeo objeto-relacional (ORM) convierte los datos enviados desde una aplicación orientada a objetos en una base de datos relacional sin necesidad de que la aplicación sepa cómo están estructurados esos datos en la base de datos.

Mapeos objeto-relacionales

Puede crear un mapeo objeto-relacional, a veces denominada administrador objeto-relacional, que indique a la base de datos dónde ubicar todos los datos solicitados por una aplicación, aunque cada estructura almacene sus datos de una manera diferente. Cuando su aplicación solicita todos los atributos de un automóvil individual, el ORM indica a la base de datos cómo recuperar todos esos datos en varias tablas.

Como las asignaciones son abstractas, si la estructura de la base de datos cambia alguna vez o si se migra a una nueva base de datos, el ORM puede seguir apuntando a los datos correctos con actualizaciones mínimas.

Marcos ORM comunes

Las herramientas ORM, o marcos, están disponibles para el modelado de datos en muchos de los lenguajes de programación orientados a objetos más populares. Algunos de los más populares son:

  • Hibernate para Java
  • SQLAcademy para Python
  • Entity Framework para .NET/C#

¿Se puede utilizar un ORM con una base de datos no relacional?

No, las bases de datos no relacionales almacenan datos en diferentes formatos e interactúan con las aplicaciones de diferentes maneras. El tipo más común de base de datos no relacional es una base de datos de documentos. Los documentos también pueden tener muchos atributos, similares a los objetos, pero tienen estructuras programáticas diferentes.

Algunas de las bases de datos no relacionales más populares incluyen MongoDB y NoSQL.

¿Cuál es la diferencia entre ORM y ORDBMS?

Un sistema de administración de bases de datos relacionales de objetos (ORDBMS) es un tipo de base de datos que utiliza elementos de marcos relacionales y orientados a objetos. Puede almacenar registros estructurados como objetos similares a los que se pueden codificar en un lenguaje de programación orientada a objetos. Pero también puede realizar consultas relacionales similares a las de SQL en esos registros. Esa combinación de características le permite almacenar una gama más amplia de tipos de datos de lo que es posible en una base de datos relacional estándar.

Cuando un mapeo objeto-relacional (ORM) es una abstracción de datos que funciona a nivel de aplicación, un ORDBMS proporciona capacidades orientadas a objetos directamente a nivel de base de datos.

Los ORM se ejecutan en el código de la aplicación y generan SQL entre bastidores. ORDBMS administra el almacenamiento de datos y la ejecución de consultas a nivel de base de datos, con soporte nativo para tipos de objetos avanzados.

¿Cuál es la diferencia entre ORM y SQL?

SQL (lenguaje de consulta estructurado) es el lenguaje estándar que se utiliza para interactuar con bases de datos relacionales. Permite crear y administrar esquemas de bases de datos, insertar y actualizar datos y consultar registros mediante comandos declarativos.

SQL proporciona un control directo y de bajo nivel sobre la base de datos. ORM proporciona una interfaz más abstracta y de nivel superior, lo que a menudo acelera el desarrollo y hace que el código sea más fácil de mantener.

ORM es ideal para simplificar las tareas comunes de las bases de datos y alinearlas con el código de la aplicación, pero SQL sigue siendo esencial cuando se necesita ajustar el rendimiento, realizar consultas complejas o tener un control total sobre el acceso a los datos.

¿Por qué usar ORM en lugar de consultas SQL?

SQL requiere que escriba comandos manualmente para interactuar con la base de datos, mientras que un ORM traduce automáticamente su código orientado a objetos en SQL entre bastidores.

Los ORM ayudan a reducir la cantidad de codificación necesaria para desarrollar un programa orientado a objetos que debe realizar muchas consultas a la base de datos. En lugar de programar manualmente numerosas consultas de bases de datos que deberán mantenerse, sus desarrolladores programan cómo enviar solicitudes al ORM.

Trabajar en un lenguaje de programación más comprensible también hace que el código sea más fácil de leer y depurar.

¿Cuáles son los beneficios de usar el mapeo objeto-relacional?

Los sistemas ORM brindan los siguientes beneficios.

Desarrollo de aplicaciones más rápido

Los ORM ayudan a recuperar datos complejos mediante código comprensible en el lenguaje OOP con el que los desarrolladores están más familiarizados. Pueden gestionar las operaciones rutinarias de las bases de datos, como la creación, la lectura, la actualización y la eliminación de registros (CRUD), de modo que los desarrolladores no tengan que codificar estas operaciones repetidamente en la aplicación.

Mantenimiento de aplicaciones más sencillo

Al resumir las consultas de la base de datos a través de un ORM, los desarrolladores pueden trabajar en un solo idioma, lo que hace que su código sea más fácil de entender y mantener.

Seguridad mejorada

Un ataque de inyección de código SQL es un intento malintencionado de acceder a datos privados mediante el envío de consultas SQL a través de los formularios de usuario de la aplicación. Los ORM utilizan consultas parametrizadas, que primero envían a la base de datos una consulta con valores de marcador de posición, no con datos reales. (por ejemplo, ? o :param). Los datos reales se envían por separado. Esto garantiza que la entrada del usuario se trate como datos, no como código SQL ejecutable. El uso de una herramienta ORM evita así el acceso no autorizado a los datos mediante la inyección de código SQL.

Mejor rendimiento

Un ORM puede mejorar el rendimiento del sistema al permitir el almacenamiento en caché de objetos transparente en el nivel de aplicación. Puede guardar los datos que se recuperan con más frecuencia cerca de la aplicación para un acceso más rápido.

¿Cuáles son los desafíos de usar mapeos objeto-relacionales?

Los ORM presentan los siguientes desafíos.

Desajustes de impedancia

Las estructuras de datos complejas pueden ser difíciles de mapear entre bases de datos y programas orientados a objetos. Las jerarquías que se pueden codificar en OOP pueden ser muy difíciles de representar en una base de datos, independientemente de lo sofisticado que sea su ORM.

Problemas de rendimiento con mayor complejidad

La consulta directa de una base de datos es más eficiente desde el punto de vista computacional que el uso de un ORM. Para consultas muy complejas, puede ser más eficiente usar código SQL en lugar de una herramienta de mapeo objeto-relacional (ORM).

Curva de aprendizaje

Si bien los ORM ayudan a evitar la necesidad de aprender código SQL complejo, sus desarrolladores aún deberán aprender a usar las herramientas de ORM.

¿Cuándo se deben usar los mapeos objeto-relacionales?

Dado que una herramienta ORM abstrae y automatiza las consultas a las bases de datos, los desarrolladores pueden centrar más sus esfuerzos en la aplicación en lugar de codificar consultas potencialmente complejas. Considere usar ORM cuando:

Su aplicación tiene muchos objetos

La creación manual de consultas para estructuras e interfaces de objetos complejas puede ser una tarea que requiere mucho tiempo y esfuerzo. Permitir que una herramienta ORM asigne objetos a los datos almacenados en su base de datos puede hacer que la recuperación precisa sea más rápida y confiable.

La aplicación repite consultas similares a la base de datos

Los ORM pueden automatizar fácilmente muchas operaciones rutinarias de CRUD (crear, leer, actualizar y eliminar datos), por lo que se necesita menos código SQL.

La evolución del esquema está en curso

Si su modelo de datos sigue evolucionando, un ORM puede ayudar a administrar los cambios en el esquema de la base de datos con mayor facilidad. Muchos ORM incluyen herramientas de migración que permiten versionar y aplicar los cambios de forma estructurada y reducir el riesgo de incoherencia entre los entornos.

La portabilidad de las bases de datos importa

Un ORM es una capa de abstracción que separa deliberadamente las operaciones invocadas por la aplicación de cualquier base de datos específica. Si bien no garantiza una portabilidad total, esta abstracción reduce el esfuerzo que implica moverse entre sistemas. Así, por ejemplo, si la aplicación de su automóvil necesita cambiar de usar una base de datos MySQL a PostgreSQL, no necesitará reescribir toda la aplicación. Solo necesita hacer pequeños ajustes en su ORM si alguna de las tablas cambia.

¿Cuándo no se deben usar los mapeos objeto-relacionales?

Si bien son herramientas poderosas, todavía hay circunstancias en las que los mapeos objeto-relacionales no son la mejor solución.

Para interacciones sencillas con bases de datos

Si está creando una aplicación que solo realiza operaciones CRUD sencillas, el tiempo y el esfuerzo necesarios para mantener un ORM pueden ser mayores que simplemente mantener las consultas manualmente dentro de su aplicación.

Cuando la computación de alto rendimiento es crucial

Para muchas aplicaciones, el tiempo computacional y los recursos adicionales que agrega un ORM son irrelevantes. Sin embargo, para tareas como el análisis en tiempo real, en las que los milisegundos importan, eso puede no ser aceptable.

Cuando necesite usar esquemas desnormalizados

En algunas situaciones, es posible que sus desarrolladores deseen mantener datos redundantes en varias tablas de los servicios web de su base de datos, lo que se conoce como esquemas desnormalizados. Esto puede mejorar el rendimiento cuando una aplicación necesita realizar consultas relacionales complejas que unan muchas tablas. La asignación de estas consultas en un ORM no siempre es eficaz.

¿Cómo puede ayudarlo AWS con sus requisitos de administración de datos?

AWS ofrece una gama de soluciones de bases de datos en la nube que hacen que la administración de datos sea eficiente y rentable.

Amazon Relational Database Service (Amazon RDS) es un servicio administrado que permite configurar, operar y escalar fácilmente una base de datos relacional en la nube. Proporciona una capacidad rentable y redimensionable, a la vez que gestiona las arduas tareas de administración de la base de datos, lo que le permite centrarse en sus aplicaciones y su negocio.

Amazon Aurora es un servicio moderno de bases de datos relacionales que ofrece alto rendimiento y alta disponibilidad a escala. Ofrece ediciones compatibles con MySQL y PostgreSQL de código abierto y una gama de herramientas de desarrollo para crear aplicaciones sin servidor y controladas por machine learning (ML).

Amazon Redshift permite el análisis de datos moderno a escala, con un rendimiento de precio hasta tres veces superior y un rendimiento hasta siete veces superior en comparación con otros almacenes de datos en la nube.

Amazon DocumentDB (compatible con MongoDB) es una base de datos de documentos empresarial rápida, escalable, de alta disponibilidad y totalmente administrada que almacena datos en documentos similares a los objetos JSON. Utilizan los controladores devueltos por los objetos nativos al lenguaje de programación utilizado por el desarrollador, lo que elimina la necesidad de herramientas ORM.

Para comenzar con las bases de datos en AWS, cree una cuenta gratuita hoy mismo.