Adaptación de impedancias objeto-relacionalLa Adaptación de impedancias objeto-relacional (object-relational impedance mismatch en inglés) es una serie de problemas conceptuales y técnicos que se presentan a menudo al trabajar con sistemas gestores de bases de datos relacionales desde servidores de aplicaciones desarrollados en lenguajes orientados a objetos.[1] Los problemas se centran, principalmente, en el mapeo de definiciones de objetos o clases en tablas de una base de datos definida según un esquema relacional. El término proviene del concepto de ingeniería eléctrica Adaptación de impedancias. ProblemasEl problema base es que mientras que las instancias de objetos se referencian unas a otras formando un grafo (en el sentido matemático, con bucles y ciclos), los esquemas relacionales son tablas basadas en álgebra relacional que se enlazan con otras tuplas heterogéneas agrupando sus campos en filas con distintos tipos de datos. Problemas relacionados con conceptos de la orientación a objetosEncapsulaciónLos programas orientados a objeto facilitan un diseño detallado con técnicas que permiten ocultar la representación interna de objetos (lo que se conoce como "encapsulación") En un entorno orientado a objetos los atributos internos de un objeto no se muestran exteriormente a ningún otro elemento, siendo sólo accesibles mediante la interfaz propia que implemente Sin embargo, el mapeo objeto-relacional tiene que mostrar necesariamente el contenido interno de un objeto para interactuar con otros elementos. De este modo el mapeo suele violar el principio de encapsulación del objeto al hacer públicos de manera automática campos de éste en forma de columnas de la base de datos. AccesibilidadEl control de acceso a los datos de un objeto (privado, público, protegido, ...) está en la naturaleza de su modelo. Sin embargo, en el modelo relacional el control es mucho más difuso. Interfaces, clases, herencia y polimorfismoEn el paradigma orientado a objetos los objetos definen interfaces que son la única forma de acceder a su elementos internos. Sin embargo, en el modelo relacional esto el acceso se controla mediante vistas (views) que dan distinta perspectiva y restricciones. Lo mismo sucede con otros conceptos claves en el modelo orientado a objetos como pueden ser las clases de objetos, herencia y polimorfismo, no considerados en sistemas relacionales de bases de datos. Mapeo a conceptos relacionalesUn mapeo adecuado entre conceptos relacional y orientado a objetos requeriría establecer relaciones entre tablas de la base de datos y asociaciones del análisis orientado a objetos. Diferencias en tipos de datosPueden existir muchas diferencias entre los tipos de datos en un lenguaje orientado a objetos y un modelo relacional de bases de datos. ESte segundo prohíbe el uso de atributos que sean referencias (punteros), mientras que en OO es muy común. Otro aspecto es la semática de las operaciones en cada tipo y entre tipos. Además estos problemas se presentan con más profundidad en tipos de datos más complejos. Diferencias en estructura e integridadEn los lenguajes OO, los objetos se componen de otros objetos en varias capas, mientras que en el modelo relacional se lo representa con nombres de variables no anidadas. A veces las restricciones de un lenguaje OO no tienen fácil representación en el modelo relacional, pero es que además a veces se declaran implícitamente con el uso de excepciones en el código que manipula los datos internos. Diferencias en la manipulaciónLa manipulación presenta diferencias semánticas. El modelo relacional define pocos operadores muy rigurosos (matemáticos) para hacer consultas, mientras que los lenguajes OO tienen operadores de consulta más complejos y personalizados en cada lenguaje. Diferencias en las transaccionesEl manejo de transacciones y concurrencia también suele presentar diferencias entre las dos aproximaciones. AlternativasExisten varias alternativas a los problemas anteriores Uso de una arquitectura alternativaLa mayoría de estos problemas derivan del mapeo de elementos del modelo de objetos a tuplas de relaciones de bases de datos, por lo que el uso de otros sistemas de gestión de bases de datos como los NoSQL o XML lo solucionarían[2] Minimización de los problemasUn solución habitual es que un framework modele en tiempo de ejecución aspectos que son estáticos en ambos modelos. Limitaciones:
CompensaciónExisten frameworks que automatizan el tratamiento de datos mediante patrones implementados sobre técnicas de reflexión o programación automática No obstante presentan anomalías, como la mezcla de propiedades del dominio (por ejemplo "número de teléfono") y del framework (por ejemplo "IsModified"). Véase tambiénReferencias
|