Temporalne bazy danych Temporalne bazy danych wspierają powiązanie elementów temporalnych ze zdarzeniami lub stanami reprezentowanymi w bazie danych. Zastosowania: archiwa elektroniczne medyczne bazy danych (historie choroby) dane ekonomiczne statystyczne bazy danych systemy informacji o terenie (prawa własności) systemy zarządzania sieciami telekomunikacyjnymi systemy zarządzania sieciami komputerowymi komputerowe systemy sterowania
Dziedzina czasu Dziedziną czasu w temporalnych bazach danych jest zbiór kolejnych, równooddalonych punktów czasu. Minimalna odległość między poszczególnymi punktami czasu jest określona przez jednostkę czasu. 0 1 2 3 4 5 6 7 8 9 10 11 12 now Temporalne typy danych date ( year, month, day ) : 1994-12-08 time ( hour, minute, second ) : 11:55:12 timestamp ( year, month, day, hour, minute, second): 1994-12-08 11:55:12 period (year,month,day,hour,minute,second) (t 1 - t 2 ): (1994-12-08 11:55:12) - (1993-04-17 00:21:14) = (1y, 7m, 21d, 11h, 33m, 58s) 0 1 2 3 4 5 6 7 8 9 10 11 12 now d = 4 interval [t 1, t 2 ] : [ 1994-12-08 11:55:12, 1993-04-17 00:21:14 ] 0 1 2 3 4 5 6 7 8 9 10 11 12 now i = [4, 8] temporal elements { [t 1, t 2 ],..., [t n-1, t n ] } 0 1 2 3 4 5 6 7 8 9 10 11 12 now te = { [1, 3], [6, 10], [11, 12] }
Przykład Osoba { id_osoby INTEGER(6), nazwisko STRING, data_urodzenia DATE, ostatnie_zatrudnienie_p DATE, ostatnie_zatrudnienie_k DATE, godziny_pracy_p NUMBER, godziny_pracy_k NUMBER, lunch NUMBER } OkresyZatrudnienia { id_osoby INTEGER(6), początek_okresu_zatrudnienia DATE, koniec_okresu_zatrudnienia DATE} Osoba { id_osoby INTEGER(6), nazwisko STRING, data_urodzenia DATE, okresy_zatrudnienia TEMPORAL_ELEMENTS, ostatnie_zatrudnienie INTERVAL MONTH TO YEAR, godziny_pracy_p TIME, godziny_pracy_k TIME, lunch PERIOD HOUR TO MINUTE }
Operacje temporalne Funkcje wbudowane datetime BEGIN(period) datetime END(period) period PERIOD(datetime1, datetime2) period INTERSECT(period1, period2) interval ABSOLUTE(interval) datetime FIRST(datetime1, datetime2) datetime LAST(datetime1, datetime2) Operacje arytmetyczne Operand1 Operator Operand2 Wynik - interval interval interval + interval interval interval - interval interval datetime + interval datetime datetime - interval datetime interval + datetime datetime datetime - datetime interval interval * numeric interval numeric * interval interval interval / numeric interval interval / interval numeric interval + period period period + interval period period - interval period Operacje porównania
x BEFORE y y AFTER x x EQUALS y x x y y x MEETS y x y x OVERLAPS y x y x DURING y y CONTAINS x y x x STARTS y x y x FINISHES y y x
Funkcje statystyczne Funkcja Datetime Period Interval COUNT SUM? AVG MAX MIN Przykłady: SELECT AVG(CAST(SUM(zatrudniony) AS INTERVAL YEAR TO MONTH)) FROM pracownicy WHERE zatrudniony CONTAINS PERIOD(DATE 01/01/92, DATE 31/12/93 )
Temporalne modele danych Klasyfikacja temporalnych modeli danych dynamika obiektów 1. obiekty statyczne 2. obiekty dynamiczne 3. obiekty z dynamicznymi atrybutami model czasu 1. czas występowania zjawiska w świecie rzeczywistym (ang. valid-time) 2. czas reprezentacji w bazie danych (ang. transaction time) 3. bitemporalny Przykład: Dziubutkiewicz = { ("Dziubutkiewicz", "referent", 3.500.000, [1.04.90, 30.06.91]), ("Dziubutkiewicz", "kierownik", 7.800.000, [1.07.91, 31.03.93]), ("Dziubutkiewicz", "dyrektor", 15.500.000, [1.04.93, now]) } Dziubutkiewicz = ("Dziubutkiewicz", {("referent", [1.04.90, 30.06.91]), ("kierownik", [1.07.91, 31.03.93]), ("dyrektor", [1.04.93, now])}, {(3.500.000, [1.04.90, 31.03.91]), (4.100.000, [1.04.91, 30.06.91]), (7.800.000, [1.07.91, 31.03.93]), (15.500.000, [1.04.93, now])})
Bitemporalny model czasu R(A 1, A 2,..., A n, (vte,tte)) gdzie: A i - są atrybutami jawnie zdefiniowanymi przez użytkownika. Mogą byc to również atrybuty zdefiniowane na dziedzinie czasu; np. data_urodzenia; vte (valid temporal element) - jest elementem temporalnym związanym z każdym obiektem i określającym kiedy fakt reprezentowany przez dany obiekt jest prawdziwy dla modelowanej rzeczywistości; tte (transaction temporal element) - jest elementem temporalnym związanym z każdym obiektem i określającym kiedy fakt reprezentowany przez dany obiekt jest składowany w bazie danych. 15-09-93 valid-time 15-09-91 15-09-89 15-06-89 27-08-91 Nowak - dziekanem transaction-time CREATE TABLE A (... ) AS VALID
Temporalny język zapytań Problemy Relacja: Kadry Nazwisko Etat Płaca Szef Funkcja Start Stop Nowak Adiunkt 120,00 Tarzan 1-03-84 31-05-88 Nowak Docent 350,00 Tarzan Dziekan 1-06-88 31-12-90 Nowak Adiunkt 450,00 1-01-91 30-09-92 Nowak Profesor 650,00 1-10-92 31-05-93 Nowak Profesor 990,00 Rektor 1-06-93 31-12-97 Tarzan Profesor 420,00 1-01-81 31-12-88 1. Brak możliwości weryfikacji więzów integralności: create table kadry (... szef varchar(15) references nazwisko,... ); 2. Brak wsparcia dla operacji połączenia, pod-zapytań, sumy, iloczynu i różnicy relacji: Znajdź pracowników, którzy nie są szefami 3. Brak wsparcia dla funkcji statystycznych: Podaj liczbę pracowników firmy 4. Brak wsparcia dla operacji modyfikacji: Zmień dziekana wydziału w roku 1989
Nazwisko Etat Płaca Szef Funkcja Start Stop Nowak Adiunkt 120,00 Tarzan 1-03-84 31-12-85 Nowak Adiunkt 160,00 Tarzan 1-01-86 15-09-86 Nowak Docent 220,00 Tarzan 16-9-86 31-05-88 Nowak Docent 350,00 Dziekan 1-06-88 31-12-88 Nowak Docent 420,00 Dziekan 1-01-89 30-09-90 Nowak Adiunkt 420,00 Dziekan 1-10-90 31-12-90 Nowak Adiunkt 450,00 1-01-91 30-09-92 Nowak Profesor 650,00 1-10-92 31-05-93 Nowak Profesor 990,00 Rektor 1-06-93 31-12-95 Nowak Profesor 1800,00 Rektor 1-01-96 Tarzan... Podaj historię etatów Nowaka? Nazwisko Etat Start Stop Nowak Adiunkt 1-03-84 1-10-90 15-09-86 30-09-92 Nowak Docent 16-09-86 30-09-96 Nowak Profesor 1-06-93 UPDATE TEMP T1 SET T1.STOP = (SELECT MAX(T2.STOP) FROM TEMP T2 WHERE T1.ETAT = T2.ETAT AND T1.START<T2. START AND T1.STOP<T2.STOP AND T1.STOP+1>=T2. START) WHERE EXISTS ( SELECT * FROM TEMP T2 WHERE T1.ETAT = T2.ETAT AND T1. START <T2. START AND T1.STOP<T2.STOP AND
T1.STOP+1>=T2. START)
Definicja relacji temporalnych create table kadry (... szef varchar(15) references nazwisko VALIDTIME,... ) AS VALIDTIME PERIOD(DATE); alter table kadry add TRANSACTIONTIME PERIOD(DATE); Modyfikacja danych VALID PERIOD '[1-1-1994, 31-12-1994] update kadry set funkcja = 'DZIEKAN' where... VALID PERIOD '[31-8-1999, 31-12-9999] delete from kadry where nazwisko = 'Tarzan';
Język zapytań Operacje temporalne Temporal SQL 1. grouping 2. partitioning 3. temporal boolean expression 4. timestamp referencing 5. temporal selection 6. temporal projection Ad 1. grouping SELECT nazwisko FROM pracownicy (nazwisko, etat) AS p; Ad 2. partitioning SELECT nazwisko FROM pracownicy (nazwisko, etat) (PERIOD) AS p; Kto był dziekanem dłużej od Nowaka? SELECT p.nazwisko FROM pracownicy(nazwisko, funkcja) (PERIOD) AS p, pracownicy(nazwisko, funkcja) (PERIOD) AS p1 WHERE p1.nazwisko= NOWAK AND p1.funkcja= DZIEKAN AND p.funkcja= DZIEKAN AND CAST(VALID(p) AS INTERVAL DAY) >= CAST(VALID(p1) AS INTERVAL DAY)
Ad 3. temporal boolean expression T(e) {TRUE, FALSE, UNKNOWN } (etat = DZIEKAN OR placa > 1000,00) AND nazwisko = NOWAK : [1.03.84, 31.05.88] false, { [1.06.88, 31.12.90] true, [1.01.91, 31.05.93] false, [1.06.93, now] true } Ad 4. timestamp referencing VALID(alias) temporal_elements: T(e) TRUE p.etat = REFERENT OR p.placa > 3.000) AND p.nazwisko = DZIUBUTKIEWICZ : VALID (p) = { [1.04.95, 30.06.96], [1.09.96, now]}
Ad 5. temporal selection W warunku selekcji porównywane są dwa elementy temporalne za pomocą operatorów: EQUALS, OVERLAPS, CONTAINS, itp. Operacja selekcji zastosowana do zbioru krotek temporalnych zwraca krotki, dla których wynik wartościowania danego wyrażenia temporalnego jest równy TRUE. Przykład: SELECT nazwisko FROM pracownicy (nazwisko) (PERIOD) AS p WHERE p.etat = KIEROWNIK AND p.placa > 3.000 AND VALID (p) CONTAINS PERIOD (DATE 15.12.91, DATE 31.05.92 )
Ad 6. temporal projection Operacja projekcji zastosowana do obiektu temporalnego, zawęża jego elementy bitemporalne do zakresu zgodnego z danym wyrażeniem temporalnym. Operator SNAPSHOT wycina z krotek relacji wynikowej elementy temporalne. Przykład: SELECT nazwisko VALID INTERSECT PERIOD (CURRENT_DATE + INTERVAL 1 MONTH, DATE forever ) FROM pracownicy (nazwisko) (PERIOD) AS p WHERE p.etat = KIEROWNIK AND p.placa > 3.000 AND VALID (p) CONTAINS PERIOD (DATE 15.12.91, DATE 31.05.92 ) SELECT SNAPSHOT nazwisko FROM pracownicy WHERE VALID (pracownicy) OVERLAPS DATE now
Bazy danych zdarzeń Relatywne a absolutne dane temporalne Dziubutkiewicz urodził się 1 kwietnia 1964 roku Dzubutkiewicz urodził się po II wojnie światowej Prosty model bazy danych zdarzeń Temp(e, R, e') e - identyfikator zdarzenia lub absolutna wartość czasu R - związek temporalne między e i e' e' - identyfikator zdarzenia lub absolutna wartość czasu
Związki temporalne Zbiór związków temporalnych dostępnych w absolutnie temporalnych bazach danych: R = {=} Zbiór związków temporalnych dostępnych w relatywnie temporalnych bazach danych (bazach danych zdarzeń): R = {=,, <, <(n)<=, >(n),,,,,,,...} Przykłady: ( II wojna światowa, <, 1955 ) (zgaśnięcie silnika samolotu, =, 17:45:07) (zgaśnięcie silnika samolotu, <(4 min), rozbicie samolotu)
Model bazy danych zdarzeń E - Zbiór zdarzeń jednoznacznie identyfikowanych przez unikalne identyfikatory event-id. T - Zbiór absolutnych wartości czasowych - zbiór związków czasowych R między zdarzeniami i między zdarzeniami a absolutnymi wartościami czasowymi, scharakteryzowany określonymi własnościami: 1. własności wewnętrzne przechodniość (np. <, >) zwrotność (np. ) symetryczność (np. ) antysymetryczność (np. <, ) 2. własności zewnętrzne x, y (x R 1 y y R 2 x ) (np. x < y y >= x ) x, y, z (x R 1 y y R 2 z x R 3 z ) (np. x y y < z x < z)
Rozszerzony graf zależności temporalnych 1. Utwórz graf skierowany, którego węzły będą reprezentować zdarzenia i absolutne wartości czasowe, a krawędzie łączące je związki temporalne. Symbole związków mają stanowić etykiety odpowiednich krawędzi. 2. Jeżeli dany związek R posiada własność symetryczności, to dla każdej krawędzi o etykiecie R łączącej węzeł x z węzłem y dodaj krawędź o etykiecie R łączącą węzeł y z węzłem x. 3. Jeżeli dany związek R posiada własność przechodniości, to dla każdych trzech węzłów (x, y, z) połączonych krawędziami o etykiecie R,dodaj krawędź o tej samej etykiecie R łączącej węzły x i z. 4. Utwórz krawędzie odpowiadające związkom wywiedzionym z zewnętrznych własności związków temporalnych. 5. Powtarzaj kroki 2-3 dla wszyskich zdefiniowanych związków temporalnych. < e 1 >= < e 2 < e 4 e 3 < e 5