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

?

數(shù)據(jù)庫(kù)觸發(fā)器技術(shù)在Web軟件中的應(yīng)用

2011-05-17 09:08:54魏權(quán)利李麗萍
關(guān)鍵詞:卡號(hào)會(huì)員卡觸發(fā)器

魏權(quán)利,李麗萍

(青島科技大學(xué) 信息學(xué)院,山東 青島 266061)

隨著Internet技術(shù)的迅速發(fā)展和信息共享需求的不斷提高,數(shù)據(jù)庫(kù)技術(shù)和Web技術(shù)的結(jié)合日趨緊密,在使用瀏覽器/服務(wù)器結(jié)構(gòu)的網(wǎng)絡(luò)應(yīng)用軟件開(kāi)發(fā)時(shí),充分利用觸發(fā)器等數(shù)據(jù)庫(kù)技術(shù),可以避免在網(wǎng)絡(luò)上傳輸大量的無(wú)用信息,極大地提高系統(tǒng)工作效率。本文重點(diǎn)介紹了在健身房會(huì)員管理Web應(yīng)用軟件中,觸發(fā)器技術(shù)的實(shí)際應(yīng)用。

1 觸發(fā)器的工作原理

1.1 觸發(fā)器的功能

觸發(fā)器是存儲(chǔ)在數(shù)據(jù)庫(kù)中的獨(dú)立對(duì)象,是現(xiàn)代數(shù)據(jù)庫(kù)管理系統(tǒng)中,用于響應(yīng)數(shù)據(jù)變化的一種機(jī)制,是實(shí)現(xiàn)數(shù)據(jù)維護(hù)規(guī)則的有效機(jī)制。它是一種實(shí)施復(fù)雜的完整性約束的特殊存儲(chǔ)過(guò)程,是經(jīng)過(guò)預(yù)編譯的SQL語(yǔ)句的集合[1]。當(dāng)對(duì)它所保護(hù)的數(shù)據(jù)進(jìn)行操作(包括插入、刪除、更新)時(shí)可自動(dòng)激活,防止對(duì)數(shù)據(jù)進(jìn)行不正確的、未授權(quán)的或不一致的更改。在Web應(yīng)用程序中使用觸發(fā)器技術(shù),使相應(yīng)的數(shù)據(jù)處理工作在數(shù)據(jù)庫(kù)服務(wù)器上完成。這可充分發(fā)揮數(shù)據(jù)庫(kù)服務(wù)器的功能,減少網(wǎng)絡(luò)上的堵塞,提高系統(tǒng)的運(yùn)行效率。

1.2 觸發(fā)器的工作原理

在設(shè)計(jì)數(shù)據(jù)庫(kù)觸發(fā)器時(shí),需要定義點(diǎn)火觸發(fā)器的數(shù)據(jù)表,并且運(yùn)行時(shí)數(shù)據(jù)庫(kù)服務(wù)器還要為每個(gè)觸發(fā)器創(chuàng)建兩個(gè)臨時(shí)的專(zhuān)用邏輯表:inserted表和deleted表。這兩張臨時(shí)表由系統(tǒng)維護(hù),用戶不能直接對(duì)其進(jìn)行操作,存放在服務(wù)器的內(nèi)存中。臨時(shí)表的數(shù)據(jù)結(jié)構(gòu)與點(diǎn)火觸發(fā)器數(shù)據(jù)表的數(shù)據(jù)結(jié)構(gòu)相同。當(dāng)用戶對(duì)指定的數(shù)據(jù)表進(jìn)行操作時(shí),DBMS將自動(dòng)執(zhí)行在相應(yīng)觸發(fā)器中的SQL語(yǔ)句。觸發(fā)器完成本次觸發(fā)任務(wù)后,這兩張臨時(shí)表即被刪除[2]。

inserted表由于存放的是執(zhí)行insert或update語(yǔ)句,需要而向該觸發(fā)器作用的數(shù)據(jù)表(也可以是點(diǎn)火觸發(fā)器的數(shù)據(jù)表)中插入所有新行。在執(zhí)行插入或更新數(shù)據(jù)表的同時(shí),也將新的行添加到inserted表中。因此,inserted表的內(nèi)容是激活觸發(fā)器的數(shù)據(jù)表中新行的拷貝。

deleted表由于存放的是執(zhí)行delete語(yǔ)句,而要從該觸發(fā)器作用的數(shù)據(jù)表中刪除的所有行。在執(zhí)行刪除操作時(shí),被刪除的行從激活觸發(fā)器的數(shù)據(jù)表中被移動(dòng)到deleted表中。因此deleted表的內(nèi)容和激活觸發(fā)器的數(shù)據(jù)表不會(huì)有相同的行。

1.3 觸發(fā)器的使用

觸發(fā)器也是一個(gè)數(shù)據(jù)庫(kù)對(duì)象,它與三部分的內(nèi)容有關(guān):定義數(shù)據(jù)庫(kù)中用于點(diǎn)火觸發(fā)器的數(shù)據(jù)表(或視圖)、激活觸發(fā)器的數(shù)據(jù)操作語(yǔ)句和觸發(fā)器要采取的動(dòng)作。

觸發(fā)器可以由Transact-SQL語(yǔ)句創(chuàng)建,也可以通過(guò)企業(yè)管理器創(chuàng)建。以Transact-SQL語(yǔ)句創(chuàng)建為例,使用CREATE TRIGGER語(yǔ)句,其語(yǔ)法格式如下:

CREATE TRIGGER trigger_name ON table

FOR[INSERT,UPDATE,DELETE]

ASSql_statement

其中:

trigger_name:給出了觸發(fā)器的名稱(chēng);

Table:定義觸發(fā)器的表(或視圖);

FOR[INSERT,UPDATE,DELETE]:說(shuō)明了激活觸發(fā)器的數(shù)據(jù)操作語(yǔ)句;

Sql_statement:定義了觸發(fā)器要采取的動(dòng)作。

一張表最多可以建立三類(lèi)觸發(fā)器,即插入觸發(fā)器、修改觸發(fā)器和刪除觸發(fā)器。一張表可以允許建立多個(gè)觸發(fā)器,但一個(gè)觸發(fā)器只能作用于一張表上,但一個(gè)觸發(fā)器可以包含很多動(dòng)作,執(zhí)行很多功能。

2 觸發(fā)器技術(shù)在Web程序中的應(yīng)用

在開(kāi)發(fā)健身房會(huì)員管理系統(tǒng)Web應(yīng)用軟件中,采用了觸發(fā)器技術(shù)。會(huì)員的管理通過(guò)會(huì)員卡的方式進(jìn)行,根據(jù)健身房會(huì)員管理軟件的數(shù)據(jù)處理要求,在新會(huì)員卡表、會(huì)員卡表、會(huì)員刷卡明細(xì)表這三張數(shù)據(jù)表上設(shè)計(jì)完成特定功能的插入式觸發(fā)器。

2.1 新卡號(hào)生成觸發(fā)器(addno_trg)

新會(huì)員卡表(Me_NewCard_table)用于管理待銷(xiāo)售的各種類(lèi)型的新會(huì)員卡,管理的數(shù)據(jù)字段包括卡類(lèi)型、銷(xiāo)售方式、數(shù)量、開(kāi)始和結(jié)束卡號(hào)等信息。為了動(dòng)態(tài)生成結(jié)束卡號(hào)和8位數(shù)據(jù)字符的連續(xù)卡號(hào),在該數(shù)據(jù)表上設(shè)計(jì)新卡號(hào)生成觸發(fā)器,功能設(shè)計(jì)思想是根據(jù)新會(huì)員卡表中提供的卡初始號(hào)和所需生成的會(huì)員卡數(shù)量動(dòng)態(tài)生成結(jié)束卡號(hào)。其次,將開(kāi)始和結(jié)束卡號(hào)做為while語(yǔ)句的循環(huán)控制條件動(dòng)態(tài)地生成連續(xù)的卡號(hào)并插入到新會(huì)員卡號(hào)表(Me_NewCard_No_table)中,供會(huì)員卡銷(xiāo)售選號(hào)使用。當(dāng)設(shè)置新會(huì)員卡頁(yè)面進(jìn)行提交將表單數(shù)據(jù)插入數(shù)據(jù)庫(kù)時(shí),該觸發(fā)器點(diǎn)火完成預(yù)定功能。當(dāng)卡的數(shù)量較多時(shí),使用觸發(fā)器技術(shù)便于管理,可有效減少錯(cuò)誤。主要程序段如下:

2.2 會(huì)員卡銷(xiāo)售觸發(fā)器(Sell_trg)

會(huì)員卡表(MemberCard_Table表)用于管理已銷(xiāo)售的各種類(lèi)型的會(huì)員卡,管理的數(shù)據(jù)包括會(huì)員和所購(gòu)會(huì)員卡的信息。其中會(huì)員卡使用有效期字段需在會(huì)員購(gòu)卡時(shí)生成。售卡時(shí),頁(yè)面根據(jù)預(yù)銷(xiāo)售的卡類(lèi)型,從新會(huì)員卡號(hào)表中查詢卡號(hào)數(shù)據(jù)并將結(jié)果綁定在Web服務(wù)器DropList控件上供用戶選擇。為了保證會(huì)員卡信息的一致性和完整性,建立會(huì)員卡銷(xiāo)售觸發(fā)器,設(shè)計(jì)思想是根據(jù)銷(xiāo)售的會(huì)員卡類(lèi)型和銷(xiāo)售日期動(dòng)態(tài)生成卡有效期,并添入會(huì)員卡表的有效期字段中。在觸發(fā)器定義的SQL語(yǔ)句中,根據(jù)所銷(xiāo)售的會(huì)員卡類(lèi)型使用DATEADD函數(shù),生成卡有效期。若是年卡,則在當(dāng)前銷(xiāo)售時(shí)間上加一年;若是半年卡,則在銷(xiāo)售時(shí)間上加六個(gè)月;季卡、月卡同理。其次,從新會(huì)員卡設(shè)置表中刪除所銷(xiāo)售的相關(guān)會(huì)員卡卡號(hào),以此保證卡號(hào)數(shù)據(jù)使用的唯一性。關(guān)鍵程序代碼如下:

2.3 會(huì)員卡有效期驗(yàn)證觸發(fā)器(CheckCard_trg)

會(huì)員通過(guò)使用已購(gòu)置的會(huì)員卡進(jìn)行消費(fèi)。在前臺(tái)辦理進(jìn)入手續(xù),通過(guò)刷卡操作,對(duì)所持會(huì)員卡進(jìn)行有效期的驗(yàn)證。會(huì)員刷卡明細(xì)表(Me_ConsumDetail_table)用于管理會(huì)員的消費(fèi)信息,數(shù)據(jù)字段包括會(huì)員卡號(hào)、刷卡時(shí)間等信息。在該數(shù)據(jù)表上建立會(huì)員卡有效期驗(yàn)證觸發(fā)器。其功能設(shè)計(jì)思想是:當(dāng)會(huì)員刷卡消費(fèi)時(shí)根據(jù)會(huì)員卡卡號(hào)查詢會(huì)員卡表,讀取該會(huì)員卡的卡類(lèi)型、卡有效時(shí)間,獲取當(dāng)前消費(fèi)時(shí)間(Me_Consum_Date)等信息。頁(yè)面提交將上述數(shù)據(jù)插入到會(huì)員刷卡明細(xì)表時(shí),該觸發(fā)器點(diǎn)火,執(zhí)行檢查會(huì)員卡有效期的SQL語(yǔ)句,根據(jù)獲取的當(dāng)前消費(fèi)時(shí)間與卡有效時(shí)間進(jìn)行比較。當(dāng)大于有效期時(shí),利用SQL Server提供的事務(wù)管理功能,通過(guò)事務(wù)控制語(yǔ)句rollback transaction取消此次刷卡消費(fèi),并調(diào)用raiserror函數(shù)拋出已過(guò)期異常信息。觸發(fā)器主要程序如下:

為了能夠捕獲并處理觸發(fā)器拋出的異常信息,在global.asax文件中的Application_Error事件中編寫(xiě)出錯(cuò)時(shí)處理事件程序,設(shè)計(jì)思想是使用ASP.NET的Server對(duì)象、GetLastError()方法獲取異常,用 Response對(duì)象向?yàn)g覽器輸出使用javascript客戶端腳本語(yǔ)言編寫(xiě)的提示信息,程序如下:

本設(shè)計(jì)完成的三個(gè)觸發(fā)器之間關(guān)系密切,新卡號(hào)生成觸發(fā)器點(diǎn)火觸發(fā)后,動(dòng)態(tài)生成相關(guān)類(lèi)型的結(jié)束卡號(hào)和保存在新會(huì)員卡號(hào)表中連續(xù)的卡號(hào)集合;當(dāng)進(jìn)行會(huì)員卡銷(xiāo)售時(shí),從新會(huì)員卡號(hào)表中選定卡號(hào),點(diǎn)火會(huì)員卡銷(xiāo)售觸發(fā)器,自動(dòng)為選定的會(huì)員卡建立卡有效期(有效使用時(shí)間),同時(shí)從新會(huì)員卡號(hào)表中刪除該卡號(hào);當(dāng)會(huì)員使用會(huì)員卡刷卡消費(fèi)時(shí),會(huì)員卡有效期驗(yàn)證觸發(fā)器點(diǎn)火觸發(fā),完成有效期的驗(yàn)證,如果過(guò)期,頁(yè)面彈出警告對(duì)話框。在健身房會(huì)員管理軟件中,使用數(shù)據(jù)庫(kù)觸發(fā)器技術(shù),保證了會(huì)員卡信息從制卡、銷(xiāo)售到使用過(guò)程中數(shù)據(jù)的一致性和完整性。而且,這種一致性和完整性是實(shí)時(shí)和同步的,有效地提高了前臺(tái)工作人員的工作效率。軟件設(shè)計(jì)符合用戶要求,操作簡(jiǎn)便,運(yùn)行正常。

[1]崔巍.數(shù)據(jù)庫(kù)系統(tǒng)及應(yīng)用[M].北京:高等教育出版社,2008.

[2]周漢平.數(shù)據(jù)庫(kù)設(shè)計(jì)及其應(yīng)用程序開(kāi)發(fā)[M].北京:清華大學(xué)出版社,2010.

猜你喜歡
卡號(hào)會(huì)員卡觸發(fā)器
會(huì)員卡真的劃算嗎?
會(huì)員卡優(yōu)惠的奧秘
河南省長(zhǎng)葛市彩紅蜂衣蜂帽加工廠
蜜蜂雜志(2022年5期)2022-07-20 09:54:06
河南省長(zhǎng)葛市彩紅蜂衣蜂帽加工廠
蜜蜂雜志(2021年11期)2021-02-18 07:21:32
主從JK觸發(fā)器邏輯功能分析
電子世界(2017年22期)2017-12-02 03:03:45
使用觸發(fā)器,強(qiáng)化安全性
好老板
會(huì)員卡
真丟臉奶吧
“零違規(guī)”不意外,關(guān)鍵看后續(xù)
益阳市| 贺兰县| 柘城县| 武平县| 徐水县| 富宁县| 上犹县| 枣强县| 梅州市| 太谷县| 远安县| 韶山市| 巫山县| 威信县| 玉田县| 卢湾区| 磴口县| 新绛县| 华亭县| 宣武区| 西贡区| 普兰县| 邛崃市| 义乌市| 手机| 开阳县| 来安县| 襄垣县| 剑川县| 辽阳市| 焦作市| 迭部县| 佳木斯市| 沽源县| 襄樊市| 靖西县| 元氏县| 嘉善县| 甘南县| 上林县| 博爱县|