所謂的自增字段,就是指隨著我們實際使用,Oracle數據庫就可以自動增加相關的字段。這些字段的值一般都是沒有明確的相關含義,只用於一個唯一標識,這個字段一般也會設置成主鍵。
Oracle數據庫自增字段
如果應用只針對Oracle數據庫,而不考慮數據庫無關性,那麼sequence無非是最好的一個選擇。對於以前用習慣MSSQL等其它數據庫的朋友來說,Oracle這種用法簡直是太費勁了,要花很大的功夫才能做好一個自增字段,但是正因為如此,它也帶來了其它數據庫不能相比的優點,舉例來說,一個訂單系統,即有訂單頭,又有訂單行,一般是先插入訂單頭,再插入訂單行,對於MSSQL等數據庫的自增字段,只有插入後才知道具體的ID值是多少,那麼寫入後,還要返查一下這個字段值再給訂單行使用;而對於Oracle來說,只要先從sequence裡取出一個值來,頭和行一起使用即可,最主要是的sequence的效果是非常高的,不需要擔心性能問題。
Oracle數據庫彈性字段
在數據庫表結構設計的時候,最好多留出幾個備用的字段來,因為隨著系統的使用,一般會有增加字段的需求。預留字段的好處是,只要需要的時候啟用即可,不需要進行DDL操作,對數據庫後期維護的風險很低,並且一般的DDL操作,會造成級聯的VIEW/PACKAGE等程序失效,預留了彈性字段,則不會有這個問題。
預留的字段也可以按類型分成三種:字符串型,數值型及日期型,可以每個類型預留10個,或根據需要來決定,可以采用如下的樣式:
- NUMBER_ATTRIBUTE1
- STRING_ATTRIBUTE1
- DATE_ATTRIBUTE1
彈性字段如果不啟用,會不會占用過多的存儲空間呢,答案是否定的,因為在這種大型數據庫的結構中,只有一個字段真正被用到的時候,才會去占用實際的空間,否則它只是一個“說明”,並不占用實際的空間,所以不會造成空間浪費。
Oracle數據庫拆分字段
這並不是一個字段的類型,而是指在表設計的時候,可以適當的把一個大表拆成不同的小表來存儲,比如用戶表,可以包括登錄名,密碼,姓名,生日,等一系列的字段,在某些情況下,包括的會員屬性可能達到上百個之多。
在數據量小的時候,無論怎麼樣的存儲,都不會有性能問題,但是當數據量比較大的時候,就必須考慮性能問題。如果索引比較合理,不管數據量多大,一般查詢速度都不會太慢,但是當某些特別情況,不能使用索引的時候,就會產生FTS(所謂的全表掃描)。
那麼掃描一個小表和掃描一個大表所占的時間就完全不一樣了,所以建議比較大的表分開存儲,把常用的幾個字段單獨提取出來,這樣即便全表掃描,也能比較好的控制效率。
在使用的時候,只要主表和子表都有索引,把它們聯合起來查詢,和一個真正的大表的效果基本上是一樣的,雖然性能肯定比一個真實的大表慢一點,但是和另一方面的性能提升比較起來,是值得的。