摘要:關系規范化理論是關系數據庫開發與設計的重要部分。關系數據庫的設計主要取決于關系模式的設計,關系模式設計的好壞直接影響到數據庫設計的成敗,而關系規范化理論則是指導關系模式設計的標準。該文通過實例探討關系規范化理論用于關系數據庫設計的方法以及關系數據庫規范化的原則。
關鍵詞:關系;關系模式;數據庫設計;規范化
中圖分類號:TP311文獻標識碼:A文章編號:1009-3044(2009)24-6616-02
The Theory of Standardization and it is Importance to Database Design
TIAN Jin-hua,YANG Zhi-qiang
(Huanghuai University,Zhumadian 463000, China)
Abstract: The relational standardization theory is the relational database development and the design important part. Relational database's design is mainly decided by the relational scheme design, the relational scheme design quality immediate influence to the database design success or failure. The relationship between the standardization of the theory is to guide the design of the standard model.. This article introduces the relational standardization theoretical design through the example the method, and should the matters needing attention.
Key words: relationship; relation mode; ratabase design; standardization
1 關系數據庫規范化理論
關系數據庫是以關系模型為基礎的數據庫,它利用關系描述現實世界。一個關系即可用來描述一個實體及其屬性,也可用來描述實體間的一種聯系。關系模式是用來定義關系的,一個關系數據庫包含一組關系,定義這組關系的關系模式的全體就構成了該數據庫的模式。關系數據庫規范化理論是用來研究如何將一個“設計不合理”的關系模型轉化為一個“好”的關系模式,其基本思想是通過合理的分解關系模式來消除其中不合適的數據依賴,以解決數據冗余、插入異常、刪除異常以及更新復雜等問題。
關系數據庫規范化理論認為,一個關系數據庫中的每一個關系都必須滿足一定的約束條件,稱為范式。由于規范化程度不同,從而產生了不同的范式。一個較低范式的關系,可以通過關系的無損分解轉換為若干個較高級范式關系的集合,這一過程就叫做關系規范化。從理論上講范式級別越高,規范化的程度就越高,關系模式就越好,但在實際應用中要具體問題具體分析,通常對于一般數據庫應用系統而言,只要將關系規范到第三范式的標準就可以滿足用戶需求。既已達到不必存儲不必要的重復信息,又可以方便地獲取信息的目的。
2關系模式規范化的必要性
關系數據庫的設計主要是關系模式的設計。關系模式設計的好壞將直接影響到數據庫設計的成敗。將關系模式規范化,使之達到較高的范式是設計好關系模式的唯一途徑。否則,所設計的關系數據庫會產生一系列的問題。下面結合自己在平時教學中,學生常遇到的關系規范化問題展開探討。我們結合一個實例來分析數據庫模式設計的好與壞。例如有一個教學管理數據庫,包括的信息有學生的學號、姓名、性別、系別、系主任、課程號和選修課程的學生成績,以及一個教師只能帶一門課,一個學生選修一門課就對應一個教師。若將此信息按要求設計為一個關系模式,則該關系模式為:學生(學號、姓名、性別、系別、系主任、課程號、任課教師、成績)。此關系模式的主碼應為(學號、課程號),從關系模式上看,該關系模式已經包括需要的全部信息,如果按此關系模式建立關系,并對其進行深入分析,就會發現其中的問題所在。
1) 數據冗余度大:每一個“系別”和“系主任”信息存儲的次數等于該系的學生人數乘以每個學生選修的課程門數。
2) 插入異常:一個新系沒有招生時,“系別”和“系主任”信息就無法插入到數據庫中。因為,主碼為(學號、課程號),此時沒有學生而使學號為空。
3) 刪除異常:當一個系的學生都畢業了而又沒招新生時,刪除了全部學生記錄時,隨之也刪除了“系別”和“系主任”等信息。這個系依然存在,而在數據庫中卻無法找到該系信息。從上面的分析可知,學生關系不是一個合理的數據庫模式。一個合理的模式應當避免發生上述異常問題。規范化理論認為,關系中的各屬性是相互關聯的,他們互相依賴、互相制約,構成一個結構嚴謹的整體。因此,在關系設計中,必須從語義中摸清這些關聯,特別是依賴關系,只能把那些相互關聯密切的屬性拼湊在一起。構造一個“好”的數據庫模式,必須使它的關系模式的屬性之間滿足某種內在的語義條件,而這種聯系又可對關系的不同要求分為若干等級,這就是關系規范化。
3 關系數據庫的規范化
一般而言,我們通過一個關系模式是否屬于某一范式來確定其在多大程度上解決了數據冗余度大、插入異常、刪除異常及更新復雜等問題,下面我們結合范式的幾種定義來探討數據庫的規范化。
3.1 第一范式(1NF)
如果一個關系模式R的所有屬性都是原子的,也就是其屬性域中的元素是不可再分的單元,則稱其屬于1NF的關系模式。顯然,此學生關系模式中不存在可分的數據項,即滿足了第一范式的要求。但是,滿足1NF并不能保證它就是一個好的關系,其原因就是1NF不夠規范,即限制太少,造成表中存放的信息太雜,學生關系模式中的依賴關系為
學生關系模式由于存在以上函數依賴關系,所以它才出現上述異常問題。對它改進的方法是消除同時存在于學生關系模式中屬性間不同的依賴情況,也就是使一個關系盡可能地只描述一個實體或聯系。因此,應考慮高一級范式的關系模式。
3.2 第二范式(2NF)
如果關系模式R(U,F)屬于1NF并且R中每個非主屬性都完全函數依賴于關系的碼,則R(U,F)屬于2NF。
將1NF轉化為2NF,其實質是采用投影分解法,將一個1NF的關系無損分解為幾個2NF的關系。分解方式為:將部分函數依賴((學號,課程號)姓名,性別,系別)單獨提取出來,把學生關系模式分解為學生信息和學生成績兩個關系模式,分別表示為
學生信息(學號、姓名、性別、系別、系主任)
學生成績(學號、課程號、任課教師、成績)
此時,兩個分解后的關系模式均屬于2NF,再對學生信息模式分析,發現其中仍然存在以下問題:
1) 數據冗余度大:系主任信息會重復存儲多次。
2) 修改麻煩:若某個系更換了系主任,則必須重復修改相應系的每個學生對應的系主任的名字,若漏改一處則造成數據不一致。
3) 插入異常:如果新開設一個系,會因為沒有招生而不能插入相應系的信息。
4) 刪除異常。若刪除李明記錄,則整個元組不復存在,連同系的信息一并刪掉,這樣會引起信息丟失。
存在以上問題的原因就是學生信息模式中存在傳遞函數依賴:學號系主任。故仍需考慮更高一級范式的關系模式。
3.3 第三范式(3NF)
如果關系模式R(U,F)屬于2NF,并且所有非主屬性都不傳遞依賴于關系的碼,則R(U,F)屬于3NF。
要想使學生信息模式滿足第三范式,就要去掉表中的傳遞函數依賴,方法仍是表的無損分解。分解方式為:將傳遞函數依賴單獨提取出來,把模式分解為學生基本信息和系別信息兩個關系模式,分別為
學生基本信息(學號、姓名、性別、系別)
系別信息(系別、系主任)
此時,兩個關系模式分別屬于3NF,基本上避免了上述幾種異常問題的發生。再分析第一次分解后得到的學生成績關系模式,雖然它也滿足3NF,但它仍然存在以下問題:
(1)數據冗余度大:任課教師這一信息重復了多次。
(2)修改麻煩:若某個老師所帶的課程更換教師,則必須重復修改其所帶班級每個學生對應的任課教師的名字,若漏改一處則造成數據不一致。
(3)插入異常。如果新來了一個老師,會因為沒有學生選課而不能插入相應的信息。
(4)刪除異常。若刪除某個學生的某課程成績,則整個元組不復存在,連任課教師的信息一并刪掉,這樣會引起信息丟失。存在以上問題的原因就是學生成績關系模式中存在作為非主碼的“任課教師”作為決定因素,因此,我們仍需對其探討更高級范式的關系模式。
3.4 BC范式(BCNF)
若某關系模式滿足第三范式,且關系中每一個決定因素都包含碼,則稱該關系滿足BCNF。
要想使學生成績關系模式滿足BCNF,就要去掉表中的非主碼作為決定因素,方法仍是表的無損分解。分解方式為:將非主碼作為決定因素的信息單獨提取出來,把模式分解為學生選課和教師信息兩個關系模式,分別為
學生選課(學號、課程號、成績)
教師信息(任課教師、課程號)
分解后的兩個關系模式分別屬于BCNF,避免了上述異常問題的發生。通過以上分解最終把原關系模式分解成為四個關系模式,此四個關系模式基本上可以避免數據冗余度大、插入異常、刪除異常及更新復雜等問題。
4 關系數據庫規范化的原則
關系數據庫規范化有兩個重要原則:1) 無損連接,2) 保持函數依賴。所謂無損連接是指在分解過程中不能丟失信息,即分解后的關系通過自然連接可以恢復成為原來的關系。它反映了模式分解的數據等價原則。保持函數依賴是指分解后的關系不能破壞原來必要的函數依賴。它反映了模式分解的依賴等價原則。對關系模式進行分解,使之屬于2NF,3NF,只要采用規范的方法,既能實現無損連接,又能實現保持依賴。但是,不是每個關系模式都存在保持函數依賴的屬于BCNF的無損連接分解,這也是關系數據庫設計一般要求達到3NF的原因之一。對于一個具體的關系模式,其BCNF的分解可能不止一個,其中一些能保持函數依賴,而另一些不能保持,設計數據庫時應盡可能挑選一個保持函數依賴的分解。
5 結束語
規范化設計的優點可有效地消除數據依賴中不合適的部分,使模式中的各關系模式達到某種程度的“分離”,即“一事一地”的模式設計原則。雖然,目前已提出五類范式,但在實際應用中并不是對關系模式的級別設計的越高越好。因為,在對關系模式進行規范化設計的同時也帶來了新的問題,那就是增加了查詢時連接數據庫表的運算,大量的連接運算將導致系統性能下降,在大多數情況下,這一問題我們可以采用建立適當的索引等方法得到解決。
參考文獻:
[1] 王珊,薩師煊.數據庫系統概論[M].北京:高等教育出版社,2002:170-182.
[2] 李紅.數據庫原理與應用[M].北京:2版.高等教育出版社,2007:55-68.
[3] 文家焱,施平安.數據庫系統原理與應用[M].北京:冶金工業出版社,2002:102-128.
[4] 朱海峰.關系規范化理論在數據庫設計中的應用[J].科技信息,2007:103-104.
[5] 顏如祥.基于ORACLE數據庫通用性靈活性探討[J].計算機工程與應用,2000(1):95-98.