TSQL2 The Temporal Structured Query Language Jaroslav Ciml

Slides:



Advertisements
Podobné prezentace
Základy jazyka SQL Jan Tichava
Advertisements

Temporální databáze a TSQL
TEMPORÁLNÍ DATABÁZE A TSQL2
SQL PVA Jan Hora. SQL „graficky“ Grafický vs. pravý SQL SELECT ORDED BY WHERE.
TEMPORÁLNÍ DATABÁZE A TSQL2
Overview of Temporal Databases & TSQL2 Tomáš Hladík
Téma: Využití Accessu pro tvorbu evidence našeho podnikání Vypracovala: Jana Wasserbauerová.
Autor, Název akce Databázové systémy a SQL Lekce 7 Daniel Klimeš.
Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Kateřina Raichová. Materiál je publikován pod licencí Creative Commons. ze sady:3tematický.
Základní škola a Mateřská škola Dobrá Voda u Českých Budějovic, Na Vyhlídce 6, Dobrá Voda u Českých Budějovic EU PENÍZE ŠKOLÁM Zlepšení podmínek.
Univerzita třetího věku kurz Znalci Databáze 2.
Praha, Ing. Petr Řádek Číslování vlaků - Rekapitulace Setkání dopravců a zástupců provozovatele dráhy.
Systém správy dokumentace akreditované zkušební laboratoře Bc. Jan Randl, 4912.
NÁZEV ŠKOLY: Masarykova základní škola a mateřská škola Melč, okres Opava, příspěvková organizace ČÍSLO PROJEKTU:CZ.1.07/1.4.00/ AUTOR:Mgr. Vladimír.
Název kapitoly Název podkapitoly Text Schvalovací proces + hodnoticí kritéria Jakub Krátký Praha, 5. května 2016.
Funkce Lineární funkce a její vlastnosti 2. Funkce − definice Funkce je předpis, který každému číslu z definičního oboru, který je podmnožinou množiny.
Databáze © Mgr. Petr Loskot
Úvod do databází MS Access (1).
Microsoft Excel verze 2010 Mgr. Přemysl Kejzlar.
Temporální databáze jOpenSpace 2015 Petr Jůza.
Databázové systémy I Přednáška 7 Databázové systémy 1 – KIT/IDAS1
Dotazovací jazyk SQL I.
Vytvořil: Robert Döring
Temporální databáze Martin Zikmund.
ČAS.
Slovní úlohy o společné práci
Název školy: ZŠ Varnsdorf, Edisonova 2821, okres Děčín, příspěvková organizace Člověk a svět práce, Finanční gramotnost, Mzda Autor: Pavla Lukešová.
Evaluace předmětů studenty (Anketky)
Batové dávky Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Vojtěch Mrózek. Dostupné z Metodického portálu ISSN: ,
Lineární funkce - příklady
Řešení nerovnic Lineární nerovnice
NÁZEV ŠKOLY: S0Š Net Office, spol. s r.o, Orlová Lutyně
Databázové systémy a SQL
Databázové systémy a SQL
Lineární rovnice a nerovnice I.
Uživatelem definované datové typy
Přístupový systém aneb kontrola vstupů
Inf Tabulkový procesor - formátování
ČAS Elektronické učební materiály – I. stupeň Společnost
Databáze MS ACCESS 2010.
METODICKÝ LIST PRO ZŠ Pro zpracování vzdělávacích materiálů (VM)v rámci projektu EU peníze školám Operační program Vzdělávání pro konkurenceschopnost   
SÁRA ŠPAČKOVÁ MARKÉTA KOČÍBOVÁ MARCELA CHROMČÁKOVÁ LUKÁŠ BARTOŠ B3E1
Schvalovací proces + hodnoticí kritéria
Rovnice a graf přímé úměrnosti.
Slovní úlohy o společné práci stejný čas
Řešení nerovnic Lineární nerovnice
Informatika pro ekonomy přednáška 8
Pracovní právo STŘEDNÍ ODBORNÁ ŠKOLA A STŘEDNÍ ODBORNÉ UČILIŠTĚ
Legislativní změny na úseku EO, OP, CD (k datu )
Tresty a ochranná opatření ( trestní sankce)
Počítačová cvičení z předmětu Datové sklady
Microsoft Office Access
Dotazovací jazyk SQL I.
SKENEROVÉ BONUSY.
Materiál byl vytvořen v rámci projektu
Slovní úlohy o společné práci
A5M33IZS – Informační a znalostní systémy
MS Access Tabulka letní semestr 2013.
Přednáška 6 SQL – spojení tabulek.
Přednáška 8 INDEXY, POHLEDY.
Matriční úřad.
KOMBINACE BEZ OPAKOVÁNÍ
Přednáška 5 Úvod do SQL.
Jazyk SQL (databáze SQLite)
Informatika pro ekonomy přednáška 8
Lineární funkce a její vlastnosti
Informatika – Základní operace s buňkami
Relační databáze na příkladu aplikace Microsoft Access
Slovní úlohy o společné práci − 3
Tečné a normálové zrychlení
Transkript prezentace:

TSQL2 The Temporal Structured Query Language Jaroslav Ciml

Struktury pro čas v TSQL2 Diskrétní časová přímka skládající se z atomických částí - chronons Souvislá posloupnost chrononů se může seskupit – lze klást dotazy v různých granularitách (vteřiny, hodiny, dny,...) Temporální typy v TSQL2: DATE, TIME, TIMESTAMP, INTERVAL (zděděné z SQL) + nový typ PERIOD

BCDM (Bitemporal Conceptual Data Model) v relaci je každé n-tici přiřazena množina chrononů (bitemporal chronons) Tuto množinu lze reprezentovat obdélníky v dvojrozměrném prostoru – osy: čas platnosti (valid-time) a transakční čas (transaction-time)

Bitemporální relace – příklad (1) Zaměstnanci (Jméno, Oddělení)

Bitemporální relace – příklad (2) Jméno Oddělení Bitemporální chronony Jake Nakládka {(5, 10),…,(5,15),…(19, 10),…,(19, 15)} Vývoz {(U.C., 10),…,(U.C., 15)}

Definice schématu VT – čas, kdy je lék užíván CREATE TABLE Předpisy (Jméno CHAR(30), Lékař CHAR(30), Lék CHAR(30), Dávka CHAR(30), DobaUžívání INTERVAL MINUTE) AS VALID STATE DAY AND TRANSACTION VT – čas, kdy je lék užíván TT – čas, kdy se informace dostala do databáze

6 typů tabulek Snapshot relation – nemá podporu času platnosti ani transakčního času AS VALID nebo AS VALID STATE – podpora času platnosti AS VALID EVENT – event relation, relace uchovává informace platné v určitý okamžik (nikoli platné po určitou dobu) AS TRANSACTION – podpora transakčního času AS VALID STATE AND TRANSACTION AS VALID EVENT AND TRANSACTION typ tabulky lze změnit pomocí ALTER TABLE

SELECT (1) Kdo užívá (užíval) léky? SELECT SNAPSHOT Jméno FROM Předpisy Kdo užívá (užíval) Proventil? SELECT SNAPSHOT Jméno FROM Předpisy WHERE Lék = 'Proventil' Kdo užívá (užíval) léky a kdy? SELECT Jméno FROM Předpisy

SELECT (2) Spolu s kterými léky byl užíván Proventil? SELECT P1.Jméno, P2.Lék FROM Předpisy AS P1, Předpisy AS P2 WHERE P1.Lék = 'Proventil' AND P2.Lék <> 'Proventil' AND P1.Jméno = P2.Jméno Výsledkem jsou řádky obsahující dvojice (jméno pacienta, název léku) spolu s množinou maximálních časových úseků, kdy byly oba léky předepsány pacientovi současně

Restrukturalizace Kdo užíval stejný lék (celkově) déle než 6 měsíců? K srůstání časových úseků ve výsledku dochází automaticky, restrukturalizace umožňuje, aby k srůstání docházelo také v klauzuli FROM Kdo užíval stejný lék (celkově) déle než 6 měsíců? SELECT Jméno, Lék FROM Předpisy(Jméno, Lék) AS P WHERE CAST(VALID(P) AS INTERVAL MONTH) > INTERVAL '6' MONTH Konstrukce VALID(P) vrací pro každý řádek relace P dobu platnosti (množinu maximálních časových úseků) Operátor CAST provede konverzi na typ INTERVAL MONTH tím, že sečte časové úseky vrácené pomocí VALID(P)

Spojení P1 – projekce relace Předpisy na sloupec Jméno Kdo užíval Proventil po celou dobu své léčby? SELECT SNAPSHOT P1.Jméno FROM Předpisy(Jméno) AS P1, P1(Lék) AS P2 WHERE P2.Lék = 'Proventil' AND VALID(P2) = VALID(P1) P1 – projekce relace Předpisy na sloupec Jméno P2 – projekce na sloupce Jméno a Lék (v obou případech dochází k srůstání) výsledkem klauzule FROM je přirozené spojení P1 a P2

Spojení Kdo užíval Proventil po celou dobu své léčby? SELECT SNAPSHOT P1.Jméno FROM Předpisy(Jméno) AS P1, P1(Lék) AS P2 WHERE P2.Lék = 'Proventil' AND VALID(P2) = VALID(P1) Alternativní zápis téhož SELECT SNAPSHOT P1.Jméno FROM (SELECT Jméno FROM Předpisy) AS P1, (SELECT Jméno, Lék FROM Předpisy) AS P2 WHERE P2.Lék = 'Proventil' AND VALID(P2) = VALID(P1) AND P1.Jméno = P2.Jméno

Partitioning Kdo užíval stejný lék souvislou dobu delší než 6 měsíců? SELECT SNAPSHOT Jméno, Lék, VALID(P) FROM Předpisy(Jméno, Lék)(PERIOD) AS P WHERE CAST(VALID(P) AS INTERVAL MONTH) > INTERVAL '6' MONTH Relace Předpisy je nejprve restrukturalizována na sloupce Jméno a Lék, konstrukcí (PERIOD) se každá řádka, která vznikne restrukturalizací rozdělí na několik řádek – vzniká zvláštní řádka pro každý maximální interval doby platnosti Alternativní zápis: SELECT Jméno, Lék FROM...

Partitioning Kdo užíval stejný lék souvislou dobu delší než 6 měsíců? SELECT SNAPSHOT Jméno, Lék, VALID(P) FROM Předpisy(Jméno, Lék)(PERIOD) AS P WHERE CAST(VALID(P) AS INTERVAL MONTH) > INTERVAL '6' MONTH Kdo užíval stejný lék (celkově) déle než 6 měsíců? SELECT Jméno, Lék FROM Předpisy(Jméno, Lék) AS P WHERE CAST(VALID(P) AS INTERVAL MONTH) > INTERVAL '6' MONTH

Klauzule VALID SELECT P1.Jméno, P2.Lék Pro každý řádek dostáváme ve výsledku čas platnosti, který je implicitně vypočítán jako průnik času platnosti relací uvedených v klauzuli FROM Toto implicitní chování lze změnit klauzulí VALID Spolu s kterými léky byl užíván Proventil? SELECT P1.Jméno, P2.Lék FROM Předpisy AS P1, Předpisy AS P2 WHERE P1.Lék = 'Proventil' AND P2.Lék <> 'Proventil' AND P1.Jméno = P2.Jméno Jaké léky užívala Melanie během roku 1996? SELECT Lék VALID INTERSECT(VALID(Předpisy), PERIOD '[1996]' DAY) FROM Předpisy WHERE Jméno = 'Melanie'

INSERT INSERT INTO Předpisy VALUES ('Melanie', 'Dr. Beren', 'Proventil', '100mg', INTERVAL '8:00' MINUTE) Vložení řádku se známou dobou platnosti INSERT INTO Předpisy VALUES ('Melanie', 'Dr. Beren', 'Proventil', '100mg', INTERVAL '8:00' MINUTE) VALID PERIOD '[1996-01-01 - 1996-06-30]' Implicitní doba platnosti je VALID PERIOD(CURRENT_TIMESTAMP, NOBIND(CURRENT_TIMESTAMP))

DELETE Zrušení předpisů pro Melanie z června 1996 DELETE FROM Předpisy WHERE Jméno = 'Melanie' VALID PERIOD '[1996-06-01 – 1996-06-30]' Řádkám, jejichž doba platnosti zasahuje do června pouze částečně, je doba platnosti zkrácena

UPDATE Změna dávkování Proventilu na 50 mg UPDATE Předpisy SET Dávka TO '50 mg' WHERE Jméno = 'Melanie' AND Lék = 'Proventil' Ovlivněny jsou pouze záznamy týkající se přítomnosti a budoucnosti Změna dávkování Proventilu na 50 mg od března do května UPDATE Předpisy SET Dosage TO '50 mg' VALID PERIOD '[1996-06-01 – 1996-05-30]' WHERE Jméno = 'Melanie' AND Lék = 'Proventil'

Event Relations Relace událostí obsahují ke každému řádku množinu časových razítek CREATE TBABLE Test (Jméno CHAR(30), Lékař CHAR(30), TestID INTEGER) AS VALID EVENT HOUR AND TRANSACTION

Ještě jednou restrukturalizace Který lékař objednával testy jedinému pacientovi? (a naopak také požadujeme, aby všechny testy pacienta prováděl stejný lékař) SELECT L1.Jméno, L2.Lékař FROM Test(Jméno) AS L1, L1(Lékař) AS L2, Test(Lékař) AS L3 WHERE VALID(L1) = VALID(L2) AND L2.Lékař = L3.Lékař AND VALID(L1) = VALID(L3)

Podpora transakčního času Historie předepsaných léků pro Melanie SELECT Lék FROM Předpisy WHERE Jméno = 'Melanie' Historie předepsaných léků pro Melanie aktuální 1. června 1996 SELECT Lék FROM Předpisy WHERE Jméno = 'Melanie' AND TRANSACTION(P) OVERLAPS DATE '1996-06-01' Implicitně: TRANSACTION(P) OVERLAPS CURRENT_TIMESTAMP

Podpora transakčního času Kdy byla změněna informace o lécích předepsaných na 1.červen 1996? SELECT SNAPSHOT BEGIN(TRANSACTION(P2)) FROM Předpisy AS P1, P2 WHERE P1.Jméno = 'Melanie' AND P2.Jméno = 'Melanie' AND VALID(P1) OVERLAPS DATE '1996-06-01' AND VALID(P2) OVERLAPS DATE '1996-06-01' AND TRANSACTION(P1) MEETS TRANSACTION(P2) VALID(P1) OVERLAPS DATE '1996-06-01' – vybere pouze řádky, kde čas platnosti obsahuje den 1.6.1996 TRANSACTION(P1) MEETS TRANSACTION(P2) – řádek asociovaný s P1 byl opraven řádkem asociovaným s P2

Agregační funkce Počet předpisů pro Melanie SELECT COUNT(*) Na temporální relace lze používat agregační funkce známé z SQL-92: MIN, MAX, COUNT, SUM, AVG Počet předpisů pro Melanie SELECT COUNT(*) FROM Předpisy WHERE Jméno = 'Melanie' Počet předpisů pro jednotlivé léky SELECT Lék, COUNT(*) FROM Předpisy GROUP BY Lék

Vývoj schématu Přidání sloupce do tabulky ALTER TABLE Předpisy SQL dovoluje změnit schéma pomocí příkazu ALTER – původní schéma je ztraceno v TSQL2 se uchovají obě dvě verze schématu (pouze u relací s podporou transakčního času) data s podporou transakčního času nemohou být modifikována, lze pouze přidávat nová data TSQL2 podporuje proces zvaný vacuuming, který zajišťuje fyzické odstranění dat Přidání sloupce do tabulky ALTER TABLE Předpisy ADD COLUMN Identifier INTEGER Aplikace může pracovat se starším schématem, pro které byla vytvořena SET SCHEME DATE '1996-08-19'

Shrnutí TSQL umožňuje vytvořit 6 druhů tabulek s různou podporou času platnosti a transakčního času „obyčejnou“ relaci z relace podporující čas platnosti můžeme získat konstrukcí SELECT SNAPSHOT Restrukturalizace umožňuje provést projekci na některé sloupce, na výsledku této projekce dochází k srůstání intervalů času platnosti, restrukturalizace se týká klauzule FROM, na výsledku dochází k srůstání intervalů automaticky Partitioning je operace, která vytvoří zvláštní řádek pro každý (maximální) interval doby platnosti, v klauzuli FROM uvedeme (PERIOD) V klauzuli WHERE lze specifikovat čas platnosti i transakční čas Relace událostí přiřazují každému řádku množinu časových razítek