資料庫設計,乙個軟體專案成功的基石。乙個好的資料庫設計能讓開發人員在後續的開發中如魚得水,反之,乙個差的資料庫設計簡直就是四面漏風的牆。
資料庫設計的規範化即正規化。
1. 第1正規化(1nf)
定義:如果關係模式r,其所有的屬性均為簡單屬性,即每個屬性都是不可再分的,則稱r屬於第一正規化,簡稱1nf。
說明:1nf強調每一列必須為原子列且無概念性重複。
比如,表1中雖然每列都是原子列,但【選修1】【選修2】列,在概念上是重複的列。所以,表1不符合1nf。
以學生選修資訊作為反面案例:
表1學生姓名
專業輔導員
選修1選修2
小明電腦科學與技術
張三古典**鑑賞
社會心理學
小強積體電路
李四中國古代名著賞析
電影藝術欣賞
小紅軟體工程
王二社會心理學
電影藝術欣賞
表2學生姓名
專業輔導員
選修小明
電腦科學與技術
張三古典**鑑賞
小明電腦科學與技術
張三社會心理學
小強積體電路
李四中國古代名著賞析
小強積體電路
李四電影藝術欣賞
小紅軟體工程
王二社會心理學
小紅軟體工程
王二電影藝術欣賞
小明軟體工程
王二古典**鑑賞
不過,這樣仍有乙個遺留問題和處理後帶來的乙個新問題,即
因此,還需要遵守2nf來解決問題。
2. 第2正規化(2nf)
定義:如果關係模式r?1nf,且每個非主屬性都完全函式依賴於r的每個關係鍵,則稱r屬於第二正規化,簡稱2nf。
說明:2nf要求資料庫表中的每行必須可以被惟一地區分,並且要求實體的屬性完全依賴於主屬性。
解決1:使用主鍵來標識相關資料。第2正規化主要討論了非主屬性與主屬性的關係問題,只有表中存在了主屬性標識,才能繼續這個問題。而在表2中,由於重名問題沒有解決,並無可以標識主屬性的一列或者幾列。下面通過加入學生id來標識主屬性
表3學生id
學生姓名
專業輔導員選修1
小明電腦科學與技術
張三古典**鑑賞1小明
電腦科學與技術
張三社會心理學2小強
積體電路
李四中國古代名著賞析2小強
積體電路
李四電影藝術欣賞3小紅
軟體工程
王二社會心理學3小紅
軟體工程
王二電影藝術欣賞4小明
軟體工程
王二古典**鑑賞
解決2:消除不完全依賴於主鍵的非主屬性,為其建立獨立的新錶,使用外來鍵來與其關聯。假設學校的體制是,乙個學生有唯一的名字、專業、輔導員,那麼,一旦確定了乙個學生id,則專業、輔導員也就被確定了。即,符合變數單值函式 y = f(x) 這種關係,則可以說學生姓名、專業、輔導員 函式依賴與主鍵學生id(在主鍵是多個列的時候才能討論是完全依賴還是部分依賴的問題,單列主鍵的情況下,函式依賴必是完全函式依賴),但乙個學生可能有多個選修與其對應,因此選修不能被唯一確定,即選修不能函式依賴於學生id。
通過解決2,把錶3分解為兩個表,表4-1和4-2。
表4-1
學生id
學生姓名
專業輔導員1小明
電腦科學與技術張三2
小強積體電路李四3
小紅軟體工程
王二表4-2
id學生id選修1
1古典**鑑賞21
社會心理學32
中國古代名著賞析42
電影藝術欣賞53
社會心理學63
電影藝術欣賞
至此,乙個學生新增新的選修時,已經不用重複加入專業資訊了,但仍存在潛在的冗餘問題。即,假設每個專業有唯一的輔導員,在某個專業新增學生(例如,電腦科學與技術新生小花),要向表4-1中插入小花的資訊,這時,電腦科學與技術和其輔導員張三資訊就會被重複插入,出現了冗餘。下面的第三正規化將解決這個問題。
3. 第3正規化(3nf)
定義:如果關係模式r?2nf,且每個非主屬性都不傳遞依賴於r的每個關係鍵,則稱r屬於第三正規化(third normal form),簡稱3nf。
說明:3nf致力於消除只是傳遞依賴與主鍵的非主屬性。簡而言之,就是屬性不依賴於其它非主屬性。
在表4-1中,雖然輔導員完全函式依賴於主鍵學生id(即,乙個學生id能唯一確定他的輔導員),但在概念上這只是傳遞依賴而並非直接依賴。輔導員直接依賴的是專業,因為在概念上,乙個專業才是輔導員存在的唯一原因。正是因為乙個學生id能唯一確定乙個專業,而乙個專業能唯一確定乙個輔導員,所以說,輔導員對主鍵學生id的依賴關係是傳遞依賴,而不是直接依賴。它直接依賴的是非主屬性專業。
解決:為傳遞依賴於主鍵的屬性建立獨立的新錶從而消除非主屬性對主鍵的傳遞依賴關係。如此,將表4-1劃分為以下兩個表。
表5-1
學生id
學生姓名
專業id1小明
12小強2
3小紅3表5-2
專業d專業
輔導員1
電腦科學與技術張三2
積體電路李四3
軟體工程
王二至此,輔導員資訊重複的問題被解決。但還有乙個遺留問題,即,表4-2中,選修名依然有重複。將通過第四正規化來解決這個問題。下面簡要介紹第四正規化。
4. 第4正規化(4nf)
概要:在多值依賴關係(多對多)中,獨立的實體概念不能禁止存放在同乙個表中。表4-2違反了這個規則,問題是,如果刪除了學生id為1的學生,則將導致選修課程資訊丟失。
解決:為選修建立獨立的表,為學生選修建立獨立的表。
表6-1
選修id選修1
古典**鑑賞
2社會心理學
3中國古代名著賞析
4電影藝術欣賞
表6-2
id學生id
選修id11
1212
3234
2453
2634
表5-1,5-2,6-1,6-2這四個錶即是最終結果。
在實踐中不管什麼情況,都嚴格恪守設計正規化來進行資料庫設計 —— 不推薦
完全沒有研究過設計正規化就進行資料庫設計 —— 極其不推薦
資料庫設計正規化
目前關聯式資料庫有六種正規化 第一正規化 1nf 第二正規化 2nf 第三正規化 3nf 第四正規化 4nf 第五正規化 5nf 和第六正規化 6nf 滿足最低要求的正規化是第一正規化 1nf 在第一正規化的基礎上進一步滿足更多要求的稱為第二正規化 2nf 其餘正規化以次類推。一般說來,資料庫只需滿...
資料庫設計正規化
前言 為什麼要寫這篇文章呢,從去年年底開始,就和很多做技術的朋友交流過,從資料庫設計到資料庫架構各個方面的內容。有一些朋友執著於orm,執著於所謂的資料庫設計,卻忘記了一切技術是要為業務服務這個基石。當然這文章裡也有一些自己的理解,想向大家表達。正規化是什麼 正規化是符合某一種級別的關係模式的集合。...
資料庫正規化設計
在軟體開發過程中,資料庫的設計是非常重要的。可以說,良好的資料庫設計,是對使用者需求的理解的精準定位。它不僅能夠使得軟體開發起來非常便捷,而且還能夠使軟體系統高效執行,同時,為日後的維護或者更換資料庫提供便利。在最近開發系統的過程中,感覺收穫最大的也是關於資料庫的操作。最初開發機房收費系統的時候,由...