Temporální Databáze Jaroslav Dražan
Čím se budeme zabývat Proč je čas v DB důležitý Práce s časem pomocí klasického SQL Reprezentace časové domény Spojování dat s časem … Temporální dotazovací jazyky
Proč je čas důležitý 1 Zapisování předmětů na VŠ –Aktuálně je zajímavý pouze probíhající semestr –Je potřeba udržovat i historické informace Programová skladba u televizní společnosti –Velké množství dat –Častá změna v čase –Drahé chyby (=> důraz na jednoduchost kódu)
Proč je čas důležitý 2 Uchování nejenom aktuálních dat Vyhledávání a analýza údajů k nějakému datu (z nějakého intervalu) –Vyžaduje jednoduchý a přehledný způsob dotazování –Musí být maximálně optimalizováno
Shrnutí Čas hraje v databázích významnou roli Nejenom teoretický problém
Práce s časem pomocí SQL Uchovávání jednoduché tabulky Zaměstnanci (jméno, plat, titul,d_nar DATE) Kdy se Bob narodil? SELECT d_nar FROM Zaměstnanci WHERE jméno = ‘Bob’
Práce s časem pomocí SQL Rozšíříme model o položky start a stop start – začátek platnosti položky stop – konec platnosti položky
Práce s časem pomocí SQL Výsledná tabulka: Zaměstnanci ( jméno, plat, titul d_nar Date, start Date, stop Date )
Temporální projekce 1 Jaký je aktuální Bobův plat? SELECT plat FROM Zaměstnanci WHERE Jméno = ‘Bob’ AND start <= aktuální_čas AND aktuální_čas <= stop
Temporální projekce 2 jménoplattituld_narstartstop Bob60Kasistent Bob70Kasistent Bob70Kdocent Bob70Kprofesor jménoplatstartstop Bob Bob
Temporální projekce 3.1 Vyrobíme si pomocnou tabulku Temp CREATE TABLE Temp(plat, start, stop) AS SELECT plat, start, stop FROM Zaměstnanci WHERE jméno = ´Bob´ | | |----| | | | |
Temporální projekce 3.2 repeat UPDATE Temp T1 SET (T1.stop)=(SELECT MAX(T2.stop) FROM Temp AS T2 WHERE T1.plat = T2.plat AND T1.start < T2.start AND T1.stop >= T2.start AND T1.stop < T2.stop) WHERE EXISTS ( SELECT * FROM Temp AS T2 WHERE T1.plat = T2.plat AND T1.start < T2.start AND T1.stop >= T2.start AND T1.stop < T2.stop) until “žádná řada se nezmění” Záznamy se prodlužují doprava | | | | | | | |
Temporální projekce 3.3 Ještě smažeme nemaximální řádky DELETE FROM Temp T1 WHERE EXISTS ( SELECT * FROM Temp AS T2 WHERE T1.plat = T2.plat AND ((T1.start > T2.start AND T1.stop = T2.start AND T1.stop < T2.stop))
Temporální projekce 4.1 Bez použití repeat/until cyklu Předpokládejme, že máme tabulku Temp jako v předchozím příkladu
Temporální projekce 4.2 SELECT DISTINCT F.plat, F.start, L.stop FROM Temp AS F, Temp AS L WHERE F.start < L.stop AND F.plat = L.plat AND NOT EXISTS (SELECT * FROM Temp AS M WHERE M.plat = F.plat AND F.start < M.start AND M.start < L.stop AND NOT EXISTS (SELECT * FROM Temp AS T1 WHERE T1.plat = F.plat AND T1.start < M.start AND M.start <=T1.stop)) AND NOT EXISTS (SELECT * FROM Temp AS T2 WHERE T2.plat=F.plat AND ((T2.start < F.start AND F.start <= T2.stop) OR T2.start < L.stop AND L.stop < T2.stop))) Snažíme se o srůstání jednotlivých časových úseků Ta NOT EXISTS vylučují “časové díry” Je možné dělat o něco málo snadněji pomocí kurzorů
Temporální projekce pomocí TSQL2 SELECT plat FROM Zaměstnanci WHERE jméno = ‘Bob’
Temporální spojení (join) 1 Rozdělme tabulku Zaměstnanci na dvě: 1.Zaměstnanci1(jméno, plat, start, stop) 2.Zaměstnanci2(jméno, titul,start, stop) Toto dělení usnadní předchozí dotaz: SELECT plat, start,stop FROM Zaměstnanci1 WHERE jméno = ´Bob´
Temporální spojení 2 Při spojování dvou tabulek je třeba rozlišovat čtyři případy: 1.T2.start <= T1.start AND T1.stop <=T2.stop 2.T1.start > T2.start AND T2.stop < T1.stop AND T1.start < T2.stop 3.T2.start > T1.start AND T1.stop < T2.stop AND T2start < T1.stop 4.T2.start>=T1.start AND T2.stop <= T1.stop To výrazně prodlužuje zápis dotazu jednoduché přirozené spojení tabulek Zaměstnanci 1 a 2 je ještě delší než předchozí dotazy !!!)
Shrnutí Práce s časem je v SQL92 velice obtížná Snadno náchylné na chyby programátorů Vnořené dotazy brání optimalizacím …
Reprezentace časové domény model času –Může to být jakákoliv množina, na níž je částečné uspořádání –Přijmutím dodatečných axiomů můžeme získat konkrétní modely
Modely času v DB 1 Lineární čas (linear model) –Uspořádání je lineární –Čas postupuje “krok za krokem” Větvící se čas (branching model) –Čas od minulosti do teď je lineární –Čas od teď do budoucnosti se větví na teoreticky možné větve –Tento model tvoří vlastně strom s kořenem v přítomnosti
Modely času v DB 2 Cyklický model –Např. dny v týdnu –Vyjadřují se jím rekurentní děje Diskrétní model –Je izomorfní přirozeným číslům –Každý prvek má známého následníka
Modely času v DB 3 Hustý model –Je izomorfní racionálním číslům –Mezi každými dvěma okamžiky existuje další Spojitý model –Je izomorfní reálným číslům –Je neobsahuje mezery
Modely času v DB 4 Spojitý model –každé reálné číslo odpovídá jednomu bodu Diskrétní model –Každé reálné číslo odpovídá intervalu –Chronon Nejmenší doba trvání reprezentovatelná v diskrétním modelu
Modely času v DB 5 Modely mohou mít horní (dolní) hranice Znázorňují čas: –Relativní 9 hodin –Absolutní (ten je ovšem také relativní) 9:52,
Modely času v DB 6 Nejčastěji se používají diskrétní modely –Spojité se těžko implementují
Datové typy v SQL 92 DATE –Den a rok –4B TIMESTAMP –Jako Date + část dne (std. mikrosekunda) –8B TIME –Časový okamžik dne. Ve formátu hodina/minuta/vteřina –4B
Spojování dat s časem Nová dimenze, která reprezentuje čas 2 typy: –Čas platnosti (valid time) –Čas transakce (transaction time) –Pokud má oboje: bitemporal –Pokud nic – jedná se o snímek (snapshot)
Čas transakce Čas se zaznamená při manipulaci s daty automaticky (insert, delete,…) Data v minulosti se nikdy nemění (data v tomto modelu pouze přibývají) Nemůže jít do budoucnosti
Reprezentace časové domény Dané modely jsou nejlépe vidět na obrázcích
“Podloží” Čas by přidán do spousty modelů –E-R modelu –Sémantických modelů –… Většina temporálních DB je založena na: –Relačním modelu –OO modelu –Existuje spousta takovýchto modelů
Jednoduché příklady JménoVěc Čas : TIMESTAMP Ericbota1 Erickniha6 Ericbota11 Ericnull13 JménoVěcčas Ericbota[1-5] Erickniha[6-10] Ericbota[11-12]
Temporální dotazovací jazyky Jsou založeny na některém z těchto modelů Jsou odvozeny obvykle od standardních dot. Jazyků (SQL, QUEL, Relační Algebra,…) TSQL, TSQL2, TempSQL, HQL, Hquel, HSQL, TDM, Legol 2.0, …
Obecně vícedimenzionální DB Implementováno např. v Oracle Podpora Multidimenzionální analýzy OLAP (MOLAP) Klauzule CUBE
Závěr Existují úlohy z praxe, kde hraje čas klíčovou roli Řešení těchto úloh jazykem SQL jsou neohrabaná a nedají se účinně optimalizovat Řešení – temporální dotazovací jazyky modely: –Čas transakce –Čas platnosti