利用序列減少軟件測試開發技術之Oracle數據庫開發工作量

發表于:2009-09-11來源:作者:點擊數: 標簽:軟件測試數據庫oracleOracleORACLE
利用序列減少軟件 測試 開發 技術之Oracle數據庫開發工作量 數據庫設計 關鍵字:序列 Oracle 數據庫 序列是Oracle數據庫中一個命名的順序編號生成器。這個編號生成器能夠以串行方式生成一系列的順序整數。這個特性在數據庫開發的過程中,經常會遇到。如果沒

利用序列減少軟件測試開發技術之Oracle數據庫開發工作量 數據庫設計

關鍵字:序列 Oracle 數據庫

  序列是Oracle數據庫中一個命名的順序編號生成器。這個編號生成器能夠以串行方式生成一系列的順序整數。這個特性在數據庫開發的過程中,經常會遇到。如果沒有這個工具的話,那么只能夠在前臺應用程序控制。這不僅會增加應用系統的開發工作量,而且對于并發訪問的情況難以控制。如多個用戶同時新建一張單據時,就很難保證單據編號的唯一。故Oracle數據庫的順序編號生成器是數據庫開發工程師的左膀右臂,具有很大的實用價值。具體來說,他可以解決用戶的如下幾個需求。

  需求一:流水號的需求。

  在信息化管理系統中,很多地方需要用到流水號。如有些企業物料編碼是按照流水號來編寫的。原材料按前后順序用六個數字來表示,每次新建一個后都遞增1。再如一個商場的前臺訂單管理系統,每張訂單的變碼原則可能就是按年月日+流水號的方式構成,每張銷售訂單一個編號。當天的銷售訂單從“000001”開始,一張銷售訂單一個編號,而且編號都是累加1的。而且商場可能有多個收款臺,他們分布在商場的不同位置,甚至可能在不同的樓層。因此如果沒有一個自動產生流水號的機制,就需要人工來完成這項工作。很明顯這顯然是不可能的。雖然也可以通過前臺應用程序來控制。但是這也會增加代碼的復雜程度,而且如果要實現多個收款臺同時創建銷售訂單進行統一編號,則基本上不怎么可能。為此通過數據庫據的順序編號生成器來實現這個需求,使最合理的一個方式。

  通過Oracle的序列功能,可以讓數據庫來自動地生成流水號。而且這個流水號即使在并發行操作下也不會重復,生成的速度比較快、使用方便。

  需求二:利用序列當作主鍵、外鍵。

  在信息化管理系統中,主鍵外鍵的應用很普遍。如在一個ERP系統的銷售訂單中,其訂單ID就是一個主鍵,它唯一的標識了一張銷售訂單。這個字段對于終端用戶來說沒有實際的參考價值。但是對于應用程序或者數據庫來說,這個字段則是非常關鍵的,因為他們就是根據這個ID來唯一的標識銷售訂單。通常情況下,只需要保證這個字段唯一即可,隨便什么整數都可以。唯一性的要求聽起來簡單,但是如果要實現手工控制的話,具有一定的難度。最好的情況下,就是讓系統來進行控制。

  為此在Oracle數據庫中就提出了序列這個功能。數據庫管理員如果在數據庫設計中,利用序列當作主鍵。讓各個表都使用這個序列產生的整數作為主鍵,那么對于數據庫的設計、編程、各種主外鍵關系建立都能夠起到意想不到的作用。簡單的說,就是序列可以成為數據庫中相互獨立表之間的黏合劑,把他們組合成一個統一的表結構。

  以上兩個只是從用戶的角度來考慮序列的作用。那么下面如果成程序員的角度來考慮,會對序列提出哪些具體的要求呢?筆者總結了日常數據庫開發過程中大家對序列提出的具體要求以及具體的解決方案,希望能夠對大家有所幫助。

  要求一:增量以10位單位遞增。

  通常情況下,序列是以1為單位遞增的。如1001、1002、1003等等。但是有些時候,程序員希望這個增量以10(或者以任何一個整數)為單位遞增。如在銷售訂單訂單明細中,其各個項目就是以10為單位進行遞增。這主要是為了后續的調整提供方便。不僅如此,在財務管理系統中也都有類似的要求。那么Oracle數據庫的序列能否實現以10為單位或者以任何一個整數為遞增單位呢?答案當然是肯定的。在創建序列的時候,默認情況下其遞增單位為1。但是數據庫管理員可以利用INCREMENT BY參數指定序列的增量,其默認值為1。如果程序員希望能夠實現按10來遞增的話,只要把這個參數設置為10即可。

  這個參數不僅控制了遞增的單位,而且還控制了遞增的方向。即按從大到小遞減還是按從小到大遞增。如這個值設置為10,則其就是按10、20、30如此遞增。如果這個數值設置為-10,其就是按10000(假設最大值為10000)、9990、99980等順序遞減。也就是說如果利用這個字段來做為表的關鍵字的話,那么這個關鍵字可以從大到小生成,也可以從小到大生成。

  

原文轉自:http://www.anti-gravitydesign.com

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97