一、關係數據庫規範化理論數據庫
爲使數據庫設計的合理可靠、簡單實用,長期以來,造成了關係數據庫設計理論,即規範化理論。數據庫設計
徹底函數依賴:在一個關係中,若某個非主屬性數據項依賴於所有關鍵字稱之爲徹底函數依賴。函數
好比:有一個表,有以下屬性:學生ID,學生姓名,所修課程ID,課程名稱,成績性能
徹底依賴:(學生ID,所修課程ID)→成績優化
成績既不能單獨依賴於學生ID,也不能單獨依賴於所修課程ID,所以成績徹底函數依賴於關鍵字。設計
(學生ID,所修課程ID)→學生姓名blog
部分依賴:學生ID→學生姓名io
學生姓名能夠依賴於關鍵字的一個主屬性——學生ID,所以學生姓名部分函數依賴於(學生ID,所修課程ID)。table
2)平凡函數依賴和非平凡函數依賴基礎
平凡函數依賴:當關系中屬性集合Y是屬性集合X的子集時,存在函數依賴X→Y,即一組屬性函數決定它的全部子集,這種函數依賴稱爲平凡函數依賴。
例如:在在關係學生課程表SC(學生號Sno,課程號 Cno,成績 Grade)中,
(Sno, Cno) → Sno ,(Sno, Cno) → Cno
非平凡函數依賴:當關系中屬性集合Y不是屬性集合X的子集時,存在函數依賴X→Y,則稱這種函數依賴爲非平凡函數依賴。
例如:(Sno, Cno) → Grade
3)傳遞函數依賴
傳遞函數依賴:設X,Y,Z是關係R中互不相同的屬性集合,存在X→Y(Y !→X),Y→Z,則稱Z傳遞函數依賴於X。
例:關係S1(學號,系名,系主任)
學號 → 系名,系名 → 系主任,而且 系名 -\→ 學號,因此 學號 → 系主任 爲傳遞函數依賴
範式是數據庫設計中一個重要的過程,經過它能夠優化數據庫設計,避免一些問題,能夠減小數據冗餘,能夠改進數據庫總體組織,能夠加強數據的一致性,能夠增長數據庫設計的靈活性。所以,在肯定設計數據庫以前,還需對數據庫中的表進行範式處理,以確保數據庫聽從適當的範式,從而使設計的數據庫更加規範。
目前關係數據庫有6種範式:第一範式(1NF)、第二範式(2NF)、第三範式(3NF)、第四範式(4NF)、第五範式(5NF)和第六範式(6NF)。知足最低要求的是第一範式(1NF)。在第一範式的基礎上知足更多要求的範式稱爲第二範式(2NF),其他的範式以此類推。通常來講,數據庫只須要知足第三範式(3NF)便可。
若是關係模式R的每一個關係r的屬性都是不可分的數據項,那麼就稱R是第一範式的模式。第一範式是設計數據庫表的最低要求,其最主要的特色是實體的屬性不能再分,映射到表中,就是列(或字段)不能再分。
即:一個表中的列是不可再分的(即列的原子性)。
如表1.2,聯繫範式,對於學號‘1001’學生來講,‘聯繫方式’列包含電話和郵箱,能夠再分,不符合第一範式要求。
如表1.3,列不可再分,符合了第一範式要求。
若是關係模式R知足第一範式,而且R得全部非主屬性都徹底依賴於R的每個候選關鍵屬性,稱R知足第二範式,簡記爲2NF。
如表1.3,姓名和選修課有對於關係,可是姓名和教材沒有對應關係,選修課程和教材有對對應關係,從而該表不符合第二範式標準。
將表修改後如表1.4和1.5,符合第二範式標準。
若是關係模式R是2NF,且關係模式R(U,F)中的全部非主屬性對任何候選鍵都不存在傳遞依賴,則成關係R是屬於第三範式的模式。
如表1.6知足2NF,可是知道班級後必然能知道該學生 屬於哪一個系,因此存在傳遞依賴,不符合3NF規範,因此講班級和系別屬性拆分如表1.7,和1.8,從而符合3NF標準。
表1.6
學號 | 姓名 | 班級 | 系別 |
1001 | 張三 | 計算機科學與技術1班 | 計算機系 |
1002 | 李四 | 會計1班 | 經管系 |
學號 | 姓名 | 班級 |
1001 | 張三 | 計算機科學與技術1班 |
1002 | 李四 | 會計1班 |
班級 | 系別 |
計算機科學與技術1班 | 計算機系 |
會計1班 | 經管系 |
三大範式只是通常設計數據庫的基本理念,能夠創建冗餘較小、結構合理的數據庫。若是有特殊狀況,固然要特殊對待,數據庫設計最重要的是看需求跟性能,需求>性能>表結構。因此不能一味的去追求範式創建數據庫。