随着資訊技術的發展,傳統的關系資料庫(如關系型資料庫)功能已不能滿足當今資訊系統中對時态資訊處理能力的需求。而時态資料庫理論的完善和發展為解決時态資訊處理問題提供了一個很好的解決方案。
什麼是時态資料庫?
差別于傳統的關系型資料庫(RDBMS),時态資料庫(Temporal Database)主要用于記錄那些随着時間而變化的值的曆史,而這些曆史值對應用領域而言又是重要的,這類應用有:金融、保險、預訂系統、決策支援系統等。
目前時态資料庫還沒有像如Oracle、SQL Server等大型關系資料庫那樣的産品。在目前時态資料庫技術尚未完全成熟的現狀下,DBMS提供商不會輕易把時态處理功能引入現有的DBMS中,是以,利用成熟的RDBMS資料庫,建立時态資料庫的中間件,在現階段是一個較好的選擇,是以就應運而生TimeDB和TempDB了。
國外的TimeDB(
國内的TempDB也是一種類似的技術應用,支援ATSQL2,和TimeDB類似,都是基于目前非常成熟的關系型資料庫基礎上的應用。
時态資料庫中間件不改變現有商業DBMS的結構和功能,而是作為一個上層構件添加到商業DBMS之上,應用程式之下,形成一個中間層結構。這個中間層結構能處理時态結構化查詢語言(ATSQL2),把它轉換成下層DBMS能了解的标準SQL語言(如P-SQL)并在商業DBMS中執行。
時态資料庫理論的基本概念
時态資料庫理論提出了三種基本時間:使用者自定義時間、有效時間和事務時間。同時把資料庫分為四種類型:快照資料庫、復原資料庫、曆史資料庫和雙時态資料庫。
使用者自定義時間:指使用者根據自己的需要或了解定義的時間。時态資料庫系統不處理使用者自己定義的時間類型。是以,使用者自定義時間是和應用相關的,不在時态資料庫處理的範圍之内。
有效時間(Valid-Time):指一個對象在現實世界中發生并保持的時間,即該對象在現實世界中語義為真的時間,包含Valid-From和Valid-To兩個值。它可以訓示過去、現在和未來。例如,考慮事實“小明從2003年到2007年是大學生”,那麼時間區間[2003, 2007]是事實“小明是大學生”的有效時間區間,該事實在該時間區間内為真。有效時間可以是時間點、時間點的集合、時間區間或者時間區間的集合,或者是整個時間域。有效時間由時态資料庫系統解釋并處理,在查詢的過程中對使用者透明。使用者也可以顯式地查詢和更新有效時間。
事務時間(Transaction-Time):指一個資料庫對象發生操作的時間,是一個事實存儲在資料庫、或者在資料庫中發生改變的時間,包含Transaction-From和Transaction-To兩個值。當使用者對資料庫狀态進行更改時,會産生各種操作曆史,事務時間真實地記錄了資料庫狀态變更的曆史。有時也稱事務時間為系統時間。
快照資料庫:快照資料庫是反映現實世界某一瞬間情況的資料模型。它記錄了特定時刻的資料庫狀态。快照資料庫采用這樣的假設:一個存儲在資料庫中的元組,一定是真實世界中的有效事實。
曆史資料庫:資料庫中被管理對象的生命周期是對象的有效時間,每一個元組記錄了資料的一個“曆史”狀态。曆史資料庫中沒有限制時間的表示方法,可以是時間點的集合、時間區間或者區間集合等形式表示。
復原資料庫:資料庫中被管理對象的生命周期是事務時間的資料庫。它儲存了資料庫中事務送出、狀态演變的曆史狀态。
雙時态資料庫:資料庫中元組包含一個系統支援的有效時間和一個系統支援的事務時間的資料庫,稱為雙時态資料庫。雙時态資料庫具備了快照資料庫、曆史資料庫和復原資料庫的特點,存儲了現實世界和資料庫系統的變更曆史。
Now:Now的中文意思是目前時間,是一個時間變元,随着目前時間的變化而變化,記錄了随時間變化的資訊,它的有效值依賴于目前時間。
時态資料庫腳本ATSQL的使用
時态資料處理構件根據ATSQL2的文法引入了Now、Beginning和Forever三個變元。Beginning和Forever分别表示時态資料處理構件所能表示的時間起點和終點。Now表示目前時間。每次執行操作時必須使Now綁定到一個固定的值(操作執行的目前時間),這樣後繼操作才能正常進行。在下面的ATSQL2中表示的這幾個單詞是具有具體的含義的。
ATSQL2的資料定義語句包括以下幾項功能:建立表、建立視圖、删除表、删除視圖。
ATSQL2語言和普通SQL語句一樣,使用“create table”關鍵字建立資料庫表,關鍵字“as validtime”用于訓示系統建立具有有效時間支援的資料庫表。
1. 建立員工表Employee, 是在标準的建立表SQL結尾,加入AS VALIDTIME關鍵字即可。
CREATE TABLE Employee(
ID VARCHAR(30) NOT NULL,
NAME VARCHAR(50) NOT NULL)
AS VALIDTIME;
2. 插入一條記錄的ATSQL, 需要通過VALIDTIME PERIOD來指定一個時間範圍的,其他部分和标準SQL一樣
VALIDTIME PERIOD [1981-1985) Insert into Employee values ('112', 'Jack');
3. 記錄查詢: 查詢所有記錄,在标準SQL前加VALIDTIME關鍵字即可, 查詢指定時間段的記錄,可以通過PERIOD關鍵字指定時間區間:
VALIDTIME SELECT * FROM Employee;
VALIDTIME PERIOD [1983-1986) SELECT * FROM Employee;
VALIDTIME PERIOD [1983-forever) SELECT * FROM Employee;
4. 向員工表裡添加人員資訊插入記錄前後分别如表 3-1和表 3-2所示
VALIDTIME period [ date "2008-1-1" – now)
Insert into Staff Values ( 132202, 'Zhang Jinning', '資訊部');
5. 為employee表建立一個視圖,該視圖包含所有1999-9-9前離職的勞工資訊,其中VALIDTIME(R)表示取元組R的有效時間區間:
Create view employee_v as
Validtime select * from employee
Where VALIDTIME(employee) before date "1999-9-9";
6. 删除員工表的ATSQL和一般的SQL語句一樣,如下
DROP TABLE Employee;
幾個查詢相關的概念
快照查詢:查詢目前時刻的資料庫狀态。對于非時态表(快照資料庫),快照查詢是一種向上相容的查詢方式,可以查詢非時态資料庫的資料。對于時态表(曆史資料庫或復原資料庫),快照查詢截取目前資料庫狀态,傳回目前狀态下的查詢結果。
順序查詢:順序查詢是一種時态查詢,通過關鍵字VALIDTIME或者TRANSACTIONTIME訓示系統執行哪個時間維(有效時間維、事務時間維,或者兩個次元)的時态查詢。在這種查詢中系統運用時态代數操作自動處理元組的時間戳(有效時間、事務時間,或兩者的結合)。
非順序查詢:執行非順序查詢時,系統不再根據時态代數操作解釋時間戳,隻是把有效時間和事務時間當作普通的使用者定義屬性對待。非順序查詢适合特殊的查詢需求,例如查詢條件涉及狀态的變化的查詢。
時态歸并:時态歸并是作用于時态資料庫的一種重構操作[23] 。歸并把具有相同屬性值并且時間戳相鄰或重疊的元組合并成一個元組,歸并的過程保持時态資料庫的狀态不被改變。
時态資料的變元
時态資料處理構件根據ATSQL2的文法引入了Now、Beginning和Forever三個變元。Beginning和Forever分别表示時态資料處理構件所能表示的時間起點和終點。Now表示目前時間。每次執行操作時必須使Now綁定到一個固定的值(操作執行的目前時間),這樣後繼操作才能正常進行。
時态資料處理構件使用重寫底層比較過程的方法綁定Now的語義。它把Now、Beginning和Forever分别用以下三個具體的時間值表示:
Now = ‘9999-01-01 00:00:00’;
Beginning = ‘1000-01-01 00:00:00’;
Forever = ‘9999-12-31 23:59:59’.
因為使用了特殊值表示這三個變元,一方面使得時态資料處理構件能處理的時間範圍比原商業資料庫能處理的時間範圍小,另一方面使得原商業資料庫底層對時間類型資料的比較算子有了新的意義。例如,如果目前時間是2007年12月1日,考慮“2009-1-1>Now”的意義時,應當先把Now替換為2008-07-18,比較結果為真。
在TimeDB中Now隻是目前時間的别名。在時态插入語句的執行過程中,Now作為一個标記被替換為語句執行的目前時間。
注:本文部分内容引用了黃永钊的《時态資料處理構件的性能優化研究與實作》