国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

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

2010-09-25 12:48:36蔡朝暉
大慶師范學(xué)院學(xué)報 2010年6期
關(guān)鍵詞:觸發(fā)器級聯(lián)備份

蔡朝暉,劉 春

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

0 引言

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

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

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

1.1 什么是觸發(fā)器

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

1.2 DML觸發(fā)器

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

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

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

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

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

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

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

2.2備份已完成實驗評分的學(xué)生實驗信息

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

2.3 級聯(lián)刪除

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

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

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

1)級聯(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é)號和學(xué)生姓名,登錄表中學(xué)生用戶初始密碼默認(rèn)為“000000”。

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

create trigger tri_stug_update

on 學(xué)生成績表

for update

begin

if exists

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

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

else

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

end

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

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

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

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

create table 學(xué)生成績表

(

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é)生成績表時使用了外碼約束,同時直接使用了級聯(lián)刪除機制。由于其實質(zhì)是系統(tǒng)觸發(fā)器,所以總結(jié)在此。

3.2 設(shè)計說明

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

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

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

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

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

4.1.1 理論依據(jù)

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

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

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

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

表1 模式同步策略

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

4.2.1 理論依據(jù)

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

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

4.2.2 實驗有效期監(jiān)控

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

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

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

5 結(jié)語

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

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

[參考文獻]

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

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

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

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

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

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

猜你喜歡
觸發(fā)器級聯(lián)備份
“備份”25年:鄧清明圓夢
主從JK觸發(fā)器邏輯功能分析
電子世界(2017年22期)2017-12-02 03:03:45
使用觸發(fā)器,強化安全性
級聯(lián)LDPC碼的STBC-OFDM系統(tǒng)
電子制作(2016年15期)2017-01-15 13:39:09
基于級聯(lián)MUSIC的面陣中的二維DOA估計算法
淺析數(shù)據(jù)的備份策略
科技視界(2015年6期)2015-08-15 00:54:11
LCL濾波器在6kV級聯(lián)STATCOM中的應(yīng)用
電測與儀表(2014年1期)2014-04-04 12:00:34
H橋級聯(lián)型STATCOM的控制策略研究
電測與儀表(2014年1期)2014-04-04 12:00:28
出版原圖數(shù)據(jù)庫遷移與備份恢復(fù)
對觸發(fā)器邏輯功能轉(zhuǎn)換的分析
厦门市| 上蔡县| 荆州市| 西丰县| 迭部县| 涟源市| 子洲县| 江阴市| 深圳市| 米易县| 扎囊县| 墨江| 天祝| 迁安市| 阜康市| 石景山区| 金平| 边坝县| 丰都县| 大关县| 江门市| 缙云县| 南木林县| 连城县| 军事| 临澧县| 灯塔市| 新兴县| 吕梁市| 汝阳县| 长宁县| 南开区| 凤凰县| 西畴县| 博野县| 瑞安市| 江山市| 临颍县| 临江市| 达拉特旗| 刚察县|