• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      觸發(fā)器在實(shí)驗(yàn)管理系統(tǒng)中的設(shè)計(jì)與應(yīng)用

      2010-09-25 12:48:36蔡朝暉
      關(guān)鍵詞:觸發(fā)器級(jí)聯(lián)備份

      蔡朝暉,劉 春

      (大慶師范學(xué)院 計(jì)算機(jī)科學(xué)與信息技術(shù)學(xué)院,黑龍江 大慶 163712)

      0 引言

      本文中提到的實(shí)驗(yàn)管理系統(tǒng)(以下簡(jiǎn)稱為實(shí)驗(yàn)系統(tǒng)),是作者在研項(xiàng)目《軟件工程專業(yè)理論課程實(shí)驗(yàn)管理網(wǎng)絡(luò)化研究與實(shí)現(xiàn)》中實(shí)驗(yàn)管理系統(tǒng)應(yīng)用軟件的設(shè)計(jì)開發(fā)和實(shí)現(xiàn)部分。

      在實(shí)驗(yàn)系統(tǒng)的設(shè)計(jì)和實(shí)現(xiàn)過程中,應(yīng)用DML觸發(fā)器完成了數(shù)據(jù)參照完整性實(shí)現(xiàn)以及自動(dòng)更新等功能的實(shí)現(xiàn)。完成本文的主要目的:研究、分析、總結(jié)應(yīng)用觸發(fā)器機(jī)制的優(yōu)勢(shì)及使用注意事項(xiàng);同時(shí)研究分析了數(shù)據(jù)庫系統(tǒng)中觸發(fā)器機(jī)制的潛在應(yīng)用。

      1 關(guān)于觸發(fā)器

      1.1 什么是觸發(fā)器

      觸發(fā)器是數(shù)據(jù)庫服務(wù)器中發(fā)生事件時(shí)自動(dòng)執(zhí)行的特殊存儲(chǔ)過程。它與存儲(chǔ)過程經(jīng)歷的過程類似,但不同的是觸發(fā)器沒有接口,不能被顯示調(diào)用,只有當(dāng)某一事件發(fā)生時(shí)由數(shù)據(jù)庫服務(wù)自動(dòng)執(zhí)行[1],而我們主要用到的正是它自動(dòng)執(zhí)行的優(yōu)勢(shì)特性。

      1.2 DML觸發(fā)器

      一般的DBMS,提供的觸發(fā)器機(jī)制基本都包括DML觸發(fā)器和DDL觸發(fā)器兩種。如果要通過數(shù)據(jù)操縱語言(DML)事件修改數(shù)據(jù),則執(zhí)行DML觸發(fā)器。DML事件是指對(duì)表或視圖的INSERT、UPDATE或DELETE這三種更新操作。我們?cè)趯?shí)驗(yàn)系統(tǒng)中使用的DML事件觸發(fā)器,是針對(duì)學(xué)生實(shí)驗(yàn)管理表的INSERT語句、學(xué)生實(shí)驗(yàn)成績(jī)表的UPDATE語句、系統(tǒng)用戶登錄表的DELETE語句而設(shè)計(jì)觸發(fā)的。

      1.3 觸發(fā)器的使用原則[1]

      觸發(fā)器常用于強(qiáng)制業(yè)務(wù)規(guī)則和數(shù)據(jù)完整性。數(shù)據(jù)庫系統(tǒng)一般提供兩種機(jī)制來實(shí)現(xiàn)業(yè)務(wù)規(guī)則和數(shù)據(jù)完整性:約束和觸發(fā)器。完整性約束機(jī)制在檢測(cè)出違反約束條件的操作后,只能做簡(jiǎn)單的動(dòng)作;觸發(fā)器則可以通過用戶使用編程的方法實(shí)現(xiàn)復(fù)雜的業(yè)務(wù)規(guī)則。在觸發(fā)器的使用中,應(yīng)當(dāng)記住的一個(gè)原則是,如果能夠通過約束實(shí)現(xiàn)數(shù)據(jù)完整性,那么就使用約束實(shí)現(xiàn)。如果無法通過約束實(shí)現(xiàn)數(shù)據(jù)完整性,嘗試使用存儲(chǔ)過程能否實(shí)現(xiàn),讓存儲(chǔ)過程在確定更新之前先執(zhí)行檢查。只有在這些方法都無法實(shí)現(xiàn)數(shù)據(jù)完整性時(shí)才使用觸發(fā)器。

      2 實(shí)驗(yàn)系統(tǒng)中由觸發(fā)器實(shí)現(xiàn)的功能分析

      2.1 導(dǎo)入新實(shí)驗(yàn)用戶信息至登錄表中

      每個(gè)新學(xué)期開學(xué)時(shí)都應(yīng)導(dǎo)入新的實(shí)驗(yàn)用戶數(shù)據(jù)至實(shí)驗(yàn)系統(tǒng)中,這些導(dǎo)入的數(shù)據(jù)主要是本學(xué)期上課學(xué)生及任課教師的相關(guān)數(shù)據(jù),這些數(shù)據(jù)要同時(shí)存儲(chǔ)到學(xué)生實(shí)驗(yàn)成績(jī)管理表和系統(tǒng)用戶登錄表中。

      我們希望在DBA將學(xué)生數(shù)據(jù)信息導(dǎo)入至實(shí)驗(yàn)成績(jī)管理表中時(shí),同時(shí)實(shí)現(xiàn)關(guān)于學(xué)生用戶的信息導(dǎo)入至系統(tǒng)用戶登錄表中。因?yàn)槊繉W(xué)期參與完成實(shí)驗(yàn)的學(xué)生必定是系統(tǒng)用戶,而學(xué)生信息數(shù)據(jù)相對(duì)于教師信息數(shù)據(jù)的錄入工作量至少是幾百倍。

      2.2備份已完成實(shí)驗(yàn)評(píng)分的學(xué)生實(shí)驗(yàn)信息

      學(xué)生完成實(shí)驗(yàn)后提交的實(shí)驗(yàn)總結(jié),由教師用來做為評(píng)價(jià)學(xué)生實(shí)驗(yàn)情況的依據(jù),教師打分完成后,學(xué)生就不再具有此實(shí)驗(yàn)的使用權(quán)限,此時(shí)的數(shù)據(jù)我們希望備份至另附的表中存儲(chǔ)。

      2.3 級(jí)聯(lián)刪除

      隨著每個(gè)學(xué)期課程的結(jié)束,其相關(guān)實(shí)驗(yàn)對(duì)于本年級(jí)開課學(xué)生來說也結(jié)束了,那么在實(shí)驗(yàn)管理系統(tǒng)中,學(xué)生成績(jī)上報(bào)完成后,實(shí)驗(yàn)系統(tǒng)中就可以不必直接管理這些學(xué)生的相關(guān)信息了,同時(shí)登錄用戶中也應(yīng)及時(shí)刪除這些學(xué)生的信息。

      3 觸發(fā)器的設(shè)計(jì)與實(shí)現(xiàn)

      3.1 三個(gè)觸發(fā)器的定義(代碼)

      1)級(jí)聯(lián)插入功能觸發(fā)器

      create trigger tri_stu_insert

      on 學(xué)生表

      for insert

      begin

      insert into 登錄表 values(id,name) as select sno,sname from inserted;

      end

      //代碼說明:其中用到的字段名sno、sname分別為學(xué)生學(xué)號(hào)和學(xué)生姓名,登錄表中學(xué)生用戶初始密碼默認(rèn)為“000000”。

      2)自動(dòng)備份功能觸發(fā)器

      create trigger tri_stug_update

      on 學(xué)生成績(jī)表

      for update

      begin

      if exists

      (select * from 備份_學(xué)生成績(jī)表 where sno=inserted.sno)

      update備份_學(xué)生成績(jī)表 set grade=inserted.grade

      else

      insert into 備份_學(xué)生成績(jī)表as select * from inserted;

      end

      //代碼說明:備份_學(xué)生成績(jī)表為先前創(chuàng)建好的與學(xué)生成績(jī)表完全同構(gòu)的成績(jī)備份表。

      //代碼說明:update語句分為兩步操作:即捕獲數(shù)據(jù)前像的delete語句和捕獲數(shù)據(jù)后像的insert語句。當(dāng)在定義有觸發(fā)器的表上執(zhí)行update語句時(shí),原始行(前像)被移入到deleted表,更新行(后像)被移入到inserted表。

      //另注:此觸發(fā)器的使用權(quán)限只授權(quán)給教師用戶。

      3)級(jí)聯(lián)刪除功能觸發(fā)器

      create table 學(xué)生成績(jī)表

      (

      sno char(12),

      cno char(8),

      pno char(10),

      pwork varchar(1000),

      grade float default 0,

      primary key(sno,pno),

      foreign key(sno) references student(sno),

      foreign key(pno) references pra(pno)

      on delete cascade

      );

      //代碼說明:這里在創(chuàng)建學(xué)生成績(jī)表時(shí)使用了外碼約束,同時(shí)直接使用了級(jí)聯(lián)刪除機(jī)制。由于其實(shí)質(zhì)是系統(tǒng)觸發(fā)器,所以總結(jié)在此。

      3.2 設(shè)計(jì)說明

      我們?cè)谙到y(tǒng)中用到的級(jí)聯(lián)刪除功能,直接體現(xiàn)了觸發(fā)器最常用的功能,即實(shí)現(xiàn)數(shù)據(jù)完整性之參照完整性;對(duì)于在實(shí)驗(yàn)系統(tǒng)中用到的自動(dòng)備份功能觸發(fā)器和級(jí)聯(lián)插入功能觸發(fā)器,我們意在使用它的主動(dòng)功能,提高數(shù)據(jù)錄入效率。

      盡管級(jí)聯(lián)插入觸發(fā)器執(zhí)行時(shí)系統(tǒng)開銷會(huì)比較大,但綜合考慮觸發(fā)器執(zhí)行頻率和數(shù)據(jù)插入操作頻率的對(duì)比,設(shè)計(jì)并使用了該觸發(fā)器;對(duì)于自動(dòng)備份功能觸發(fā)器,其在每修改一行學(xué)生成績(jī)時(shí)會(huì)備份其所在行至學(xué)生成績(jī)表中,在此使用的是觸發(fā)器的級(jí)聯(lián)修改機(jī)制,只需針對(duì)是初始修改還是非初始修改設(shè)計(jì)即可。對(duì)于可能在使用級(jí)聯(lián)更新觸發(fā)器時(shí)產(chǎn)生的更新鏈循環(huán)問題,從設(shè)計(jì)上給予重視是可以避免的。

      4 觸發(fā)器的潛在應(yīng)用

      4.1 數(shù)據(jù)庫重構(gòu)中使用觸發(fā)器

      許多人將代碼重構(gòu)視為軟件開發(fā)的一個(gè)基本組成部分,而應(yīng)用開發(fā)的一個(gè)很大部分是與數(shù)據(jù)庫打交道,重構(gòu)數(shù)據(jù)庫會(huì)引入一些新的問題,所以數(shù)據(jù)庫是重構(gòu)的一個(gè)主要問題領(lǐng)域。做為一個(gè)具有完整功能的應(yīng)用軟件,實(shí)驗(yàn)系統(tǒng)也不例外,所以在此我們也設(shè)計(jì)了在實(shí)驗(yàn)系統(tǒng)的數(shù)據(jù)庫重構(gòu)時(shí)使用觸發(fā)器。

      4.1.1 理論依據(jù)

      數(shù)據(jù)庫重構(gòu)是對(duì)數(shù)據(jù)庫模式的一個(gè)簡(jiǎn)單變更,在保持其行為語義和信息語義的同時(shí)改進(jìn)它的設(shè)計(jì)。而數(shù)據(jù)庫模式既包括結(jié)構(gòu)的方面,也包括功能的方面。所以數(shù)據(jù)庫重構(gòu)在概念上比代碼重構(gòu)更困難,因?yàn)榇a重構(gòu)只需要保持行為語義;另外,由于數(shù)據(jù)庫架構(gòu)所導(dǎo)致的耦合度,數(shù)據(jù)庫重構(gòu)會(huì)變得更加復(fù)雜。[4]

      尤其是當(dāng)有多個(gè)外部程序與數(shù)據(jù)庫交互時(shí),一些程序可能在你的控制范圍之外。這種情況下,數(shù)據(jù)庫重構(gòu)會(huì)需要一個(gè)比較長(zhǎng)的轉(zhuǎn)換期,在這個(gè)期間,不可能依靠一個(gè)應(yīng)用同時(shí)更新兩個(gè)模式中的表(新、舊模式中的同一個(gè)表),所以需要一種像觸發(fā)器這樣的機(jī)制來保持它們的值同步,以確保不論應(yīng)用訪問哪一個(gè)版本的模式,都能訪問到一致的數(shù)據(jù)。在轉(zhuǎn)換期之后,需要?jiǎng)h除重構(gòu)前的舊值(列/表)和觸發(fā)器,當(dāng)然,要在足夠的測(cè)試可以確保安全時(shí),才能刪除它們。

      4.1.2 重構(gòu)策略中同步方法對(duì)比分析[4]

      根據(jù)經(jīng)驗(yàn),在數(shù)據(jù)庫重構(gòu)策略中,觸發(fā)器在絕大多數(shù)情況下都是最好的保證新舊模式同步的方法。觸發(fā)器優(yōu)于視圖或批量同步,具體參見表1所示:

      表1 模式同步策略

      4.2 使用觸發(fā)器完成實(shí)時(shí)監(jiān)控

      4.2.1 理論依據(jù)

      目前,已經(jīng)有些商用數(shù)據(jù)庫系統(tǒng)加入了主動(dòng)機(jī)制,即能主動(dòng)地向用戶提供服務(wù),通常稱其為主動(dòng)數(shù)據(jù)庫。它是數(shù)據(jù)庫與人工智能技術(shù)相結(jié)合的產(chǎn)物,它可以根據(jù)應(yīng)用系統(tǒng)的當(dāng)前狀況,主動(dòng)適時(shí)地做出反應(yīng),執(zhí)行某些操作向用戶提供相關(guān)信息[1]。主動(dòng)數(shù)據(jù)庫的核心是規(guī)則的概念,而這些規(guī)則的初級(jí)模型就是觸發(fā)器,當(dāng)然,主動(dòng)規(guī)則絕不是觸發(fā)器設(shè)計(jì)與使用的簡(jiǎn)單堆砌。

      主動(dòng)規(guī)則由事件、條件、動(dòng)作組成,記為ECA。規(guī)則的基本動(dòng)作方式是,一旦系統(tǒng)檢測(cè)到相應(yīng)規(guī)則事件發(fā)生,就在特定時(shí)刻檢查規(guī)則的條件,若條件滿足,則執(zhí)行相應(yīng)的動(dòng)作。[3,6]

      4.2.2 實(shí)驗(yàn)有效期監(jiān)控

      在實(shí)驗(yàn)系統(tǒng)的實(shí)驗(yàn)管理功能中,我們要求按每個(gè)實(shí)驗(yàn)的有效期來設(shè)置權(quán)限。即當(dāng)一個(gè)實(shí)驗(yàn)布置給學(xué)生后的一定時(shí)間內(nèi),要求學(xué)生完成實(shí)驗(yàn)并提交實(shí)驗(yàn)總結(jié),一旦過了這個(gè)時(shí)間期限,就將此實(shí)驗(yàn)的學(xué)生用戶權(quán)限修改為只讀(我們這里采用取消學(xué)生所做提交操作)。

      通常這個(gè)功能由DBA來定期手工完成,哪怕他只是調(diào)用存儲(chǔ)過程。但如果將這個(gè)操作交由主動(dòng)規(guī)則來做,情況就不同了:即我們對(duì)實(shí)驗(yàn)加一個(gè)計(jì)時(shí)器,用來累計(jì)實(shí)驗(yàn)布置的天數(shù),實(shí)驗(yàn)被學(xué)生使用時(shí)主動(dòng)規(guī)則被觸發(fā),如果這個(gè)天數(shù)離規(guī)定期限還有2天,提醒學(xué)生,如果達(dá)到期限,則執(zhí)行規(guī)則定義的動(dòng)作——取消學(xué)生的上傳實(shí)驗(yàn)總結(jié)操作。

      另外,與提醒學(xué)生實(shí)驗(yàn)有效期一樣,也可以設(shè)計(jì)一個(gè)規(guī)則用來監(jiān)控學(xué)生實(shí)驗(yàn)成績(jī),即設(shè)定一個(gè)閥值,如果學(xué)生的成績(jī)低于這個(gè)閥值,便會(huì)向教師發(fā)出警示信息。

      5 結(jié)語

      在數(shù)據(jù)庫觸發(fā)器機(jī)制的基本應(yīng)用中,觸發(fā)器的作用通常主要是用于實(shí)現(xiàn)數(shù)據(jù)完整性,觸發(fā)器比約束更加靈活,可以實(shí)現(xiàn)復(fù)雜的數(shù)據(jù)完整性,另外觸發(fā)器還可以實(shí)現(xiàn)審核更改等更多的功能。僅就實(shí)現(xiàn)數(shù)據(jù)完整性方面,應(yīng)綜合考慮功能和性能開銷來決定使用何種數(shù)據(jù)完整性的方法。約束比較簡(jiǎn)單,開銷低,適用于完整性邏輯比較簡(jiǎn)單的場(chǎng)合。觸發(fā)器執(zhí)行速度快,所引用的表和所影響的行的數(shù)目決定了觸發(fā)器的執(zhí)行時(shí)間,觸發(fā)器的系統(tǒng)開銷很大,在使用觸發(fā)器之前應(yīng)該首先考慮使用約束。[1]

      慎用級(jí)聯(lián)更新觸發(fā)器機(jī)制,要注意其潛伏著的復(fù)雜問題,因?yàn)檫^長(zhǎng)的更新鏈可能降低系統(tǒng)速度,更復(fù)雜的問題是這個(gè)鏈構(gòu)成的自身循環(huán)。SQL標(biāo)準(zhǔn)禁止觸發(fā)器循環(huán),即系統(tǒng)會(huì)監(jiān)視整個(gè)更新鏈,如果遇到循環(huán),取消修改并發(fā)出警告。盡管如此,設(shè)計(jì)者仍然需要避免問題發(fā)生,因?yàn)椴还苓@類循環(huán)收斂還是發(fā)散,都會(huì)消耗大量資源。使用觸發(fā)器實(shí)現(xiàn)數(shù)據(jù)庫重構(gòu)的模式同步,以及實(shí)驗(yàn)有效期的實(shí)時(shí)監(jiān)控等應(yīng)用,為區(qū)別于觸發(fā)器的直接基本應(yīng)用,本文將它們歸結(jié)為潛在應(yīng)用。也因?yàn)檫@些應(yīng)用的完成相對(duì)比較復(fù)雜,更多的涉及到數(shù)據(jù)庫架構(gòu)耦合度、主動(dòng)規(guī)則終止性分析等復(fù)雜問題的研究,究其實(shí)質(zhì),這些問題主要癥結(jié)也是源于觸發(fā)器循環(huán)的問題。至于更多的觸發(fā)器潛在應(yīng)用,比如基于語義分析的查詢優(yōu)化等,希望在接下來的觸發(fā)器機(jī)制應(yīng)用中有更深入的研究。

      [參考文獻(xiàn)]

      [1] 周志逵,郭貴鎖.數(shù)據(jù)庫系統(tǒng)原理[M].北京: 人民郵電出版社, 2008: 148-157, 295-303 , 391-395.

      [2] Ramez Elmasri , Shamkant B. Navathe.數(shù)據(jù)庫系統(tǒng)基礎(chǔ):初級(jí)篇[M].北京: 清華大學(xué)出版社, 2008: 186-187.

      [3] Ramez Elmasri , Shamkant B. Navathe.數(shù)據(jù)庫系統(tǒng)基礎(chǔ):高級(jí)篇[M].北京: 清華大學(xué)出版社, 2008: 145-152.

      [4] Scott W. Ambler , Pramod J. Sadalage[M].數(shù)據(jù)庫重構(gòu). 北京: 機(jī)械工業(yè)出版社, 2007: 10-27 , 39-40 .

      [5] Gerald V. Post.數(shù)據(jù)庫管理系統(tǒng)[M]. 北京: 機(jī)械工業(yè)出版社, 2006: 228-232 .

      [6] 郝忠孝.主動(dòng)數(shù)據(jù)庫系統(tǒng)理論基礎(chǔ)[M]. 北京: 科學(xué)出版社, 2009: 2-18.

      猜你喜歡
      觸發(fā)器級(jí)聯(lián)備份
      “備份”25年:鄧清明圓夢(mèng)
      主從JK觸發(fā)器邏輯功能分析
      電子世界(2017年22期)2017-12-02 03:03:45
      使用觸發(fā)器,強(qiáng)化安全性
      級(jí)聯(lián)LDPC碼的STBC-OFDM系統(tǒng)
      電子制作(2016年15期)2017-01-15 13:39:09
      基于級(jí)聯(lián)MUSIC的面陣中的二維DOA估計(jì)算法
      淺析數(shù)據(jù)的備份策略
      科技視界(2015年6期)2015-08-15 00:54:11
      LCL濾波器在6kV級(jí)聯(lián)STATCOM中的應(yīng)用
      H橋級(jí)聯(lián)型STATCOM的控制策略研究
      出版原圖數(shù)據(jù)庫遷移與備份恢復(fù)
      對(duì)觸發(fā)器邏輯功能轉(zhuǎn)換的分析
      开封市| 乌拉特中旗| 陵川县| 英吉沙县| 云龙县| 铜川市| 云林县| 阿城市| 乌拉特前旗| 马公市| 深水埗区| 庆阳市| 保定市| 明光市| 江永县| 泾阳县| 南郑县| 嘉黎县| 郴州市| 香格里拉县| 色达县| 横峰县| 栖霞市| 绥芬河市| 专栏| 耿马| 陵水| 曲周县| 金秀| 罗甸县| 冷水江市| 开远市| 昌图县| 寿阳县| 巴里| 丹巴县| 周宁县| 武威市| 东安县| 临桂县| 句容市|