Base de datos cronológica : una base de datos que contiene datos históricos (cronológicos), es decir, datos relacionados con períodos de tiempo pasados y posiblemente futuros. Una base de datos regular, no cronológica, contiene solo datos actuales.
Los datos cronológicos son declaraciones verdaderas con indicación de intervalos de tiempo. Un intervalo de tiempo es un segmento no vacío de la escala de tiempo; se utiliza un tipo de datos de intervalo especial INTERVAL_DATE para designarlo. Los valores de este tipo se escriben como , donde son expresiones del tipo DATE correspondientes a las posiciones de tiempo de inicio y fin del intervalo. Las posiciones de tiempo (posiciones en la línea de tiempo) son unidades de tiempo que son adecuadas para un propósito específico (milisegundos, segundos, días) y se consideran indivisibles.
Digamos - valores del tipo de intervalo, que tienen, respectivamente, posiciones iniciales y posiciones finales , - una posición temporal arbitraria. Las expresiones de la forma y se utilizan para designar las posiciones de tiempo anteriores y posteriores . El operador devuelve el número de posiciones distintas tales que . Un intervalo es un intervalo unitario si .
Los operadores de Allen se utilizan para verificar las condiciones asociadas con los intervalos:
Además, hay operadores binarios en intervalos que devuelven intervalos:
Los operadores EXPAND y COLLAPSE toman como operando una relación unaria cuyas tuplas contienen intervalos y devuelven una relación del mismo tipo, que es la forma expandida y contraída de la relación original, respectivamente.
Un ejemplo del uso de los operadores EXPAND y COLLAPSE:
|
|
|
Una forma expandida de la relación R es una relación Rx que contiene todas las tuplas con un intervalo unitario [p: p], donde p es una posición en algún intervalo de alguna tupla de la relación R. Una forma contraída de la relación R es tal relación Rc que : las relaciones R y Rc tienen la misma y la misma forma desarrollada; No hay dos tuplas distintas con respecto a Rc que contengan intervalos i1 e i2 tales que i1 MERGES i2 sea verdadero.
Los operadores PACK y UNPACK toman como operandos una relación y un atributo de tipo intervalo perteneciente a esa relación, y devuelven una relación del mismo tipo, respectivamente colapsada por el atributo especificado, agrupada por el resto de los atributos y expandida por el especificado. atributo.
Un ejemplo del uso de las sentencias PACK y UNPACK:
|
|
|
Puede empaquetar la relación R por varios atributos D1, D2, ..., Dn desempaquetando R por todos los atributos especificados y luego empaquetar el resultado por el atributo D1, empaquetar el resultado por el atributo D2, ..., empaquetar el resultado de empaquetado por atributo Dn.
Para todos los operadores relacionales ordinarios, se definen U_operators similares a ellos, que desempaquetan la relación por los atributos especificados, realizan la operación correspondiente y empaquetan el resultado. Por ejemplo, los operadores U_MINUS, U_INTERSECT, U_UNION, U_JOIN corresponden a los operadores MINUS, INTERSECT, UNION, JOIN. U_OPERATOR se define como:
PACK ((DESEMPAQUE R1 EN D) OPERADOR (DESEMPAQUE R2 EN D)) EN DLa operación de desempaquetado, cuando se usan intervalos largos con una granularidad alta, puede requerir demasiada memoria para completarse. El uso de U_operators permite al optimizador elegir una implementación que requiera el mínimo número de resultados intermedios.
Un ejemplo del uso del operador U_MINUS:
|
|
|
El almacenamiento de información actual en algunas variables de relación e información histórica en otras se denomina descomposición horizontal. El almacenamiento de información histórica como muchas variables de relación separadas (cada una de las cuales contiene un atributo de tipo de intervalo y un atributo de otro tipo) se denomina descomposición vertical.
Supongamos que una variable de relación R tiene un atributo de tipo intervalo D y atributos de otros tipos A1, A2, ..., An. Cuando los atributos A1, A2, ..., An cambian independientemente unos de otros en el tiempo, se debe realizar una serie compleja de actualizaciones a la variable de relación; se puede requerir más de una tupla para representar información sobre el valor de un atributo durante un período de tiempo. determinado intervalo de tiempo. Por tanto, es recomendable distribuir la información sobre las variables de relación R1, R2, ..., Rn, que tendrán los atributos D y A1, D y A2, ..., D y An, respectivamente.
|
|
|
Esta relación después de la descomposición está en sexta forma normal .
La inclusión de un atributo D de tipo intervalo en una clave potencial no resuelve el problema de redundancia y contradicción. Una relación puede tener dos tuplas con intervalos superpuestos y valores coincidentes para el resto de los atributos. Al mismo tiempo, hay redundancia de información , los datos para algunos intervalos de tiempo se indican dos veces. Además, existe un problema de verbosidad cuando dos tuplas tienen intervalos que se suceden inmediatamente con los mismos valores de otros atributos. En este caso, aunque la información no se duplique, se puede representar como una sola tupla. Para eliminar el problema de la redundancia y la verbosidad, es necesario que la variable de relación esté permanentemente encuadrada por el atributo D.
Además, una relación puede contener dos tuplas con espacios superpuestos pero valores diferentes para otros atributos no clave, lo que da como resultado información inconsistente. Para resolver la contradicción, es necesario que la variable de relación sea desempaquetada permanentemente por el atributo D.
Para cumplir con estos requisitos, se introducen U_keys. La variable de relación se mantiene empaquetada por U_key y se desempaqueta cuando se realizan cambios para mantener un estado consistente.