摘 要列舉了觸發器的幾種代表性應用:資料分散—集中式模型的設計,歷史資料的匯出,應用系統間的資料介面。並對如何設計這些觸發器進行了**。
1 引言
在大型資料庫設計中,會經常用到觸發器。它的特點是:一旦被定義,就存在於後台資料庫系統(server,伺服器方)中,並會在相應條件下自動地隱式執行,從而使得它的設計既與前台(client,客戶機方)的平台無關,又免除了前台相關的資料操作設計。
在文獻[1]中,列舉了觸發器的幾種應用:審計;複雜的完整性約束;複雜的安全性授權;事件登入;列值匯出;分布式資料庫中表複製。
2 觸發器的另外幾種應用
2.1 資料分散——集中式模型設計
在實際開發過程中,經常遇到這樣的資料維護要求:單位由多個部門組成,要求各部門只能維護本部門的資料,但另一方面,又需要將分散到各部門的資料集中起來進行彙總,得到本單位的彙總資料。如乙個學校有多個系,學校需要各系的成績彙總;乙個工廠有多個生產車間,工廠需要各車間的產量彙總;乙個公司有多個銷售部門,公司需要各部門的銷量彙總等等。
在這種情況下,如果不使用觸發器的話,資料庫設計就存在困難:
. 如果為每個部門都建立乙個表,顯然難以得到彙總的資料(在這種情況下,無法利用檢視機制);
. 如果所有的部門都共享乙個表的話(這時,這張表中的資料實際就是彙總的資料),因為每個部門需要維護資料,所以都對這個表有修改權,因此在資料安全上難以控制。
使用觸發器的話,上述問題便可迎刃而解:為每個部門建立乙個表(該部門的所有許可權只限於對此表有修改權),再為彙總資料也建立乙個表,然後在每個部門表上建立觸發器,使得部門表上有資料更新時,便會對應地更改彙總表中的相關資料(見圖1)。
圖1 觸發器應用於資料分散——集中式模型
在這種模型中,要注意設計好部門表相關欄位的完整性約束,使各部門表內的資料是唯一的,以防止不同部門表出現相同的資料記錄,從而導致在彙總表中出現混亂。
2.2 歷史資料匯出
資料庫中的表只記載最新的資料,而不記載歷史資料。但在很多情況下,歷史資料的記載與分析反而比現實資料更有意義(這也正是資料倉儲與資料庫的區別之一),比如學校中學號的變動,工廠定額的更改,公司產品和原材料**的變化、**的公升跌等等,它們都需要記錄歷史資料。
如何使資料庫也能記載歷史資料呢?使用觸發器可以解決這類問題。
建立這類觸發器的步驟是:建立資料表後,再建立對應的歷史表(一般而言,歷史表在字段組成上是資料表的超集,即在原資料表字段上再增加有關時間的字段),然後在兩者之間設立觸發器(見圖2)。這樣,每當資料表有資料變動,觸發器便將變動的資料記入歷史資料表中,從而達到自動記錄歷史資料的目的。
圖2 歷史資料的匯出模式
2.3 應用系統間的資料介面
乙個完整的資訊系統的建設一般不是一步到位的,往往是分期分批完成,而不同期次的系統往往又會有資料傳遞,然而由於需求發生變化或是其他原因,不同期次系統的資料庫設計在表結構甚至欄位上的設計都可能會互不一致(即使是在同一期的開發過程中,由於總體設計或資料字典方面的偏差或不足,或者需要整合多家系統,這種現象也會經常出現)。在不可能重建這些系統的情況下,它們之間的資料能無縫傳遞嗎?換言之,它們之間能夠做到無縫連線嗎?
在這種情況下,觸發器可以是一種較好的解決方式:建立中間表,中間表的設計符合需方應用系統的設計格式,而它的資料又與供方應用系統的資料保持一致。(見圖3)
圖3 中間作為不同應用系統間的資料介面
要注意的一點是:圖示應用系統間的資料是單向流動的(即資料傳遞);如果資料需要雙向流動(即資料交換),那麼在觸發器設計中應有退出機制,以避免發生觸發器的遞迴。
談談幾種觸發器
oracle資料庫有四種觸發器,分別是dml instead of ddl db觸發器,一般的應用系統中都是用到dml instead of觸發器,ddl db兩種觸發器是dba管理資料庫用得比較多 四種觸發器分別有不同的作用 一 dml觸發器 當發出update insert delete命令就可...
談談幾種觸發器
oracle資料庫有四種觸發器,分別是dml instead of ddl db觸發器,一般的應用系統中都是用到dml instead of觸發器,ddl db兩種觸發器是dba管理資料庫用得比較多 四種觸發器分別有不同的作用 一 dml觸發器 當發出update insert delete命令就可...
談談幾種觸發器
oracle資料庫有四種觸發器,分別是dml instead of ddl db觸發器,一般的應用系統中都是用到dml instead of觸發器,ddl db兩種觸發器是dba管理資料庫用得比較多 四種觸發器分別有不同的作用 一 dml觸發器 當發出update insert delete命令就可...