Kronologisk database - en database, der indeholder historiske (kronologiske) data, det vil sige data relateret til tidligere og muligvis fremtidige tidsperioder. En almindelig, ikke-kronologisk database indeholder kun aktuelle data.
Kronologiske data er sande udsagn med angivelse af tidsintervaller. Et tidsinterval er et ikke-tomt segment af tidsskalaen; en speciel intervaldatatype INTERVAL_DATE bruges til at udpege det. Værdier af denne type skrives som , hvor er udtryk af DATE-typen svarende til start- og sluttidspositionerne for intervallet. Tidspositioner (positioner på tidslinjen) er tidsenheder, der er egnede til et bestemt formål (millisekunder, sekunder, dage) og betragtes som udelelige.
Lad os sige - værdier af intervaltypen, der har henholdsvis startpositioner og slutpositioner , - en vilkårlig midlertidig position. Formens udtryk og bruges til at angive de foregående og følgende tidspositioner . Operatøren returnerer antallet af distinkte positioner , således at . Et interval er et enhedsinterval, hvis .
Allen-operatører bruges til at kontrollere forhold forbundet med intervaller:
Derudover er der binære operatorer på intervaller, der returnerer intervaller:
EXPAND- og COLLAPSE-operatorerne tager som deres operand en unær relation, hvis tupler indeholder intervaller, og returnerer en relation af samme type, som er henholdsvis den udvidede og kontrakterede form af den oprindelige relation.
Et eksempel på brug af operatorerne EXPAND og COLLAPSE:
|
|
|
En udvidet form for relation R er en relation Rx, der indeholder alle tupler med et enhedsinterval [p:p], hvor p er en position i et eller andet interval af en eller anden tupel af relation R. En kontraheret form af relation R er en sådan relation Rc, der : relationer R og Rc har samme og samme udvidede form; ingen to distinkte tupler med hensyn til Rc indeholder intervaller i1 og i2, således at i1 SLUTTER i2 er sand.
PACK- og UNPACK-operatorerne tager som operander en relation og en interval-type-attribut, der hører til den relation, og returnerer en relation af samme type, henholdsvis kollapset af den specificerede attribut, grupperet efter resten af attributterne og udvidet med den specificerede attribut.
Et eksempel på brug af PACK- og UNPACK-sætningerne:
|
|
|
Du kan pakke relationen R med flere attributter D1, D2, ..., Dn ved at pakke R ud med alle de specificerede attributter, og derefter pakke resultatet med attribut D1, pakke pakkeresultatet med attribut D2, ..., pak pakningsresultat efter attribut Dn.
For alle almindelige relationsoperatorer er U_operatorer, der ligner dem, defineret, som udpakker relationen med de specificerede attributter, udfører den tilsvarende operation og pakker resultatet. For eksempel svarer U_MINUS, U_INTERSECT, U_UNION, U_JOIN til operatorerne MINUS, INTERSECT, UNION, JOIN. U_OPERATOR er defineret som:
PAK ((UDPAK R1 PÅ D) OPERATØR (UDPAK R2 PÅ D)) PÅ DUdpakningsoperationen, når der bruges lange intervaller med en høj granularitet, kan kræve for meget hukommelse at fuldføre. Brugen af U_operators gør det muligt for optimizeren at vælge en implementering, der kræver det mindste antal mellemresultater.
Et eksempel på brug af operatoren U_MINUS:
|
|
|
Lagring af aktuel information i nogle relationsvariable og historisk information i andre kaldes horisontal dekomponering. Lagring af historisk information som mange separate relationsvariable (som hver indeholder en intervaltype-attribut og en attribut af en anden type) kaldes vertikal dekomponering.
Antag, at en relationsvariabel R har en intervaltypeattribut D og attributter af andre typer A1, A2, ..., An. Når attributterne A1, A2, ..., En ændring uafhængigt af hinanden i tid, skal der foretages en kompleks række af opdateringer af relationsvariablen; mere end én tuple kan være nødvendig for at repræsentere information om værdien af en attribut under en bestemt tidsinterval. Derfor er det tilrådeligt at fordele informationen over relationsvariablerne R1, R2, ..., Rn, som vil have henholdsvis attributterne D og A1, D og A2, ..., D og An.
|
|
|
Dette forhold efter nedbrydning er i sjette normalform .
Inkluderingen af en attribut D af en intervaltype i en potentiel nøgle løser ikke problemet med redundans og modsigelse. En relation kan have to tuples med overlappende intervaller og matchende værdier for resten af attributterne. Samtidig er der redundans af information , data for nogle tidsintervaller er angivet to gange. Derudover er der et problem med ordlyd, når to tuples har intervaller umiddelbart efter hinanden med de samme værdier af andre attributter. I dette tilfælde, selvom oplysningerne ikke er duplikeret, kan de repræsenteres som en enkelt tupel. For at eliminere problemet med redundans og verbositet er det nødvendigt, at relationsvariablen er permanent indrammet af attribut D.
Derudover kan en relation indeholde to tuples med overlappende mellemrum, men forskellige værdier for andre ikke-nøgleattributter, hvilket resulterer i inkonsekvent information. For at løse modsigelsen er det nødvendigt, at relationsvariablen pakkes permanent ud af attribut D.
For at opfylde disse krav introduceres U_keys. Relationsvariablen holdes pakket af U_key og pakkes ud, når der foretages ændringer for at opretholde en konsistent tilstand.