stringtranslate.com

Base de datos temporal

Una base de datos temporal almacena datos relacionados con instancias de tiempo. Ofrece tipos de datos temporales y almacena información relacionada con el tiempo pasado, presente y futuro. Las bases de datos temporales pueden ser unitemporales, bitemporales o tritemporales.

Más específicamente, los aspectos temporales suelen incluir el tiempo válido , el tiempo de transacción y/o el tiempo de decisión .

Tipos

Unitemporal

Una base de datos unitemporal tiene un eje de tiempo, ya sea el rango de validez o el rango de tiempo del sistema.

bitemporal

Una base de datos bitemporal tiene dos ejes de tiempo:

tritemporal

Una base de datos tritemporal tiene tres ejes de tiempo:

Este enfoque introduce complejidades adicionales.

Las bases de datos temporales contrastan con las bases de datos actuales (que no deben confundirse con las bases de datos disponibles actualmente), que almacenan sólo hechos que se creen ciertos en el momento actual.

Características

Las bases de datos temporales admiten la gestión y el acceso a datos temporales proporcionando una o más de las siguientes características: [1] [2]

Historia

Con el desarrollo de SQL y su uso en aplicaciones de la vida real, los usuarios de bases de datos se dieron cuenta de que cuando agregaban columnas de fecha a campos clave, surgían algunos problemas. Por ejemplo, si una tabla tiene una clave principal y algunos atributos, agregar una fecha a la clave principal para realizar un seguimiento de los cambios históricos puede generar más filas de las previstas. Las eliminaciones también deben manejarse de manera diferente cuando se realiza un seguimiento de las filas de esta manera. En 1992, se reconoció este problema, pero la teoría estándar de bases de datos aún no estaba preparada para resolverlo, y tampoco lo estaba el entonces recién formalizado estándar SQL-92 .

Richard Snodgrass propuso en 1992 que la comunidad de bases de datos temporales desarrollara extensiones temporales de SQL. En respuesta a esta propuesta, se formó un comité para diseñar extensiones a la edición de 1992 del estándar SQL (ANSI X3.135.-1992 e ISO/IEC 9075:1992); esas extensiones, conocidas como TSQL2, fueron desarrolladas durante 1993 por este comité. [3] A finales de 1993, Snodgrass presentó este trabajo al grupo responsable del Estándar Nacional Estadounidense para el Lenguaje de Base de Datos SQL, Comité Técnico ANSI X3H2 (ahora conocido como NCITS H2). La especificación preliminar del lenguaje apareció en el registro ACM SIGMOD de marzo de 1994. Con base en las respuestas a esa especificación, se realizaron cambios en el lenguaje y la versión definitiva de la Especificación del lenguaje TSQL2 se publicó en septiembre de 1994 [4].

Se intentó incorporar partes de TSQL2 en el nuevo estándar SQL SQL:1999 , llamado SQL3. Partes de TSQL2 se incluyeron en un nuevo subestándar de SQL3, ISO/IEC 9075-7, llamado SQL/Temporal. [3] El enfoque TSQL2 fue fuertemente criticado por Chris Date y Hugh Darwen . [5] El proyecto ISO responsable del apoyo temporal fue cancelado a finales de 2001.

A partir de diciembre de 2011, ISO/IEC 9075, Lenguaje de base de datos SQL:2011 Parte 2: SQL/Foundation incluyó cláusulas en las definiciones de tablas para definir "tablas de períodos de tiempo de aplicación" ( tablas de tiempos válidas ), "tablas versionadas por el sistema" ( tiempos de transacción ). tablas) y "tablas de períodos de tiempo de aplicación versionadas por el sistema" ( tablas bitemporales ). Una diferencia sustancial entre la propuesta TSQL2 y lo adoptado en SQL:2011 es que no hay columnas ocultas en el tratamiento SQL:2011, ni tiene un nuevo tipo de datos para intervalos; en su lugar , se pueden unir dos columnas con marcas de fecha (DS) o marcas de fecha y horaPERIOD FOR (DTS) mediante una declaración. Otra diferencia es la sustitución de los controvertidos modificadores de sentencias (prefijo) de TSQL2 por un conjunto de predicados temporales. [1]

Otras características del estándar SQL:2011 relacionadas con las bases de datos temporales son la división automática de períodos de tiempo, claves primarias temporales, integridad referencial temporal, predicados temporales con álgebra de intervalos de Allen y consultas secuenciadas y divididas en el tiempo.

Ejemplo

A modo de ilustración, considere la siguiente breve biografía de un hombre ficticio, John Doe:

John Doe nació el 3 de abril de 1975 en el Kids Hospital of Medicine County, como hijo de Jack Doe y Jane Doe que vivían en Smallville. Jack Doe registró con orgullo el nacimiento de su primogénito el 4 de abril de 1975 en el Ayuntamiento de Smallville. John creció como un niño alegre, resultó ser un estudiante brillante y se graduó con honores en 1993. Después de graduarse, se fue a vivir solo a Bigtown. Aunque se mudó el 26 de agosto de 1994, olvidó registrar oficialmente el cambio de dirección. Fue sólo en el cambio de estaciones que su madre le recordó que tenía que registrarse, lo que hizo unos días después, el 27 de diciembre de 1994. Aunque John tenía un futuro prometedor, su historia termina trágicamente. John Doe fue atropellado accidentalmente por un camión el 1 de abril de 2001. El forense informó la fecha de su muerte ese mismo día.

Usando una base de datos no temporal

Para almacenar la vida de John Doe en una base de datos actual (no temporal) utilizamos una tabla person (name, address). (Para simplificar, namese define como la clave principal de person).

El padre de John informó oficialmente su nacimiento el 4 de abril de 1975. En esta fecha, un funcionario de Smallville insertó la siguiente entrada en la base de datos: Person(John Doe, Smallville). Tenga en cuenta que la fecha en sí no se almacena en la base de datos.

Después de graduarse, John se muda, pero olvida registrar su nueva dirección. La entrada de John en la base de datos no cambia hasta el 27 de diciembre de 1994, cuando finalmente lo informa. Un funcionario de Bigtown actualiza su dirección en la base de datos. La persontabla ahora contiene Person(John Doe, Bigtown). Tenga en cuenta que la información de John que vive en Smallville se ha sobrescrito, por lo que ya no es posible recuperar esa información de la base de datos. A un funcionario que accediera a la base de datos el 28 de diciembre de 1994 se le diría que John vive en Bigtown. Más técnicamente: si un administrador de base de datos ejecutara la consulta el 26 de diciembre de 1994, el resultado sería . Ejecutar la misma consulta 2 días después daría como resultado .SELECT ADDRESS FROM PERSON WHERE NAME='John Doe'SmallvilleBigtown

Hasta su muerte, la base de datos indicaría que vivía en Bigtown. El 1 de abril de 2001, el forense elimina la entrada de John Doe de la base de datos. Después de esto, ejecutar la consulta anterior no arrojaría ningún resultado.

Usando un solo eje: tiempo válido o tiempo de transacción

El tiempo válido es el tiempo durante el cual un hecho es verdadero en el mundo real. Un período de tiempo válido puede ser en el pasado, abarcar el tiempo actual o ocurrir en el futuro.

Para el ejemplo anterior, para registrar el tiempo válido, la persontabla tiene dos campos agregados valid_fromy valid_to. Estos especifican el período en el que la dirección de una persona es válida en el mundo real. El 4 de abril de 1975, el padre de John registró el nacimiento de su hijo. Luego, un funcionario inserta una nueva entrada en la base de datos que indica que John vive en Smallville desde el 3 de abril. Tenga en cuenta que aunque los datos se insertaron el día cuatro, la base de datos indica que la información es válida desde el tercero. El funcionario aún no sabe si John se mudará a otro lugar o cuándo, por lo que el valid_tocampo se establece en infinito (∞). La entrada en la base de datos es:

El 27 de diciembre de 1994, John informa su nueva dirección en Bigtown, donde vive desde el 26 de agosto de 1994. Se realiza una nueva entrada en la base de datos para registrar este hecho:

La entrada original Person (John Doe, Smallville, 1975-04-03, ∞)no se elimina, pero tiene el valid_toatributo actualizado para reflejar que ahora se sabe que John dejó de vivir en Smallville el 26 de agosto de 1994. La base de datos ahora contiene dos entradas para John Doe:

Cuando John muere, su entrada actual en la base de datos se actualiza indicando que John ya no vive en Bigtown. La base de datos ahora se ve así:

Usando dos ejes: tiempo válido y tiempo de transacción

El tiempo de transacción registra el período de tiempo durante el cual una entrada de la base de datos se acepta como correcta. Esto permite realizar consultas que muestran el estado de la base de datos en un momento determinado. Los períodos de tiempo de transacción solo pueden ocurrir en el pasado o hasta el momento actual. En un cronograma de transacciones, los registros nunca se eliminan. Solo se pueden insertar registros nuevos y actualizar los existentes estableciendo la hora de finalización de la transacción para mostrar que ya no están actualizados.

Para habilitar el tiempo de transacción en el ejemplo anterior, se agregan dos campos más a la tabla Persona: transaction_fromy transaction_to. Aquí, transaction_fromes la hora en que se realizó una transacción y transaction_tola hora en que se reemplazó la transacción (que puede ser infinita si aún no ha sido reemplazada). Esto convierte la mesa en una mesa bitemporal.

¿Qué sucede si la dirección de la persona almacenada en la base de datos es incorrecta? ¿Supongamos que un funcionario accidentalmente ingresó la dirección o fecha incorrecta? O supongamos que la persona mintió sobre su dirección por algún motivo. Al descubrir el error, los funcionarios actualizan la base de datos para corregir la información registrada.

Por ejemplo, del 1 de junio de 1995 al 3 de septiembre de 2000, John Doe se mudó a Beachy. Pero para evitar pagar el exorbitante impuesto de residencia de Beachy, nunca lo informó a las autoridades. Más tarde, durante una investigación fiscal, se descubre el 2 de febrero de 2001 que, de hecho, estuvo en Beachy durante esas fechas. Para registrar este hecho, la entrada existente sobre John viviendo en Bigtown debe dividirse en dos registros separados y se debe insertar un nuevo registro que registre su residencia en Beachy. La base de datos entonces aparecería de la siguiente manera:

Sin embargo, esto no deja ningún registro de que la base de datos haya afirmado alguna vez que vivió en Bigtown entre el 1 de junio de 1995 y el 3 de septiembre de 2000. Podría ser importante saberlo por motivos de auditoría o para utilizarlo como prueba en la investigación fiscal del funcionario. El tiempo de transacción permite capturar este conocimiento cambiante en la base de datos, ya que las entradas nunca se modifican ni eliminan directamente. En cambio, cada entrada registra cuándo se ingresó y cuándo fue reemplazada (o eliminada lógicamente). El contenido de la base de datos entonces se ve así:

La base de datos registra no sólo lo que sucedió en el mundo real, sino también lo que se registró oficialmente en diferentes momentos.

Usando tres ejes: tiempo válido, tiempo de decisión y tiempo de transacción

El tiempo de decisión es una alternativa al período de tiempo de la transacción para registrar el momento en el que una entrada de la base de datos puede aceptarse como correcta. Esto permite consultas que muestran los hechos oficialmente reconocidos en un momento dado, incluso si hubo un retraso en la confirmación de esos hechos en la base de datos. El soporte para el tiempo de decisión preserva todo el historial y evita la pérdida de información durante las actualizaciones. [6]

Los períodos de decisión solo pueden ocurrir en el pasado o hasta el momento de la transacción. Al igual que en un cronograma de transacciones, los registros nunca se eliminan. Solo se pueden insertar registros nuevos y actualizar los existentes estableciendo la hora de finalización de su decisión para mostrar que ya no están vigentes.

Para habilitar el tiempo de decisión, se agregan dos campos más a una tabla de base de datos: decision_fromy decision_to. Aquí, decision_fromes el momento en que se tomó una decisión y decision_toel momento en que la decisión fue reemplazada (que puede ser infinita si aún no ha sido reemplazada). Cuando se combina con el tiempo de transacción, esto convierte la tabla en una tabla tritemporal. La siguiente es una lista de hechos reales ocurridos entre las elecciones presidenciales de Estados Unidos de 1964 y 1976 :

En este ejemplo, se supone un retraso constante de 7 días entre el momento de la decisión y el momento de la transacción cuando los datos se confirman en la base de datos. Dadas esas condiciones, la base de datos habría contenido la siguiente información después de las elecciones de 1976:

Dada la tabla anterior con un retraso de 7 días, la pregunta "quién fue presidente y vicepresidente durante el período válido del 1 de enero de 1977" (que, dado el retraso de 7 días, podría proporcionar datos para el 25 de diciembre de 1976) sería:

Modelado bitemporal

Un modelo bitemporal contiene tanto el tiempo válido como el de transacción. Esto proporciona información histórica y de reversión . La información histórica (por ejemplo: "¿Dónde vivía John en 1992?") se proporciona según la época válida. La reversión (por ejemplo: "En 1992, ¿dónde creía la base de datos que vivía John?") la proporciona el tiempo de transacción. Las respuestas a estas preguntas de ejemplo pueden no ser las mismas: es posible que la base de datos haya sido alterada desde 1992, lo que provocó que las consultas produzcan resultados diferentes.

El tiempo de validez y el tiempo de transacción no tienen por qué ser iguales para un solo hecho. Por ejemplo, consideremos una base de datos temporal que almacena datos sobre el siglo XVIII. La hora válida de estos hechos es entre 1701 y 1800. La hora de la transacción mostraría cuándo se insertaron los hechos en la base de datos (por ejemplo, 1998-01-21).

Evolución del esquema

Un tema desafiante es el soporte de consultas temporales en una base de datos de tiempo de transacción bajo un esquema en evolución . Para lograr una calidad de archivo perfecta, es de vital importancia almacenar los datos en la versión del esquema con la que aparecieron por primera vez. Sin embargo, incluso la consulta temporal más simple que reescriba el historial de un valor de atributo tendría que reescribirse manualmente en cada una de las versiones del esquema, potencialmente cientos como en el caso de MediaWiki . [7] Este proceso sería particularmente gravoso para los usuarios. Una solución propuesta es proporcionar reescritura automática de consultas, [8] [9] aunque esto no forma parte de SQL ni de estándares similares.

Los enfoques para minimizar las complejidades de la evolución del esquema son:

Implementaciones en productos destacados

Las siguientes implementaciones proporcionan características temporales en un sistema de gestión de bases de datos relacionales (RDBMS).

Sistemas de administración de bases de datos NoSQL no relacionales que brindan características temporales que incluyen lo siguiente:

Las bases de datos temporales fueron una de las primeras formas de control de versiones de datos e influyeron en el desarrollo de los sistemas modernos de control de versiones de datos. [19]

Alternativas

Ejemplo de modelo de dimensión que cambia lentamente (SCD)

Se pueden utilizar dimensiones que cambian lentamente para modelar relaciones temporales.

Otras lecturas

Ver también

Referencias

  1. ^ abc Kulkarni, Krishna y Jan-Eike Michels. "Características temporales en SQL: 2011". Registro ACM SIGMOD 41.3 (2012): 34-43.
  2. ^ ab Saracco, Cynthia M.; Nicola, Matías; Gandhi, Lenisha (3 de abril de 2012). "Cuestión de tiempo: Gestión de datos temporales en DB2 10". IBM . Archivado desde el original el 25 de octubre de 2012 . Consultado el 27 de octubre de 2020 .
  3. ^ ab Snodgrass, 1999, pág. 9
  4. ^ Richard T. Snodgrass . "Lenguaje de consulta temporal TSQL2". www.cs.arizona.edu . Departamento de Ciencias de la Computación de la Universidad de Arizona . Consultado el 14 de julio de 2009 .
  5. ^ Hugh Darwen, CJ Date, "Una descripción general y análisis de propuestas basadas en el enfoque TSQL2", en Date on Database: Writings 2000-2006 , CJ Date, Apress, 2006, págs.
  6. ^ Mario A. Nascimento, Margaret H. Eich, “Tiempo de decisión en bases de datos temporales”, en actas del segundo taller internacional sobre representación y razonamiento temporal , 1995, págs.
  7. ^ Punto de referencia de evolución de esquema: evolución de esquema
  8. ^ Hyun J. Luna; Carlo A. Curiño; Alin Deutsch; C.-Y. Hou y Carlo Zaniolo (2008). Administrar y consultar bases de datos de tiempo de transacción bajo la evolución del esquema. Base de datos muy grande VLDB.
  9. ^ Hyun J. Luna; Carlo A. Curino y Carlo Zaniolo (2010). Arquitectura escalable y optimización de consultas para bases de datos en tiempo de transacción con esquemas en evolución. SIGMOD.
  10. ^ Anthony B. Coates (2015). Por qué a los bancos les importa la bitemporalidad. Mundo MarkLogic 2015.
  11. ^ "Tablas con versiones del sistema".
  12. ^ Paquier, Michael (1 de noviembre de 2012). "Lo más destacado de Postgres 9.2: tipos de rango". Michael Paquier: desarrollador de código abierto con sede en Japón . Archivado desde el original el 23 de abril de 2016.
  13. ^ Katz, Jonathan S. "Tipos de rango: su vida nunca será la misma" (PDF) . Consultado el 14 de julio de 2014 .
  14. ^ Al-Kateb, Mohammed et al. "Procesamiento de consultas temporales en Teradata". EDBT/ICDT '13 18 al 22 de marzo de 2013, Génova, Italia
  15. ^ Temporal en SQL Server 2016 , consultado el 19 de julio de 2019
  16. ^ "terminusdb/terminusdb-servidor". GitHub . Consultado el 4 de septiembre de 2020 .
  17. ^ Bridgwater, Adrian (24 de noviembre de 2014). "Los datos son buenos, los datos 'bitemporales bidireccionales' son mejores". Forbes .
  18. ^ "Modelo de datos datómicos: modelo de tiempo". 29 de abril de 2024.
  19. ^ Bhardwaj, Anant; Bhattacherjee, Souvik; Chavan, Amit; Deshpande, Amol; Elmore, Aaron J.; Enloquecer, Samuel; Parameswaran, Aditya G. (2 de septiembre de 2014). "DataHub: ciencia de datos colaborativa y gestión de versiones de conjuntos de datos a escala". arXiv : 1409.0798 [cs.DB].

enlaces externos