前言:想要寫出一篇引人入勝的文章?我們特意為您整理了時間性能數(shù)據(jù)庫的運用范文,希望能給你帶來靈感和參考,敬請閱讀。
本文作者:彭煒 單位:大同大學(xué)數(shù)計學(xué)院
1背景介紹
將數(shù)據(jù)庫中的數(shù)據(jù)和時間屬性進(jìn)行特殊處理的必要性在上世紀(jì)七十年代就被理解和提出.支持這種處理的數(shù)據(jù)庫被稱為時間數(shù)據(jù)庫.快速數(shù)據(jù)恢復(fù)和更新(即在線訪問即時信息的可能性)是數(shù)據(jù)庫管理系統(tǒng)最重要特征之一.自上世紀(jì)七十年代起的二十年中,時間數(shù)據(jù)庫已經(jīng)被非常詳盡的研究,但還沒有一種廣泛應(yīng)用的商業(yè)數(shù)據(jù)庫管理系統(tǒng)支持時間屬性,而且將時間屬性工具加入到結(jié)構(gòu)化查詢語言(SQL)標(biāo)準(zhǔn)中的嘗試也失敗了.時間屬性工具的缺乏造成了人們對時間數(shù)據(jù)功能的研發(fā)與執(zhí)行的不完善,其嚴(yán)重缺陷表現(xiàn)在以下幾方面:
*對完整性約束的應(yīng)用,復(fù)雜且效率低;
*對開發(fā)者來說執(zhí)行查詢的邏輯有模糊的連接,有些數(shù)據(jù)庫管理功能在應(yīng)用中才能被實現(xiàn);
*由于缺乏明確的設(shè)計模式,使程序的執(zhí)行產(chǎn)生多樣性,甚至在同一個應(yīng)用中就顯示出不同;
*同樣的功能被重復(fù)執(zhí)行.需要注意的是,幾乎所有關(guān)于時間數(shù)據(jù)庫的研究都存在著對支持時間數(shù)據(jù)的手段已包含在數(shù)據(jù)庫管理系統(tǒng)中并被執(zhí)行的假設(shè).雖然這樣的假設(shè)保證了查詢語言所必需的功能可以使用,但是時間屬性在數(shù)據(jù)庫管理系統(tǒng)水平上全面執(zhí)行的代價非常昂貴,且沒有現(xiàn)成可用的解決方案.
本文將論述如何在廣泛應(yīng)用的商業(yè)數(shù)據(jù)庫管理系統(tǒng)構(gòu)架中局部實施時間功能.因為不能對已確立的信息系統(tǒng)程序設(shè)計和已開發(fā)好的程序做出重大的改變,所以提出了一種在構(gòu)架中利用現(xiàn)有技術(shù)工具來實施的方法,這項課題的主要目的闡述如下:
*提供在傳統(tǒng)關(guān)系或?qū)ο箨P(guān)系的數(shù)據(jù)庫管理系統(tǒng)的構(gòu)架中使用時間屬性手段;
*對在應(yīng)用程序設(shè)計和數(shù)據(jù)庫已確立的方法中進(jìn)行細(xì)微改變的限制;
*執(zhí)行程序不能降低系統(tǒng)中沒有使用時間數(shù)據(jù)的那些部分的性能;
*不對使用傳統(tǒng)方式來保證數(shù)據(jù)完整性的控制造成妨礙;*執(zhí)行程序的成本必須低廉.
2基本執(zhí)行法則
2.1對于歷史數(shù)據(jù)的要求
歷史數(shù)據(jù)的存儲是系統(tǒng)的需求,這一需求可能對應(yīng)用的各個領(lǐng)域至關(guān)重要.系統(tǒng)的主要事件邏輯模塊可以在應(yīng)用程序的時間層面上進(jìn)行獨立的設(shè)計與開發(fā).從本質(zhì)上講,支持歷史數(shù)據(jù)更改同支持事務(wù)完整性和經(jīng)授權(quán)的數(shù)據(jù)訪問,都屬于系統(tǒng)的基本功能.在本文中,使用的是區(qū)間時間的數(shù)據(jù)表達(dá)形式.假設(shè)一實體,它的任何歷史改變都必須存儲下來,并同這實體的當(dāng)前狀態(tài)(即事物對象的普通狀態(tài))一起,表現(xiàn)出這個實體的表達(dá)形式.當(dāng)表達(dá)形式有效時,除普通屬性外,它成為了一個被用于研究區(qū)間時間的抽象概念.在對象級別上,有效和時間的表達(dá)形式之間的關(guān)系通常取決于執(zhí)行程序.時間屬性的支持不會影響到系統(tǒng)事物邏輯分析和設(shè)計,并且不需要任何特殊的開發(fā)程序.需要存儲歷史數(shù)據(jù)的應(yīng)用程序的設(shè)計必須包括下列步驟:
*設(shè)計系統(tǒng)的事物邏輯;
*增加對保留某些事物實體的歷史變化的要求.
因此,設(shè)計步驟須指定實體以及之間關(guān)系.對于這些實體及關(guān)系,必須保留修改歷史.統(tǒng)一建模語言(UML)模板便是例子之一.應(yīng)用程序必須能夠處理歷史數(shù)據(jù),這就要求開發(fā)特殊的界面來進(jìn)行數(shù)據(jù)訪問,開發(fā)圖形界面向終端用戶呈現(xiàn)歷史數(shù)據(jù).應(yīng)用程序的進(jìn)程邏輯在時間面上的疊交狀態(tài),僅意味著概念上支持歷史更改要求的數(shù)據(jù)模型可被獨立地進(jìn)行設(shè)計.包含系統(tǒng)實體有效狀態(tài)的數(shù)據(jù)模型稱為基本模型,對于歷史更改的基本模型來說,添加屬性的數(shù)據(jù)模型稱為時間模型.在本文中將就關(guān)系數(shù)據(jù)庫中的時間表達(dá)做出詳細(xì)的描述.支持歷史數(shù)據(jù)的方法不需要附加編碼.存儲歷史改變的表和表中更新數(shù)據(jù)的觸發(fā)器可以從基本模型的模式中自動生成.
2.2對于歷史數(shù)據(jù)的表達(dá)
我們對實體及其關(guān)系進(jìn)行定義以便創(chuàng)建時間模式,這些實體和關(guān)系的歷史更改必須被存儲下來.在基本模式中,這些實體及其關(guān)系是與關(guān)系表相關(guān)聯(lián)的.對每一個這樣的表,我們用與基本模式同樣的文件名創(chuàng)建一個附加表,并加以H前綴.例如,對文件名為EMPLOYEE的表,我們創(chuàng)建了以HEMPLOYEE為名的表.這個新的表包含了與基本表同樣的列,以及兩個額外的列——時間區(qū)間的開始與結(jié)束,在這一區(qū)間中,表中每行的數(shù)值都是有效的.這兩個額外列的名字分別由基本表中的名字加以FTS(實施時間標(biāo)記)后綴和XTS(終止時間標(biāo)記)后綴來構(gòu)成.每一個H表都具有主鍵和外鍵.主鍵由基本表的主鍵和FTS列構(gòu)成.例如(圖1)表HEMPLOYEE,主鍵為:Primarykey(ID,EMPLOYEE-FTS)基本表的主鍵則被用做H表的外鍵:Foreignkey(ID)referencesEMPLOYEE(ID)H表中的數(shù)據(jù)自動更新,因此,時間模式里不存在完整性約束.
2.3對于更改歷史的更新
現(xiàn)在來考慮在H表中插入和更新記錄重要的規(guī)則是應(yīng)用程序不可直接更新這些表中的數(shù)據(jù),H表應(yīng)進(jìn)行自動更新.自動更新可由觸發(fā)器執(zhí)行或者作為應(yīng)用程序構(gòu)架中的功能.以下是數(shù)據(jù)更新的規(guī)則:
*當(dāng)一個記錄插入到基本模式表中時,同樣的數(shù)據(jù)也被插入到相應(yīng)的時間模式H表中FTS字段的數(shù)值被設(shè)成當(dāng)前的日期和時間,XTS字段的數(shù)值設(shè)成一個遠(yuǎn)離的時間點.
*當(dāng)一個記錄在基本模式表中被更新時,在H表中相應(yīng)的記錄(具有同樣的主鍵和XTS字段等于ENDDATE)也隨之更新.之后,這一記錄將不再有效,同時XTS字段被設(shè)為當(dāng)前時間.一個具有當(dāng)前字段值的新記錄隨即插入到H表,FTS字段設(shè)成當(dāng)前時間,XTS字段重新設(shè)成ENDDATE;
*當(dāng)基本模式表中的記錄被刪除時,H表中相應(yīng)的記錄(XTS字段為ENDDATE)也隨即進(jìn)行更新,將XTS字段設(shè)為當(dāng)前時間.H表保留了所有數(shù)據(jù)更改的歷史.每一個H表中的記錄在區(qū)間[FTS,XTS]中都是有效的.更改歷史是連續(xù)的,前面描述的帶有同樣主鍵的記錄的FTS字段值與XTS字段值在同一時間進(jìn)行改變.H表的主鍵由基本表的主鍵和FTS字段構(gòu)成.由于時間是離散的,上面描述的模式不能保證主鍵的值是唯一的.
這一問題可以通過附加檢查得以解決.如果另一個具有當(dāng)前FTS值的記錄已經(jīng)存在,那么至少在新的記錄中FTS有一位有效值會被增加.盡管基本模式中的所有數(shù)據(jù)在時間模式中都存在,基本模式仍是有用的,理由如下:
*完整性約束在時間模式中沒有定義,并且可以不被數(shù)據(jù)庫管理系統(tǒng)進(jìn)行核實;
*時間模式表可能比基本模式表大很多;
*對于一些查詢,時間模式中的數(shù)據(jù)連接不如基本模式表中的連接有效.
以上提出的執(zhí)行方法對于其他類型的冗余也進(jìn)行了假設(shè),冗余的程度經(jīng)過了選擇,從而更易實行有效查詢.很明顯,為了能夠有效執(zhí)行查詢,數(shù)據(jù)庫需要進(jìn)行細(xì)微的調(diào)整.特別是時間表上應(yīng)選擇一組索引.不過,這一問題超出了本文論述的范圍,在此不詳敘述.我們強(qiáng)調(diào)不同的完整性約束可以在基本模式中存儲當(dāng)前數(shù)據(jù)的值,以確保建立高度可靠的數(shù)據(jù)庫.
3數(shù)據(jù)庫查詢執(zhí)行
3.1包含時間條件的查詢
基本模式中的數(shù)據(jù)查詢提供了數(shù)據(jù)的當(dāng)前值.由于時間數(shù)據(jù)的支持使得在過去一定時間區(qū)間里獲得的有效數(shù)據(jù)、實體更改的歷史、帶有時間謂詞的執(zhí)行查詢以及生成各種報告均成為可能.例如我們可以找出一個員工在任職經(jīng)理時工資的改變,或者這一員工在一定時間區(qū)間里的平均工資.在本文中,將對以下查詢進(jìn)行探討:
*快照查詢可獲得在過去某一時間上實體及其關(guān)系的狀態(tài).例如我們可以查詢到某個員工在2000年12月31日的工資是多少;
*跟蹤日志查詢可以追溯實體更改的歷史例如可以查詢員工在過去5年中工資變動的情況.
下面分別論述歷史數(shù)據(jù)表達(dá)如何應(yīng)用在以上的查詢中,從而在結(jié)構(gòu)化查詢語言(SQL)中對查詢進(jìn)行表達(dá).
3.2快照查詢
實際上,快照查詢是帶有附加參數(shù)的普通查詢,也就是追溯查詢數(shù)據(jù)有效時的時間.為了將一個普通查詢轉(zhuǎn)換為快照查詢,需要執(zhí)行以下步驟:(1)將基本表中的參照替換為相應(yīng)H表中的參照.(2)對每個與查詢相關(guān)的H表,在WHERE語句中添加附加條件:snapshotdate>=FTS和snapshotdate<XTS.然后,將特定時間里的記錄從每個H表中選擇出來例如選擇當(dāng)前某位員工工資的查詢?yōu)?SELECTE.SALARYFROMEMPLOYEEEWHEREE.ID=100這種在特定時間里對那位員工工資的查詢被轉(zhuǎn)換成下面的查詢:SELECTE.SALARYFROMHEMPLOYEEEWHEREE.ID=100ANDEMPLOYEEFTS>=:snapshotdateANDEMPLOYEEXTS<:snapshotdate由于同一位員工的時間區(qū)間是不會重疊的,兩個查詢產(chǎn)生同一個記錄需要注意的是,有效數(shù)據(jù)在H表中被復(fù)制,因此,最后一個查詢也會產(chǎn)生有效數(shù)據(jù)(例如,當(dāng)snapshotdate=currentdate).
3.3跟蹤日志查詢
現(xiàn)在我們來論述追溯歷史更改的查詢.這種查詢的復(fù)雜度取決于與查詢有關(guān)的時間表的數(shù)量,所選記錄有效的時間區(qū)間在不同的時間表中必須吻合.為了創(chuàng)建一個跟蹤日志查詢,需要兩個帶有不同參數(shù)的函數(shù).一個產(chǎn)生最大自變量,另一個產(chǎn)生最小自變量.在查詢中會用到下列表達(dá)式:
*maximal(table1fts,…,tablenfts)從自變量列表中選出最大的自變數(shù).我們將其代入所有與查詢有關(guān)的H表的FTS值.為了簡潔起見,這一函數(shù)產(chǎn)生的值記為MAXFTS;
*minimal(table1xts,…,tablenxts)從自變量列表中選出最小的自變數(shù).我們將其代入所有與查詢有關(guān)的H表的XTS值.同樣,這一函數(shù)產(chǎn)生的值記為MINXTS.為了將查詢轉(zhuǎn)換為跟蹤日志查詢,需要執(zhí)行以下步驟:(1)將基本表中的參照替換為相應(yīng)H表中的參照.(2)將表達(dá)式MAXFTS和MINXTS加入所選字段的列表中.(3)將附加條件MAXFTS<MINXTS加入WHERE語句中.(4)下面的步驟可能需要操作:對歷史更改進(jìn)行追溯的區(qū)間進(jìn)行界定.在WHERE語句中加入條件MINXTS>SANDMAXFTS<E,其中S和E分別是區(qū)間的開始值和終止值.假設(shè)查詢一位員工及其部門的信息:隨著時間的變化,這位員工的工資、所在部門甚至姓名都有可能改變.在一定時間區(qū)間里選擇同樣數(shù)據(jù)的跟蹤日志查詢?yōu)椤?/p>
4結(jié)論
本文所論述的對于時間數(shù)據(jù)的區(qū)間表達(dá)的執(zhí)行并不新奇,類似的執(zhí)行程序已被很多商業(yè)軟件包和開發(fā)小組所用.然而人們對于效率的問題,完整性約束的支持,應(yīng)用程序開發(fā)以及查詢的設(shè)計都應(yīng)更深入的思考.
本文提出的技術(shù)考慮了上述所有因素,因此,保證了高效和可信賴軟件的開發(fā).文章也僅描述了在非時間數(shù)據(jù)庫管理系統(tǒng)中支持時間屬性的基本方面.許多重要的課題還有待研究,其中包括:
*應(yīng)用程序的額外功能[例如撤銷(Undo)功能];
*執(zhí)行并使用基于事件的表達(dá)方式;
*與事務(wù)支持機(jī)制的相互作用;
*對于有效時間的表達(dá)和使用(相對于事務(wù)時間).