base de datos de navegación


Una base de datos de navegación es un tipo de base de datos en la que los registros u objetos se encuentran principalmente siguiendo las referencias de otros objetos. El término fue popularizado por el título del artículo del Premio Turing de 1973 de Charles Bachman , The Programmer as Navigator . [1] Este documento enfatizó el hecho de que los nuevos sistemas de bases de datos basados ​​en disco permitían al programador elegir rutas de navegación arbitrarias siguiendo relaciones de registro a registro, contrastando esto con las limitaciones de los sistemas anteriores de cinta magnética y tarjetas perforadas donde el acceso a los datos estaba estrictamente restringido. secuencial.

Una de las primeras bases de datos de navegación fue Integrated Data Store (IDS), que fue desarrollada por Bachman para General Electric en la década de 1960. IDS se convirtió en la base del modelo de base de datos CODASYL en 1969.

Aunque Bachman describió el concepto de navegación en términos abstractos, la idea de acceso de navegación se asoció fuertemente con el diseño procedimental del lenguaje de manipulación de datos CODASYL . Escribiendo en 1982, por ejemplo, Tsichritzis y Lochovsky [2] afirman que "La noción de moneda es fundamental para el concepto de navegación". Por la noción de moneda, se refieren a la idea de que un programa mantiene (explícita o implícitamente) una posición actual en cualquier secuencia de registros que esté procesando, y que operaciones como GET NEXTy GET PRIORrecuperan registros relativos a esta posición actual, al mismo tiempo que cambian la posición actual al registro que se recupera.

Por lo tanto, la programación de bases de datos de navegación llegó a ser vista como intrínsecamente procesal ; y además depender del mantenimiento de un conjunto implícito de variables globales ( indicadores de divisas ) que sostienen el estado actual. Como tal, el enfoque fue visto como diametralmente opuesto al estilo de programación declarativo utilizado por el modelo relacional . La naturaleza declarativa de los lenguajes relacionales como SQL ofreció una mejor productividad del programador y un mayor nivel de independencia de los datos (es decir, la capacidad de los programas para seguir funcionando a medida que evoluciona la estructura de la base de datos). Las interfaces de navegación, como resultado, fueron gradualmente eclipsadas durante el 1980 por lenguajes de consulta declarativos.

Durante la década de 1990 empezó a quedar claro que para ciertas aplicaciones que manejan datos complejos (por ejemplo, bases de datos espaciales y bases de datos de ingeniería), el cálculo relacional tenía limitaciones. En ese momento, comenzó una reevaluación de todo el mercado de bases de datos, y varias empresas describieron los nuevos sistemas utilizando el término de marketing NoSQL . Muchos de estos sistemas introdujeron lenguajes de manipulación de datos que, aunque muy alejados del CODASYL DML con sus indicadores de moneda, podría entenderse como una implementación de la visión de "navegación" de Bachman. Algunos de estos lenguajes son procedimentales; otros (como XPath ) son totalmente declarativos. Las ramificaciones del concepto de navegación, como la base de datos de gráficos , encontraron nuevos usos en el procesamiento de transacciones modernas.cargas de trabajo

El acceso de navegación se asocia tradicionalmente con el modelo de red y el modelo jerárquico de la base de datos , y describe convencionalmente las API de manipulación de datos en las que los registros (u objetos) se procesan uno a la vez, de manera iterativa. Sin embargo, la característica esencial, tal como la describe Bachman, es encontrar registros en virtud de su relación con otros registros: por lo tanto, una interfaz aún puede ser de navegación si tiene características orientadas a conjuntos. [3] Desde este punto de vista, la diferencia clave entre los lenguajes de manipulación de datos de navegación y los lenguajes relacionales es el uso de relaciones con nombres explícitos en lugar de uniones basadas en valores: for department with name="Sales", find all employees in set department-employeesversus find employees, departments where employee.department-code = department.code and department.name="Sales".