TEMPORÁLNÍ DATABÁZE A TSQL2

50
TEMPORÁLNÍ DATABÁZE A TSQL2 Markéta Ulrychová, Yan Zaytsev ZS 2013/2014

description

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 - PowerPoint PPT Presentation

Transcript of TEMPORÁLNÍ DATABÁZE A TSQL2

Page 1: TEMPORÁLNÍ DATABÁZE A TSQL2

TEMPORÁLNÍ DATABÁZEA

TSQL2

Markéta Ulrychová, Yan ZaytsevZS 2013/2014

Page 2: TEMPORÁLNÍ DATABÁZE A TSQL2

Obsah

ÚvodRozbor příkladůTemporální projekce a spojeníČasové doményDatové modelyTSQL

Page 3: TEMPORÁLNÍ DATABÁZE A TSQL2

Úvod

Čas je potřeba uchovat a pracovat s ním:Klasický databázový systémZachycuje stav systému v daném okamžikuJak pracovat se starými daty?

Temporální databázový systémPodporuje práci s časem – zohledňuje časové vlastnosti vkládaných datJednodušší dotazy přes časová období

Page 4: TEMPORÁLNÍ DATABÁZE A TSQL2

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'

Page 5: TEMPORÁLNÍ DATABÁZE A TSQL2

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'

Page 6: TEMPORÁLNÍ DATABÁZE A TSQL2

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'

Page 7: TEMPORÁLNÍ DATABÁZE A TSQL2

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

Page 8: TEMPORÁLNÍ DATABÁZE A TSQL2

Temporální projekce (1)

Jméno Plat Funkce Datum_narození Datum_od Datum_do

Novák 10 000 Poslíček 1975-04-01 1995-01-01 1995-06-01

Novák 20 000 Poslíček 1975-04-01 1995-06-01 1995-10-01

Novák 20 000 Posel 1975-04-01 1995-10-01 1996-03-02

Novák 20 000 Vrchní posel 1975-04-01 1996-03-02 1997-01-01

Jméno Plat Datum_od Datum_do

Novák 10 000 1995-01-01 1995-06-01

Novák 20 000 1995-06-01 1997-01-01

Dotaz: Kdy měl p. Novák jaký plat?

Page 9: TEMPORÁLNÍ DATABÁZE A TSQL2

Temporální projekce (2)

1) Repeat-until cyklus – není v SQL

2) NOT EXISTS (SQL) – velmi dlouhý dotaz

Page 10: TEMPORÁLNÍ DATABÁZE A TSQL2

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

Page 11: TEMPORÁLNÍ DATABÁZE A TSQL2

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?

Page 12: TEMPORÁLNÍ DATABÁZE A TSQL2

Temporální spojení (2)

SQL: Rozbor případůanalýza překrývání časových intervalů v Zaměstnanci_plat a Zaměstnanci_funkce4 případy - jednoduchý, ale dlouhý SQL SELECT dotazTSQL2: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

Page 13: TEMPORÁLNÍ DATABÁZE A TSQL2

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.

Page 14: TEMPORÁLNÍ DATABÁZE A TSQL2

Č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

Page 15: TEMPORÁLNÍ DATABÁZE A TSQL2

Časové domény (2)

Časové modely podle hustoty:Diskrétní – každý okamžik má jediného následníkaHusté – “časové mezery”Spojitý – neobsahuje mezery

Absolutní x relativní čas

Page 16: TEMPORÁLNÍ DATABÁZE A TSQL2

Časové domény (3) – datové typyOkamž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ů

Page 17: TEMPORÁLNÍ DATABÁZE A TSQL2

Vztah události a času

2 ortogonální dimenze:Čas platnosti (valid time)Doba, kdy byla událost v realitě pravdivá – kdy se stalaI v budoucnosti

Transakční čas (transaction time)Doba, kdy byla událost reprezentovaná v DBPouze minulost a současnost

Page 18: TEMPORÁLNÍ DATABÁZE A TSQL2

Událost a čas – datové modely (1)

SnapshotNepodporuje ani čas platnosti ani transakční časKlasický relační modelPři změně reality se mění stav relace (vložení, odebrání, změna prvků)

Page 19: TEMPORÁLNÍ DATABÁZE A TSQL2

Událost a čas – datové modely (2)

Transaction-time modelPodporuje pouze transakční časPosloupnost snapshotů indexovaných transakčním časemNemění existující dataAppend-only (snapshot)Hledání v minulosti

Page 20: TEMPORÁLNÍ DATABÁZE A TSQL2

Událost a čas – datové modely (3)

Valid-time modelPodporuje pouze čas platnostiDotazy i na fakta platná v budoucnostiMožná úprava čehokoli

Page 21: TEMPORÁLNÍ DATABÁZE A TSQL2

Událost a čas – datové modely (4)

Bitemporální modelPodporuje čas platnosti i transakční čas4D: n-tice, hodnoty atributů, čas platnosti, transakční časappend-only

Page 22: TEMPORÁLNÍ DATABÁZE A TSQL2

Shrnutí II.

Snaha časových modelů splnit mnoho cílů:Jasná sémantika aplikaceKonzistenceMinimální rozšíření stávajícího modeluSnadná implementaceVysoký výkonVýsledek: mnoho nekompatibilních datových modelů s mnoha dotazovacími jazyky

Page 23: TEMPORÁLNÍ DATABÁZE A TSQL2

TSQL2

The Temporal Structured

Query Language

Page 24: TEMPORÁLNÍ DATABÁZE A TSQL2

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

TSQL2

Page 25: TEMPORÁLNÍ DATABÁZE A TSQL2

Lineární časová struktura, omezeni (+-18 miliard let)diskrétní reprezentace reálného časuNelze 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

Page 26: TEMPORÁLNÍ DATABÁZE A TSQL2

striktní nadmnožina SQL92pro 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 TRANSACTIONfrekvence je počet minut mezi dávkamivalid time – na kdy je lék předepsántransaction time – příchod záznamu do databáze

TSQL2

Page 27: TEMPORÁLNÍ DATABÁZE A TSQL2

striktní nadmnožina SQL92pro 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ávkamivalid time – na kdy je lék předepsántransaction time – příchod záznamu do databáze

TSQL2

Page 28: TEMPORÁLNÍ DATABÁZE A TSQL2

snímková – žádná temporální podporavalid-time state AS VALID STATEvalid-time event AS VALID EVENTtransaction-time AS TRANSACTIONbitemporal state AS VALID STATE AND TRANSACTIONbitemporal event AS VALID EVENT AND TRANSACTIONtyp relace se může změnit ALTER TABLE

TSQL2 – Druhy relací

Page 29: TEMPORÁLNÍ DATABÁZE A TSQL2

Novým klíčovým slovem SNAPSHOT získáme snímek z temporální relaceKdo někdy měl předepsané léky?

SELECT SNAPSHOT Jmeno

FROM PredpisKdo někdy měl předepsaný aspirin?

SELECT SNAPSHOT Jmeno

FROM Predpis

WHERE Lek = ‘Aspirin’

TSQL2

Page 30: TEMPORÁLNÍ DATABÁZE A TSQL2

Kdo měl předepsané léky a kdy?

SELECT Jmeno

FROM PredpisDefaultní chování vrací historiiTSQL2 automaticky provádí koalescenciVýsledkem je množina řádků, každý s periodou, kdy pacient bral jeden či více léků

TSQL2

Page 31: TEMPORÁLNÍ DATABÁZE A TSQL2

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í

Page 32: TEMPORÁLNÍ DATABÁZE A TSQL2

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’ MONTHPř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 Poperátor CAST konvertuje co vyjde z valid

TSQL2 - Přeorganizování

Page 33: TEMPORÁLNÍ DATABÁZE A TSQL2

Kdo užíval Aspirin celou dobu, kdy byl v lekarně?

SELECT SNAPSHOT P1.Jmeno

FROM Predpis(Jmeno) AS P1, P1(Lek) AS P2

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

Page 34: TEMPORÁLNÍ DATABÁZE A TSQL2

Často chceme zkoumat maximální periody timestampklíčové slovo PERIODKdo bral stejný lék déle než 6 měsíců v kuse?

SELECT SNAPSHOT Jmeno, Lek , VALID(P)

FROM Predpis(Jmeno, Lek)(PERIOD) AS P

WHERE CAST(VALID(P) AS INTERVAL MONTH)

> INTERVAL ‘6’ MONTH

TSQL2 - Štěpení (Partitioning)

Page 35: TEMPORÁLNÍ DATABÁZE A TSQL2

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)

Page 36: TEMPORÁLNÍ DATABÁZE A TSQL2

Jaké léky měla Michaela předepsány v roce 1996?

SELECT Lek

VALID INTERSECT(VALID(Predpis), PERIOD ‘[1996]’ DAY)

FROM Predpis

WHERE Name = ‘Michaela’Výsledkem je seznam léků společně s časem, kdy byl předepsán.

TSQL2 - VALID

Page 37: TEMPORÁLNÍ DATABÁZE A TSQL2

INSER INTO Predpis

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

Page 38: TEMPORÁLNÍ DATABÁZE A TSQL2

INSER INTO Predpis

VALUES(‘Michaela’, ‘Dr. Sova’, ‘Aspirin’, ‘100mg’,

INTERVAL ‘8:00’ MINUTE)

VALID PERIOD ‘[1996-01-01 – 1996-06-30]’

automatická koalescencetransaction time je roven CURRENT_TIMESTAMPVALID je taky použitelné i v DELETE a UPDATE

TSQL2

Page 39: TEMPORÁLNÍ DATABÁZE A TSQL2

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

Page 40: TEMPORÁLNÍ DATABÁZE A TSQL2

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)

Page 41: TEMPORÁLNÍ DATABÁZE A TSQL2

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)

Page 42: TEMPORÁLNÍ DATABÁZE A TSQL2

Doteď jsme neřešili, že tabulka Predpis podporuje transaction timeJaké 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

Page 43: TEMPORÁLNÍ DATABÁZE A TSQL2

Můžeme udělat v databázi rollbackKdyby bylo 1.6.1996, jaké předpisy by Michaela měla?

SELECT Lek

FROM Predpis AS P

WHERE Jmeno = ‘Michaela’

AND TRANSACTION(P) OVERLAPS DATE ‘1996-06-01’

Default je TRANSACTION(P) OVERLAPS CURRENT_TIMESTAMP

TSQL2 – Transaction time

Page 44: TEMPORÁLNÍ DATABÁZE A TSQL2

Kdy byla Michaelina data, validní k 1.6.1996 naposled opravována?

SELECT SNAPSHOT BEGIN(TRANSACTION(P2))

FROM Predpis AS P1 P2

WHERE P1.Jmeno = ‘Michaela’ AND P2.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

Page 45: TEMPORÁLNÍ DATABÁZE A TSQL2

SELECT COUNT(*)

FROM Predpis

WHERE Jmeno = ‘Michaela’vrací valid-time state relacijak se měnil počet předpisů v libovolném bodě v čase

TSQL2 – Agregační funkce

Page 46: TEMPORÁLNÍ DATABÁZE A TSQL2

TSQL2 přidává funkci RISINGnejdelší období, kdy atribut monotónně rostl

SELECT SNAPSHOT RISING (Davka)

FROM Predpis

WHERE Jmeno = ‘Michaela’ AND Lek = ‘Aspirin’

dotaz vrátí množinu období, kdy atribut rostl

TSQL2 – Agregační funkce

Page 47: TEMPORÁLNÍ DATABÁZE A TSQL2

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

TSQL2

Page 48: TEMPORÁLNÍ DATABÁZE A TSQL2

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

TSQL2

Page 49: TEMPORÁLNÍ DATABÁZE A TSQL2

přidává práci s prvky které se mění časemlze používat i konvenční relaceperiody jsou nový typ s daným trváním v čase

TSQL2 - Shrnutí

Page 50: TEMPORÁLNÍ DATABÁZE A TSQL2

Carlo Zaniolo: Advanced Database SystemsC.J. Date, H. Darven, N. Lorentzos: Temporal Data & the Relational Model

Zdroje