摘要:本文主要講解如何通過數據庫觸發器來處理航班登機口變更在航顯(航班信息顯示系統,下同)屏幕上的顯示,從而提醒旅客到正確的登機口進行登機。
關鍵詞:觸發器:特殊類型的存儲過程;航顯:航班信息顯示系統;登機口:旅客登入乘航班的入口
中圖分類號:TP319文獻標識碼:A文章編號:1009-3044(2008)19-30175-03
The Implementation of Oracle Triggers in Airport Flight Information Display System
ZHANG Xiao-xiao1, JIANG Ge2
(1. School of Information Science Technology of Beijing Forest University, Beijing 100083, China; 2.Lucent Technology China, Beijing 100102, China)
Abstract: This paper mainly discuss how to use Oracle triggers to handle gate change in Airport Flight information display system, so remind the passengers to the right boarding gates.
Key words: Trigger; a special type of oracle procedures; Flight display; flight information display system; Gate; boarding gate
1 觸發器、作用和分類
觸發器是一種特殊類型的存儲過程。它主要是通過事件進行觸發而被執行的。當對數據庫表進行諸如UPDATE,INSERT,DELETE這些操作時,數據庫就會自動執行觸發器所定義的SQL語句,從而確保對數據的處理符合由這些SQL語句所定義的規則。觸發器的主要作用就是其能夠實現由主鍵和外鍵所不能保證的復雜的參照完整性和數據的一致性。除此之外,觸發器還實現了級聯運行:觸發器可以偵測數據庫內的操作,并自動的級聯影響整個數據庫的各項內容。例如:DailyFlight(當日航班表,下同)表上的觸發器中包含對DailyChange表(登機口變更表,下同)的數據操作(插入)而該操作又導致DailyChange表上的觸發器被觸發執行。
2 觸發器主要分以下幾類
a.在執行觸發事件之前(Before Operation On DailyFlight);
b.在執行觸發事件之后(After Operation On DailyFlight);
c.非觸發事件。
3 與觸發器相關的數據表
當日航班表(DailyFlight)
資源變更消息表:DailyChange(記錄登機門分配或變更消息)
■
顯示設備信息表:Facility
■
消息信息表:Message
■
Message中的MessageCn數據項中,Facility和DailyChange表中的ID是一一對應的。ID是由數據庫中的函數自動生成的。
4 數據庫觸發模式模擬
T_ DailyFlight BEFORE INSERT OR UPDATE ON DailyFlight FOR EACH ROW
觸發條件:when(new.DisplayFinished='N' and new.FlgDeleted = 'N')
作用:觸發條件為該航班狀態不能為顯示結束或刪除
T_DailyFlight_2 AFTER INSERT OR UPDATE ON DailyFlight FOR EACH ROW
觸發條件: when(old.FlgDeleted ='N' and new.FlgDeleted = 'Y')
作用:當數據庫收到航班的顯示結束信息后,刪除該航班對應的消息
詳解(T_DailyFlight——以登機口分配或變更為例):
出港航班登機門分配或變更事件:
該事件相當于是對DailyFlight表的更新操作,所以會觸發T_ DailyFlight。
判斷該航班是在數據庫中存在,并且還沒有收到實際起飛時間。
將該航班相關數據(系統自動生成ID,運行日,航班號,進離港,及相應登機門標識)插入DailyChange表,該插入事件觸發了DailyChange表上的觸發器。
修改Message表中以前與此航班相關的登機門分配或變更的消息,同時插入一條新的空消息。
修改Facility表中與此登機門標識相關的消息列表。
5 舉例如下(假設各個相關數據表初始為空)
出港航班CA111首先被分配在3號登機口,然后變更到4號登機口,然后被變更到1號登機口。
1) 則當該航班被分配在3號登機口后,觸發器會首先在DailyChange表中生成一條登機門消息:
■
同時會在Message表中插入一條空消息:
■
同時會對Facility相應數據項進行更新:
■
2) 當該航班的登機口被變更到4號時,觸發器會首先在DailyChange表中生成另外一條登機門消息:
■
同時會在Message表中修改ID為5000的消息并生成插入另外一條空消息:
■
同時會對Facility相應數據項進行更新:
■
3)當該航班的登機口再被變更到1號時,觸發器會首先在DailyChange表中生成另外一條登機門消息:
■
同時會在Message表中修改ID為5000和5001的消息并生成插入另外一條空消息:
■
同時會對Facility相應數據項進行更新:
■
該觸發器T_ DailyFlight還處理登機時間變更事件,由于處理流程和登機門分配或變更類似,故不再贅述。
當數據庫會收到某航班被刪除事件后,會觸發T_ DailyFlight _2觸發器,從而級聯刪除與此航班相關的所有消息。
6 具體說明(仍以上面的CA111航班為例)
1) 收到此航班的刪除事件。
2) 以此航班的標識為查詢條件在DailyChange表中找出與此航班相關的消息,并刪除。
■
3) 根據在DailyChange表中找出的與此航班相關的消息的ID(5000-5002)從而在Message表中刪除相關的ID對應的消息(下列消息均會被在Message表中刪除)。
■
4) 根據在DailyChange表中找出的與此航班相關的消息的ID(5000-5002)從而在Facility表的Message數據項中刪除相應的ID(相應的消息列表中的ID均會被刪除)。
■
7 總結
通過部署數據庫觸發器,簡化程序處理,實時響應動態的航班變更信息,對于航班信息顯示這種實時性要求較高的系統來說,可謂一舉多得。
參考文獻:
[1] (美)龍利(Loney,K)著. 張立浩,尹志軍. 機場信息系統設計說明書[M]. Oracle Database 10g完全參考手冊. 清華大學出版社,2006.
[2] (美)俄曼(Urman,S),(美)哈德曼(Hardman,R),(美)麥克羅克林(Mclaughlin,M)著. 彭琿 譯. Oracle Database10g PL/SQL程序設計[M]. 清華大學出版社,2005.
注:本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文