999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

觸發器在實驗管理系統中的設計與應用

2010-09-25 12:48:36蔡朝暉
大慶師范學院學報 2010年6期
關鍵詞:規則數據庫實驗

蔡朝暉,劉 春

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

0 引言

本文中提到的實驗管理系統(以下簡稱為實驗系統),是作者在研項目《軟件工程專業理論課程實驗管理網絡化研究與實現》中實驗管理系統應用軟件的設計開發和實現部分。

在實驗系統的設計和實現過程中,應用DML觸發器完成了數據參照完整性實現以及自動更新等功能的實現。完成本文的主要目的:研究、分析、總結應用觸發器機制的優勢及使用注意事項;同時研究分析了數據庫系統中觸發器機制的潛在應用。

1 關于觸發器

1.1 什么是觸發器

觸發器是數據庫服務器中發生事件時自動執行的特殊存儲過程。它與存儲過程經歷的過程類似,但不同的是觸發器沒有接口,不能被顯示調用,只有當某一事件發生時由數據庫服務自動執行[1],而我們主要用到的正是它自動執行的優勢特性。

1.2 DML觸發器

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

1.3 觸發器的使用原則[1]

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

2 實驗系統中由觸發器實現的功能分析

2.1 導入新實驗用戶信息至登錄表中

每個新學期開學時都應導入新的實驗用戶數據至實驗系統中,這些導入的數據主要是本學期上課學生及任課教師的相關數據,這些數據要同時存儲到學生實驗成績管理表和系統用戶登錄表中。

我們希望在DBA將學生數據信息導入至實驗成績管理表中時,同時實現關于學生用戶的信息導入至系統用戶登錄表中。因為每學期參與完成實驗的學生必定是系統用戶,而學生信息數據相對于教師信息數據的錄入工作量至少是幾百倍。

2.2備份已完成實驗評分的學生實驗信息

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

2.3 級聯刪除

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

3 觸發器的設計與實現

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

1)級聯插入功能觸發器

create trigger tri_stu_insert

on 學生表

for insert

begin

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

end

//代碼說明:其中用到的字段名sno、sname分別為學生學號和學生姓名,登錄表中學生用戶初始密碼默認為“000000”。

2)自動備份功能觸發器

create trigger tri_stug_update

on 學生成績表

for update

begin

if exists

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

update備份_學生成績表 set grade=inserted.grade

else

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

end

//代碼說明:備份_學生成績表為先前創建好的與學生成績表完全同構的成績備份表。

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

//另注:此觸發器的使用權限只授權給教師用戶。

3)級聯刪除功能觸發器

create table 學生成績表

(

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

);

//代碼說明:這里在創建學生成績表時使用了外碼約束,同時直接使用了級聯刪除機制。由于其實質是系統觸發器,所以總結在此。

3.2 設計說明

我們在系統中用到的級聯刪除功能,直接體現了觸發器最常用的功能,即實現數據完整性之參照完整性;對于在實驗系統中用到的自動備份功能觸發器和級聯插入功能觸發器,我們意在使用它的主動功能,提高數據錄入效率。

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

4 觸發器的潛在應用

4.1 數據庫重構中使用觸發器

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

4.1.1 理論依據

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

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

4.1.2 重構策略中同步方法對比分析[4]

根據經驗,在數據庫重構策略中,觸發器在絕大多數情況下都是最好的保證新舊模式同步的方法。觸發器優于視圖或批量同步,具體參見表1所示:

表1 模式同步策略

4.2 使用觸發器完成實時監控

4.2.1 理論依據

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

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

4.2.2 實驗有效期監控

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

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

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

5 結語

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

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

[參考文獻]

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

[2] Ramez Elmasri , Shamkant B. Navathe.數據庫系統基礎:初級篇[M].北京: 清華大學出版社, 2008: 186-187.

[3] Ramez Elmasri , Shamkant B. Navathe.數據庫系統基礎:高級篇[M].北京: 清華大學出版社, 2008: 145-152.

[4] Scott W. Ambler , Pramod J. Sadalage[M].數據庫重構. 北京: 機械工業出版社, 2007: 10-27 , 39-40 .

[5] Gerald V. Post.數據庫管理系統[M]. 北京: 機械工業出版社, 2006: 228-232 .

[6] 郝忠孝.主動數據庫系統理論基礎[M]. 北京: 科學出版社, 2009: 2-18.

猜你喜歡
規則數據庫實驗
記一次有趣的實驗
撐竿跳規則的制定
數獨的規則和演變
做個怪怪長實驗
讓規則不規則
Coco薇(2017年11期)2018-01-03 20:59:57
數據庫
財經(2017年2期)2017-03-10 14:35:35
TPP反腐敗規則對我國的啟示
NO與NO2相互轉化實驗的改進
實踐十號上的19項實驗
太空探索(2016年5期)2016-07-12 15:17:55
數據庫
財經(2016年15期)2016-06-03 07:38:02
主站蜘蛛池模板: 亚洲a级毛片| 亚洲人成在线免费观看| 日韩激情成人| 综合人妻久久一区二区精品 | AV片亚洲国产男人的天堂| 综合网天天| 亚洲天堂成人| 亚洲精品老司机| 久久中文字幕2021精品| 国产凹凸一区在线观看视频| 久久精品人妻中文视频| 手机精品视频在线观看免费| 亚洲精品在线观看91| 无码免费的亚洲视频| 毛片在线看网站| 成人日韩视频| 黄色片中文字幕| 午夜小视频在线| 欧美成在线视频| 亚洲人成网站色7777| 88av在线| 亚洲精品无码av中文字幕| 国产精品综合色区在线观看| 在线中文字幕网| 一级毛片高清| 国产精品一区二区国产主播| 91色在线观看| 国产视频欧美| 亚洲AV无码一区二区三区牲色| 天天爽免费视频| 久久久久国产一区二区| 又大又硬又爽免费视频| 2048国产精品原创综合在线| 国产欧美在线观看一区| 国产精品专区第1页| 狼友av永久网站免费观看| 日韩少妇激情一区二区| 亚洲色图欧美| 尤物在线观看乱码| 四虎影视8848永久精品| 国产尹人香蕉综合在线电影| 国产99久久亚洲综合精品西瓜tv| 国产三级精品三级在线观看| 狠狠干综合| 免费在线a视频| 无码有码中文字幕| 国产成人无码综合亚洲日韩不卡| 欧美精品1区| 亚洲a级在线观看| 四虎综合网| 麻豆AV网站免费进入| 99视频精品在线观看| 国产高清自拍视频| 亚洲第一在线播放| 色综合日本| 永久免费无码成人网站| 亚洲精品国产日韩无码AV永久免费网| 日韩最新中文字幕| 国产av无码日韩av无码网站 | 国产在线视频自拍| 99精品热视频这里只有精品7 | a级毛片在线免费| 婷婷综合色| 人人91人人澡人人妻人人爽| 九九热视频精品在线| www.日韩三级| 亚洲无限乱码一二三四区| 在线观看热码亚洲av每日更新| 国产精品久久久久鬼色| 国产综合日韩另类一区二区| 91美女视频在线观看| 天堂成人av| 免费又爽又刺激高潮网址| 九九九精品视频| 九色综合视频网| 欧美丝袜高跟鞋一区二区| 老色鬼久久亚洲AV综合| 91视频日本| 日韩精品无码不卡无码| 国产精品片在线观看手机版 | AV老司机AV天堂| 免费a级毛片视频|