數(shù)據(jù)庫中的范式指的是滿足某種設(shè)計規(guī)范,常見有1NF,2NF,3NF,BCNF,4NF。下面是自己的一些簡單理解,同時可參考:
解釋一下關(guān)系數(shù)據(jù)庫的第一第二第三范式? - 劉慰的回答 - 知乎
https://www.zhihu.com/question/24696366/answer/29189700
1NF:屬性是最小的的單元不可再分
1NF是指表中的每個屬性是不可分的,比如一個屬性為“地址”,其應(yīng)細分為“地級市”,“街道號”,“門牌號”等不可再分的原子屬性,此時才能滿足1NF。當(dāng)然所謂的原子屬性也是相對而言的
2NF:消除非主屬性對主碼的部分函數(shù)依賴
簡單理解為假如一個表中R(A,B,C,D):
- 其中A和B構(gòu)成主碼,即由確定的(A,B)可以索引到表中的某個確定的元組
- 此時如果對于屬性C,其可以由屬性A唯一確定
此時非屬性C便對主碼(A,B)存在部分函數(shù)依賴,那么此時的R便是沒有滿足2NF,可以將R分解為下列兩個表,使其分別滿足2NF:R1(A,C),R2(A,B,D)
3NF:在2NF上消除非主屬性對碼的傳遞函數(shù)依賴
3NF是在滿足2NF之上加上一個限制:非主屬性間不能存在函數(shù)依賴,即假如有一個表R(A,B,C),主碼為A,如果存在非主屬性間的一個函數(shù)依賴如:$B\rightarrow C$ , 即確定了一個B的值,就可以唯一知道一個C的值。那么此時便有$A\rightarrow B, B \rightarrow C$ ,即屬性C對主碼A有傳遞函數(shù)依賴,那么,此時的表便不滿足3NF。可以將其分解為兩個表,使其分別滿足3NF:R1(A,B),R2(A,C)
BCNF:在3NF上消除主屬性對碼的部分函數(shù)依賴和傳遞函數(shù)依賴
到3NF,消除的是非主屬性對碼的函數(shù)依賴,BCNF需要消除主屬性對碼的函數(shù)依賴(部分函數(shù)依賴和傳遞函數(shù)依賴),直觀上看,假如碼只有一個屬性,那么其在滿足3NF的同時也就會滿足BCNF。假如碼有多個屬性,那么需要通過拆分成多個表來消去這些屬性對碼的函數(shù)依賴關(guān)系
4NF:將一個表拆分為多個表的自然連接
假如一個表是由多個表自然連接生成的,那么其可以拆分成多個表的自然連接,如:
A | B | C |
---|---|---|
a | 1 | 男 |
a | 1 | 女 |
a | 2 | 男 |
a | 2 | 女 |
那么其可以拆成兩張表:
A | B |
---|---|
a | 1 |
a | 2 |
和
A | C |
---|---|
a | 男 |
a | 女 |