在外部鍵約束保護的數據列中NULL值的處理可能產生不可預料的結果。ORACLE 使用ISO standar Match None規則增強外部鍵約束。這個規則規定如果任何外部鍵作用的數據列包含有一個NULL值,那么任何保留該鍵的數據列在父表中沒有匹配值。
比如,在父表AUTOMOBILES中,主鍵作用于數據列MAKE,MODEL,YEAR上,用戶使用的表INSURED_AUTOS有一個外部約束指向AOTOMOBILES,注意在INSURES_AUTOS中有一數據行的MODEL列為NULL值,這一行數據已經通過約束檢查,即使MAKE列也沒有顯示在父表AUTOMOBILES中,如下表:
表1 AUTOMOBILES
表2 INSURED_AUTOS
延遲約束檢驗(Deferred Constraint Checking)
約束檢驗分兩種情況,一種是在每一條語句結束后檢驗數據是否滿足約束條件,這種檢驗稱為立即約束檢驗(immediately checking),另一種是在事務處理完成之后對數據進行檢驗稱之為延遲約束檢驗。在缺省情況下Oracle約束檢驗是立即檢驗(immediately checking),如果不滿足約束將先是一條錯誤信息,但用戶可以通過SET CONSTRAINT語句選擇延遲約束檢驗。語法如下:
SET CONSTRAINT constraint_name|ALL DEFEERRED|IMMEDIATE --;
序列(Sequences)
Oracle序列是一個連續的數字生成器。序列常用于人為的關鍵字,或給數據行排序否則數據行是無序的。像約束一樣,序列只存在于數據字典中。序列號可以被設置為上升、下降,可以沒有限制或重復使用直到一個限制值。創建序列使用SET SEQUENCE語句。
CREATE SEQUENCE [schema] sequence KEYWORD
KEYWORD包括下面的值:
刪除序列使用DROP SEQUENCE語句。
DROP SEQUENCE sequence_name
索引(INDEXES)
索引是一種可以提高查詢性能的數據結構,在這一部分我們將討論索引如何提高查詢性能的。ORACLE提供了以下幾種索引:
B-Tree、哈希(hash)、位圖(bitmap)等索引類型;
基于原始表的索引;
基于函數的索引;
域(Domain)索引。
實際應用中主要是B-Tree索引和位圖索引,所以我們將集中討論這兩種索引類型。
B-Tree索引
B-Tree索引是最普通的索引,缺省條件下建立的索引就是這種類型的索引。B-Tree索引可以是唯一或非唯一的,可以是單一的(基于一列)或連接的(多列)。B-Tree索引在檢索高基數數據列(高基數數據列是指該列有很多不同的值)時提供了最好的性能。對于取出較小的數據B-Tree索引比全表檢索提供了更有效的方法。但當檢查的范圍超過表的10%時就不能提高取回數據的性能。正如名字所暗示的那樣,B-Tree索引是基于二元樹的,由枝干塊(branch block)和樹葉塊(leaf block)組成,枝干塊包含了索引列(關鍵字)和另一索引的地址。樹葉塊包含了關鍵字和給表中每個匹配行的ROWID。
位圖索引
位圖索引主要用于決策支持系統或靜態數據,不支持行級鎖定。位圖索引可以是簡單的(單列)也可以是連接的(多列),但在實踐中絕大多數是簡單的。位圖索引最好用于低到中群集(cardinality)列,在這些列上多位圖索引可以與AND或OR操作符結合使用。位圖索引使用位圖作為鍵值,對于表中的每一數據行位圖包含了TRUE(1)、FALSE(0)、或NULL值。位圖索引的位圖存放在B-Tree結構的頁節點中。B-Tree結構使查找位圖非常方便和快速。另外,位圖以一種壓縮格式存放,因此占用的磁盤空間比B-Tree索引要小得多。
文章來源于領測軟件測試網 http://www.kjueaiud.com/