MySQL學(xué)習(xí)之三大范式詳解小白篇
1.范式基礎(chǔ)
1.1范式的概念
設(shè)計(jì)數(shù)據(jù)庫(kù)的時(shí)候需要遵從的一些規(guī)范,目前關(guān)系數(shù)據(jù)庫(kù)有六種范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又稱(chēng)完美范式)。
當(dāng)然正常情況下我們滿(mǎn)足前三個(gè)范式就可以設(shè)計(jì)一個(gè)比較規(guī)范的數(shù)據(jù)庫(kù)
要遵循后邊的范式,就必須先遵循前面的范式要求,比如第二范式就必須先遵循第一范式的,第三范式必須先遵循第二范式,以此類(lèi)推
2.三大范式
2.1三大范式概念
第一范式(1NF):每個(gè)列都不可以再拆分。
第二范式(2NF):在第一范式的基礎(chǔ)上,非主鍵列完全依賴(lài)于主鍵,而不能是依賴(lài)于主鍵的一部分。
第三范式(3NF):在第二范式的基礎(chǔ)上,非主鍵列只依賴(lài)于主鍵,不依賴(lài)于其他非主鍵。
2.2三大范式舉例
比如我們有一個(gè)表,以后的例子會(huì)對(duì)這個(gè)表進(jìn)行三大范式的改造,然后把他變成規(guī)范的表:

1.進(jìn)行第一范式的改造
第一范式(1NF):每個(gè)列都不可以再拆分
我們可以看到表中有一列可以再分,那就是系,所以把他進(jìn)行第一范式的改造就變成了:

2.進(jìn)行第二范式的改造
第二范式(2NF):在第一范式的基礎(chǔ)上,非主鍵列完全依賴(lài)于主鍵,而不能是依賴(lài)于主鍵的一部分。
這第二范式不好理解,那么我們先了解幾個(gè)概念:
1.函數(shù)依賴(lài):如果通過(guò)A屬性(屬性組),可以確定唯一B屬性的值,那么B依賴(lài)于A。比如上圖的姓名,完全依賴(lài)于學(xué)號(hào)
2.完全函數(shù)依賴(lài):如果A是一個(gè)屬性組,則B屬性值的確定需要依賴(lài)于A屬性組中的所有的屬性值。屬性組是指多個(gè)字段,那么比如我們要想知道一個(gè)分?jǐn)?shù),就必須依賴(lài)于學(xué)號(hào)和課程名稱(chēng)兩個(gè)屬性才能確定一個(gè)分?jǐn)?shù),其他的屬性是不能確定某一個(gè)分?jǐn)?shù)的
3.部分函數(shù)依賴(lài):如果A是一個(gè)屬性組,則B屬性值的確定需要依賴(lài)A屬性組的某一些字段即可,例如學(xué)號(hào)和課程名稱(chēng)為一個(gè)屬性組,那么學(xué)生姓名其實(shí)就只需要學(xué)號(hào)就可以確定
4.傳遞函數(shù)依賴(lài):如果A屬性(屬性組),可以確定唯一個(gè)B屬性的值,再通過(guò)B屬性的值又可以唯一確定C屬性的值,例如一個(gè)學(xué)號(hào)確定一個(gè)系名,一個(gè)系名對(duì)應(yīng)一個(gè)系主任
5.主鍵:在一張表中,一個(gè)屬性或者屬性組,被其他所有屬性完全依賴(lài),則稱(chēng)這個(gè)屬性為該碼的表,比如上圖的學(xué)號(hào)和課程名稱(chēng)組成的屬性組
其實(shí)第二范式就是還可以理解為
在第一范式的基礎(chǔ)上消除非主鍵對(duì)主鍵的部分依賴(lài)
那么我們上圖的主鍵為學(xué)號(hào)加課程名稱(chēng)組成的屬性組,對(duì)于上圖,我們可以看到,除了分?jǐn)?shù)其他的都對(duì)主鍵是部分依賴(lài),那么我們可以按照下圖的方式進(jìn)行改正:


經(jīng)過(guò)第二范式的改造把一個(gè)表分成兩個(gè)表,那么我們發(fā)現(xiàn)其實(shí)第二范式為我們消除了很多冗余的部分,比如改造前張無(wú)忌的姓名系名系主任在表中出現(xiàn)了三次,而改造后在兩表才出現(xiàn)一次
3.進(jìn)行第三范式的改造
第三范式(3NF):在第二范式的基礎(chǔ)上,非主鍵列只依賴(lài)于主鍵,不依賴(lài)于其他非主鍵。
根據(jù)第二點(diǎn)我們說(shuō)的概念,修改后變成:

以上就是MySQL學(xué)習(xí)之三大范式詳解小白篇的詳細(xì)內(nèi)容,更多關(guān)于MySQL三大范式的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
mysql函數(shù)IFNULL使用的及注意事項(xiàng)說(shuō)明
這篇文章主要介紹了mysql函數(shù)IFNULL使用的及注意事項(xiàng)說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11
MySql子查詢(xún)IN的執(zhí)行和優(yōu)化的實(shí)現(xiàn)
本文主要介紹了MySql子查詢(xún)IN的執(zhí)行和優(yōu)化的實(shí)現(xiàn),詳細(xì)的介紹了為什么IN這么慢以及如何優(yōu)化,具有一定的參考價(jià)值,感興趣的可以了解一下2021-07-07
MySQL在Windows中net start mysql 啟動(dòng)MySQL服務(wù)報(bào)錯(cuò) 發(fā)生系統(tǒng)錯(cuò)誤解決方案
這篇文章主要介紹了MySQL在Windows中net start mysql 啟動(dòng)MySQL服務(wù)報(bào)錯(cuò) 發(fā)生系統(tǒng)錯(cuò)誤解決方案,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07
C#如何在海量數(shù)據(jù)下的高效讀取寫(xiě)入MySQL
這篇文章主要介紹了C#如何在海量數(shù)據(jù)下的高效讀取寫(xiě)入MySQL的相關(guān)資料,需要的朋友可以參考下2016-12-12
深入Mysql,SqlServer,Oracle主鍵自動(dòng)增長(zhǎng)的設(shè)置詳解
本篇文章是對(duì)Mysql,SqlServer,Oracle主鍵自動(dòng)增長(zhǎng)的設(shè)置進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06
解決數(shù)據(jù)庫(kù)有數(shù)據(jù)但查詢(xún)出來(lái)的值為Null問(wèn)題
這篇文章主要介紹了解決數(shù)據(jù)庫(kù)有數(shù)據(jù)但查詢(xún)出來(lái)的值為Null問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-10-10
MySQL百萬(wàn)級(jí)數(shù)據(jù)大分頁(yè)查詢(xún)優(yōu)化的實(shí)現(xiàn)
在數(shù)據(jù)庫(kù)開(kāi)發(fā)過(guò)程中我們經(jīng)常會(huì)使用分頁(yè),但是如果是百萬(wàn)級(jí)數(shù)據(jù)呢,本文就詳細(xì)的介紹一下MySQL百萬(wàn)級(jí)數(shù)據(jù)大分頁(yè)查詢(xún)優(yōu)化的實(shí)現(xiàn),感興趣的可以了解一下2022-01-01
MySQL中的聚合查詢(xún)和聯(lián)合查詢(xún)操作代碼
這篇文章主要介紹了MySQL中的聚合查詢(xún)和聯(lián)合查詢(xún)操作代碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-03-03
MYSQL數(shù)據(jù)插入之返回自增主鍵ID的方法詳解
這篇文章主要介紹了MYSQL數(shù)據(jù)插入之返回自增主鍵ID的方法詳解,mysql中的insert插入之后會(huì)有返回值,返回的是影響的行數(shù),也就是說(shuō),成功插入一條數(shù)據(jù)之后返回的是1,失敗則返回0,那么,很多時(shí)候我們都想要得到最后插入的id值,需要的朋友可以參考下2023-10-10

