Stáhnout prezentaci
Prezentace se nahrává, počkejte prosím
1
Temporální databáze Martin Zikmund
2
Osnova Motivace Temporální databáze Standardizace Ukázka SQL:2011
Application-time period tables System-versioned tables Bitemporal tables Komerční implementace Shrnutí
3
Motivace Data s danou platností v čase Bez podpory v databáze Příklady
Slevová akce v internetovém obchodě Předplatné služeb, prémiové členství Plánování vydání článků v systému pro správu obsahu Platy zaměstnanců
4
Co jsou temporální databáze?
Databázový systém se zabudovanou podporou pro manipulaci s daty zohledňujícími čas
5
Co jsou temporální databáze?
Klasická databáze Implementace v aplikačním kódu Složitější kontrola referenční integrity Složitější dotazování Temporální databáze Centralizace logiky v databázi Zjednodušení aplikačního kódu Transparentní přístup k datům
6
Standardizace 1992 Richard Snodgrass – první návrhy na vývoj rozšíření SQL pro temporální data
7
1993 Standardizace TSQL2 – rozšíření vzešlá z návrhů
Prezentace výsledků skupině American National Standard for Database Language SQL
8
Standardizace 1994 Finální verze TSQL2 Language Specification
9
Standardizace 1999 Pokus o přidání TSQL2 jako součásti specifikace SQL: (SQL3) Chris Date a Hugh Darwen – kritika přístupu TSQL2 Neúspěšné
10
Standardizace 2001 ISO (International Organization for Standardization) projekt pro standardizaci podpory temporálních dat v SQL zrušen
11
2011 Standardizace Standard SQL:2011 Part 2: SQL/Foundation
Application-time period tables – valid-time tables System-versioned tables – transaction-time tables System-versioned application- time period tables – bitemporal tables
12
SQL:2011 Dimenze času Valid time Transaction time
Období, ve kterém je fakt pravdivý Příklad: období, kdy má být článek zveřejněn na webu V SQL:2011 – application-time period Období, po které je fakt uložen v databázi Příklad: doba od chvíle, kdy autor článek dopíše a uloží do databáze V SQL:2011 – system-time period
13
SQL:2011 Perioda času Nutnost uložení časového úseku do database
Nový datový typ? Nevýhodné z hlediska podpory Vysoká cena implementace Zahrnutí typu do všech nástrojů Zahrnutí podpory typu do JDBC, ODBC, .NET, … Zajištění podpory v jazycích Důsledek – pomalejší zavedení standardu v produkci a komerčních řešeních
14
SQL:2011 Perioda času startDate < endDate [startDate, endDate)
Řešení – definice periody času pomocí metadat tabulky a existujících datových typů TIMESTAMP a DATE Dva sloupce v tabulce určují počátek a konec časové periody Implicitně omezení, že počátek periody je dříve než její konec Standard používá zleva uzavřený model časového intervalu startDate < endDate [startDate, endDate)
15
SQL:2011 Application-time period table
Zachycení reality – fakta, která platí v nějakém období včetně minulosti a budoucnosti CREATE TABLE Employee ( Id INTEGER, JobStart DATE, JobEnd DATE, DepartmentId INTEGER, PERIOD FOR JobPeriod ( JobStart, JobEnd ) )
16
SQL:2011 Application-time INSERT
Vkládání řádků – zahrnuje i data období platnosti řádku INSERT INTO Employee ( Id, JobStart, JobEnd, DepartmentId ) VALUES ( 1, DATE ' ', DATE ' ' , 1 )
17
SQL:2011 Application-time UPDATE
Lze použít klasický Rozšíření FOR PORTION umožní změnit hodnoty sloupců pro určený časový úsek Id JobStart JobEnd DepartmentId 1 UPDATE Employee FOR PORTION OF JobPeriod FROM DATE ' ' TO DATE ' ' SET DepartmentId = 2 WHERE Id = 1 Id JobStart JobEnd DepartmentId 1 2
18
SQL:2011 Application-time Delete
Lze použít klasický Rozšíření FOR PERIOD umožní mazat záznam pro určený časový úsek Id JobStart JobEnd DepartmentId 1 DELETE Employee FOR PORTION OF JobPeriod FROM DATE ' ' TO DATE ' ' WHERE Id = 1 Id JobStart JobEnd DepartmentId 1
19
SQL:2011 Application-time
Id JobStart JobEnd DepartmentId 1 2 Co primární klíč?
20
SQL:2011 Application-time Primární klíče
Sloupec Id jako primární klíč nestačí Řešení – primární klíč musí obsahovat i periodu Sloupce samotné nestačí – řádky by se mohly překrývat Rozšíření WITHOUT OVERLAPS toto omezení kontroluje Id JobStart JobEnd DepartmentId 1 2 ALTER TABLE Employee ADD PRIMARY KEY ( Id, JobPeriod WITHOUT OVERLAPS )
21
SQL:2011 Application-time Referenční Integrita
Přidejme druhou tabulku – oddělení CREATE TABLE Department ( Id INTEGER, ActiveStart DATE, ActiveEnd DATE, Name VARCHAR(20), PERIOD FOR ActivePeriod ( ActiveStart, ActiveEnd ), PRIMARY KEY ( Id, ActivePeriod WITHOUT OVERLAPS ) )
22
SQL:2011 Application-time Referenční Integrita
Zaměstnanci mohou pracovat pouze v odděleních, která jsou aktivní EMPLOYEE DEPARTMENT Id JobStart JobEnd DepartmentId 1 2 Id ActiveStart ActiveEnd Name 1 Phone marketing 2 Enterprise marketing Business marketing ALTER TABLE Employee ADD FOREIGN KEY ( DepartmentId, PERIOD JobPeriod ) REFERENCES Department ( Id, PERIOD ActivePeriod ) Bere v úvahu i sjednocení časových intervalů
23
SQL:2011 Application-time DOTAZování
Základní přístup – klasické dotazy SELECT Name FROM Department WHERE Id = 1 AND ActiveStart <= DATE ' ' AND ActiveEnd > DATE ' ' Rozšíření pro dotazování – CONTAINS, OVERLAPS, EQUALS, PRECEDES, SUCCEEDS, IMMEDIATELY PRECEDES, IMMEDIATELY SUCCEEDS
24
SQL:2011 Application-time DOTAZování
SELECT Name FROM Department WHERE Id = 1 AND ActivePeriod CONTAINS DATE ' ' SELECT Name FROM Department WHERE Id = 1 AND ActivePeriod OVERLAPS PERIOD ( DATE ' ', DATE ' ' )
25
SQL:2011 System-versioned tables
Udržování kompletní historie změn v databázi Často potřebné Změny objednávek Pohyby na účtu Požadováno zákonem Zachovat původní stav řádků i odstraněné řádky – řízeno databází Řešení – systém-versioned tables Koncept periody stejný
26
SQL:2011 System-versioned TABLE
CREATE TABLE Employee ( Id Integer, SystemStart TIMESTAMP(12) GENERATED ALWAYS AS ROW START, SystemEnd TIMESTAMP(12) GENERATED ALWAYS AS ROW END, Name VARCHAR(30), PERIOD FOR SYSTEM_TIME (SystemStart, SystemEnd) ) WITH SYSTEM VERSIONING Současná systémová řádka – perioda systémového času pro řádku obsahuje aktuální systémový čas Historická systémová rádka – ostatní řádky Hodnoty SystemStart a SystemEnd – přiřazeny databází Název periody SYSTEM_TIME daný, nelze změnit Nelze měnit zpětně historické řádky
27
SQL:2011 System-versioned INSERT, UPDATE
INSERT – automaticky nastavuje hodnotu SystemStart na časovou známku transakce a SystemEnd na nejvyšší hodnotu datového typu UPDATE – operuje pouze na aktuálních systémových řádkách – automaticky vkládajá historické řádky, nespouští triggery Id SystemStart SystemEnd Name 1 Hannah Oak UPDATE Employee SET Name = 'Hannah Winter' WHERE Id = 1 Id JobStart JobEnd Name 1 Hannah Oak Hannah Winter
28
SQL:2011 System-versioned DELETE
DELETE – operuje pouze na aktuálních systémových řádkách, řádek nemaže, nespouští trigger Id SystemStart SystemEnd Name 1 Hannah Oak DELETE FROM Employee WHERE Id = 1 Id JobStart JobEnd Name 1 Hannah Oak
29
SQL:2011 System-versioned Primární klíč
Omezení musí platit pouze pro současné řádky, historické pouze pro evidenci Jako primární klíč stačí Id ALTER TABLE Employee ADD PRIMARY KEY ( Id )
30
SQL:2011 System-versioned REFERENční integrita
Omezení musí platit pouze pro současné řádky, historické pouze pro evidenci Jako cizí klíč stačí pouze odkaz na druhou tabulku ALTER TABLE Employee ADD FOREIGN KEY ( DepartmentId ) REFERENCES Department ( Id )
31
SQL:2011 System-versioned Dotazování
Výchozí chování – pouze současné řádky – zpětná kompatibilita Id JobStart JobEnd Name 1 Hannah Oak Hannah Winter SELECT Name FROM Employee WHERE Id = 1 'Hannah Winter'
32
SQL:2011 System-versioned Dotazování
SELECT Name FROM Employee FOR SYSTEM_TIME AS OF TIMESTAMP ' :00:00' Vrací jména, která byla v databázi platná o půlnoci
33
SQL:2011 System-versioned Dotazování
SELECT Id, Name FROM Employee FOR SYSTEM_TIME FROM TIMESTAMP ' :00:00' TO TIMESTAMP ' :00:00' ID a jména, která byla v databázi platná od půlnoci do půlnoci (vyjma) Closed-open interval
34
SQL:2011 System-versioned Dotazování
SELECT Id, Name FROM Employee FOR SYSTEM_TIME BETWEEN TIMESTAMP ' :00:00' AND TIMESTAMP ' :00:00' ID a jména, která byla v databázi platná od půlnoci do půlnoci (včetně) Closed-closed interval
35
SQL:2011 Bitemporal tables
Application-time i system-time tabulka současně CREATE TABLE Employee ( Id Integer, Name VARCHAR(30), JobStart DATE, JobEnd DATE, PERIOD FOR JobPeriod ( JobStart, JobEnd ), SystemStart TIMESTAMP(12) GENERATED ALWAYS AS ROW START, SystemEnd TIMESTAMP(12) GENERATED ALWAYS AS ROW END, PERIOD FOR SYSTEM_TIME (SystemStart, SystemEnd), PRIMARY KEY ( Id, JobPeriod WITHOUT OVERLAPS ) FOREIGN KEY ( DepartmentId, PERIOD JobPeriod ) REFERENCES Department ( Id, PERIOD ActivePeriod ) ) WITH SYSTEM VERSIONING
36
SQL:2011 Bitemporal tables
Udržují nejen informaci o čase faktů v reálném světě, ale i o čase kdy se fakta projevila v databázi Příklad Změna jména – platná počínaje daným datem Do databáze zaznamenána později nebo dříve Je možné dohledat oba údaje Dotazy mohou brát v úvahu obě dimenze SELECT DepartmentId FROM Employee FOR SYSTEM_TIME AS OF TIMESTAMP ' :00:00' WHERE Id = 1 AND JobPeriod CONTAINS DATE ' ' Dotaz vrací ID pracoviště, kde měl pracovník 1 pracovat 1. prosince 2016 podle stavu databáze platného o půlnoci 1. května 2016
37
SQL:2011 Budoucnost Návrhy na rozšíření standardu
Podpora více aplikačních period na jednu tabulku Normalizace period – vytvoření sémanticky minimální množiny řádek vzniklých kombinací řádek s překryvem nebo přímo navazujících se stejnými netemporálními hodnotami Dotazy s UNION, INTERSECT a EXCEPT, které pracují s periodami
38
Komerční implementace IBM DB2
Implementace application-time i system-time od verze 10 Velmi blízké standardu SQL:2011 Je možné označit sloupce s periodou jako implicitně skryté – ve výsledcích dotazů SELECT * sloupce nejsou uvedeny, nutnost explicitního vyžádání Historické řádky uloženy v separátní tabulce „history table“ Testy - práce s temporálními daty pomocí zabudovaných rozšíření je průměrně 1,5x rychlejší než manuální implementace pomocí triggerů a uložených procedur [Florian Künzner, Dušan Petković, 2015]
39
Komerční implementace Teradata
Implementace application-time i system-time od verze 10 Velmi odlišná od standardu, podobná návrhu TSQL2 Datový typ PERIOD Speciální hodnota UNTIL_CHANGED jako „nekonečno“, pro konec periody Implicitní sloupce s periodou
40
Komerční implementace ORACLE
Implementace application-time i system-time od verze 12c Poměrně podobná standardu System-time historické řádky ukládány do tzv. FLASHBACK ARCHIVE Implicitní i explicitní definice sloupců periody
41
Komerční implementace MICROSOFT SQL SERVER
Implementace system-time od verze 2016 Odlišné od standardu
42
Shrnutí Temporální data Temporální databáze Komerční implementace
Široké využití Velmi častý požadavek Temporální databáze Výrazné zjednodušení implementace Ověřené a otestované Standardizace Komerční implementace Postupně se rozšiřuje
43
Zdroje Temporal features in SQL:2011, Krishna Kularni, Jan-Eike Michels (IBM Corporation) Modern Temporal Data Models: Strengths and Weaknesses, Dušan Petković A Comparison of Different Forms of Temporal Data Management, Florian Künzner and Dušan Petković Temporal Data in Relational Database Systems: A Comparison, Dušan Petković [online]
Podobné prezentace
© 2024 SlidePlayer.cz Inc.
All rights reserved.