Una base de datos de objetos o una base de datos orientada a objetos es un sistema de gestión de bases de datos en el que la información se representa en forma de objetos , como se utiliza en la programación orientada a objetos . Las bases de datos de objetos son diferentes de las bases de datos relacionales , que están orientadas a tablas. Un tercer tipo, las bases de datos relacionales-objeto , es un híbrido de ambos enfoques. Las bases de datos de objetos se han considerado desde principios de la década de 1980. [2]
Los sistemas de gestión de bases de datos orientados a objetos (OODBMS), también llamados ODBMS (Object Database Management System), combinan las capacidades de las bases de datos con las capacidades de los lenguajes de programación orientados a objetos . Los OODBMS permiten a los programadores orientados a objetos desarrollar el producto, almacenarlo como objetos y replicar o modificar objetos existentes para crear nuevos objetos dentro del OODBMS. Debido a que la base de datos está integrada con el lenguaje de programación, el programador puede mantener la coherencia dentro de un entorno, ya que tanto el OODBMS como el lenguaje de programación utilizarán el mismo modelo de representación. Los proyectos de DBMS relacionales, por el contrario, mantienen una división más clara entre el modelo de base de datos y la aplicación.
A medida que aumenta el uso de la tecnología basada en la Web con la implementación de intranets y extranets, las empresas tienen un interés particular en los sistemas de gestión de bases de datos orientados al usuario (DBMS) para mostrar sus datos complejos. El uso de un DBMS que haya sido diseñado específicamente para almacenar datos como objetos ofrece una ventaja a aquellas empresas que están orientadas a la presentación multimedia o a las organizaciones que utilizan el diseño asistido por computadora (CAD). [3]
Algunas bases de datos orientadas a objetos están diseñadas para funcionar bien con lenguajes de programación orientados a objetos como Delphi , Ruby , Python , JavaScript , Perl , Java , C# , Visual Basic .NET , C++ , Objective-C y Smalltalk ; otras, como JADE, tienen sus propios lenguajes de programación. Los OODBMS utilizan exactamente el mismo modelo que los lenguajes de programación orientados a objetos.
Los sistemas de gestión de bases de datos de objetos surgieron de la investigación realizada a principios y mediados de la década de 1970 y ahora cuentan con un soporte intrínseco para la gestión de bases de datos de objetos estructurados en gráficos. El término "sistema de base de datos orientado a objetos" apareció por primera vez alrededor de 1985. [4] Entre los proyectos de investigación más destacados se encuentran Encore-Ob/Server ( Universidad de Brown ), EXODUS ( Universidad de Wisconsin-Madison ), IRIS (Hewlett-Packard), ODE ( Bell Labs ), ORION ( Microelectronics and Computer Technology Corporation o MCC), Vodak (GMD-IPSI) y Zeitgeist (Texas Instruments). El proyecto ORION tuvo más artículos publicados que cualquiera de los otros proyectos. Won Kim, de MCC, recopiló los mejores de esos artículos en un libro publicado por The MIT Press. [5]
Los primeros productos comerciales incluyeron Gemstone (Servio Logic, nombre cambiado a GemStone Systems), Gbase (Graphael) y Vbase (Ontologic). Otros productos comerciales ingresaron al mercado a fines de la década de 1980 y hasta mediados de la década de 1990. Estos incluyeron ITASCA (Itasca Systems), Jasmine (Fujitsu, comercializado por Computer Associates), Matisse (Matisse Software), Objectivity/DB (Objectivity, Inc.), ObjectStore ( Progress Software , adquirido de eXcelon que originalmente era Object Design, Incorporated ), ONTOS (Ontos, Inc., nombre cambiado de Ontologic), O 2 [6] (O 2 Technology, fusionada con varias empresas, adquirida por Informix , que a su vez fue adquirida por IBM ), POET (ahora FastObjects de Versant que adquirió Poet Software), Versant Object Database (Versant Corporation), VOSS (Logic Arts) y JADE (Jade Software Corporation). Algunos de estos productos permanecen en el mercado y se les han unido nuevos productos comerciales y de código abierto como InterSystems Caché .
Los sistemas de gestión de bases de datos de objetos añadieron el concepto de persistencia a los lenguajes de programación de objetos. Los primeros productos comerciales se integraron con varios lenguajes: GemStone ( Smalltalk ), Gbase ( LISP ), Vbase ( COP ) y VOSS (Virtual Object Storage System for Smalltalk ). Durante gran parte de la década de 1990, C++ dominó el mercado de gestión de bases de datos de objetos comerciales. Los proveedores añadieron Java a finales de la década de 1990 y, más recientemente, C# .
A partir de 2004, las bases de datos de objetos experimentaron un segundo período de crecimiento cuando surgieron bases de datos de objetos de código abierto que eran ampliamente asequibles y fáciles de usar, porque estaban escritas completamente en lenguajes OOP como Smalltalk, Java o C#, como db4o de Versant (db4objects), DTS/S1 de Obsidian Dynamics y Perst (McObject), disponibles bajo licencia dual de código abierto y comercial.
Las bases de datos de objetos basadas en programación persistente adquirieron un nicho en áreas de aplicación como bases de datos de ingeniería y espaciales , telecomunicaciones y áreas científicas como la física de altas energías [13] y la biología molecular . [14]
Otro grupo de bases de datos de objetos se centra en el uso integrado en dispositivos, software empaquetado y sistemas en tiempo real .
La mayoría de las bases de datos de objetos también ofrecen algún tipo de lenguaje de consulta , lo que permite encontrar objetos mediante un enfoque de programación declarativa . Es en el área de los lenguajes de consulta de objetos y la integración de las interfaces de consulta y navegación donde se encuentran las mayores diferencias entre los productos. La ODMG realizó un intento de estandarización con el lenguaje de consulta de objetos , OQL.
El acceso a los datos puede ser más rápido porque se puede recuperar un objeto directamente sin necesidad de realizar una búsqueda, siguiendo punteros .
Otra área de variación entre productos es la forma en que se define el esquema de una base de datos. Sin embargo, una característica general es que el lenguaje de programación y el esquema de la base de datos utilizan las mismas definiciones de tipo.
Las aplicaciones multimedia se facilitan porque los métodos de clase asociados a los datos son responsables de su correcta interpretación.
Muchas bases de datos de objetos, por ejemplo Gemstone o VOSS, ofrecen soporte para control de versiones . Un objeto puede verse como el conjunto de todas sus versiones. Además, las versiones de los objetos pueden tratarse como objetos por derecho propio. Algunas bases de datos de objetos también proporcionan soporte sistemático para activadores y restricciones que son la base de las bases de datos activas .
La eficiencia de una base de datos de este tipo también mejora considerablemente en áreas que exigen cantidades masivas de datos sobre un artículo. Por ejemplo, una institución bancaria podría obtener la información de la cuenta del usuario y proporcionarle de manera eficiente información extensa, como transacciones, entradas de información de la cuenta, etc.
El Object Data Management Group era un consorcio de proveedores de bases de datos de objetos y mapeo relacional de objetos, miembros de la comunidad académica y partes interesadas. Su objetivo era crear un conjunto de especificaciones que permitieran la portabilidad de aplicaciones que almacenan objetos en sistemas de gestión de bases de datos. Publicó varias versiones de su especificación. La última versión fue ODMG 3.0. En 2001, la mayoría de los principales proveedores de bases de datos de objetos y mapeo relacional de objetos afirmaron su conformidad con el ODMG Java Language Binding. El cumplimiento de los demás componentes de la especificación fue mixto. En 2001, el ODMG Java Language Binding se presentó al Java Community Process como base para la especificación Java Data Objects . Las empresas miembro del ODMG decidieron entonces concentrar sus esfuerzos en la especificación Java Data Objects. Como resultado, el ODMG se disolvió en 2001.
Muchas ideas de bases de datos de objetos también fueron absorbidas por SQL:1999 y se han implementado en diversos grados en productos de bases de datos relacionales de objetos .
En 2005, Cook, Rai y Rosenberger propusieron abandonar todos los esfuerzos de estandarización para introducir API de consulta orientadas a objetos adicionales y, en su lugar, utilizar el propio lenguaje de programación orientado a objetos, es decir, Java y .NET, para expresar consultas. Como resultado, surgieron las consultas nativas. De manera similar, Microsoft anunció Language Integrated Query (LINQ) y DLINQ, una implementación de LINQ, en septiembre de 2005, para proporcionar capacidades de consulta de bases de datos integradas en el lenguaje con sus lenguajes de programación C# y VB.NET 9.
En febrero de 2006, el Object Management Group (OMG) anunció que se le había concedido el derecho a desarrollar nuevas especificaciones basadas en la especificación ODMG 3.0 y la formación del Object Database Technology Working Group (ODBT WG). El ODBT WG planeaba crear un conjunto de estándares que incorporarían avances en la tecnología de bases de datos de objetos (por ejemplo, replicación), gestión de datos (por ejemplo, indexación espacial) y formatos de datos (por ejemplo, XML) e incluir nuevas características en estos estándares que respaldaran dominios en los que se están adoptando bases de datos de objetos (por ejemplo, sistemas en tiempo real). El trabajo del ODBT WG se suspendió en marzo de 2009 cuando, después de la crisis económica de finales de 2008, los proveedores de ODB involucrados en este esfuerzo decidieron concentrar sus recursos en otras áreas.
En enero de 2007, el Consorcio World Wide Web otorgó el estatus de recomendación final al lenguaje XQuery . XQuery utiliza XML como modelo de datos. Algunas de las ideas desarrolladas originalmente para bases de datos de objetos se incorporaron a XQuery, pero XQuery no está intrínsecamente orientado a objetos. Debido a la popularidad de XML, los motores XQuery compiten con las bases de datos de objetos como vehículo para el almacenamiento de datos que son demasiado complejos o variables para almacenarlos cómodamente en una base de datos relacional. XQuery también permite escribir módulos para proporcionar funciones de encapsulación que han sido proporcionadas por sistemas orientados a objetos.
XQuery v1 y XPath v2 y posteriores son potentes y están disponibles tanto en software de código abierto como libre (FOSS), [15] [16] [17] así como en sistemas comerciales. Son fáciles de aprender y usar, y muy potentes y rápidos. No son relacionales y XQuery no se basa en SQL (aunque una de las personas que diseñó XQuery también co-inventó SQL). Pero tampoco están orientados a objetos, en el sentido de programación: XQuery no utiliza encapsulación con ocultamiento, despacho implícito y clases y métodos. Las bases de datos XQuery generalmente utilizan XML y JSON como formato de intercambio, aunque se utilizan otros formatos.
Desde principios de la década de 2000, JSON ha ganado popularidad y adopción por parte de la comunidad en aplicaciones en las que los desarrolladores controlan el formato de los datos. JSONiq , un análogo de consulta de XQuery para JSON (que comparte las expresiones y operaciones principales de XQuery), demostró la equivalencia funcional de los formatos JSON y XML para la información orientada a datos. En este contexto, la principal estrategia de los mantenedores de OODBMS fue adaptar JSON a sus bases de datos (usándolo como tipo de datos interno).
En enero de 2016, con el lanzamiento de PostgreSQL 9.5 [18], fue el primer OODBMS FOSS que ofreció un tipo de datos interno JSON (JSONB) eficiente con un conjunto completo de funciones y operaciones para todas las manipulaciones relacionales y no relacionales básicas.
Una base de datos de objetos almacena datos complejos y relaciones entre datos directamente, sin asignarlos a filas y columnas relacionales , y esto los hace adecuados para aplicaciones que manejan datos muy complejos. [19] Los objetos tienen una relación de muchos a muchos y se accede a ellos mediante el uso de punteros. Los punteros están vinculados a objetos para establecer relaciones. Otro beneficio de un OODBMS es que se puede programar con pequeñas diferencias de procedimiento sin afectar a todo el sistema. [20]