340 likes | 467 Views
Temporáln e Databáz y. Tomáš Kohan. Čím sa budeme zaoberať. Prečo je čas v DB dôležitý Práca s časom pomocou klasického SQL Reprezentácia časovej domény Spojovanie dat s časom … Temporálne dotazovacie jazyky. Prečo je čas dôležitý (1). Zapisovanie predmetov na VŠ
E N D
Temporálne Databázy Tomáš Kohan
Čím sa budeme zaoberať • Prečo je čas v DB dôležitý • Práca s časom pomocou klasického SQL • Reprezentácia časovej domény • Spojovanie dat s časom • … • Temporálne dotazovacie jazyky
Prečo je čas dôležitý (1) • Zapisovanie predmetov na VŠ • Aktuálne je zaujímavý len prebiehajúci semester • Je potrebné udržovať aj historické informácie • Programová skladba v televíznej spoločnosti • Veľké množstvo dat • Častá zmena v čase • Drahé chyby (=> dôraz na jednoduchosť kódu)
Prečo je čas dôležitý (2) • Uchovanie nie iba aktuálnych dat • Vyhľadavanie a analýza údajov k nejakému datumu (z nejakého intervalu) • Vyžaduje jednoduchý a prehľadný spôsob dotazovania • Musia byť maximálne optimalizované
Zhrnutie • Čas hraje v databázach významnú úlohu • Nie je to iba teoretický problém
Práca s časom pomocou SQL92 (1) • Uchovávanie jednoduchej tabuľky • Zamestnanci (meno, plat, titul,d_nar DATE) • Kedy sa Bob narodil? SELECT d_nar FROM Zamestnanci WHERE meno = ‘Bob’
Práca s časom pomocou SQL92 (2) • Rozšírime model o položky štart a stop • štart – začiatok platnosti položky • stop – koniec platnosti položky
Práca s časom pomocou SQL92 (3) Výsledná tabuľka: Zamestnanci ( meno, plat, titul d_nar Date, štart Date, stop Date )
Temporálna projekcia (1) • Aký je aktuálny Bobov plat? SELECT plat FROM Zamestnanci WHERE meno = ‘Bob’ AND štart <= aktuálny_čas AND aktuálny_čas <= stop
Temporálna projekcia (3.1) • Vyrobíme si pomocnú tabuľku Temp CREATE TABLE Temp(plat, štart, stop) AS SELECT plat, štart, stop FROM Zamestnanci WHERE meno = ´Bob´ |-----------| |----| |------------| |--------|
Temporálna projekcia (3.2) repeat UPDATE Temp T1 SET (T1.stop)=(SELECT MAX(T2.stop) FROM Temp AS T2 WHERE T1.plat = T2.plat AND T1.štart < T2.štart AND T1.stop >= T2.start AND T1.stop < T2.stop) WHERE EXISTS(SELECT * FROM Temp AS T2 WHERE T1.plat = T2.plat AND T1.štart < T2.štart AND T1.stop >= T2.štart AND T1.stop < T2.stop) until “žiaden riadok sa nezmení” • Záznamy sa predlžujú doprava |--------------| |------------------| |--------------| |--------|
Temporálna projekcia (3.3) • Ešte zmažeme nemaximálne riadky DELETE FROM Temp T1 WHERE EXISTS ( SELECT * FROM Temp AS T2 WHERE T1.plat = T2.plat AND ((T1.štart > T2.štart AND T1.stop <= T2.stop) OR (T1.start >= T2.štart AND T1.stop < T2.stop))
Temporálna projekcia (4.1) • Bez použitia repeat/until cyklu • Predpokládajme, že máme tabuľku Temp ako v predchádzajúcom príklade
Temporálna projekcia (4.2) SELECT DISTINCT F.plat, F.štart, L.stop FROM Temp AS F, Temp AS L WHERE F.štart < L.stop AND F.plat = L.plat AND NOT EXISTS(SELECT * FROM Temp AS M WHERE M.plat = F.plat AND F.štart < M.štart AND M.štart < L.stop AND NOT EXISTS(SELECT * FROM Temp AS T1 WHERE T1.plat = F.plat AND T1.štart < M.štart AND M.štart <=T1.stop)) AND NOT EXISTS (SELECT * FROM Temp AS T2 WHERE T2.plat=F.plat AND ((T2.štart < F.štart AND F.štart <= T2.stop) OR T2.štart < L.stop AND L.stop < T2.stop))) • Snažíme sa o rast jednotlivých časových úsekov • Podmienky NOT EXISTS: (1) vylučuje “časové diery” a (2) zaručuje maximalitu • Je to možné robiť o niečo málo jednoduchšie pomocou kurzorov
Temporálna projekcia pomocou TSQL2 SELECT plat FROM Zamestnanci WHERE meno = ‘Bob’
Temporálne spojenie (join) (1) • Rozdeľme tabuľku Zamestnanci na dve: • Zamestnanci1(meno, plat, štart, stop) • Zamestnanci2(meno, titul,štart, stop) • Toto delenie uľahčí predchádzajúci dotaz: SELECT plat, štart,stop FROM Zamestnanci1 WHERE meno = ´Bob´
Temporálne spojenie (2) • Pri spájaní dvoch tabuliek je treba rozlišovať štyri prípady: • T2.štart <= T1.štart AND T1.stop <=T2.stop • T1.štart > T2.štart AND T2.stop < T1.stop AND T1.štart < T2.stop • T2.štart > T1.štart AND T1.stop < T2.stop AND T2.štart < T1.stop • T2.štart>=T1.štart AND T2.stop <= T1.stop • To výrazne predlžuje zápis dotazu • jednoduché prirodzené spojenie tabuliek Zamestnanci 1 a 2 je ešte dlhšie ako predchádzajúce dotazy !!!)
Zhrnutie • Práca s časom je v SQL92 veľmi obtiažna • Ľahko náchylné na chyby programátorov • Vnorené dotazy bránia optimalizáciam • …
Reprezentacia časovej domény • model času • Môže to byť ľubovoľná množina, na ktorej je čiastočné usporiadanie • Prijatím dodatočných axiomov môžeme získať konkrétne modely
Modely času v DB (1) • Lineárny čas (linear model) • Usporiadanie je lineárne • Čas postupuje “krok za krokom” • Vetviaci sa čas (branching model) • Čas od minulosti do teraz je lineárny • Čas od teraz do budúcnosti sa vetví na teoreticky možné vetvy • Tento model tvorí vlastne strom s koreňom v prítomnosti
Modely času v DB (2) • Cyklický model • Napr. dni v týždni • Vyjadrujú sa ním rekurentné deje • Diskrétny model • Je izomorfný prirodzeným číslam • Každý prvok má známeho následníka
Modely času v DB (3) • Hustý model • Je izomorfný racionálnym číslam • Medzi každými dvoma okamžikmi existuje ďalší • Spojitý model • Je izomorfný reálnym číslam • Neobsahuje medzery
Modely času v DB (4) • Spojitý model • každé reálne číslo odpovedá jednému bodu • Diskrétny model • Každé reálné číslo odpovedá intervalu • Chronon • Najmenšia doba trvania reprezentovatelná v diskrétnom modele
Modely času v DB (5) • Modely môžu mať hornú (dolnú) hranicu • Znázorňujú čas: • Relativný • 9 hodin • Absolutný (ten je ale tiež relativný) • 9:52, 29.5.1492
Modely času v DB (6) • Najčastějšie sa používajú diskrétne modely • Spojité sa ťažko implementujú
Datové typy v SQL 92 • DATE • Deň a rok • 4B • TIMESTAMP • Ako Date + časť dňa (štd. mikrosekunda) • 8B • TIME • Časový okamžik dňa. Vo formáte hodina/minuta/sekunda • 4B
Spájanie dat s časom • Nová dimenzia, ktorá reprezentuje čas • 2 typy: • Čas platnosti (valid time) • Čas transakcie (transaction time) • Ak má obidva: bitemporal • Ak žiaden – jedná sa o snímku (snapshot)
Čas transakcie • Čas sa zaznamená pri manipulácii s datami automaticky (insert, delete ,…) • Data v minulosti sa nikdy nemenia (data v tomto modele len pribúdajú) • Nemôže ísť do budúcnosti
Reprezentácia časovej domény • Dané modely sú najlepšie vidieť na obrázkoch
“Podložie” • Čas bol pridaný do veľa modelov • E-R modelu • Sémantických modelov • … • Väčšina temporálnych DB je založená na: • Relačnom modele • OO modele • Existuje veľa takýchto modelov
Jednoduché príklady Segevov datový Model (čas platnosti) Sardov datový Model (čas platnosti)
Temporálne dotazovacie jazyky • Sú založené na niektorom z týchto modelov • Sú odvodené zvyčajne od štandardných dot. jazykov (SQL, QUEL, Relačná algebra,…) • TSQL, TSQL2, TempSQL, HQL, Hquel, HSQL, TDM, Legol 2.0, …
Záver • Existujú úlohy z praxe, kde hraje čas kľúčovú úlohu • Riešenia týchto úloh jazykom SQL sú neohrabané a nedajú se účinne optimalizovať • Riešenie – temporálne dotazovacie jazyky • modely: • Čas transakcie • Čas platnosti