陳紅艷
摘要:該文主要介紹了 Microsoft SQLServer2008 數(shù)據(jù)庫(kù)系統(tǒng)中的觸發(fā)器的應(yīng)用,著重闡述了觸發(fā)器的作用、分類、編寫、測(cè)試并給出了實(shí)例。
關(guān)鍵詞:SQL Server 2008 ;數(shù)據(jù)庫(kù);觸發(fā)器;insert;update
中圖分類號(hào):TP393 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2018)22-0001-02
1 引言
隨著現(xiàn)代網(wǎng)絡(luò)信息技術(shù)的發(fā)展和快捷酒店的興起,信息化管理酒店方式的也發(fā)生了深刻而具體的變革,如何快速、準(zhǔn)確、高校的完成日益繁雜的業(yè)務(wù)?因此酒店管理系統(tǒng)已成為眾多酒店的必然選擇。在酒店管理系統(tǒng)中客房、顧客、酒店收費(fèi)項(xiàng)目是最重要的基礎(chǔ)數(shù)據(jù),貫穿顧客注冊(cè)、入住、消費(fèi)、退房等各個(gè)管理過(guò)程,幾乎與酒店管理系統(tǒng)中所有子系統(tǒng)存在密切的關(guān)聯(lián) 。
盡管目前使用的酒店管理系統(tǒng)能很好地實(shí)現(xiàn)日常最基本的入住管理功能,但由于系統(tǒng)設(shè)計(jì)上的缺陷,導(dǎo)致在維護(hù)數(shù)據(jù)庫(kù)完整性方面存在困難.比如現(xiàn)行系統(tǒng)中顧客的賬戶余額與消費(fèi)項(xiàng)目消費(fèi)是獨(dú)立的,導(dǎo)致可能會(huì)有顧客余額不足卻也成功消費(fèi)了其他娛樂(lè)項(xiàng)目。這就導(dǎo)致了酒店的損失,如何很好地解決這類數(shù)據(jù)完整性約束問(wèn)題,作為酒店管理系統(tǒng)必須避免類似數(shù)據(jù)不一致情況的發(fā)生。在此提出采用觸發(fā)器技術(shù)來(lái)解決這類數(shù)據(jù)完整性問(wèn)題
2認(rèn)識(shí)觸發(fā)器
2.1 觸發(fā)器的定義
Microsoft SQL Server 提供兩種主要機(jī)制來(lái)強(qiáng)制使用業(yè)務(wù)規(guī)則和數(shù)據(jù)完整性:約束和觸發(fā)器[1]。觸發(fā)器為特殊類型的存儲(chǔ)過(guò)程,可在執(zhí)行語(yǔ)言事件時(shí)自動(dòng)生效。SQL Server 包括三種常規(guī)類型的觸發(fā)器:DML 觸發(fā)器、DDL 觸發(fā)器和登錄觸發(fā)器[2]觸發(fā)器就是一種特殊的存儲(chǔ)過(guò)程,它是在系統(tǒng)執(zhí)行某些特定的T-SQL語(yǔ)句時(shí)自動(dòng)執(zhí)行的。一般觸發(fā)器可分為語(yǔ)句觸發(fā)器和對(duì)象觸發(fā)器。當(dāng)執(zhí)行DML語(yǔ)句操作時(shí)成功時(shí)觸發(fā)器生效的觸發(fā)器稱之為語(yǔ)句觸發(fā)器。在SQLServer2008中,當(dāng)用戶對(duì)數(shù)據(jù)庫(kù)(表)進(jìn)行Create、Alter和Drop操作時(shí),系統(tǒng)也會(huì)激活相應(yīng)的觸發(fā)器,這類觸發(fā)器稱之為DDL觸發(fā)器(對(duì)象觸發(fā)器)任何事物都不是盡善盡美的,觸發(fā)器也不例外,由于觸發(fā)器需要大量的代碼來(lái)實(shí)現(xiàn),因此運(yùn)行觸發(fā)器也會(huì)花費(fèi)大量的時(shí)間,有時(shí)會(huì)影響到系統(tǒng)的運(yùn)行速度。
2.2 準(zhǔn)確設(shè)計(jì)觸發(fā)器
一般地,設(shè)計(jì)觸發(fā)器的過(guò)程包括用戶需求分析、確定觸發(fā)器的邏輯結(jié)構(gòu)、編寫觸發(fā)器代碼和測(cè)試觸發(fā)器[3] ,下面結(jié)合具體實(shí)例,介紹設(shè)計(jì)觸發(fā)器的一般步驟,最后,提供了該例子進(jìn)一步完善的方法。
2.2.1客戶需求
酒店管理系統(tǒng)中有顧客表(guest),記錄著顧客的基本信息以及賬戶上的余額,另外有娛樂(lè)消費(fèi)表,記錄顧客消費(fèi)明顯,當(dāng)顧客消費(fèi)后,其賬戶金額必然要減少。
Guest表模式(gno,gname,gsex,gid,gtel,account,balance)
Roomstate表模式(rno,gno,atime,rtime,ltime,intoprice,days,flag)
2.2.2 確定觸發(fā)器的邏輯結(jié)構(gòu)
觸發(fā)器由觸發(fā)名、觸發(fā)對(duì)象、觸發(fā)事件和觸發(fā)主體四部分組成。確定觸發(fā)器的邏輯結(jié)構(gòu),就是確定觸發(fā)器名稱、觸發(fā)對(duì)象、觸發(fā)事件和觸發(fā)主體。一般情況,觸發(fā)名做到見(jiàn)其名知其義,接著確定觸發(fā)器的對(duì)象,通過(guò)分析我們發(fā)現(xiàn)是入住時(shí),客房狀態(tài)改為1,所以觸發(fā)對(duì)象是ROOMSTAE表;觸發(fā)事件是成功的入住了,也就是當(dāng) ROOMSTATE表中insert了一條數(shù)據(jù)時(shí),所以觸發(fā)事件是insert;當(dāng)退房時(shí),結(jié)算反復(fù)房費(fèi),客房狀態(tài)改為0,最后確定觸發(fā)器主體做什么?
2.2.3編寫觸發(fā)器代碼
2.2.4 測(cè)試觸發(fā)器
觸發(fā)器創(chuàng)建之后,在正式使用之前,應(yīng)該對(duì)觸發(fā)器進(jìn)行測(cè)試。測(cè)試的目的是保證建立了正確的觸發(fā)器,能夠正常工作。首先測(cè)試插入數(shù)據(jù)的操作。下面是一組插入數(shù)據(jù)的例子,把這些數(shù)據(jù)插入到ROOMSTAE 表中。這些數(shù)據(jù)插入之后,會(huì)觸發(fā) tri_update觸發(fā)器的執(zhí)行。
3 結(jié)束語(yǔ)
本文重點(diǎn)以酒店管理系統(tǒng)為基礎(chǔ),闡述了DML觸發(fā)器的創(chuàng)建思路及語(yǔ)法格式。將 INSERT、DELETE 和 UP-DATE 三個(gè)觸發(fā)器合并到一起,提高了系統(tǒng)性能。
參考文獻(xiàn):
[1] 張峰,張莉莉.觸發(fā)器在數(shù)據(jù)處理過(guò)程中的應(yīng)用研究[J].計(jì)算機(jī)工程與科學(xué),2008,30(5):156-158.
[2] 鐘亞妹.觸發(fā)器在 SQL Server 數(shù)據(jù)庫(kù)開(kāi)發(fā)中的應(yīng)用與研究[J].電腦知識(shí)與技術(shù),2011,7(11):2492-2494.
[3] Wu Dasheng,Wu Shengyu. Dynamically maintain the teaching examples of triggers and stored procedures about the course ofdatabase application[C]//2010 2nd International Conferenceon Education Technology and Computer (ICETC).[s.l.]:[s.n.],2010:525-527.
[4] 馬俊,袁暋.SQL Server 2012數(shù)據(jù)庫(kù)管理與開(kāi)發(fā)(慕課版)[M].人民郵電出版社, 2016.
[5] 劉俊強(qiáng).SQL Server 2008入門與提高(配光盤)(軟件入門與提高叢書)[M].清華大學(xué)出版社,2014.
【通聯(lián)編輯:光文玲】