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