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