MySQL三大範式詳解(小白也能懂哦)

1.範式基礎

1.1範式的概念

設計數據庫的時候需要遵從的一些規範,目前關係數據庫有六種範式:第一範式(1NF)、第二範式(2NF)、第三範式(3NF)、巴斯-科德範式(BCNF)、第四範式(4NF)和第五範式(5NF,又稱完美範式)。

當然正常情況下我們滿足前三個範式就可以設計一個比較規範的數據庫

要遵循後邊的範式,就必須先遵循前面的範式要求,比如第二範式就必須先遵循第一範式的,第三範式必須先遵循第二範式,以此類推

在這裏插入圖片描述

2.三大範式

2.1三大範式概念

第一範式(1NF):每個列都不可以再拆分。
第二範式(2NF):在第一範式的基礎上,非主鍵列完全依賴於主鍵,而不能是依賴於主鍵的一部分。
第三範式(3NF):在第二範式的基礎上,非主鍵列只依賴於主鍵,不依賴於其他非主鍵。

2.2三大範式舉例

比如我們有一個表,以後的例子會對這個表進行三大範式的改造,然後把他變成規範的表:
在這裏插入圖片描述

1.進行第一範式的改造

第一範式(1NF):每個列都不可以再拆分

我們可以看到表中有一列可以再分,那就是系,所以把他進行第一範式的改造就變成了:
在這裏插入圖片描述
2.進行第二範式的改造

第二範式(2NF):在第一範式的基礎上,非主鍵列完全依賴於主鍵,而不能是依賴於主鍵的一部分。

這第二範式不好理解,那麼我們先了解幾個概念:

1.函數依賴:如果通過A屬性(屬性組),可以確定唯一B屬性的值,那麼B依賴於A。比如上圖的姓名,完全依賴於學號
2.完全函數依賴:如果A是一個屬性組,則B屬性值的確定需要依賴於A屬性組中的所有的屬性值。屬性組是指多個字段,那麼比如我們要想知道一個分數,就必須依賴於學號和課程名稱兩個屬性才能確定一個分數,其他的屬性是不能確定某一個分數的
3.部分函數依賴:如果A是一個屬性組,則B屬性值的確定需要依賴A屬性組的某一些字段即可,例如學號和課程名稱爲一個屬性組,那麼學生姓名其實就只需要學號就可以確定
4.傳遞函數依賴:如果A屬性(屬性組),可以確定唯一個B屬性的值,再通過B屬性的值又可以唯一確定C屬性的值,例如一個學號確定一個系名,一個系名對應一個系主任
5.主鍵:在一張表中,一個屬性或者屬性組,被其他所有屬性完全依賴,則稱這個屬性爲該碼的表,比如上圖的學號和課程名稱組成的屬性組

其實第二範式就是還可以理解爲

在第一範式的基礎上消除非主鍵對主鍵的部分依賴

那麼我們上圖的主鍵爲學號加課程名稱組成的屬性組,對於上圖,我們可以看到,除了分數其他的都對主鍵是部分依賴,那麼我們可以按照下圖的方式進行改正:
在這裏插入圖片描述
在這裏插入圖片描述

經過第二範式的改造把一個表分成兩個表,那麼我們發現其實第二範式爲我們消除了很多冗餘的部分,比如改造前張無忌的姓名系名系主任在表中出現了三次,而改造後在兩表纔出現一次

3.進行第三範式的改造:

第三範式(3NF):在第二範式的基礎上,非主鍵列只依賴於主鍵,不依賴於其他非主鍵。

根據第二點我們說的概念,修改後變成:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章