音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

數(shù)據(jù)庫(kù)觸發(fā)器機(jī)制設(shè)計(jì)與實(shí)現(xiàn)

出處:shengmei 發(fā)布于:2007-06-04 16:15:44

 數(shù)據(jù)庫(kù)管理系統(tǒng)作為信息系統(tǒng)的部件,在信息化時(shí)代所充當(dāng)?shù)慕巧瞧渌魏诬浖荒芴娲?。?dāng)前數(shù)據(jù)庫(kù)應(yīng)用的一個(gè)普遍要求是數(shù)據(jù)庫(kù)管理系統(tǒng)能夠在一些數(shù)據(jù)庫(kù)相關(guān)事件發(fā)生時(shí)觸發(fā)預(yù)先定義的操作,實(shí)現(xiàn)信息管理的自動(dòng)化,因此引進(jìn)了觸發(fā)器機(jī)制。觸發(fā)器可以增強(qiáng)引用完整性,加強(qiáng)復(fù)雜業(yè)務(wù)的規(guī)則,或者監(jiān)控?cái)?shù)據(jù)庫(kù)的變動(dòng),并執(zhí)行一定的數(shù)據(jù)操作。         
       觸發(fā)器機(jī)制實(shí)現(xiàn)主要涉及觸發(fā)事件的檢測(cè)以及觸發(fā)條件的判決等關(guān)鍵技術(shù)問題,以及對(duì)觸發(fā)器的編譯存儲(chǔ)和調(diào)用執(zhí)行等具體操作。         
       本文以國(guó)產(chǎn)數(shù)據(jù)庫(kù)管理系統(tǒng)GKD-Base為原型,在兼容Oracle 規(guī)范的PL/SQL引擎基礎(chǔ)上,提出一套解決方案,對(duì)觸發(fā)器的關(guān)鍵技術(shù)問題進(jìn)行了探討,并設(shè)計(jì)實(shí)現(xiàn)了數(shù)據(jù)庫(kù)的觸發(fā)器機(jī)制,擴(kuò)
展了數(shù)據(jù)庫(kù)管理系統(tǒng)GKD-Base的功能。         
       1 GKD-Base PL/SQL 引擎      

       GKD-BASE數(shù)據(jù)庫(kù)是一個(gè)具有自主知識(shí)產(chǎn)權(quán)的數(shù)據(jù)庫(kù)管理系統(tǒng),具有兼容SQL89標(biāo)準(zhǔn)的SQL引擎,能夠?yàn)橛脩籼峁┮粋€(gè)統(tǒng)一、有效的數(shù)據(jù)庫(kù)訪問接口(XAPI),實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的各種操作。為了融合SQL語言強(qiáng)大的集合數(shù)據(jù)處理能力和第三代語言(3GL)靈活的過程處理能力,在GKD-Base上已初步實(shí)現(xiàn)了兼容Oarcle PL/SQL V.23的PL/SQL引擎。         
       GKD-Base PL/SQL引擎包括編譯器、解釋器和異常處理三個(gè)模塊。在編譯階段,根據(jù)PL/SQL語言兼有過程式語句和SQL語句的特點(diǎn),采取分而治之策略,把過程語句和SQL語句分開處理。對(duì)于SQL語句,編譯器首先建立SQL語句結(jié)點(diǎn),進(jìn)行相應(yīng)的變量綁定和語法檢查;檢查無誤后產(chǎn)生語法樹形式的中間代碼。對(duì)于過程語句,編譯器將對(duì)語句成分進(jìn)行語法分析,對(duì)聲明的變量和數(shù)據(jù)類型建立相應(yīng)的符號(hào)表,終產(chǎn)生語法樹形式的中間代碼。解釋器的作用是對(duì)編譯器生成的中間代碼進(jìn)行解釋執(zhí)行。解釋器與編譯器對(duì)應(yīng),具有相對(duì)獨(dú)立的SQL語句解釋模塊和過程語句解釋模塊。另外,解釋器還包括執(zhí)行狀態(tài)堆棧的管理、與GKD-Base SQL引擎的調(diào)用接口。異常處理模塊主要實(shí)現(xiàn)程序運(yùn)行時(shí)的錯(cuò)誤檢查和,并支持用戶自定義異常和預(yù)定義異常的檢查和處理。         
       GKD-Base PL/SQL引擎可以實(shí)現(xiàn)對(duì)過程式語句、SQL語句與游標(biāo)、存儲(chǔ)子程序及包的編譯和解釋執(zhí)行。         
       2 觸發(fā)器實(shí)現(xiàn)的關(guān)鍵問題      

       觸發(fā)器定義了當(dāng)某些數(shù)據(jù)庫(kù)相關(guān)事件發(fā)生時(shí)數(shù)據(jù)庫(kù)應(yīng)采取的動(dòng)作。觸發(fā)器可增強(qiáng)引用完整性,加強(qiáng)復(fù)雜業(yè)務(wù)的規(guī)則或者監(jiān)控?cái)?shù)據(jù)庫(kù)的變動(dòng),其實(shí)現(xiàn)主要涉及到觸發(fā)事件的檢測(cè)以及觸發(fā)條件的判決等關(guān)鍵技術(shù)問題。         
       2.1 觸發(fā)器的事件檢測(cè)機(jī)制      
       觸發(fā)器事件檢測(cè)機(jī)制包括對(duì)事件的檢測(cè)和存儲(chǔ),是實(shí)現(xiàn)觸發(fā)器的關(guān)鍵。觸發(fā)器檢測(cè)的事件類型比較簡(jiǎn)單,基本事件主要包括對(duì)數(shù)據(jù)的插入、刪除以及更新等。GKD-Base的觸發(fā)器在對(duì)事件檢測(cè)時(shí),直接在相關(guān)事件發(fā)生的前后調(diào)用檢測(cè)函數(shù)截獲并分析事件消息,以確定是否對(duì)觸發(fā)器點(diǎn)火。    觸發(fā)器事件檢測(cè)機(jī)制實(shí)現(xiàn)的關(guān)鍵在于對(duì)觸發(fā)事件的存儲(chǔ)。觸發(fā)事件具有時(shí)間順序,因此存儲(chǔ)時(shí)也必須按照嚴(yán)格的時(shí)間順序進(jìn)行存儲(chǔ)。綜合比較各個(gè)商用和實(shí)驗(yàn)數(shù)據(jù)庫(kù)系統(tǒng)的事件表存儲(chǔ)機(jī)制,選擇了Starburst的雙HASH鏈表存儲(chǔ)機(jī)制,如圖1。

Starburst中變遷表的雙Hash結(jié)構(gòu)

                                                    圖1 Starburst中變遷表的雙H
ash結(jié)構(gòu)         
       這里,變遷表分為兩種類型:NEW和OLD,分別對(duì)應(yīng)于觸發(fā)器行級(jí)別操作中的NEW值和OLD值。變遷表中存儲(chǔ)了事件類型、當(dāng)前數(shù)據(jù)表以及事件作用的元組。系統(tǒng)可以通過這個(gè)駐留內(nèi)存的雙HASH鏈表實(shí)現(xiàn)數(shù)據(jù)庫(kù)變遷的快速定位和跟蹤處理。         
       2.2 觸發(fā)器的條件判決機(jī)制      
       觸發(fā)器的條件判決機(jī)制是觸發(fā)器的,根據(jù)SQL99標(biāo)準(zhǔn)的定義,可以將觸發(fā)器分為前觸發(fā)、約束判定和后觸發(fā)三種類型。這三種類型觸發(fā)器的判決順序策略如圖2。

三種類型觸發(fā)器的判決順序策略圖

                                                 圖 2 三種類型觸發(fā)器的判決順序策略圖

Rete網(wǎng)絡(luò)示意圖

                                                           圖 3 Rete網(wǎng)絡(luò)示意圖         
       觸發(fā)器的條件評(píng)估是影響觸發(fā)器機(jī)制的關(guān)鍵因素。在數(shù)據(jù)庫(kù)環(huán)境中,大多數(shù)數(shù)據(jù)修改行為只能影響數(shù)據(jù)庫(kù)的一小部分內(nèi)容,因此沒必要每次都從頭開始評(píng)估觸發(fā)器規(guī)則條件,Rete和TREAT網(wǎng)絡(luò)等增量條件評(píng)估方法已經(jīng)被證明是觸發(fā)器條件評(píng)估(Condition Evaluation)的有效處理手段。   以Rete網(wǎng)絡(luò)為例(圖3),它是一個(gè)左深度二叉樹,其基本元素包括:

       根結(jié)點(diǎn):根結(jié)點(diǎn)接收插入/刪除(+/-)記號(hào)(tokens),并將其傳遞給每一個(gè)后繼結(jié)點(diǎn);
       t-const結(jié)點(diǎn):記號(hào)到達(dá)這些結(jié)點(diǎn)后,將根據(jù)該結(jié)點(diǎn)上的條件謂詞進(jìn)行判決,那些通過測(cè)試的記號(hào)將繼續(xù)傳播下去,沒有通過測(cè)試的記號(hào)則被丟棄掉;         
       α-存儲(chǔ)結(jié)點(diǎn):通過t-const結(jié)點(diǎn)測(cè)試的記號(hào)將存儲(chǔ)到這個(gè)結(jié)點(diǎn)中,存儲(chǔ)在α-存儲(chǔ)結(jié)點(diǎn)中的每一個(gè)記號(hào)都將同時(shí)被傳遞給該結(jié)點(diǎn)的后繼結(jié)點(diǎn);         
       AND(連接)結(jié)點(diǎn):這些結(jié)點(diǎn)有兩個(gè)輸入,到達(dá)其中任意一個(gè)輸入結(jié)點(diǎn)的記號(hào)都要通過AND結(jié)點(diǎn)進(jìn)行測(cè)試,看它是否需要與另外一個(gè)輸入進(jìn)行連接操作。如果是,則連接兩個(gè)輸入的記號(hào)對(duì),將它們合并成一個(gè)組合記號(hào)后再傳遞給后繼的β-存儲(chǔ)結(jié)點(diǎn);  

bsp;     
       β-存儲(chǔ)結(jié)點(diǎn):存儲(chǔ)連接結(jié)點(diǎn)的輸出,并將輸出同時(shí)傳遞給后繼結(jié)點(diǎn);        
       P-結(jié)點(diǎn)(規(guī)則結(jié)點(diǎn)):+記號(hào)到達(dá)這里表明應(yīng)該喚醒一個(gè)與該記號(hào)相關(guān)聯(lián)的規(guī)則實(shí)例;-記號(hào)到達(dá)這里表明與其中的標(biāo)簽對(duì)象相關(guān)聯(lián)的已經(jīng)進(jìn)入待執(zhí)行隊(duì)列的規(guī)則實(shí)例應(yīng)該被刪除。         
       Rete網(wǎng)絡(luò)只支持兩路連接,對(duì)于一個(gè)有多個(gè)關(guān)系參與的規(guī)則定義,不同的連接順序可以得到不同的Rete網(wǎng)絡(luò),根據(jù)數(shù)據(jù)字典信息可以選擇的執(zhí)行順序。圖3是對(duì)應(yīng)于規(guī)則條件“A.color =“BULE”AND A.x < B.x AND B.x < C.x”的Rete網(wǎng)絡(luò)示意圖。         
       3 觸發(fā)器實(shí)現(xiàn)算法      
       觸發(fā)器的具體實(shí)現(xiàn)可以分為觸發(fā)器創(chuàng)建和調(diào)用,此外還包括觸發(fā)器的修改、刪除等操作。其中觸發(fā)器的創(chuàng)建包括觸發(fā)器的編譯與存儲(chǔ)操作,觸發(fā)器的調(diào)用包括對(duì)觸發(fā)器事件的檢測(cè)和觸發(fā)器動(dòng)作的執(zhí)行。         
       3.1創(chuàng)建觸發(fā)器      

       觸發(fā)器的創(chuàng)建包括觸發(fā)器的編譯和存儲(chǔ)。觸發(fā)器的編譯涉及到觸發(fā)器的命名、觸發(fā)器事件的正確性檢查、觸發(fā)器引用表的合法性檢查以及觸發(fā)器主體的語法檢查。觸發(fā)器創(chuàng)建之前首先要檢查用戶是否有創(chuàng)建觸發(fā)器的權(quán)限,以及觸發(fā)器名是否已經(jīng)在存儲(chǔ)觸發(fā)器的數(shù)據(jù)字典中被使用。觸發(fā)事件部分在觸發(fā)器創(chuàng)建時(shí)要進(jìn)行檢查,需要檢查的內(nèi)容包括語法檢查、觸發(fā)器引用的表和列是否存在,以及用戶是否有針對(duì)這個(gè)表創(chuàng)建觸發(fā)器的權(quán)限。表和列的存在與否可以先調(diào)用GKD-Base的XAPI函數(shù)分析出DML語句中表和列的信息,然后根據(jù)這些信息檢查數(shù)據(jù)字典;權(quán)限的檢查也要到數(shù)據(jù)字典中查詢。觸發(fā)器的語法檢查通過調(diào)用PL/SQL引擎的編譯器實(shí)現(xiàn);PL/SQL引擎編譯器對(duì)觸發(fā)器過程語句塊進(jìn)行編譯,并生成包含觸發(fā)器所有必要信息的語法樹形式的中間代碼。   
       保存觸發(fā)器相關(guān)信息的數(shù)據(jù)結(jié)構(gòu)終需要保存在數(shù)據(jù)字典中。因?yàn)橛|發(fā)器使用單獨(dú)的命名空間,可以設(shè)計(jì)一個(gè)單獨(dú)的系統(tǒng)表作為存儲(chǔ)觸發(fā)器的數(shù)據(jù)字典。數(shù)據(jù)字典應(yīng)該保存觸發(fā)器調(diào)用過程中必須的信息,類似于Oracle sys.trigger$表。觸發(fā)器主體是一個(gè)語句塊,對(duì)它可以當(dāng)作一個(gè)存儲(chǔ)過程來處理,單獨(dú)保存在一個(gè)系統(tǒng)表中,通過觸發(fā)器主體的ID號(hào)與存儲(chǔ)在USER_TRIGGERS表中的其它觸發(fā)器信息相關(guān)聯(lián)。在觸發(fā)器調(diào)用過程中,根據(jù)觸發(fā)器中的ID來調(diào)用。創(chuàng)建觸發(fā)器算法如下:       (1)合法性驗(yàn)證。如當(dāng)前用戶無權(quán)執(zhí)行該操作,或者用戶給出的表不存在,轉(zhuǎn)(6);否則轉(zhuǎn)(2)。         
       (2)存在性檢查。如當(dāng)前定義的觸發(fā)器與當(dāng)前表以往定義的觸發(fā)器重名或同類型,轉(zhuǎn)(6);否則轉(zhuǎn)(3)。         
       (3)語法檢查。調(diào)用PL/SQL引擎編譯器對(duì)觸發(fā)器語句進(jìn)行編譯,如出現(xiàn)語法或語義錯(cuò)誤,轉(zhuǎn)(6);否則轉(zhuǎn)(4)。         
       (4)將觸發(fā)器信息寫入外存,然后返回觸發(fā)器標(biāo)識(shí)ID。     &nb
sp;   
       (5)在數(shù)據(jù)庫(kù)表結(jié)構(gòu)的系統(tǒng)表中將(4)中所得標(biāo)識(shí)與觸發(fā)器名填入其中,然后將觸發(fā)器定義的表項(xiàng)插入到USER_TRIGGERS相應(yīng)的系統(tǒng)表項(xiàng)中,轉(zhuǎn)(7)。         
       (6)釋放所占資源,報(bào)錯(cuò)退出。         
       (7)釋放資源,正常退出。         
       3.2 觸發(fā)器的調(diào)用      
       觸發(fā)器的調(diào)用首先要從外存中讀取觸發(fā)器的信息,并寫入內(nèi)存相應(yīng)的數(shù)據(jù)結(jié)構(gòu)中。觸發(fā)器的內(nèi)存形式是為了更方便地進(jìn)行觸發(fā)器約束條件的檢查而設(shè)立的。為了在觸發(fā)事件發(fā)生時(shí),能立即判斷當(dāng)前被處理對(duì)象是否滿足觸發(fā)約束條件,通過調(diào)用PL/SQL引擎編譯器將外存中存放觸發(fā)器約束源代碼轉(zhuǎn)換為其內(nèi)存表示,存放在相應(yīng)觸發(fā)器的內(nèi)存結(jié)構(gòu)中。在觸發(fā)器被調(diào)用前,系統(tǒng)將被同一觸發(fā)事件所觸發(fā)的所有活躍的觸發(fā)器組織成四條鏈,如圖4。

觸發(fā)器鏈?zhǔn)疽鈭D

                                                               圖4 觸發(fā)器鏈?zhǔn)疽鈭D         
       根據(jù)這個(gè)數(shù)據(jù)結(jié)構(gòu),觸發(fā)器調(diào)用算法如下:        
       (1)將與觸發(fā)事件相關(guān)的觸發(fā)器按類型分別記入SB、SA、RB和RA四條鏈中;如沒有某種類型的觸發(fā)器,則相應(yīng)鏈置空。         
       (2)如SB不為空,則轉(zhuǎn)SB鏈觸發(fā)操作算法。         
       (3)如RB不為空,則轉(zhuǎn)RB鏈觸發(fā)操作算法。       (4)對(duì)當(dāng)前數(shù)據(jù)對(duì)象進(jìn)行觸發(fā)事件所規(guī)定的DML操作。         
       (5)如RA不為空,則轉(zhuǎn)RA鏈觸發(fā)操作算法。         
       (6)判斷觸發(fā)事件所作用的數(shù)據(jù)記錄是否都被處理完畢,如是,轉(zhuǎn)(7);否則,取出下一條記錄作為當(dāng)前的數(shù)據(jù)對(duì)象,轉(zhuǎn)(3)。         
       (7)如SA不為空,則轉(zhuǎn)SA鏈觸發(fā)操作算法。         
      

(8)釋放所占的資源,結(jié)束觸發(fā)器調(diào)用的處理。         
       對(duì)給定觸發(fā)器鏈操作算法如下:        
       (1)根據(jù)觸發(fā)器調(diào)用算法檢測(cè),當(dāng)前觸發(fā)器鏈不為空,取鏈?zhǔn)子|發(fā)器。         
       (2)將待處理數(shù)據(jù)對(duì)象的相關(guān)信息代入觸發(fā)條件判斷,如果條件為真,轉(zhuǎn)(3);否則轉(zhuǎn)(4)。         
       (3)啟動(dòng)一個(gè)PL/SQL解釋執(zhí)行器,對(duì)當(dāng)前觸發(fā)器動(dòng)作鏈中所記錄的動(dòng)作進(jìn)行解釋執(zhí)行。         
       (4)取鏈中下一個(gè)觸發(fā)器為鏈?zhǔn)?,判斷是否為空,如是轉(zhuǎn)(5);否則轉(zhuǎn)(1)。         
       (5)完成當(dāng)前觸發(fā)器鏈操作,返回觸發(fā)器調(diào)用算法繼續(xù)。          
       觸發(fā)器的更新操作是對(duì)一個(gè)觸發(fā)器進(jìn)行編譯后,替換已存在的作用在同一個(gè)表上的同名觸發(fā)器,基本操作與觸發(fā)器的創(chuàng)建是一致的;觸發(fā)器的刪除操作步驟主要是在數(shù)據(jù)字典中對(duì)指定的觸發(fā)器進(jìn)行查詢并刪除。這里不再詳述。
參考文獻(xiàn):
1 唐 揚(yáng),熊 偉,陳宏盛等. GKD-Base PL/SQL引擎實(shí)現(xiàn)關(guān)鍵技術(shù)研究. 電子技術(shù)應(yīng)用, 2004;30(8)
2 Tom Portfolio. PL/SQL User´s Guide and Reference. Release 8.1.6, Oracle Corporation. 1999
3 J.Widom,S.Finkelstein. Set Oriented Production Rules in Relational Database Systems. In   Proc. ACM SIGMOD, 1990
4 Doorenbos, R. B., Matching 100,000 learned rules. In Pro-ceedings of the Eleventh National   Conference on Artificial Intelligence, pages 290~296, 1993
5 C.-L. Forgy. Rete: a Fast Algorithm for the Many Pattern/Many Object Pattern   Match Problem.Artificial Intelligence, 1982
6 Miranker, D. P. TREAT: A NEW and Efficient Match Algorithm for AI Production Systems.   Morgan Kaufmann, San Mateo, CA


  
關(guān)鍵詞:數(shù)據(jù)庫(kù)觸發(fā)器機(jī)制設(shè)計(jì)與實(shí)現(xiàn)

版權(quán)與免責(zé)聲明

凡本網(wǎng)注明“出處:維庫(kù)電子市場(chǎng)網(wǎng)”的所有作品,版權(quán)均屬于維庫(kù)電子市場(chǎng)網(wǎng),轉(zhuǎn)載請(qǐng)必須注明維庫(kù)電子市場(chǎng)網(wǎng),http://m.58mhw.cn,違反者本網(wǎng)將追究相關(guān)法律責(zé)任。

本網(wǎng)轉(zhuǎn)載并注明自其它出處的作品,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點(diǎn)或證實(shí)其內(nèi)容的真實(shí)性,不承擔(dān)此類作品侵權(quán)行為的直接責(zé)任及連帶責(zé)任。其他媒體、網(wǎng)站或個(gè)人從本網(wǎng)轉(zhuǎn)載時(shí),必須保留本網(wǎng)注明的作品出處,并自負(fù)版權(quán)等法律責(zé)任。

如涉及作品內(nèi)容、版權(quán)等問題,請(qǐng)?jiān)谧髌钒l(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系,否則視為放棄相關(guān)權(quán)利。

廣告
OEM清單文件: OEM清單文件
*公司名:
*聯(lián)系人:
*手機(jī)號(hào)碼:
QQ:
有效期:

掃碼下載APP,
一鍵連接廣大的電子世界。

在線人工客服

買家服務(wù):
賣家服務(wù):
技術(shù)客服:

0571-85317607

網(wǎng)站技術(shù)支持

13606545031

客服在線時(shí)間周一至周五
9:00-17:30

關(guān)注官方微信號(hào),
第一時(shí)間獲取資訊。

建議反饋

聯(lián)系人:

聯(lián)系方式:

按住滑塊,拖拽到最右邊
>>
感謝您向阿庫(kù)提出的寶貴意見,您的參與是維庫(kù)提升服務(wù)的動(dòng)力!意見一經(jīng)采納,將有感恩紅包奉上哦!