TEMPORÁLNÍ DATABÁZE A TSQL2

Slides:



Advertisements
Podobné prezentace
Aplikační a programové vybavení
Advertisements

KIV/ZIS Cvičení 6 SQL - SELECT.
Základy jazyka SQL Jan Tichava
Ladislav Hofman, Jan Slavík TUL Předmět databázové systémy
Timer časovač potřebuji provádět příkazy opakovaně po uplynutí určitého časového intervalu vlastnost Interval nastavuji v milisekundách (1000  1s) určuje.
Funkce Transact-SQL Výběr Filip Čálek.
Aplikační a programové vybavení
Jazyk SQL Ing. Zdena DOBEŠOVÁ. SQL Structured Query Language 1974 SEQUEL (Structured English Query Language) neprocedurální relační dotazovací jazyk norma.
 Informací se data a vztahy mezi nimi stávají vhodnou interpretací pro uživatele, která odhaluje uspořádání, vztahy, tendence a trendy  Existuje celá.
Fakulta elektrotechniky a informatiky
Informační systémy Realizace uložených procedur a spouští, jejich praktické využití.
Informační systémy Nástroje pro sběr dat, návrh a realizace databáze.
Další dotazy SQL Structured Query Language. Některé SQL příkazy mohou mít v sobě obsaženy další kompletní příkazy SELECT. Využijeme je tam, kde potřebujeme.
SQL Structured Query Language
Informatika pro ekonomy II přednáška 11
Databázové systémy 1 Cvičení č. 2 Fakulta elektrotechniky a informatiky Univerzita Pardubice.
Databázové systémy II Přednáška č. 6 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
1 BUMI Úvod do medicínské informatiky Počítačové cvičení č. 3 Ing. Vratislav Čmiel.
Temporální databáze a TSQL
Možnosti implementace temporálních Databází v Caché Lukáš Rychnovský
SQL Lukáš Masopust Historie  Předchůdcem databází byly papírové kartotéky  děrný štítek  1959 konference  1960 – vytvořen jazyk COBOL.
SQL Lukáš Masopust Historie  Předchůdcem databází byly papírové kartotéky  děrný štítek  1959 konference  1960 – vytvořen jazyk COBOL.
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í.
Radek Špinka Přepínače MSSQL výběr.
MySQL - Vytvoření nové tabulky  create table jméno_tabulky (jméno_položky typ_položky,... ) Přehled nejběžnějších datových typů Přehled nejběžnějších.
Databázové systémy Štěpán Šípal.
Databáze Úvod.
Databázové systémy II Přednáška č. 8 – Pohledy (Views)
Execution plans Lubomír Andrle 6. přednáška
Školení správců II. Petr Pinkas RNDr. Vít Ochozka.
Cvičení 04 SQL Exists, Any, All Ing. Pavel Bednář
Fakulta elektrotechniky a informatiky
Databázové systémy I Cvičení č. 9 Fakulta elektrotechniky a informatiky Univerzita Pardubice 2013.
KIV/ZIS cvičení 6 Tomáš Potužák. Pokračování SQL Klauzule GROUP BY a dotazy nad více tabulkami Stáhnout soubor studenti_dotazy_sql.mdb.
Databázové systémy I Cvičení č. 6 Fakulta elektrotechniky a informatiky Univerzita Pardubice 2013.
Databázové systémy Přednáška č. 6.
SQL – základní pojmy Ing. Roman Danel, Ph.D.
SQL PVA Jan Hora. SQL „graficky“ Grafický vs. pravý SQL SELECT ORDED BY WHERE.
Rauer Luboš Kopic Petr Blažek Tomáš. Structured Query Language - dotazovací jazyk -> pracuje s dotazy - neprocedurální jazyk - mocný, ale přitom jednoduchý.
Číslo šablony: III/2 VY_32_INOVACE_P4_3.8 Tematická oblast: Aplikační software pro práci s informacemi II. Databáze – základy SQL Typ: DUM - kombinovaný.
Architektury a techniky DS Cvičení č. 9 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
Transakční zpracování v SQL P. Částek. Transakce Transakce = logická jednotka práce Podaří-li se všechny části transakce, potvrdíme je. COMMIT Jestliže.
Databázové systémy UIN010 N-ticový (řádkový) relační kalkul Hodnoty proměnných n-tice relací (řádky) Konstanty hodnoty atributů Unární funkční.
Informatika II PAA DOTAZOVACÍ JAZYKY
Dynamic SQL P. Částek. Dynamic SQL Embedded SQL je překládaný preprocesorem => za běhu nelze nechat uživatele rozhodovat o vzhledu samotných SQL příkazů.
Aplikační a programové vybavení
Obchodní akademie, Ostrava-Poruba, příspěvková organizace Vzdělávací materiál/DUM VY_32_INOVACE_01B13 Autor Ing. Jiří Kalousek Období vytvoření březen.
Databázové systémy 2 Cvičení č. 5 Fakulta elektrotechniky a informatiky Univerzita Pardubice.
Základní obeznámení s jazykem SQL Databázové systémy.
Databázové systémy SQL Výběr dat.
TEMPORÁLNÍ DATABÁZE A TSQL2
Použití dotazu jako zdroj dat pro pohled Vypracovala: Procházková Petra.
Databázové Aplikace Slidy ke cvičení DBI026, část 3 KSI MFF UK Verze
SQL Další dotazy a pohledy Databázové systémy. Některé SQL příkazy mohou mít v sobě obsaženy další kompletní příkazy SELECT. Využijeme je tam, kde potřebujeme.
Teorie zpracování dat RELAČNÍ DATOVÝ MODEL.
Lišta nástrojů Standard otevření, uložení a další manipulace se soubory (tj. projekty) načítání dat (mapových vrstev) „žluté plus“ změna měřítka odkaz.
Databázové systémy I Přednáška č. 6 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
Overview of Temporal Databases & TSQL2 Tomáš Hladík
SQL – příkaz SELECT Ing. Roman Danel, Ph.D.
Temporální databáze Martin Zikmund.
Databázové systémy I Přednáška 8 Databázové systémy 1 – KIT/IDAS1
Databázové systémy a SQL
Databázové systémy a SQL
Databázové systémy a SQL
Počítačová cvičení z předmětu Datové sklady #1 Relační model dat
Přednáška 9 Triggery.
Databázové systémy a SQL
Databázové jazyky Jaroslav Pokorný FI BVŠP Bratislava
TSQL2 The Temporal Structured Query Language Jaroslav Ciml
Databázové systémy a SQL
Transkript prezentace:

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

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

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'

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'

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

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

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

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

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, Dotaz: Jaká je historie platů p. Nováka?

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

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.

Č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

Č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

Č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ů

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

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ů)

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

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

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

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

The Temporal Structured Query Language TSQL2 The Temporal Structured Query Language

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

TSQL2 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 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 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 – Druhy relací 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 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? WHERE Lek = ‘Aspirin’

TSQL2 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 - Přeorganizování 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í 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í 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 - Štěpení (Partitioning) Č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 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) 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 - VALID 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 – Modifikace dat 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 INSER INTO Predpis 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 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 – Události (Event Relations) 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) 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 – Transaction time 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 Můžeme udělat v databázi rollback Kdyby 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 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 – Agregační funkce 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 TSQL2 přidává funkci RISING nejdelší 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 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 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 - Shrnutí 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

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