SlideShare a Scribd company logo
1 of 28
Download to read offline
Ing. Miroslav Šimulčík
      simulcik.miro@gmail.com
   Zachytávajú len jeden stav dát, väčšinou súčasný
   Pri modifikácii sú staré hodnoty nahradené novými a
    ďalej nedostupné
   Príklad: systém na správu zamestnancov
    ◦ Zamestnanec požiada o zvýšenie platu
       Kedy sme mu naposledy zvýšili plat a o koľko?
    ◦ V databáze sa „pokazili“ dáta
       Akou postupnosťou operácií dáta vznikli? Kto je za to zodpovedný?
   Návrat k historickým dátam
    ◦ Restore databázy + rollforward
      Ťažkopádne a nedostatočné riešenie
   Zavedenie histórie – časté riešenia:
    ◦ Triggre
    ◦ Uložené procedúry
    ◦ Aplikačná vrstva
   Netriviálne problémy
    ◦ Dotazy
    ◦ Modifikujúce operácie
    ◦ Dátová integrita
   Databázy pracujúce s časom, umožňujúce zachytávať
    históriu v čase sa meniacich (temporálnych) dát.
   Jednoduchá a efektívna práca s temporálnymi dátami
   Bez nutnosti vývoja vlastných riešení
   Široké spektrum uplatnenia
    ◦   Poisťovníctvo
    ◦   Bankovníctvo
    ◦   Zdravotníctvo
    ◦   Rezervačné systémy
   Aplikačný čas
    ◦   Čas platnosti dát v reálnom svete
    ◦   Zadáva používateľ
    ◦   Zaznamenáva napríklad zmeny výšky platu
    ◦   Využitie
         Analýzy vývoja dát
         Historické reporty
   Systémový čas
    ◦   Čas operácie (INSERT, UPDATE, DELETE ...) v databázovom systéme
    ◦   Udržiavaný databázovým systémom
    ◦   Zaznamenáva napríklad opravy preklepov
    ◦   Využitie
         Audity modifikácií
         Identifikácia a oprava chýb
         Obnova dát
   Snapshot databázy
    ◦ Uchovávajú len aktuálne dáta
   Historické databázy
    ◦ Zachytávajú zmeny v reálnom svete (biznise)
   Rollback databázy
    ◦ Zachytávajú zmeny v databáze samotnej
   Bitemporálne databázy
    ◦ Kombinácia historických a rollback databáz
   TSQL2 (1994)
    ◦ Rozšírenie SQL-92
    ◦ Základ novších štandardov
    ◦ Publikovaný, ale nebol predložený žiadnej štandardizačnej autorite
   SQL/Temporal (1997)
    ◦ Časť štandardu SQL 3
    ◦ Návrh na pridanie temporálnej podpory vychádzajúcej z TSQL2 bol
      zamietnutý ISO komisiou
    ◦ Základ niektorých existujúcich riešení
   SQL 2011 (koniec 2011)
    ◦ Výrazné rozdiely oproti TSQL2
    ◦ Vydaný ISO
    ◦ Nie je voľne dostupný – dokopy cca 1300$
   Len proprietárne
   IBM DB2 10
    ◦ Rozšírená syntax
    ◦ Dodržiava štandard SQL 2011
   Oracle 11g Workspace Manager
    ◦ Nepodporuje štandardy
    ◦ Pomocou prostriedkov databázy (uložené procedúry)
   Teradata Database 13
    ◦ Vychádza zo SQL/Temporal
    ◦ Poskytuje najbohatšiu temporálnu podporu
   Predstavuje interval hodnôt
   Môže byť založený na rôznych typoch
    ◦ date, timestamp, integer, decimal...
    ◦ rôzna granularita
   Rôzna uzavretosť hraníc
   Operácie
    ◦ UNION, EXCEPT, INTERSECT
   Predikáty
    ◦ PRECEDES, SUCCEEDS, MEETS, OVERLAPS, CONTAINS
   Vhodný na vyjadrenie období platnosti záznamov
   SQL 2011 – slabá podpora
CREATE TABLE person (
    id INTEGER PRIMARY KEY,
    first_name VARCHAR(50),
    last_name VARCHAR(50),
    sys_start TIMESTAMP GENERATED ALWAYS AS ROW START,
    sys_end TIMESTAMP GENERATED ALWAYS AS ROW END,
    PERIOD FOR SYSTEM_TIME (sys_start, sys_end)
) WITH SYSTEM VERSIONING;
   Syntax príkazov nezmenená
   Hodnoty pre začiatok a koniec platnosti stĺpcov sa generujú automaticky
   INSERT
    ◦ Správanie nezmenené
    ◦ Začiatok platnosti = začiatok transakcie
    ◦ Koniec platnosti = max. hodnota typu
   UPDATE                                                        UPDATE
    ◦ Automatické vytvorenie novej verzie
         a ukončenie platnosti starej verzie
    ◦ Len aktuálne platné riadky môžu byť             1999   2012 (zač. transakcie)   9999
        modifikované
                                                      1999          2012              9999

   DELETE                                                         DELETE
    ◦ Automatické ukončenie platnosti starej verzie
    ◦ Len aktuálne platné riadky môžu byť vymazané
                                                      1999          2012              9999


                                                      1999          2012
   Bežný SELECT pracuje len s aktuálnymi verziami záznamov
    ◦ Spätná kompatibilita s existujúcimi aplikáciami
   Na prístup k historickým verziám definuje štandard
    rozšírenú syntax:
    ◦ FOR SYSTEM_TIME AS OF <point in time 1>
    ◦ FOR SYSTEM_TIME BETWEEN <point in time 1> AND
      <point in time 2>
    ◦ FOR SYSTEM_TIME FROM <point in time 1> TO <point in
      time 2>
   Príklad
    SELECT *
       FROM person
       FOR SYSTEM_TIME AS OF '2012-09-26-19.00.00.000000'
CREATE TABLE person (
    id INTEGER,
    first_name VARCHAR(50),
    last_name VARCHAR(50),
    bus_start TIMESTAMP NOT NULL,
    bus_end TIMESTAMP NOT NULL,
    PERIOD FOR bus_time (bus_start, bus_end)
    PRIMARY KEY (id, bus_time WITHOUT OVERLAPS)
);
   Hodnoty pre začiatok a koniec platnosti stĺpcov zadáva
    používateľ
   INSERT
    ◦ Syntax a správanie nezmenené
   UPDATE
    ◦ S nezmenenou syntaxou
       Ľubovoľná modifikácia riadkov v tabuľke (aj začiatok a koniec platnosti)
    ◦ FOR PORTION OF <application time period name> FROM <point in
      time 1> TO <point in time 2>
       Zabezpečené automatické rozdeľovanie riadkov
       Nie je možné modifikovať začiatok a koniec platnosti riadkov
       UPDATE person
              FOR PORTION OF bus_time
                 FROM '2012-09-26-19.00.00.000000'
                 TO '2013-12-14-01.00.00.000000'
              SET name = 'Ferko'
UPDATE                                              UPDATE


1992      2000     2008          2020   2000      2012         2020    2025

          2000     2008          2020   2000      2012         2020


                 UPDATE                               UPDATE


   2000                   2020          2000   2005        2010       2020

   2000                   2020          2000   2005        2010       2020
   DELETE
    ◦ S nezmenenou syntaxou – mazanie ľubovoľných riadkov
    ◦ FOR PORTION OF <application time period name> FROM
      <point in time 1> TO <point in time 2>
      Zabezpečené automatické rozdeľovanie riadkov
      DELETE FROM person
           FOR PORTION OF bus_time
               FROM '2012-09-26-19.00.00.000000'
               TO '2013-12-14-01.00.00.000000'
DELETE                                                    DELETE


1992      2000      2008          2020    2000          2012      2020      2025

                    2008          2020    2000          2012



                 DELETE                                 DELETE


   2000                    2020          2000    2005            2010     2020

                                         2000    2005            2010     2020
CREATE TABLE department (
    id INTEGER,
    name VARCHAR(50),
    bus_start TIMESTAMP NOT NULL,
    bus_start TIMESTAMP NOT NULL,
    PERIOD FOR business_time (bus_start, bus_end)
    PRIMARY KEY (id, business_time WITHOUT OVERLAPS)
);
CREATE TABLE person (
    id INTEGER,
    first_name VARCHAR(50),
    last_name VARCHAR(50),
    department_id INTEGER,
    bus_start TIMESTAMP NOT NULL,
    bus_start TIMESTAMP NOT NULL,
    PERIOD FOR bus_time (bus_start, bus_end)
    PRIMARY KEY (id, bus_time WITHOUT OVERLAPS)
    FOREIGN KEY (department_id, PERIOD bus_time)
        REFERENCES department(id, PERIOD bus_time)
);
   Množinové operácie
     ◦ Vyhodnocované v každom časovom okamihu
     ◦ Nezahrnuté v SQL 2011
     ◦ Príklad:

person                                            person
id first_name   last_name   bus_time              id first_name   last_name   bus_time
  1 Paľko       Malý        [1989-1999)             1 Paľko       Malý        [1960-1980)
  4 Janko       Hraško      [2006 - 2020)           2 Jožko       Mrkvička    [1985-2005)
  2 Jožko       Mrkvička    [1999-∞)                3 Peter       Krasko      [1960 - 1970)


                                               INTERSECT

                            person
                            id first_name last_name bus_time
                              2 Jožko     Mrkvička [1999-2005)
   Agregačné funkcie
     ◦ Vyhodnocované v každom časovom okamihu
     ◦ Nezahrnuté v SQL 2011
     ◦ Príklad:

person
id first_name   last_name salary bus_time      SELECT SUM(salary) FROM person
  1 Paľko       Malý        1000 [1960-1980)
  2 Janko       Hraško       900 [1970 - ∞)
  3 Jožko       Mrkvička    1500 [1975-1990)
                                                   salary_sum bus_time
                                                          1000 [1960-1970)
                                                          1900 [1970-1975)
                                                          3400 [1975-1980)
                                                          2400 [1980-1990)
                                                           900 [1990-∞)
   DISTINCT
    ◦ Duplicitné riadky musia platiť v rovnakom čase
    ◦ Nezahrnuté v SQL 2011
   JOIN
    ◦ Spájané riadky musia platiť v rovnakom čase
    ◦ Realizovateľné aj v SQL 2011
   Range types (PERIOD)
    ◦ od verzie 9.2
    ◦ Možnosť indexovania GIST indexom
      Podpora všetkých spomínaných predikátov
   EXCLUDE constraint – flexibilnejší UNIQUE constraint
    ◦ Zabránenie prekrývaniu období platnosti
      EXCLUDE USING gist (id WITH =, bus_time WITH &&)
   Vytvorený v rámci diplomovej práce
   Snaha o zaradenie do oficiálneho release
   Pôvodne založený na štandarde SQL/Temporal
   Funkcionalita zahrnutá priamo v backende (nie extension)
   Pre prijatie je nutný redizajn
    ◦ Podpora SQL 2011
    ◦ Využitie novo pridanej funkcionality
   V súčasnosti - čakanie na schválenie nového návrhu
    komunitou
   Následne – implementácia
    ◦ Extension / core funkcionalita ?
   Implementačný jazyk – C
   Rozšírenie syntaxe
    ◦ Gramatika v BNF, z ktorej sa pomocou nástroja Bison generuje
      prekladač v jazyku C
   Úpravy systémových katalógov
    ◦ Pridanie stĺpcov na ukladanie informácií o temporálnych tabuľkách
   Zmeny vo vnútorných štruktúrach
   Spúšťače na odkladanie starých verzií záznamov
    ◦ Používajú pripravené príkazy, ukladané do hash tabuliek
   Rozsah zmien – cca 4000 riadkov v 80 súboroch
   Modifikované moduly:
    ◦ Parser – zaoberá sa prekladom a spracovávaním SQL príkazov
      preložených do vnútornej štruktúry
    ◦ Command – zabezpečuje spracovanie a vykonávanie príkazov na
      vytváranie a úpravu databázových objektov
Otázky?

More Related Content

More from Jano Suchal

Rank all the (geo) things!
Rank all the (geo) things!Rank all the (geo) things!
Rank all the (geo) things!Jano Suchal
 
Ako si vybrať programovácí jazyk alebo framework?
Ako si vybrať programovácí jazyk alebo framework?Ako si vybrať programovácí jazyk alebo framework?
Ako si vybrať programovácí jazyk alebo framework?Jano Suchal
 
Bonetics: Mastering Puppet Workshop
Bonetics: Mastering Puppet WorkshopBonetics: Mastering Puppet Workshop
Bonetics: Mastering Puppet WorkshopJano Suchal
 
Peter Mihalik: Puppet
Peter Mihalik: PuppetPeter Mihalik: Puppet
Peter Mihalik: PuppetJano Suchal
 
Tomáš Čorej: Configuration management & CFEngine3
Tomáš Čorej: Configuration management & CFEngine3Tomáš Čorej: Configuration management & CFEngine3
Tomáš Čorej: Configuration management & CFEngine3Jano Suchal
 
Ako si vybrať programovací jazyk a framework?
Ako si vybrať programovací jazyk a framework?Ako si vybrať programovací jazyk a framework?
Ako si vybrať programovací jazyk a framework?Jano Suchal
 
SQL: Query optimization in practice
SQL: Query optimization in practiceSQL: Query optimization in practice
SQL: Query optimization in practiceJano Suchal
 
Garelic: Google Analytics as App Performance monitoring
Garelic: Google Analytics as App Performance monitoringGarelic: Google Analytics as App Performance monitoring
Garelic: Google Analytics as App Performance monitoringJano Suchal
 
Vojtech Rinik: Internship v USA - moje skúsenosti
Vojtech Rinik: Internship v USA - moje skúsenostiVojtech Rinik: Internship v USA - moje skúsenosti
Vojtech Rinik: Internship v USA - moje skúsenostiJano Suchal
 
Profiling and monitoring ruby & rails applications
Profiling and monitoring ruby & rails applicationsProfiling and monitoring ruby & rails applications
Profiling and monitoring ruby & rails applicationsJano Suchal
 
Aký programovací jazyk a framework si vybrať a prečo?
Aký programovací jazyk a framework si vybrať a prečo?Aký programovací jazyk a framework si vybrať a prečo?
Aký programovací jazyk a framework si vybrať a prečo?Jano Suchal
 
Petr Joachim: Redis na Super.cz
Petr Joachim: Redis na Super.czPetr Joachim: Redis na Super.cz
Petr Joachim: Redis na Super.czJano Suchal
 
Metaprogramovanie #1
Metaprogramovanie #1Metaprogramovanie #1
Metaprogramovanie #1Jano Suchal
 
PostgreSQL: Advanced features in practice
PostgreSQL: Advanced features in practicePostgreSQL: Advanced features in practice
PostgreSQL: Advanced features in practiceJano Suchal
 
elasticsearch - advanced features in practice
elasticsearch - advanced features in practiceelasticsearch - advanced features in practice
elasticsearch - advanced features in practiceJano Suchal
 
Postobjektové programovanie v Ruby
Postobjektové programovanie v RubyPostobjektové programovanie v Ruby
Postobjektové programovanie v RubyJano Suchal
 
Odporúčacie systémy a služba sme.sk čo čítať
Odporúčacie systémy a služba sme.sk čo čítaťOdporúčacie systémy a služba sme.sk čo čítať
Odporúčacie systémy a služba sme.sk čo čítaťJano Suchal
 
sme.sk čočítať ontožíur-2010
sme.sk čočítať ontožíur-2010sme.sk čočítať ontožíur-2010
sme.sk čočítať ontožíur-2010Jano Suchal
 

More from Jano Suchal (19)

Rank all the (geo) things!
Rank all the (geo) things!Rank all the (geo) things!
Rank all the (geo) things!
 
Ako si vybrať programovácí jazyk alebo framework?
Ako si vybrať programovácí jazyk alebo framework?Ako si vybrať programovácí jazyk alebo framework?
Ako si vybrať programovácí jazyk alebo framework?
 
Bonetics: Mastering Puppet Workshop
Bonetics: Mastering Puppet WorkshopBonetics: Mastering Puppet Workshop
Bonetics: Mastering Puppet Workshop
 
Peter Mihalik: Puppet
Peter Mihalik: PuppetPeter Mihalik: Puppet
Peter Mihalik: Puppet
 
Tomáš Čorej: Configuration management & CFEngine3
Tomáš Čorej: Configuration management & CFEngine3Tomáš Čorej: Configuration management & CFEngine3
Tomáš Čorej: Configuration management & CFEngine3
 
Ako si vybrať programovací jazyk a framework?
Ako si vybrať programovací jazyk a framework?Ako si vybrať programovací jazyk a framework?
Ako si vybrať programovací jazyk a framework?
 
SQL: Query optimization in practice
SQL: Query optimization in practiceSQL: Query optimization in practice
SQL: Query optimization in practice
 
Garelic: Google Analytics as App Performance monitoring
Garelic: Google Analytics as App Performance monitoringGarelic: Google Analytics as App Performance monitoring
Garelic: Google Analytics as App Performance monitoring
 
Vojtech Rinik: Internship v USA - moje skúsenosti
Vojtech Rinik: Internship v USA - moje skúsenostiVojtech Rinik: Internship v USA - moje skúsenosti
Vojtech Rinik: Internship v USA - moje skúsenosti
 
Profiling and monitoring ruby & rails applications
Profiling and monitoring ruby & rails applicationsProfiling and monitoring ruby & rails applications
Profiling and monitoring ruby & rails applications
 
Aký programovací jazyk a framework si vybrať a prečo?
Aký programovací jazyk a framework si vybrať a prečo?Aký programovací jazyk a framework si vybrať a prečo?
Aký programovací jazyk a framework si vybrať a prečo?
 
Čo po GAMČI?
Čo po GAMČI?Čo po GAMČI?
Čo po GAMČI?
 
Petr Joachim: Redis na Super.cz
Petr Joachim: Redis na Super.czPetr Joachim: Redis na Super.cz
Petr Joachim: Redis na Super.cz
 
Metaprogramovanie #1
Metaprogramovanie #1Metaprogramovanie #1
Metaprogramovanie #1
 
PostgreSQL: Advanced features in practice
PostgreSQL: Advanced features in practicePostgreSQL: Advanced features in practice
PostgreSQL: Advanced features in practice
 
elasticsearch - advanced features in practice
elasticsearch - advanced features in practiceelasticsearch - advanced features in practice
elasticsearch - advanced features in practice
 
Postobjektové programovanie v Ruby
Postobjektové programovanie v RubyPostobjektové programovanie v Ruby
Postobjektové programovanie v Ruby
 
Odporúčacie systémy a služba sme.sk čo čítať
Odporúčacie systémy a služba sme.sk čo čítaťOdporúčacie systémy a služba sme.sk čo čítať
Odporúčacie systémy a služba sme.sk čo čítať
 
sme.sk čočítať ontožíur-2010
sme.sk čočítať ontožíur-2010sme.sk čočítať ontožíur-2010
sme.sk čočítať ontožíur-2010
 

Miroslav Šimulčík: Temporálne databázy

  • 1. Ing. Miroslav Šimulčík simulcik.miro@gmail.com
  • 2. Zachytávajú len jeden stav dát, väčšinou súčasný  Pri modifikácii sú staré hodnoty nahradené novými a ďalej nedostupné  Príklad: systém na správu zamestnancov ◦ Zamestnanec požiada o zvýšenie platu  Kedy sme mu naposledy zvýšili plat a o koľko? ◦ V databáze sa „pokazili“ dáta  Akou postupnosťou operácií dáta vznikli? Kto je za to zodpovedný?
  • 3. Návrat k historickým dátam ◦ Restore databázy + rollforward  Ťažkopádne a nedostatočné riešenie  Zavedenie histórie – časté riešenia: ◦ Triggre ◦ Uložené procedúry ◦ Aplikačná vrstva  Netriviálne problémy ◦ Dotazy ◦ Modifikujúce operácie ◦ Dátová integrita
  • 4. Databázy pracujúce s časom, umožňujúce zachytávať históriu v čase sa meniacich (temporálnych) dát.  Jednoduchá a efektívna práca s temporálnymi dátami  Bez nutnosti vývoja vlastných riešení  Široké spektrum uplatnenia ◦ Poisťovníctvo ◦ Bankovníctvo ◦ Zdravotníctvo ◦ Rezervačné systémy
  • 5. Aplikačný čas ◦ Čas platnosti dát v reálnom svete ◦ Zadáva používateľ ◦ Zaznamenáva napríklad zmeny výšky platu ◦ Využitie  Analýzy vývoja dát  Historické reporty  Systémový čas ◦ Čas operácie (INSERT, UPDATE, DELETE ...) v databázovom systéme ◦ Udržiavaný databázovým systémom ◦ Zaznamenáva napríklad opravy preklepov ◦ Využitie  Audity modifikácií  Identifikácia a oprava chýb  Obnova dát
  • 6. Snapshot databázy ◦ Uchovávajú len aktuálne dáta
  • 7. Historické databázy ◦ Zachytávajú zmeny v reálnom svete (biznise)
  • 8. Rollback databázy ◦ Zachytávajú zmeny v databáze samotnej
  • 9. Bitemporálne databázy ◦ Kombinácia historických a rollback databáz
  • 10. TSQL2 (1994) ◦ Rozšírenie SQL-92 ◦ Základ novších štandardov ◦ Publikovaný, ale nebol predložený žiadnej štandardizačnej autorite  SQL/Temporal (1997) ◦ Časť štandardu SQL 3 ◦ Návrh na pridanie temporálnej podpory vychádzajúcej z TSQL2 bol zamietnutý ISO komisiou ◦ Základ niektorých existujúcich riešení  SQL 2011 (koniec 2011) ◦ Výrazné rozdiely oproti TSQL2 ◦ Vydaný ISO ◦ Nie je voľne dostupný – dokopy cca 1300$
  • 11. Len proprietárne  IBM DB2 10 ◦ Rozšírená syntax ◦ Dodržiava štandard SQL 2011  Oracle 11g Workspace Manager ◦ Nepodporuje štandardy ◦ Pomocou prostriedkov databázy (uložené procedúry)  Teradata Database 13 ◦ Vychádza zo SQL/Temporal ◦ Poskytuje najbohatšiu temporálnu podporu
  • 12. Predstavuje interval hodnôt  Môže byť založený na rôznych typoch ◦ date, timestamp, integer, decimal... ◦ rôzna granularita  Rôzna uzavretosť hraníc  Operácie ◦ UNION, EXCEPT, INTERSECT  Predikáty ◦ PRECEDES, SUCCEEDS, MEETS, OVERLAPS, CONTAINS  Vhodný na vyjadrenie období platnosti záznamov  SQL 2011 – slabá podpora
  • 13. CREATE TABLE person ( id INTEGER PRIMARY KEY, first_name VARCHAR(50), last_name VARCHAR(50), sys_start TIMESTAMP GENERATED ALWAYS AS ROW START, sys_end TIMESTAMP GENERATED ALWAYS AS ROW END, PERIOD FOR SYSTEM_TIME (sys_start, sys_end) ) WITH SYSTEM VERSIONING;
  • 14. Syntax príkazov nezmenená  Hodnoty pre začiatok a koniec platnosti stĺpcov sa generujú automaticky  INSERT ◦ Správanie nezmenené ◦ Začiatok platnosti = začiatok transakcie ◦ Koniec platnosti = max. hodnota typu  UPDATE UPDATE ◦ Automatické vytvorenie novej verzie a ukončenie platnosti starej verzie ◦ Len aktuálne platné riadky môžu byť 1999 2012 (zač. transakcie) 9999 modifikované 1999 2012 9999  DELETE DELETE ◦ Automatické ukončenie platnosti starej verzie ◦ Len aktuálne platné riadky môžu byť vymazané 1999 2012 9999 1999 2012
  • 15. Bežný SELECT pracuje len s aktuálnymi verziami záznamov ◦ Spätná kompatibilita s existujúcimi aplikáciami  Na prístup k historickým verziám definuje štandard rozšírenú syntax: ◦ FOR SYSTEM_TIME AS OF <point in time 1> ◦ FOR SYSTEM_TIME BETWEEN <point in time 1> AND <point in time 2> ◦ FOR SYSTEM_TIME FROM <point in time 1> TO <point in time 2>  Príklad SELECT * FROM person FOR SYSTEM_TIME AS OF '2012-09-26-19.00.00.000000'
  • 16. CREATE TABLE person ( id INTEGER, first_name VARCHAR(50), last_name VARCHAR(50), bus_start TIMESTAMP NOT NULL, bus_end TIMESTAMP NOT NULL, PERIOD FOR bus_time (bus_start, bus_end) PRIMARY KEY (id, bus_time WITHOUT OVERLAPS) );
  • 17. Hodnoty pre začiatok a koniec platnosti stĺpcov zadáva používateľ  INSERT ◦ Syntax a správanie nezmenené  UPDATE ◦ S nezmenenou syntaxou  Ľubovoľná modifikácia riadkov v tabuľke (aj začiatok a koniec platnosti) ◦ FOR PORTION OF <application time period name> FROM <point in time 1> TO <point in time 2>  Zabezpečené automatické rozdeľovanie riadkov  Nie je možné modifikovať začiatok a koniec platnosti riadkov  UPDATE person FOR PORTION OF bus_time FROM '2012-09-26-19.00.00.000000' TO '2013-12-14-01.00.00.000000' SET name = 'Ferko'
  • 18. UPDATE UPDATE 1992 2000 2008 2020 2000 2012 2020 2025 2000 2008 2020 2000 2012 2020 UPDATE UPDATE 2000 2020 2000 2005 2010 2020 2000 2020 2000 2005 2010 2020
  • 19. DELETE ◦ S nezmenenou syntaxou – mazanie ľubovoľných riadkov ◦ FOR PORTION OF <application time period name> FROM <point in time 1> TO <point in time 2>  Zabezpečené automatické rozdeľovanie riadkov  DELETE FROM person FOR PORTION OF bus_time FROM '2012-09-26-19.00.00.000000' TO '2013-12-14-01.00.00.000000'
  • 20. DELETE DELETE 1992 2000 2008 2020 2000 2012 2020 2025 2008 2020 2000 2012 DELETE DELETE 2000 2020 2000 2005 2010 2020 2000 2005 2010 2020
  • 21. CREATE TABLE department ( id INTEGER, name VARCHAR(50), bus_start TIMESTAMP NOT NULL, bus_start TIMESTAMP NOT NULL, PERIOD FOR business_time (bus_start, bus_end) PRIMARY KEY (id, business_time WITHOUT OVERLAPS) ); CREATE TABLE person ( id INTEGER, first_name VARCHAR(50), last_name VARCHAR(50), department_id INTEGER, bus_start TIMESTAMP NOT NULL, bus_start TIMESTAMP NOT NULL, PERIOD FOR bus_time (bus_start, bus_end) PRIMARY KEY (id, bus_time WITHOUT OVERLAPS) FOREIGN KEY (department_id, PERIOD bus_time) REFERENCES department(id, PERIOD bus_time) );
  • 22. Množinové operácie ◦ Vyhodnocované v každom časovom okamihu ◦ Nezahrnuté v SQL 2011 ◦ Príklad: person person id first_name last_name bus_time id first_name last_name bus_time 1 Paľko Malý [1989-1999) 1 Paľko Malý [1960-1980) 4 Janko Hraško [2006 - 2020) 2 Jožko Mrkvička [1985-2005) 2 Jožko Mrkvička [1999-∞) 3 Peter Krasko [1960 - 1970) INTERSECT person id first_name last_name bus_time 2 Jožko Mrkvička [1999-2005)
  • 23. Agregačné funkcie ◦ Vyhodnocované v každom časovom okamihu ◦ Nezahrnuté v SQL 2011 ◦ Príklad: person id first_name last_name salary bus_time SELECT SUM(salary) FROM person 1 Paľko Malý 1000 [1960-1980) 2 Janko Hraško 900 [1970 - ∞) 3 Jožko Mrkvička 1500 [1975-1990) salary_sum bus_time 1000 [1960-1970) 1900 [1970-1975) 3400 [1975-1980) 2400 [1980-1990) 900 [1990-∞)
  • 24. DISTINCT ◦ Duplicitné riadky musia platiť v rovnakom čase ◦ Nezahrnuté v SQL 2011  JOIN ◦ Spájané riadky musia platiť v rovnakom čase ◦ Realizovateľné aj v SQL 2011
  • 25. Range types (PERIOD) ◦ od verzie 9.2 ◦ Možnosť indexovania GIST indexom  Podpora všetkých spomínaných predikátov  EXCLUDE constraint – flexibilnejší UNIQUE constraint ◦ Zabránenie prekrývaniu období platnosti  EXCLUDE USING gist (id WITH =, bus_time WITH &&)
  • 26. Vytvorený v rámci diplomovej práce  Snaha o zaradenie do oficiálneho release  Pôvodne založený na štandarde SQL/Temporal  Funkcionalita zahrnutá priamo v backende (nie extension)  Pre prijatie je nutný redizajn ◦ Podpora SQL 2011 ◦ Využitie novo pridanej funkcionality  V súčasnosti - čakanie na schválenie nového návrhu komunitou  Následne – implementácia ◦ Extension / core funkcionalita ?
  • 27. Implementačný jazyk – C  Rozšírenie syntaxe ◦ Gramatika v BNF, z ktorej sa pomocou nástroja Bison generuje prekladač v jazyku C  Úpravy systémových katalógov ◦ Pridanie stĺpcov na ukladanie informácií o temporálnych tabuľkách  Zmeny vo vnútorných štruktúrach  Spúšťače na odkladanie starých verzií záznamov ◦ Používajú pripravené príkazy, ukladané do hash tabuliek  Rozsah zmien – cca 4000 riadkov v 80 súboroch  Modifikované moduly: ◦ Parser – zaoberá sa prekladom a spracovávaním SQL príkazov preložených do vnútornej štruktúry ◦ Command – zabezpečuje spracovanie a vykonávanie príkazov na vytváranie a úpravu databázových objektov