stringtranslate.com

Mapeo objeto-relacional

El mapeo objeto-relacional ( ORM , O/RM y herramienta de mapeo O/R ) en informática es una técnica de programación para convertir datos entre una base de datos relacional y el montón de un lenguaje de programación orientado a objetos . Esto crea, de hecho, una base de datos de objetos virtuales que se puede utilizar desde el lenguaje de programación.

En la programación orientada a objetos , las tareas de gestión de datos actúan sobre objetos que combinan valores escalares en objetos. Por ejemplo, considere una entrada de la libreta de direcciones que representa a una sola persona junto con cero o más números de teléfono y cero o más direcciones. Esto podría modelarse en una implementación orientada a objetos mediante un " objeto Persona " con un atributo/campo para contener cada elemento de datos que comprende la entrada: el nombre de la persona, una lista de números de teléfono y una lista de direcciones. La lista de números de teléfono contendría en sí misma "objetos PhoneNumber", etc. Cada una de estas entradas de la libreta de direcciones es tratada como un único objeto por el lenguaje de programación (se puede hacer referencia a ella mediante una única variable que contenga un puntero al objeto, por ejemplo). Se pueden asociar varios métodos con el objeto, como métodos para devolver el número de teléfono preferido, la dirección particular, etc.

Por el contrario, las bases de datos relacionales, como SQL , agrupan escalares en tuplas , que luego se enumeran en tablas . Las tuplas y los objetos tienen cierta similitud general, en el sentido de que ambos son formas de recopilar valores en campos con nombre, de modo que toda la colección pueda manipularse como una única entidad compuesta. Sin embargo, tienen muchas diferencias, en particular: gestión del ciclo de vida (inserción y eliminación de filas, frente a recolección de basura o recuento de referencias ), referencias a otras entidades (referencias de objetos, frente a referencias de claves externas) y herencia (inexistente en bases de datos relacionales). . Además, los objetos se administran en el montón y están bajo el control total de un único proceso, mientras que las tuplas de la base de datos se comparten y deben incorporar bloqueo, fusión y reintento. El mapeo relacional de objetos proporciona soporte automatizado para mapear tuplas a objetos y viceversa, al mismo tiempo que tiene en cuenta todas estas diferencias. [1]

El meollo del problema consiste en traducir la representación lógica de los objetos a una forma atomizada que sea capaz de almacenarse en la base de datos preservando al mismo tiempo las propiedades de los objetos y sus relaciones para que puedan recargarse como objetos cuando sea necesario. Si se implementa esta funcionalidad de almacenamiento y recuperación, se dice que los objetos son persistentes . [1]

Descripción general

Los detalles específicos de la implementación de los controladores de almacenamiento generalmente están incluidos en una API en el lenguaje de programación en uso, exponiendo métodos para interactuar con el medio de almacenamiento de una manera más simple y más acorde con los paradigmas del código circundante.

El siguiente es un ejemplo simple, escrito en código C# , para ejecutar una consulta escrita en SQL usando un motor de base de datos.

var sql = "SELECCIONE id, nombre, apellido, teléfono, fecha de nacimiento, sexo, edad DE personas DONDE id = 10" ; var resultado = contexto . Personas . DesdeSqlRaw ( sql ). Listar (); var nombre = resultado [ 0 ][ "primer_nombre" ];         

Por el contrario, lo siguiente utiliza una API de trabajo ORM que permite escribir código que utiliza naturalmente las características del lenguaje.

var persona = repositorio . ObtenerPersona ( 10 ); var nombre = persona . ObtenerPrimerNombre ();      

El caso anterior utiliza un objeto que representa el repositorio de almacenamiento y los métodos de ese objeto. Otros marcos pueden proporcionar código como métodos estáticos, como en el ejemplo siguiente, y es posible que otros métodos no implementen en absoluto un sistema orientado a objetos. A menudo, la elección del paradigma se realiza para que el ORM se ajuste mejor a los principios de diseño del lenguaje circundante.

var persona = Persona . Obtener ( 10 );   

Comparación con técnicas tradicionales de acceso a datos

En comparación con las técnicas tradicionales de intercambio entre un lenguaje orientado a objetos y una base de datos relacional, ORM a menudo reduce la cantidad de código que debe escribirse. [2]

Las desventajas de las herramientas ORM generalmente surgen del alto nivel de abstracción que oscurece lo que realmente sucede en el código de implementación. Además, se ha citado la gran dependencia del software ORM como un factor importante en la producción de bases de datos mal diseñadas. [3]

Bases de datos orientadas a objetos

Otro enfoque es utilizar un sistema de gestión de bases de datos orientado a objetos (OODBMS) o bases de datos orientadas a documentos , como las bases de datos XML nativas , que proporcionan más flexibilidad en el modelado de datos. Los OODBMS son bases de datos diseñadas específicamente para trabajar con valores orientados a objetos. El uso de un OODBMS elimina la necesidad de convertir datos hacia y desde su formato SQL, ya que los datos se almacenan en su representación de objeto original y las relaciones se representan directamente, en lugar de requerir tablas /operaciones de unión. El equivalente de los ORM para bases de datos orientadas a documentos se denominan mapeadores de documentos-objetos (ODM).

Las bases de datos orientadas a documentos también evitan que el usuario tenga que "triturar" objetos en filas de la tabla. Muchos de estos sistemas también admiten el lenguaje de consulta XQuery para recuperar conjuntos de datos.

Las bases de datos orientadas a objetos tienden a usarse en aplicaciones complejas y especializadas. Uno de los argumentos en contra del uso de un OODBMS es que es posible que no pueda ejecutar consultas ad hoc independientes de la aplicación. [ cita necesaria ] Por esta razón, muchos programadores se sienten más cómodos con un sistema de mapeo de objetos SQL, aunque la mayoría de las bases de datos orientadas a objetos pueden procesar consultas SQL hasta cierto punto. Otros OODBMS proporcionan replicación a bases de datos SQL, como un medio para abordar la necesidad de consultas ad hoc, preservando al mismo tiempo patrones de consulta bien conocidos. [ cita necesaria ]

Desafíos

Surgen diversas dificultades al considerar cómo hacer coincidir un sistema de objetos con una base de datos relacional. Estas dificultades se conocen como desajuste de impedancia relacional entre el objeto . [4]

Una alternativa a la implementación de ORM es el uso de los lenguajes de procedimiento nativos que se proporcionan con todas las bases de datos importantes. Estos se pueden llamar desde el cliente mediante sentencias SQL. El patrón de diseño Data Access Object (DAO) se utiliza para abstraer estas declaraciones y ofrecer una interfaz ligera orientada a objetos para el resto de la aplicación. [5]

Ver también

Referencias

  1. ^ ab "¿Qué es el mapeo de objetos/relacional?". Descripción general de hibernación . Hibernación JBOSS . Consultado el 27 de enero de 2022 .
  2. ^ Douglas Barry, Torsten Stanienda, "Resolver el problema del almacenamiento de objetos Java", Computadora, vol. 31, núm. 11, págs. 33-40, noviembre de 1998, extracto en https://www.service-architecture.com/articles/object-relational-mapping/transparent-persistence-vs-jdbc-call-level-interface.html Líneas de código que utiliza O/R son sólo una fracción de los necesarios para una interfaz a nivel de llamada (1:4). Para este ejercicio, se necesitaron 496 líneas de código usando ODMG Java Binding en comparación con 1923 líneas de código usando JDBC.
  3. ^ Josh Berkus, "Wrecking Your Database", Computer, agosto de 2009, https://www.toolbox.com/tech/data-management/blogs/wrecking-your-database-080509/
  4. ^ Revisión del mapeo relacional de objetos: un estudio cuantitativo sobre el impacto de la tecnología de bases de datos en las estrategias de mapeo O/R. Lorenz M, Rudolph JP, Hesse G, Uflacker M, Plattner H. Conferencia Internacional de Hawaii sobre Ciencias de Sistemas (HICSS), 4877-4886 (DOI:10.24251/hicss.2017.592)
  5. ^ Feuerstein, Steven; Bill Pribyl (septiembre de 1997). "Programación Oracle PL/SQL". 18.5 Modificación de objetos persistentes . Consultado el 23 de agosto de 2011 .{{cite web}}: CS1 maint: location (link)

enlaces externos