Kronologisk databas

Kronologisk databas  - en databas som innehåller historiska (kronologiska) data, det vill säga data relaterade till tidigare och möjligen framtida tidsperioder. En vanlig, icke-kronologisk databas innehåller endast aktuella data.

Datatyper och operatorer

Kronologiska data är sanna påståenden med indikation av tidsintervall. Ett tidsintervall är ett icke-tomt segment av tidsskalan; en speciell intervalldatatyp INTERVAL_DATE används för att beteckna det. Värden av denna typ skrivs som , där  är uttryck av typen DATUM som motsvarar start- och sluttidspositionerna för intervallet. Tidspositioner (positioner på tidslinjen) är tidsenheter som är lämpliga för ett specifikt syfte (millisekunder, sekunder, dagar) och anses vara odelbara.

Låt oss säga  - värden av intervalltypen, som har initialpositioner respektive slutpositioner ,  - en godtycklig tillfällig position. Formens uttryck och används för att beteckna föregående och följande tidspositioner . Operatören returnerar antalet distinkta positioner så att . Ett intervall är ett enhetsintervall om .

Insexoperatörer används för att kontrollera förhållanden som är förknippade med intervaller:

Dessutom finns det binära operatorer på intervall som returnerar intervall:

Operatörerna EXPAND och COLLAPSE tar som sin operand en unär relation vars tuplar innehåller intervall och returnerar en relation av samma typ, som är den expanderade respektive kontrakterade formen av den ursprungliga relationen.

Ett exempel på hur du använder operatorerna EXPAND och COLLAPSE:

R
D
[d06:d09]
[d04:d08]
[d05:d10]
[d01:d01]
Rx
D
[d01:d01]
[d04:d04]
[d05:d05]
[d06:d06]
[d07:d07]
[d08:d08]
[d09:d09]
[d10:d10]
Rc
D
[d01:d01]
[d04:d10]

En expanderad form av relation R är en relation Rx som innehåller alla tuplar med ett enhetsintervall [p:p], där p är en position i något intervall av någon tupel av relation R. En sammandragen form av relation R är en sådan relation Rc som : relationerna R och Rc har samma och samma expanderade form; inga två distinkta tuplar med avseende på Rc innehåller intervall i1 och i2 så att i1 MERGES i2 är sant.

Operatörerna PACK och UNPACK tar som operander en relation och ett attribut av intervalltyp som hör till den relationen och returnerar en relation av samma typ, komprimerad av det angivna attributet, grupperat efter resten av attributen och utökat med det angivna attributet. attribut.

Ett exempel på användning av PACK- och UNPACK-satserna:

R
A D
A2 [d02:d04]
A2 [d03:d05]
A4 [d02:d05]
A4 [d04:d06]
A4 [d09:d10]
PACK R PÅ D
A D
A2 [d02:d05]
A4 [d02:d06]
A4 [d09:d10]
UPPACKA R ON D
A D
A2 [d02:d02]
A2 [d03:d03]
A2 [d04:d04]
A2 [d05:d05]
A4 [d02:d02]
A4 [d03:d03]
A4 [d04:d04]
A4 [d05:d05]
A4 [d06:d06]
A4 [d09:d09]
A4 [d10:d10]

Du kan packa relationen R med flera attribut D1, D2, ..., Dn genom att packa upp R med alla angivna attribut, och sedan packa resultatet med attribut D1, packa packningsresultatet med attribut D2, ..., packa packningsresultat efter attribut Dn.

För alla vanliga relationsoperatorer definieras U_operatorer som liknar dem, som packar upp relationen med de angivna attributen, utför motsvarande operation och packar resultatet. Till exempel motsvarar operatorerna U_MINUS, U_INTERSECT, U_UNION, U_JOIN operatorerna MINUS, INTERSECT, UNION, JOIN. U_OPERATOR definieras som:

PACKA ((UPPACKA R1 PÅ D) OPERATÖR (UPPACKA R2 PÅ D)) PÅ D

Uppackningen, när långa intervaller med hög granularitet används, kan kräva för mycket minne att slutföra. Användningen av U_operators tillåter optimeraren att välja en implementering som kräver det minsta antalet mellanresultat.

Ett exempel på hur du använder operatorn U_MINUS:

R1
D
[d02:d05]
R2
D
[d03:d03]
resultat
D
[d02:d02]
[d04:d05]

Nedbrytning

Att lagra aktuell information i vissa relationsvariabler och historisk information i andra kallas horisontell nedbrytning. Att lagra historisk information som många separata relationsvariabler (som var och en innehåller ett intervalltypattribut och ett attribut av en annan typ) kallas vertikal nedbrytning.

Antag att en relationsvariabel R har ett intervalltypattribut D och attribut av andra typer A1, A2, ..., An. När attributen A1, A2, ..., En förändring oberoende av varandra i tid, måste en komplex serie av uppdateringar göras av relationsvariabeln; mer än en tupel kan krävas för att representera information om värdet av ett attribut under en visst tidsintervall. Därför är det tillrådligt att fördela informationen över relationsvariablerna R1, R2, ..., Rn, som kommer att ha attributen D och A1, D och A2, ..., D respektive An.

Exempel på vertikal nedbrytning
R
A1 A2 D
tio BB+ [d01:d03]
femton BB+ [d04:d05]
femton AA- [d06:d08]
R1
A1 D
tio [d01:d03]
femton [d04:d08]
R2
A2 D
BB+ [d01:d05]
AA- [d06:d08]

Detta förhållande efter nedbrytning är i sjätte normalform .

Integritetsbegränsningar

Inkluderandet av ett attribut D av en intervalltyp i en potentiell nyckel löser inte problemet med redundans och motsägelse. En relation kan ha två tuplar med överlappande intervall och matchande värden för resten av attributen. Samtidigt finns det redundans av information , data för vissa tidsintervall anges två gånger. Dessutom finns det ett problem med utförlighet när två tupler har intervaller omedelbart efter varandra med samma värden för andra attribut. I det här fallet, även om informationen inte är duplicerad, kan den representeras som en enda tupel. För att eliminera problemet med redundans och mångsidighet är det nödvändigt att relationsvariabeln är permanent inramad av attribut D.

Dessutom kan en relation innehålla två tuplar med överlappande mellanrum men olika värden för andra icke-nyckelattribut, vilket resulterar i inkonsekvent information. För att lösa motsägelsen är det nödvändigt att relationsvariabeln permanent packas upp av attribut D.

För att uppfylla dessa krav introduceras U_nycklar. Relationsvariabeln hålls packad av U_key och packas upp när ändringar görs för att bibehålla ett konsekvent tillstånd.

Litteratur