Oracle標准化是關系模型的改良或擴展,Oracle標准化也是依照第一個關系模型草案並在此基礎上采用一定具體方法進行改進的進程。
一列或一組列—Y,被認為是與另列或一組列(X)函數相關;如果賦予X一組給定的值,那麼將決定Y的一組唯一值。說Y和X函數相關,就等於說X決定Y,通常寫作X—>Y。當然,最明顯的例子就是,一個關系表中的主鍵能夠唯一決定表中某一行的值。然而,其他相關也可能存在,只是它們不是主鍵的結果。標准化的主要目的就是消除關系模型中不是主鍵造成的所有函數相關。
以下是Oracle標准化的三個主要原因,在許多數據庫分析和設計的書中經常提到它們:
■保持數據完整性。這個原因,也許是最重要的原因,足可以解釋為什麼要實現標准化。因為數據只被貯存一次,所以它保持正確和一致性。換句話說,不必保存數據的多個備份。否則,相同數據項的各種備份可能不再同步,並且可能最終要求繁重的應用程序控制,因為RDBMS的自動完整性機制不能起到調整作用。許多遺留系統正處於這種狀態。
■建立一個盡可能與應用無關的模型。換句話說,標准化只是增強這樣一個概念,即關系模型應該是數據驅動的,而不是程序驅動的。對大部分數據庫來說,這意味著改變處理需求時數據庫設計能保持穩定和原封不動。應用程序的要求應該和數據庫邏輯計無關。
■減少存儲需求(並且也要不斷地為提高查詢性能打下基礎)。除了外鍵,全面標准化消除了關系設計中所有冗余的東西。不必要的數據備份同樣要求不必要的次級存儲需求。另外,存有及可能被搜索的數據越多,需要的總系統時間就越多,因此性能也就越差。
為了更好的理解Oracle標准化,我們還需完善幾個概念:
1.第一范式
第一范式(1NF)不包含重復組,這等於說貯存在一個單元裡的數據必須是一個單一、簡單值,而且不能保留一條以上的信息。為了清晰,信息原則不允許在一個列中有重復組,而1NF額外要求在一行中不能有重復組,不管是重復的列還是列中含有的重復信息都不允許。為了實現更高的標准化級,需要一個非鍵列。狹義的非鍵列定義是:一個不是主鍵的一部分的列;廣義的非鍵列定義是:不是任何候選鍵的一部分的列。這種情況下,應選擇狹義定義。本質上,一個表的列集合可以看作是由一個主鍵和剩余項組成,剩余項的任意一部分都是非鍵列。
2.第二范式
第二范式(2NF)沒有不完全相關,每個非鍵列都依賴於全主鍵,如果主鍵是復合鍵,則包括它所有的列。
3.第三范式
第三范式(3NF)沒有傳遞的相關性。沒有依賴於其他非鍵列的非鍵列,如果一個表所用的非鍵列都依賴於鍵、全鍵,並且只依賴於鍵,那麼這個表就是3NF形式的表。如果消除重復組後,每個非主鍵列都依賴於鍵和全鍵,這是2NF,只依賴於鍵則是3NF。
4.BoyceCodd范式(BoyceCoddNormalForm,BCNF)
BoyceCodd范式包括不反轉的不完全相關(有時不太正規地稱之為31/2NF),主鍵和它的任何部分都不依賴一個非鍵屬性。因為你取的是非鍵的嚴格定義,3NF考慮候選鍵問題,而且你的表總是BCNF形式的。
還有第四范式和更高級范式。在學術上,Oracle標准化理論已超出BCNF許多級了,通常數據庫分析和設計的相關書籍已達到5NF的高度。4NF處理多值相關(MVD)問題,而5NF處理連接相關(JD)問題。盡管這些范式的理論稍稍超出了本書的范圍,但你應該知道如果每個MVD都是一個FD,那麼這個表是4NF形式的表;如果每個JD都是它的關系鍵的結果,那麼這個表是5NF形式的表。
建議:至少要為BCNF而努力,然後必要時會得到物理數據庫設計補償,這將引導你進入下一個主題。如果可能,研究第四范式和第五范式,設法通過你的努力達到這些級別的標准化。你作為一個數據庫系統管理員的目標就是盡可能地提高標准化程度,然而使用盡可能少的實體來實現它們。這是一個挑戰,因為,通常標准形式越高,產生的實體越多。