6

Asignación relacional de objetos, ORM es un problema que debe resolverse en todas las aplicaciones que se implementa en un lenguaje de programación orientado a objetos y utiliza una base de datos relacional.¿El ORM es un problema específico de la programación orientada a objetos?

¿Pero el problema no es el mismo si está utilizando structs para mapear bases de datos relacionales en C? Y tuplas/registros en un lenguaje de programación funcional? O me estoy perdiendo algo ya que no he escrito una aplicación de base de datos en C o en un lenguaje funcional.

Respuesta

6

Bueno, sí y no.

Lo que se está refiriendo a que se conoce como la Object-Relational impedance mismatch, es decir el problema de transferir datos entre un modelo orientado a objetos y un modelo Entidad-Relación.La dificultad se debe a las formas intrínsecamente diferentes de estructurar y almacenar información en los dos modelos, donde OO es jerárquico, mientras que ER es tabular.

Object-Relational Mapping es una técnica que intenta resolver el problema de desajuste de impedancia relativa de objeto.

El término desajuste de impedancia relativa de objeto es específico para los modelos Object-Oriented y Entity-Relationship. Sin embargo, la palabra "impedancia" significa resistencia o dificultad, por lo que el término "impedancia no coincidente" podría utilizarse para expresar el problema general de la correspondencia entre dos modelos de modelos de datos/sistemas incompatibles.

3

Los principales problemas en ORM no son manejar las funciones sencillas, como asignar la columna "x" al campo de estructura "x". Eso se puede hacer mediante varios trucos (macros, código gen, reflejo, etc.).

El problema es cómo manejar características OOP como herencia, composición, referencias, exclusividad de objeto, interfaces, etc. La herencia es una perra en este sentido, ya que su implementación ingenua como varias tablas no es óptima.

5

Como anécdota, al menos, este "desajuste de impedancia" parece ser peculiar a las situaciones en las que se desea llevar las relaciones a un idioma de objeto.

En C, la mayoría de las API de bases de datos tienden a exponer conjuntos de resultados como matrices multidimensionales, en lugar de como estructuras. En consecuencia, uno simplemente está accediendo a los datos en el mismo formato que existe en la (s) tabla (s) de la base de datos; no tiene importancia que ahora exista como una copia local de los datos, en lugar de "en la base de datos".

La mayoría de las bibliotecas RDBMS funcionales exponen las filas de la base de datos como tipos de registro, que corresponden a un nivel bastante profundo a las filas de la base de datos casi a la perfección. No hay "desajuste de impedancia" en esta situación.

El Wikipedia article sobre el tema parece especular sobre algunas de las razones por las que el paradigma del objeto es particularmente susceptible a esta falta de coincidencia.

Mi creencia es que esencialmente se basa en el hecho de que siempre está construyendo una representación secundaria de los datos (es decir, superponiendo "objetos"). En la mayoría de los lenguajes funcionales imperativos o (no objeto), es menos probable que se cree una representación secundaria tan grande, semánticamente irrelevante de sus datos. Si uno va a construir una representación secundaria en ese mundo, es más probable que sea una abstracción de algún tipo. Esto corresponde a una creencia básica (no comprobada) de que el paradigma OOP es básicamente el martillo proverbial que hace que cada problema parezca un clavo.

3

Tiene 2 errores de impedancia.

  1. Records to Objects.
  2. Tu lenguaje para las consultas SQL.

Mientras que el primer desajuste de impedancia podría no funcionar para todos los lenguajes de POO no es el segundo appearant en todos los idiomas y podría resolverse mediante DSL as seen here

Cuestiones relacionadas