Prezentace se nahrává, počkejte prosím

Prezentace se nahrává, počkejte prosím

Overview of Temporal Databases & TSQL2 Tomáš Hladík 4.11.2014 1.

Podobné prezentace


Prezentace na téma: "Overview of Temporal Databases & TSQL2 Tomáš Hladík 4.11.2014 1."— Transkript prezentace:

1 Overview of Temporal Databases & TSQL2 Tomáš Hladík

2 Přehled O SQL92 v kombinaci s časem O Temporální databáze O TSQL2 2

3 Pohled času O Rozvrhy O Platy O Události O Zkoušky O Reklamy O Logování 3

4 Klasické databáze O Zachycují moment v čase O Obtížnější práce s časem O Veškerou práci řídí aplikační programy O DELETE / UPDATE typicky maže stav a vytvoří nový O Klasicky speciální sloupce pro časové úseky O Historie rozvrhů – pod který semestr patří O Složitější zdrojový kód 4

5 Temporální databáze O Hledisko času O Ukládají historii O Dva typy databází podle časových údajů O KDY / JAK DLOUHO událost trvala O Čas určujeme sami O KDY byla událost nastala O Čas se měří automaticky 5

6 Klasické databáze CASE STUDY O Příklad univerzity a svých zaměstnanců O Tabulka EMPLOYEE O Jaký mám Bob plat? SELECT Salary FROM Employee WHERE Name = `Bob` NameString SalaryInteger TitleString 6

7 CASE STUDY O Jaké je datum narození Boba? SELECT DateOfBirth FROM Employee WHERE Name = `Bob` O PROBLÉM: historie NameString SalaryInteger TitleString DateOfBirthDate 7

8 CASE STUDY NameString SalaryInteger TitleString DateOfBirthDate StartDate StopDate 8

9 CASE STUDY O Jaký je aktuální plat Boba? SELECT Salary FROM Employee WHERE Name = `Bob` AND Start <= CURRENT_DATE AND Stop >= CURRENT_DATE 9

10 CASE STUDY 10

11 Historie platů – 1. pokus CREATE TABLE Temp(Salary, Start, Stop) AS SELECT Salary, Start, Stop FROM Employee WHERE Name = `Bob` 11

12 Historie platů – 1. pokus repeat UPDATE Temp T1 SET (T1.Stop) = (SELECT MAX(T2.Stop) FROM Temp AS T2 WHERE T1.Salary = T2.Salary AND T1.Start < T2.Start AND T1.Stop >= T2.Start AND T1.Stop < T2.Stop) WHERE EXISTS (SELECT * FROM Temp AS T2 WHERE T1.Salary = T2.Salary AND T1.Start < T2.Start AND T1.Stop >= T2.Start AND T1.Stop < T2.Stop) until no tuples updated 12 Vytvoříme maximální délku

13 Historie platů – 1. pokus DELETE FROM Temp T1 WHERE EXISTS (SELECT * FROM Temp AS T2 WHERE T1.Salary = T2.Salary AND ((T1.Start > T2.Start AND T1.Stop <= T2.Stop) OR (T1.Start >= T2.Start AND T1.Stop < T2.Stop)) 13 Menší úseky smažeme

14 Historie platů – 2. pokus SELECT DISTINCT F.Salary, F.Start, L.stop FROM Temp AS F, Temp AS L WHERE F.Start < L.Stop AND F.salary = L.Salary AND NOT EXISTS (SELECT * FROM Temp AS M WHERE M.Salary = F.Salary AND F.Start < M.Start AND M.Start < L.Stop AND NOT EXISTS (SELECT * FROM Temp AS T1 WHERE T1.Salary = F.Salary AND T1.Start < M.Start AND M.Start <= T1.Stop)) AND NOT EXISTS (SELECT * FROM Temp AS T2 WHERE T2.Salary = F.Salary AND ((T2.Start < F.Start AND F.Start <= T2.Stop) OR (T2.Start < = L.Stop AND L.Stop < T2.Stop))) 14 Platy na sebe navazují Období je maximální

15 Historie platů – 3. pokus DECLARE emp_cursor CURSOR FOR SELECT Salary, Title, Start, Stop FROM Employee WHERE Name = `Bob` OPEN emp_cursor loop: FETCH emp_cursor INTO :salary, :start, :stop if no data returned then goto finished; find position in linked list to insert this information goto loop; finished: CLOSE emp_cursor; iterate through linked list, printing out dates and salaries 15

16 Historie platů – TSQL2! SELECT Salary FROM Employee WHERE Name = ´Bob´ 16

17 Historie platů SQL, další problém O Co když oddělíme historii platu a historii pozice? O Employee1(Name, Salary, Start, Stop) O Employee2(Name, Dept, Start, Stop) 17

18 18

19 Historie platů – TSQL2 SELECT Salary.Name, Salary, Dept FROM Employee1, Employee2 WHERE Employee1.Name = Employee2.Name 19

20 SQL92 vs. TSQL2 O Čas je běžným problémem O Klasický SQL dotaz může být velmi komplikovaný O Ztráta přehlednosti 20

21 Modely času O Lineární model O Je uspořádán a postupuje po „krocích“, např. dnech O Cyklický model O Dny v týdnu / měsíci O Diskrétní model O Isomorfní k přirozeným číslům (axiom následníků) O Nejčastěji používaný O Nekonečný model O Isomorfní k reálným číslům 21

22 Čas a SQL92 O DATE O TIME O TIMESTAMP O INTERVAL O V některých DB ani není podporován O Typy: Year-month & second-day 22

23 Čas O 2 hlavní typy O VALID time O KDY událost nastala / JAK DLOUHO trvala O TRANSACTION time dimension O JAK DLOUHO událost trvala O KDY začala platit a KDY byla zneplatněná O viz platy O SNAPSHOT O DB nepodporující ani jeden typ 23

24 Rozdíly O VALID time O Možnost vkládat jakýkoli čas O TRANSACTION time O Čas je počítán od doby založení DB O Nelze měnit 24

25 Časové datové modely O Relační vs. Objektově-orientované 25

26 Časové datové modely O Valid-time vs. Transaction time 26

27 Příklady datových modelů O Sevgev‘s valid-time data model O Začátek události O Neumožňuje souběh dvou činností 27

28 Příklady datových modelů O Sarda‘s data model (valid) O Umožňuje souběh více činností O Null není povinná 28

29 Příklady datových modelů O HRDM data model (valid) O Funkce: z času do hodnot atributů 29

30 Příklady datových modelů O The extensional data model O Obě časové dimenze O Kompletně popisuje historii O Kdy se co stalo O Kdy se co změnilo O Paměťově náročné 30

31 Příklady datových modelů O Bhargava‘s data model O 1. transaction time O 2. valid time 31

32 Dotazovací jazyky O 40 datových modelů O Každý má lehce odlišnou sémantiku O Jiný dotazovací jazyk 32

33 TSQL2 Temporal Structured Query Language 33

34 TSQL2 O Na návrhu se podílelo 18 lidí O Nadmnožina SQL92 O Základ pro nový standard SQL3 O Lineární časový model O 18 miliard let do minulosti O 18 miliard let do budoucnosti O Diskrétní reprezentace časového prostoru O Různé granularity 34

35 TSQL2 O BCDM O Bitemporal Conceptual Data Model O Valid-time & transaction-time 35

36 TSQL2 – CREATE TABLE CREATE TABLE Prescription (Name CHAR(30), Physician CHAR(30), Drug CHAR(30), Dosage CHAR(30), Frequency INTERVAL MINUTE) AS VALID STATE DAY AND TRANSACTION O AS – nová konstrukce O SNAPSHOT – bez podpory času O VALID STATE O VALID EVENT O TRANSACTION O VALID STATE AND TRANSACTION O VALID EVENT AND TRANSACTION 36

37 TSQL2 - SELECT O Komu byly předepsané léky? SELECT SNAPSHOT Name FROM Prescription O Komu byl předepsán Proventil? SELECT SNAPSHOT Name FROM Prescription WHERE Drug = ´Proventil´ 37

38 TSQL2 - SELECT O Historie SELECT Name FROM Prescription O Jaké léky byly předepsané společně s Proventilem? SELECT P1.Name, P2.Drug FROM Prescription AS P1, Prescription AS P2 WHERE P1.Drug = ´Proventil´ AND P2.Drug <> ´Proventil´ AND P1.Name = P2.Name O Výsledek trojice (Jméno, lék, max čas), kdy byly léky užívány společně 38

39 TSQL2 – SELECT Restructuring O Kdo bral léky déle než 6 měsíců? SELECT Name, Drug FROM Prescription(Name, Drug) AS P WHERE CAST(VALID(P) AS INTERVAL MONTH) > INTERVAL ´6´ MONTH O Prescription(Name, Drug) - čas (maximální, kdy pacient užívá lék) je vztažen k této dvojici bez ohledu na další sloupce O VALID – elementy valid-time spojené se sloupci O CAST – převod na INTERVAL MONTH za pomocí součtů doby předepsání léků O Výsledek – Jméno, lék, čas předepsání 39

40 TSQL2 – SELECT / Restructuring O Kdo užíval Proventil po celou dobu léčení? SELECT SNAPSHOT P1.Name FROM Prescription(Name) AS P1, P1(Drug) AS P2 WHERE P2.Drug = ´Proventil´ AND VALID(P1) = VALID(P2) O FROM (SELECT Name FROM Prescription) AS P1, (SELECT Name, Drug FROM Prescription) AS P2 + WHERE P1.Name = P2.Name O P1(Drug) obsahuje podmínku na jméno, VALID(P1) obsahuje VALID(P2), opačná relace neplatí 40

41 TSQL2 – SELECT / Partioning O Kdo užíval nějaký lék souvisle 6 měsíců SELECT SNAPSHOT Name, Drug, VALID(P) FROM Prescription(Name, Drug) (PERIOD) AS P WHERE CAST(VALID(P) AS INTERVAL MONTH) > INTERVAL ´6´ MONTH O Případně bez „SNAPSHOT VALID(P)“ O Vrací pouze jednu dvojici (Name, Drug) s MAX intervalem O První verze může vrátit více trojic 41

42 TSQL2 - INSERT INSERT INTO Prescription VALUES (´Melanie´, ´Dr. Beren´, ´Proventil´, ´100mg´, INTERVAL ´8:00´ MINUTE O Výchozí hodnota transaction-time O VALID PERIOD (CURRENT_TIMESTAMP, NOBIND(CURRENT_TIMESTAMP)) O VALID PERIOD ´[ – ]´ 42

43 TSQL2 - DELETE DELETE FROM Prescription WHERE Name = ´Melanie´ VALID PERIOD ´[ – ]´ 43

44 TSQL2 - UPDATE UPDATE Prescription SET Dosage TO ´50mg´ VALID PERIOD ´[ – ]´ WHERE Name = ´Melanie´ AND Drug = ´Proventil´ 44

45 TSQL2 - UDÁLOSTI CREATE TABLE LabTest (Name CHAR(30), Physician CHAR(30), TestID INTEGER) AS VALID EVENT HOUR AND TRANSACTION 45

46 TSQL2 - UDÁLOSTI O Byl některé pacient jediným účastníkem testů u svého doktora? SELECT L1.Name, L2.Physician FROM LabTest(Name) AS L1, L1(Physician) AS L2, LabTest(Physician) AS L3 WHERE VALID(L1 ) = VALID(L2) AND L2.Physician = L3.Physician AND VALID(L1) = VALID(L3) O VALID(L1) obsahuje souhrn událostí testů na pacientovi 46

47 TSQL2 - HISTORIE O Výpis historie SELECT P.Drug FROM Prescription AS P WHERE Name = ´Melanie´ O Jak vypadala historie k datu ? AND TRANSACTION(P) OVERLAPS DATE ´ ´ 47

48 TSQL2 O Kdy byla naposledy editována data platná ke SELECT SNAPSHOT BEGIN (TRANSACTION(P2)) FROM Prescription AS P1, P2 WHERE P1.Name = ´Melanie´ AND P2.Name = ´Melanie´ AND VALID(P1) OVERLAPS DATE ´ ´ AND VALID(P2) OVERLAPS DATE ´ ´ AND TRANSACTION(P1) MEETS TRANSACTION(P2) O N-tice P1 byla opravená – jeden z atributů stavu P2 48

49 TSQL2 – AGREGAČNÍ FUNCKCE O SELECT COUNT(*) FROM Prescription WHERE Name=´Melanie´ O SELECT Drug, COUNT(*) FROM Prescription GROUP BY Drug O Nově RISING O Nejdelší období, kdy se atribut monotónně zvyšuje O Kdy rostlo dávkování Proventilu u Melanie? O SELECT SNAPSHOT RISING(Dosage) FROM Prescription WHERE Name=´Melanie´ AND Drug=´Proventil´ 49

50 TSQL2 – ÚPRAVY TABULEK O ALTER TABLE O SQL92 – dostupná jen nejnovější verze O TSQL2 – při přidání sloupce lze získat i starší verzi O Nutná podpora transactional-time 50

51 ZÁVĚR O Velmi dobrá podpora času O Valid-time O Transaction-time O Výrazně jednodušší dotazování O Změny v rámci tabulek mohou být verzované O Automatické uchovávání historie 51

52 Zdroje O Carlo Zaniolo, et al: Advanced Database Systems. Chapters 5, 6. Morgan Kaufmann Publ.,

53 Děkuji za pozornost 53


Stáhnout ppt "Overview of Temporal Databases & TSQL2 Tomáš Hladík 4.11.2014 1."

Podobné prezentace


Reklamy Google