¿Cuál es el desajuste objeto / impedancia relacional?

La discordancia de impedancia relacional de objeto

El “desajuste de impedancia relacional de objeto” (a veces llamado “desajuste de paradigma”) es solo una forma elegante de decir que los modelos de objeto y los modelos relacionales no funcionan muy bien juntos. Los RDBMS representan datos en formato tabular (una hoja de cálculo es una buena visualización para aquellos que no están familiarizados con los RDBMS), mientras que los lenguajes orientados a objetos, como Java, lo representan como un gráfico interconectado de objetos. Cargar y almacenar gráficos de objetos usando una base de datos relacional tabular nos expone a 5 problemas de desajuste …

Granularidad

A veces tendrá un modelo de objetos que tiene más clases que el número de tablas correspondientes en la base de datos (decimos que el modelo de objetos es más granular que el modelo relacional). Tomemos como ejemplo la noción de una dirección …

Subtipos (herencia)

La herencia es un paradigma natural en los lenguajes de programación orientados a objetos. Sin embargo, los RDBMS no definen nada similar en general (sí, algunas bases de datos tienen soporte de subtipo pero no está completamente estandarizado) …

Identidad

Un RDBMS define exactamente una noción de ‘igualdad’: la clave primaria. Sin embargo, el lenguaje OOP, por ejemplo, Java, define la identidad del objeto a==b igualdad del objeto a.equals(b) .

Asociaciones

Las asociaciones se representan como referencias unidireccionales en lenguajes orientados a objetos, mientras que los RDBMS utilizan la noción de claves foráneas. Si necesita relaciones bidireccionales en Java, debe definir la asociación dos veces.

Del mismo modo, no puede determinar la multiplicidad de una relación mirando el modelo de dominio de objeto.

Navegación de datos

La forma en que accede a los datos en el lenguaje OOP, por ejemplo, Java, es fundamentalmente diferente de la forma en que lo hace en una base de datos relacional. En Java, navegas de una asociación a otra recorriendo la red de objetos.

Esta no es una forma eficiente de recuperar datos de una base de datos relacional. Por lo general, desea minimizar el número de consultas SQL y, por lo tanto, cargar varias entidades a través de JOIN y seleccionar las entidades objetivo antes de comenzar a recorrer la red de objetos.

En la memoria, las estructuras de “objeto” forman estructuras gráficas naturales en virtud de sus referencias mutuas.

Las bases de datos relacionales estructuran la información en forma “tabular”.

Almacenar la red de referencias entre objetos en un conjunto de tablas relacionales es una mala coincidencia, propensa a ineficiencias. A lo largo de la línea, algún tipo de software con experiencia o conocimiento de los conceptos de ingeniería eléctrica (donde se origina la noción de “desajuste de impedancia”), decidió que este término era una buena metáfora de la mala coincidencia entre las redes de objetos y las tablas relacionales.

Podemos discutir con la apropiación de la terminología, pero el desajuste es muy real.

El desajuste de impedancia de objeto / relacional se refiere a la paradoja de que tratar tablas como objetos impide el desarrollo de software porque es un desajuste de conceptos. En resumen: las tablas de la base de datos son complejas, especialmente cuando se trata de comportamientos JOIN / index / lock.

More Interesting

¿Qué haría si necesita entrevistar a un desarrollador de software con habilidades técnicas mucho más fuertes que usted?

¿Podré llegar a un nivel respetable como ingeniero de software si no soy competente con la línea de comandos y los entornos Unix?

Cómo medir periódicamente el crecimiento del desarrollador

¿Hay algún libro sobre el flujo de negocios de un desarrollo de software para la empresa del cliente?

¿Cuáles son algunas de las formas de obtener una pasantía de desarrollador de software pagado en Alemania?

Cómo encontrar puestos de desarrollo de software de nivel de entrada, cuando parece que todos quieren desarrolladores senior

¿Qué tan popular es el jiu-jitsu brasileño entre programadores y desarrolladores de software?

¿Qué temas necesito para ser perfecto para conseguir un trabajo como desarrollador de software de nivel de entrada o desarrollador de Java?

¿Cómo funcionaban los programadores antes de que se crearan los sistemas de control de versiones?

Cómo convertirse en desarrollador

Imagine un freelance de desarrollo de software que ha adquirido un proyecto extremadamente importante que requiere un equipo. Sin embargo, el prototipo supera la financiación inicial. ¿Cuál es el mejor enfoque para darse cuenta del éxito del proyecto?

Cómo dejar de sentirse mal por no haber sido invitado a una reunión de diseño y respetar la discreción del organizador de la reunión

¿Cómo maneja su (s) equipo (s) de desarrollo la gestión del conocimiento?

¿Es posible que el ingeniero de control de calidad pase a un rol de desarrollador dentro del equipo de Apple después de un año más o menos?

¿Qué materias debo elegir para mis niveles A si quiero convertirme en desarrollador de software o ingeniero de software?