Prezentace se nahrává, počkejte prosím

Prezentace se nahrává, počkejte prosím

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í.

Podobné prezentace


Prezentace na téma: "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í."— Transkript prezentace:

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


Stáhnout ppt "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í."

Podobné prezentace


Reklamy Google