Stáhnout prezentaci
Prezentace se nahrává, počkejte prosím
ZveřejnilNela Šmídová
1
Temporální Databáze Jaroslav Dražan
2
Čí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
3
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)
4
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
5
Shrnutí Čas hraje v databázích významnou roli Nejenom teoretický problém
6
Práce s časem pomocí SQL92 - 1 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’
7
Práce s časem pomocí SQL92 - 2 Rozšíříme model o položky start a stop start – začátek platnosti položky stop – konec platnosti položky
8
Práce s časem pomocí SQL92 - 3 Výsledná tabulka: Zaměstnanci ( jméno, plat, titul d_nar Date, start Date, stop Date )
9
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
10
Temporální projekce 2 jménoplattituld_narstartstop Bob60Kasistent88-04-0995-01-0195-06-01 Bob70Kasistent88-04-0995-06-0195-10-01 Bob70Kdocent88-04-0995-10-0196-02-01 Bob70Kprofesor88-04-0996-02-0197-01-01 jménoplatstartstop Bob6000095-01-0195-06-01 Bob7000096-06-0197-01-01
11
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´ |-----------| |----| |------------| |--------|
12
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 | --------------| |------------------| |--------------| |--------|
13
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))
14
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
15
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ů
16
Temporální projekce pomocí TSQL2 SELECT plat FROM Zaměstnanci WHERE jméno = ‘Bob’
17
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´
18
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 !!!)
19
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 …
20
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
21
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
22
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
23
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
24
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
25
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, 29.5.1492
26
Modely času v DB 6 Nejčastěji se používají diskrétní modely –Spojité se těžko implementují
27
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
28
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)
29
Č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
30
Reprezentace časové domény Dané modely jsou nejlépe vidět na obrázcích
31
“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ů
32
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]
33
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, …
34
Obecně vícedimenzionální DB Implementováno např. v Oracle Podpora Multidimenzionální analýzy OLAP (MOLAP) Klauzule CUBE
35
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
Podobné prezentace
© 2024 SlidePlayer.cz Inc.
All rights reserved.