时间数据库

時態數據

傳統資料庫例如關係資料庫描述數據進入資料庫時所反映現實世界當前狀態。當這種狀態發生改變時需要通過合適的更新（插入、刪除和修改）再反映到資料庫當中，這種更新通常發生後，原先的狀態就「自然」消失。對於許多應用系統來說，只保存當前狀態是不夠的。例如銀行系統、人事系統和醫療系統等等，它們都需要著力維護相關的歷史數據信息。需要顯式表示和管理與時間相關的數據就是時態信息。時態數據的形式特徵是其由不顯含時間的數據和相應的時間標籤組成，而本質是需要將數據本身與特定的時間例如數據的生命周期等緊密結合，時間的處理和數據的管理相融相合，是數據與其相關時間的整合體，因此，常規資料庫就不能有效進行時態數據的管理。當然也可以在常規資料庫框架內通過應用程式來管理時態數據，但相應應用程式會相當複雜，也容易出錯，同時也加重時態數據用戶的負擔。

時態資料庫

數據是數據內涵的重要部分。關係資料庫中數據的語義考慮是其中數據間關聯的基礎，例如關係資料庫中關係模式設計（規範化）就是關係數據語義探討的基本體現。同樣需要考慮時態數據中涉及到時間的語義。這在時態數據系統中，也稱為數據的時間維度。

數據的時間維度

在時態系統中，通常考慮得是時間元素的一個集合，而且根據實際應用情形，需要討論時間元素集合的特定語義，根據應用中實際要求，通常需要研究用戶定義時間維度、有效時間維度和事務時間維度等三種基本語義情況。

用戶自定義時間

用戶自定義時間（User-defined Time）是用戶根據自身需要或理解而定義的時間，這種時間的屬性值一般是時間點，其語義由用戶本身予以解釋。系統通常將基於用戶定義時間的時間域與其他一般屬性域等同看待，相應操作與對普通字符串操作沒有本質差別。例如，「生日」可能不是一種標準數據類型，但用戶可以根據需要定義一個具有「生日」數據類型的屬性，相應元組中對應的該屬性的值為「1985-10-21」，那麼這就是一種用戶自定義時間。系統通常不會對其進行特別處理，用戶自定義時間的提供和更新都由用戶自身完成。 在傳統資料庫系統中，系統通常都支持用戶自定義數據類型，允許用戶在原有系統數據類型的基礎上建立自身所需要的數據類型，其中也包括用戶子定義時間數據類型。在創建或更新數據時，用戶自定義數據類型和其他標準數據類型一樣被用戶使用。與傳統資料庫系統情形類似，時態資料庫系統不對用戶自定義時間進行任何特殊處理，不提供專門的語言支持。用戶自定義時間值完全依賴於實際應用，由用戶和系統以常規方式存取。

時態資料庫

時態資料庫的分類基礎是數據的時間維度

雙時態資料庫

回滾資料庫和歷史資料庫各具優點，因此，可以設計一種資料庫，使它既支持事務時間又支持有效時間，這就是雙時態資料庫（Bitemporal Database）。雙時態資料庫集成了前三種類型資料庫的基本功能特性，儲存了資料庫和現實世界兩者發展的歷史。 雙時態資料庫由時態關係組成，其時態關係是一個四維結構。其中兩維是屬性和元組，另外兩維是事務時間和有效時間，一個時態關係可以看成是一個歷史關係的序列。對時態關係的一個回滾操作則是選取了一個特定的歷史關係，可對該歷史關係進行查詢。而每一個事務則引起一個新的歷史關係的建立。雙時態資料庫如圖2所示。
圖2 雙時態資料庫
雙時態關係的一種實現方法就是組合回滾資料庫和歷史資料庫成為新的資料庫。 圖3是一個元組的四個歷史資料庫中的有效時間片斷組合。我們只是在原來的三維結構的基礎之上加了第四維有效時間維，使得資料庫變為四個維結構，元組維和屬性維與原來無異，故不在此給出。
圖3 雙時態資料庫的兩個時間維
只要在事務維中任意截取事務時間點就可以找到相應的元組的有效時間段，不同的事務時間點對應不同的有效時間段（一般是這樣的，當然也有有效時間段是一樣的不同事務時間點，如事務時間點T1 和T2 的有效時間段是一樣的）。 可以看出，在事務時間軸上，取不同的時間點，就產生不同的歷史資料庫，我們可以對上圖中的對應於四個事務時間點T1，T2，T3，T4的歷史資料庫進行查詢操作。當然圖中所示的只是一個元組的四個歷史資料庫中的有效時間片斷組合，對於其他元組的情況可以類似的進行推理，而後，這些元組組合到一起即形成了四個不同的歷史資料庫。 所以，這四個歷史資料庫也可以成為是快照歷史資料庫，說是快照，是因為這四個資料庫是分別是四個事務時間的快照；說是歷史資料庫，是因為每個資料庫裡面的紀錄是歷史資料庫屬性的，記載的是現實元組的真實變化的時間，而非資料庫狀態變化的時間，我們可以在這四個資料庫裡面進行增加、改正、刪除及查詢的工作。 在雙時態資料庫中，我們可以在當前時間對以前的事務時間T1時的該元組屬性或有效時間進行改動。例如，可以在T4時間對T1時的歷史快照資料庫進行修改，通過改變有效時間區間t1，t2和t3為t1和 t3。可使得在T1時的快照歷史資料庫中的元組屬性（時間屬性）得到了改變。但原先事務時間不能改動，只是增加了一個新的紀錄，該記錄的事務時間是T4，記錄內容是把原來的有效時間進行了改變。 由此可見，雙時態資料庫具有回滾資料庫和歷史資料庫的特性，在保存資料庫變遷歷史的同時，也保存了現實世界的真實的數據屬性，真正體現了對數據時態屬性的全面支持。當然，時態資料庫是以犧牲大容量的儲存空間為代價的，對雙時態資料庫的儲存進行優化是時態資料庫研究的一個重要工作。

時態數據查詢語言

目前，時態數據查詢語言主要由下述三種類型。

TempSQL

TempSQL是在1985年由S.Gadia和S.Nair提出，作為一種類SQL的時態資料庫查詢語言，TempSQL引入了雙時態機制，資料庫可以對數據本身歷史（有效時間）、對數據進行插入、刪除和更新等的歷史（事務時間）、資料庫和用戶出錯的歷史等進行管理。TempSQL保持時態數據與靜態數據的無縫連接，而將快照數據看做是時間標籤為[now,now]的一個特例。 在TempSQL中，元組中主鍵屬性（例如學生信息元組中的學號屬性）不能隨時間變化，而非主鍵屬性（例如學生元組中「住址」、「年齡」和「聯繫方式」等屬性）在不同時間內可以有不同取值。

TQuel

TQuel是在1985年由R.Snodgrass提出，是一種基於雙時態的資料庫查詢語言。作為Quel（早期的一種非時態資料庫查詢語言）的時態擴展擴展（同時支持有效時間和事務時間管理，並且認為兩者是相互獨立和彼此正交），TQuel保持了Quel的基本風格，同時引進了各種基本時態關鍵詞，例如as-of，overlap、first，last和endof等

TimeDB

作為時態資料庫「產品化」代表，TimeDB由A. Steiner於1998年開發的一個時態資料庫管理系統 http://www.timeconsult.com/software ，最新版本是2.2版。TimeDB是傳統資料庫管理系統的前端軟體，用戶使用ATSQL2語句描述應用中時態操作，然後由TimeDB轉換後形成標準SQL語句，這些標準SQL語句傳輸到後台關係資料庫中進行實際數據的操作。TimeDB初步實現了時態查詢、時態更新、時態視圖和部分時態完整性約束等基本時態功能，同時也兼容非時態數據操作。 TimeDB 1.0版本由Andreas使用SICStus Prolog語言開發，運行在SWI Prolog環境中。 TimeDB 2.0版本使用Java語言開發，具有平台無關特徵；基於JDBC訪問資料庫，可以在IBM Cloudscape、Oracle、Sybase等多種資料庫管理系統之上使用；具有較友好的用戶界面；優化了輔助表創建過程；具有本地調用接口TDBCI，可供Java應用程式調用以執行ATSQL2語句。 TimeDB 2.1版本開始使用Java SDK 1.4版本，支持Cloudscape 10； TimeDB 2.2版本加入了對Oracle 10g的支持。

TempDB

TempDB https://web.archive.org/web/20120130015159/http://tempdb.scholat.com/index.asp 是由湯庸教授帶領的「中山大學資料庫與協同實驗室」（現「華南師範大學信息服務與軟體技術中心」）於2002年開發研製。作為國際上第二個和國內首個支持時態數據管理的TDBMS，TempDB在邏輯上使用雙時態數據模型，使用ATSQL2語言，支持電子政務、電子商務、決策支持等信息處理系統中的時態應用；同時，TempDB在技術上基於關係資料庫管理系統MySQL平台、採用JAVA語言進行底層開發，具有較強的可移植性以及部署方便。