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

觸發器在數據庫設計中的應用

2016-05-11 11:01:15陳舒心
廣東教育·職教版 2016年4期
關鍵詞:數據庫

摘要:觸發器是一種特殊的存儲過程。它的執行不是通過顯性的調用,而是通過對相應表格數據實現插入、更新或刪除時自動激活執行。在程序開發過程中,可以通過觸發器對程序后臺數據實施復雜的完整性約束。本文以本校示范校建設專題網站管理后臺設計為例,闡述觸發器的概念及其在網站功能實現中的定義及應用。

關鍵詞:觸發器;SQLSERVER;數據庫

中圖分類號:G712文獻標識碼:A文章編號:1005-1422(2016)04-0110-03

作者簡介:陳舒心(1978-),廣東省輕工職業技術學校講師,碩士。研究方向:現代教育技術。(廣東 廣州/510300)

一、引言

隨著網絡技術的發展,網站瀏覽成為我們生活中不可或缺的一部分。一個制作精良的網站,除了要有精美的前臺頁面,必然也離不開后臺數據的處理。在復雜的數據處理過程中,保證網站數據的完整性尤為重要。數據完整性是指存儲在數據庫中的數據正確無誤并且相關數據具有一致性。通常在數據庫設計階段,可以通過創建表格的約束來實現數據完整性。譬如:通過主鍵約束或唯一鍵約束可以規范表格中某一字段的值不可重復;通過檢查約束可以規范表格中某一字段的取值范圍。但這些約束對不符合條件的數據只能做出單一拒絕執行的動作。如果需要實現較為復雜反饋或操作時,這些約束還是存在一定的局限性的。如果要求處理數據過程中,系統能自動根據用戶對表格的操作做出不同的響應執行某些操作,那么,就可以使用觸發器去實現。

二、觸發器

觸發器是一種特殊的存儲過程,但它不像存儲過程能直接通過函數名被調用。當受觸發器保護的數據受到某些操作影響時,觸發器會被數據庫系統激活執行。因此,從激活操作的角度,觸發器可分以下三種類型:插入觸發器、更新觸發器和刪除觸發器。無論是哪種操作,由于觸發執行的時機不同,SQLServer提供了兩種前綴類型不同的觸發器定義:After觸發器和Instead of觸發器。

After觸發器要求只執行插入、更新、刪除中任一操作之后激活觸發器執行。而Instead of觸發器的激活時機剛好相反,它是在執行插入、更新、刪除中任一操作之前就被激活。因此,在執行Instead of觸發器時,系統所做的相關操作都是未被執行的。在SQLServer中,After觸發器是默認觸發器。

在每一個觸發器被激活時,數據庫系統都會自動創建兩張數據表:Inserted表和Delete表。它們只保存在內存中,并不真實存在于數據庫表對象中。兩張表的結構與觸發器作用的表格的結構相同。Instead表中存放的是系統執行INSERT 和UPDATE 語句時被影響的數據行的副本。在一個插入或更新事務處理中, 新添加的行會同時被添加到Inserted 表和觸發器作用的數據表中。Deleted 表用于存儲系統執行DELETE 和UPDATE 語句時被影響的數據行的副本。在執行DELETE或UPDATE 語句時,相關數據行從數據表中刪除,同時被傳送到Deleted 表中。Deleted 表和觸發器作用的數據表一般不會出現內容完全相同的數據行。當觸發器執行成功,數據操作語句執行完成后,整個事務過程才算完成。否則,這個事務要回滾。因此,觸發器定義的條件不能與表格中已經定義的完整性約束相矛盾。當觸發器完成后,Inserted表和Delete表會自動刪除。

三、應用實例——基于T-SQL語言的觸發器的設計

本校在示范校建設過程中,需要搭建示范校建設專題網站用以發布示范校項目建設過程的動態信息、通知公告及工作簡報。同時展示項目建設的方案、資源、成果等。網站后臺的主體功能是進行新聞信息與用戶信息的管理。數據后臺分別設計了數據表Admin(用戶信息表)、News_operation(新聞操作日志)、News(新聞發布信息表)、News_Class(新聞類別表)、News_Picture(新聞圖片信息表)等表格,用以存儲網站上相關數據。

由于文章篇幅問題,不能將整個網站數據后臺所做設計一一闡述,因此,在下文中以其中的三張有關聯的數據表Admin、News、News_operation為例,闡述選擇觸發器實現完整性約束的原因及設計過程。具體表格結構如表1、表2、表3所示。

三張數據表間的關聯如下:

1.Admin表與News表

在網站上的新聞公告,必須是通過注冊賬號登錄成功后才能發布,發布者的名稱要與登錄的賬號一致。因此,對于Admin表的UserName字段的值和News表的Author字段的值必須一致,這種一致性可以通過定義兩張表格UserName字段和Author字段主外鍵約束實現。其中,UserName字段為主鍵,Admin表為主鍵表;Author字段為外鍵,News表為外鍵表。主外鍵約束條件下,通常可以通過定義相關數據級聯更新和級聯刪除來達到數據完整性。所謂級聯更新和刪除,就是主鍵表中的數據被執行更新或者刪除操作時,與其相關的外鍵表中的對應數據也自動進行更新或者刪除。顯然,在本站中設置Admin表的UserName字段和News表的Author字段級聯更新時合適的。但是如果設置級聯刪除,則會導致某些新聞公告在發布用戶注銷后也被刪除,造成信息的丟失。因此,在主鍵表Admin表執行數據刪除時為保證外鍵表News表中對應數據不丟失的前提下,又可以達到數據的一致性,筆者選擇通過為Admin表設計一個刪除觸發器,在數據執行刪除操作時系統激活,將News表中的Author字段設置為空值。

2.News表與News_operation表

考慮到每個注冊用戶登錄網站后,都可以對數據實行增刪改的操作。為保障數據安全,網站需要跟蹤記錄執行的操作的用戶、操作類型及執行操作的時間。因此,當用戶對News表數據執行操作時,相關執行的信息將會記錄至News_operation表中。通過在表格中設置單純的完整性約束,很難實現此功能。當然也可以考慮借助開發工具,編寫前臺代碼實現。但若通過前臺編碼實現此功能,不僅會增加程序員的工作量,而且每次在執行到編碼時都必須經過編譯,將指令從前臺通過網絡傳輸到后臺,才能達到目的。在這個過程中必然會耗費一定是時間和網絡帶寬。若果通過觸發器去實現,由于觸發器是直接存儲在數據后臺,可以在后臺數據設計階段就設計定義好,因此在此設計觸發器去實現此需求更為合適。

以Admin、News、News_operation為基本表,需要滿足以下要求:①Admin表中用戶信息刪除時,該用戶發布的所有新聞公告的發布人Author字段置為空值(Null);②用戶對News表數據進行刪除或者修改或者添加時,將用戶對表格操作記錄到Admin_log表中。觸發器實現如下:

1.發布人Author字段置空

create trigger News_delete

on Adimin for delete

as

update News

set Author=Null

FROM News,Deleted

whereNews.ID=Delete.ID

2.記錄用戶對新聞表的操作

create trigger News_operation

on News for insert,update,delete

as

if not exists(select1 from inserted) and exists(select 1 from deleted)

begin /*inserted表無記錄,是刪除操作*/

DECLARE @author NVARCHAR(50)

select @author=f_editer from deleted

insert into admin_log values(@author,'刪除新聞',getdate())

end

else if not exists(select 1 from deleted) and exists(select1from inserted)begin /*是數據添加操作*/

DECLARE @author1 NVARCHAR(50)

select @author1=f_editer from inserted

insert into admin_log values(@author1,'添加新聞',getdate())

end

else if exists(select 1 from deleted) and exists(select 1 from inserted)

begin/*是數據更新操作*/

DECLARE @author2 NVARCHAR(50)

select @author2=f_editer from deleted

insert into admin_log values(@author2,'更新新聞',getdate())

end

以上觸發器的功能均已通過系統測試。

四、結束語

在系統開發過程中,觸發器設計可以保障后臺數據的完整性。當然,上述的功能也可以借助開發工具的前臺代碼實現,但是觸發器所帶來的系統開銷會更加小。觸發器是存儲在本地服務器上的,在執行時可以節省網絡傳輸過程中消耗的時間。而且,觸發器執行過程中如果出現任何情況的錯誤導致操作失敗,之前所做的一切都會恢復,因此它能最大程度的保證數據的完整性。

由此可見,合理地設計觸發器,既可以使數據更安全,又可以減少程序開發人員的勞動量。若能在程序開發中熟練地將觸發器和其他數據對象有機集合,將能大大提高程序執行的效率。

參考文獻:

[1]張峰,張莉莉.觸發器在數據處理過程中的應用研究[J].計算機工程與科學,2008(5):156-158.

[2]胡鶴年.SQL Server觸發器在數據庫設計中的應用[J].數據庫與信息管理,2012(8):37-38.

[3]劉春蕾.觸發器在數據庫編程中的應用[J].電腦開發與應用,2014(4):56-58.

[4]彭嬌.觸發器在Oracle數據庫中的應用研究[J].軟件導刊,2015(6):151-152.

責任編輯 何麗華

猜你喜歡
數據庫
數據庫
財經(2017年15期)2017-07-03 22:40:49
數據庫
財經(2017年2期)2017-03-10 14:35:35
兩種新的非確定數據庫上的Top-K查詢
數據庫
財經(2016年15期)2016-06-03 07:38:02
數據庫
財經(2016年3期)2016-03-07 07:44:46
數據庫
財經(2016年6期)2016-02-24 07:41:51
數據庫
財經(2015年3期)2015-06-09 17:41:31
數據庫
財經(2014年21期)2014-08-18 01:50:18
數據庫
財經(2014年6期)2014-03-12 08:28:19
數據庫
財經(2013年6期)2013-04-29 17:59:30
主站蜘蛛池模板: 91香蕉国产亚洲一二三区 | 国产区91| 99热这里只有成人精品国产| 久久6免费视频| 国产精品视频公开费视频| 美女无遮挡被啪啪到高潮免费| 色视频国产| 亚洲第一香蕉视频| 国产视频a| 国产香蕉97碰碰视频VA碰碰看| AV无码无在线观看免费| 永久免费无码日韩视频| 精品久久久久久成人AV| 国产一区在线视频观看| 国产精品国产三级国产专业不 | 在线看国产精品| AV网站中文| 伦精品一区二区三区视频| 国产毛片基地| 亚洲中久无码永久在线观看软件 | 丝袜国产一区| 亚洲欧美不卡| 亚洲视频在线青青| 国产女人18毛片水真多1| 91无码人妻精品一区| 亚洲一级毛片免费观看| 亚洲无码91视频| 熟妇丰满人妻av无码区| 在线欧美a| 国产杨幂丝袜av在线播放| 亚洲欧洲日韩综合色天使| 久视频免费精品6| 久热re国产手机在线观看| 精品少妇人妻一区二区| 国产性精品| 激情无码字幕综合| 国产95在线 | 夜夜爽免费视频| 国产99免费视频| 国产成人精品视频一区视频二区| 国产视频你懂得| 亚洲第一黄色网| 在线亚洲精品福利网址导航| 亚洲av日韩综合一区尤物| 亚洲国产精品一区二区第一页免 | 国产精品所毛片视频| 第一页亚洲| 久久免费精品琪琪| 成人亚洲天堂| 97在线国产视频| 88av在线| 国产一级妓女av网站| 特级aaaaaaaaa毛片免费视频| 99热亚洲精品6码| 亚洲成人77777| 国产欧美视频一区二区三区| 亚洲无码免费黄色网址| 国产精品片在线观看手机版| 欧美中出一区二区| 999国内精品视频免费| 日本手机在线视频| 97超爽成人免费视频在线播放| 国产成人AV综合久久| 一级爆乳无码av| 67194成是人免费无码| 91久久偷偷做嫩草影院| 国产精品视频白浆免费视频| 精品国产一区91在线| 午夜精品福利影院| 亚洲男人天堂久久| 无码专区国产精品第一页| 久久国产拍爱| 国产迷奸在线看| 国产欧美日韩资源在线观看| 国产精品99久久久久久董美香| 国产成人三级| 色婷婷在线影院| 天堂成人在线| 久久国产乱子伦视频无卡顿| 免费国产在线精品一区 | 亚洲人成在线免费观看| 国产对白刺激真实精品91|