1 / 50

TEMPORÁLNÍ DATABÁZE A TSQL2

TEMPORÁLNÍ DATABÁZE A TSQL2. Markéta Ulrychová, Yan Zaytsev ZS 2013/2014. Obsah. Úvod Rozbor příkladů Temporální projekce a spojení Časové domény Datové modely TSQL. Úvod. Čas je potřeba uchovat a pracovat s ním: Klasický databázový systém Zachycuje stav systému v daném okamžiku

lirit
Download Presentation

TEMPORÁLNÍ DATABÁZE A TSQL2

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. TEMPORÁLNÍ DATABÁZEATSQL2 Markéta Ulrychová, Yan Zaytsev ZS 2013/2014

  2. Obsah Úvod Rozbor příkladů Temporální projekce a spojení Časové domény Datové modely TSQL

  3. Úvod Čas je potřeba uchovat a pracovat s ním: Klasický databázový systém Zachycuje stav systému v daném okamžiku Jak pracovat se starými daty? Temporální databázový systém Podporuje práci s časem – zohledňuje časové vlastnosti vkládaných dat Jednodušší dotazy přes časová období

  4. Příklad (1) Tabulka (SQL): Zaměstnanci (Jméno, Plat, Funkce) Dotaz: Jaký plat má p. Novák? SELECT Plat FROM Zaměstnanci WHERE Jméno = 'Novák'

  5. Příklad (2) Rozšíření tabulky: Zaměstnanci (Jméno, Plat, Funkce, Datum_narození DATE) Dotaz: Kdy se p. Novák narodil? SELECT Datum_narození FROM Zaměstnanci WHERE Jméno = 'Novák'

  6. Příklad (2) Rozšíření tabulky: Zaměstnanci (Jméno, Plat, Funkce, Datum_narození DATE) Dotaz: Kdy se p. Novák narodil? SELECT Datum_narození FROM Zaměstnanci WHERE Jméno = 'Novák'

  7. Příklad (3) Rozšíření tabulky (2): Zaměstnanci (Jméno, Plat, Funkce, Datum_narození, Datum_od DATE, Datum_do DATE) Dotaz: Jaký je aktuální plat p. Nováka? SELECT Plat FROM Zaměstnanci WHERE Jméno = 'Novák' AND Datum_od <= CURRENT_DATE AND CURRENT_DATE <= Datum_do

  8. Temporální projekce (1) Dotaz: Kdy měl p. Novák jaký plat?

  9. Temporální projekce (2) 1) Repeat-until cyklus – není v SQL 2) NOT EXISTS (SQL) – velmi dlouhý dotaz

  10. Temporální projekce (3) 3) TSQL2: SELECT Plat FROM Zaměstnanci WHERE Jméno = 'Novák' Srůstání (časových intervalů) V klasických DB systémech nízká podpora

  11. Temporální spojení (1) Tabulky (přerozdělení): Zaměstnanci_plat (Jméno, Plat, Datum_od DATE, Datum_do DATE) Zaměstnanci_funkce (Jméno, Funkce, Datum_od DATE, Datum_do DATE) Dotaz: Jaká je historie platů p. Nováka?

  12. Temporální spojení (2) SQL: Rozbor případů analýza překrývání časových intervalů v Zaměstnanci_plat a Zaměstnanci_funkce 4 případy - jednoduchý, ale dlouhý SQL SELECT dotaz TSQL2: SELECT Zaměstnanci_plat.Jméno, Plat, Funkce FROM Zaměstnanci_plat, Zaměstnanci_funkce WHERE Zaměstnanci_plat.Jméno = Zaměstnanci_funkce.Jméno

  13. Shrnutí I. Práce s časově závislými daty je běžná, potřebná. Velmi malá podpora klasických databází ==> temporální databáze a databázové systémy.

  14. Časové domény (1) Temporální logika: čas = libovolná množina okamžiků s částečným uspořádáním Časové modely podle uspořádání: Lineární – úplné uspořádání Rozvětvený – do “teď” lineární, pak se může větvit do několika linií (budoucnost) Cyklický – např. dny v týdnu

  15. Časové domény (2) Časové modely podle hustoty: Diskrétní – každý okamžik má jediného následníka Husté – “časové mezery” Spojitý – neobsahuje mezery Absolutní x relativní čas

  16. Časové domény (3) – datové typy Okamžik (time instant) DATE (den, rok) TIME (sekundy) TIMESTAMP (zlomek sekundy) Úsek (time period) Doba mezi dvěma okamžiky (10:40-12:20) Interval (time interval) doba trvání (90 minut) Množina okamžiků (instant set) Množina úseků (temporal elements) Sjednocení úseků

  17. Vztah události a času 2 ortogonální dimenze: Čas platnosti (valid time) Doba, kdy byla událost v realitě pravdivá – kdy se stala I v budoucnosti Transakční čas (transaction time) Doba, kdy byla událost reprezentovaná v DB Pouze minulost a současnost

  18. Událost a čas – datové modely (1) Snapshot Nepodporuje ani čas platnosti ani transakční čas Klasický relační model Při změně reality se mění stav relace (vložení, odebrání, změna prvků)

  19. Událost a čas – datové modely (2) Transaction-time model Podporuje pouze transakční čas Posloupnost snapshotů indexovaných transakčním časem Nemění existující data Append-only (snapshot) Hledání v minulosti

  20. Událost a čas – datové modely (3) Valid-time model Podporuje pouze čas platnosti Dotazy i na fakta platná v budoucnosti Možná úprava čehokoli

  21. Událost a čas – datové modely (4) Bitemporální model Podporuje čas platnosti i transakční čas 4D: n-tice, hodnoty atributů, čas platnosti, transakční čas append-only

  22. Shrnutí II. Snaha časových modelů splnit mnoho cílů: Jasná sémantika aplikace Konzistence Minimální rozšíření stávajícího modelu Snadná implementace Vysoký výkon Výsledek: mnoho nekompatibilních datových modelů s mnoha dotazovacími jazyky

  23. TSQL2 The Temporal Structured Query Language

  24. cílem je sjednotit přístup k temporálním datovým modelům a dotazovacím jazykům rozšíření k SQL92 TSQL2

  25. Lineární časová struktura, omezeni (+-18 miliard let) diskrétní reprezentace reálného času Nelze se ptát, zda okamžik A předchází okamžik B – pouze v rámci zvolené granularity (vteřiny, dny,...) DATE, TIME, TIMESTAMP, INTERVAL, PERIOD TSQL2

  26. striktní nadmnožina SQL92 pro příklad temporálních relací budeme používat databázi pacientů CREATE TABLE Predpis(Jmeno CHAR(30), Lekar CHAR(30), Lek CHAR(30), Davka CHAR(30), Frekvence INTERVAL MINUTE) AS VALID STATE DAY AND TRANSACTION frekvence je počet minut mezi dávkami valid time – na kdy je lék předepsán transaction time – příchod záznamu do databáze TSQL2

  27. striktní nadmnožina SQL92 pro příklad temporálních relací budeme používat databázi pacientů CREATE TABLE Predpis(Jmeno CHAR(30), Lekar CHAR(30), Lek CHAR(30), Davka CHAR(30), Frekvence INTERVAL MINUTE) AS VALID STATE DAY AND TRANSACTION frekvence je počet minut mezi dávkami valid time – na kdy je lék předepsán transaction time – příchod záznamu do databáze TSQL2

  28. snímková – žádná temporální podpora valid-time state AS VALID STATE valid-time event AS VALID EVENT transaction-time AS TRANSACTION bitemporal state AS VALID STATE AND TRANSACTION bitemporal event AS VALID EVENT AND TRANSACTION typ relace se může změnit ALTER TABLE TSQL2 – Druhy relací

  29. Novým klíčovým slovem SNAPSHOT získáme snímek z temporální relace Kdo někdy měl předepsané léky? SELECT SNAPSHOT Jmeno FROM Predpis Kdo někdy měl předepsaný aspirin? SELECT SNAPSHOT Jmeno FROM Predpis WHERE Lek = ‘Aspirin’ TSQL2

  30. Kdo měl předepsané léky a kdy? SELECT Jmeno FROM Predpis Defaultní chování vrací historii TSQL2 automaticky provádí koalescenci Výsledkem je množina řádků, každý s periodou, kdy pacient bral jeden či více léků TSQL2

  31. Jeden z nejsilnějších prostředků Koalescence se automaticky provádí na výsledek dotazu – toto umožňuje provést ji na řádky v klauzuli FROM TSQL2 - Přeorganizování

  32. Kdo bral lék celkem déle než 6 měsíců? SELECT Jmeno, Lek FROM Predpis(Jmeno, Lek) AS P WHERE CAST(VALID(P) AS INTERVAL MONTH) >INTERVAL ‘6’ MONTH Přeorganizování na Jmeno a Lek, výsledkem je maximální doba kdy byl lék předepsán VALID(P) vrací valid-time prvky z P operátor CAST konvertuje co vyjde z valid TSQL2 - Přeorganizování

  33. Kdo užíval Aspirin celou dobu, kdy byl v lekarně? SELECT SNAPSHOTP1.Jmeno FROMPredpis(Jmeno) AS P1, P1(Lek)AS P2 WHEREP2.Lek = ‘Aspirin’AND VALID(P2) = VALID(P1) Spárování Jak přeorganizování, tak spárování je „syntaktické cukrátko,“ dá se přepsat pomocí vnořených selectů TSQL2 - Přeorganizování

  34. Často chceme zkoumat maximální periody timestamp klíčové slovo PERIOD Kdo bral stejný lék déle než 6 měsíců v kuse? SELECT SNAPSHOTJmeno, Lek ,VALID(P) FROMPredpis(Jmeno, Lek)(PERIOD) AS P WHERE CAST(VALID(P) AS INTERVAL MONTH) > INTERVAL ‘6’ MONTH TSQL2 - Štěpení (Partitioning)

  35. Pro každý pár lék-jméno pouze jeden výsledek s maximální délkou užívání. štěpení není „syntaktické cukrátko“ TSQL2 - Štěpení (Partitioning)

  36. Jaké léky měla Michaela předepsány v roce 1996? SELECTLek VALID INTERSECT(VALID(Predpis), PERIOD‘[1996]’DAY) FROMPredpis WHEREName = ‘Michaela’ Výsledkem je seznam léků společně s časem, kdy byl předepsán. TSQL2 - VALID

  37. INSER INTOPredpis VALUES(‘Michaela’, ‘Dr. Sova’, ‘Aspirin’, ‘100mg’, INTERVAL ‘8:00’ MINUTE) Nespecifikovali jsme timestamp, default: VALID PERIOD(CURRENT_TIMESTAMP, NOBIND(CURRENT_TIMESTAMP)) Otevřený konec (konec je aktualní čas) TSQL2 – Modifikace dat

  38. INSER INTOPredpis VALUES(‘Michaela’, ‘Dr. Sova’, ‘Aspirin’, ‘100mg’, INTERVAL ‘8:00’ MINUTE) VALID PERIOD ‘[1996-01-01 – 1996-06-30]’ automatická koalescence transaction time je roven CURRENT_TIMESTAMP VALID je taky použitelné i v DELETE a UPDATE TSQL2

  39. DELETE může změnit více záznamů kvůli překrývání timestampů – režii řeší TSQL2 UPDATE Predpis SET Davka TO ‘50mg’ WHERE Name = ‘Melanie’ AND Lek = ‘Aspirin’ Dojde ke změně všech současných a budoucích! dávek TSQL2

  40. Doteď jsme se zabývali jen stavem, který je po nějaký čas pravdivý Eventy zaznamenávají okamžité události CREATE TABLE LabTest (Jmeno CHAR(30), Lekar CHAR(30), TestID INTEGER) AS VALID EVENT HOUR AND TRANSACTION TSQL2 – Události (Event Relations)

  41. Byly některé pacienty jedinými příjemci testů nařízených lékařem? (Lékar nařídíl testy jen pro jediného pacienta, a tento pacient byl příjemcem testu jen od jedíného lekaře) SELECT L1.Jmeno, L2.Lekar FROM LabTest(Jmeno) AS L1, L1(Lekar) AS L2, LabTest(Lekar) AS L3 WHERE VALID(L1) = VALID(L2) AND L2.Lekar = L3.Lekar AND VALID(L1) = VALID(L3) TSQL2 – Události (Event Relations)

  42. Doteď jsme neřešili, že tabulka Predpis podporuje transaction time Jaké předpisy Michaela měla? SELECT Lek FROM Predpis WHERE Jmeno = ‘Michaela’ Vrací historii jak je nejlépe známá, včetně oprav TSQL2 – Transaction time

  43. Můžeme udělat v databázi rollback Kdyby bylo 1.6.1996, jaké předpisy by Michaela měla? SELECTLek FROMPredpisAS P WHEREJmeno = ‘Michaela’ AND TRANSACTION(P) OVERLAPS DATE ‘1996-06-01’ Default je TRANSACTION(P) OVERLAPS CURRENT_TIMESTAMP TSQL2 – Transaction time

  44. Kdy byla Michaelina data, validní k 1.6.1996 naposled opravována? SELECT SNAPSHOT BEGIN(TRANSACTION(P2)) FROMPredpisAS P1 P2 WHEREP1.Jmeno = ‘Michaela’ ANDP2.Jmeno = ‘Michaela’ AND VALID(P1) OVERLAPS DATE ‘1996-06-01’ AND VALID(P2) OVERLAPS DATE ‘1996-06-01’ AND TRANSACTION(P1) MEETS TRANSACTION(P2) TSQL2 – Transaction time

  45. SELECT COUNT(*) FROM Predpis WHERE Jmeno = ‘Michaela’ vrací valid-time state relaci jak se měnil počet předpisů v libovolném bodě v čase TSQL2 – Agregační funkce

  46. TSQL2 přidává funkci RISING nejdelší období, kdy atribut monotónně rostl SELECT SNAPSHOT RISING(Davka) FROMPredpis WHEREJmeno = ‘Michaela’ANDLek = ‘Aspirin’ dotaz vrátí množinu období, kdy atribut rostl TSQL2 – Agregační funkce

  47. SQL dovoluje schéma měnit pomocí ALTER - vývoj. Pokud má relace podporu transaction-time tak se schéma pro tuto relaci verzuje V praxi se celé schéma stane množinou relací transacion-time Když chci jinou verzi: SET SCHEMA DATE ‘1996-08-19’ TSQL2

  48. surrogate – unikátní hodnota, vhodná k porovnání na shodu; TSQL2 přidává sloupec SURROGATE a unární funkci NEW vacuuming – odstranění zastaralých dat s podporou transaction-time data nemizí z databáze, ale přidá se timestamp o smazání TSQL2

  49. přidává práci s prvky které se mění časem lze používat i konvenční relace periody jsou nový typ s daným trváním v čase TSQL2 - Shrnutí

  50. Carlo Zaniolo: Advanced Database Systems C.J. Date, H. Darven, N. Lorentzos: Temporal Data & the Relational Model Zdroje

More Related