資料庫基礎(5)1NF,2NF,3NF,BCNF 四大正規化的定義和判別
阿新 • • 發佈:2018-12-02
正規化很重要呀,我們關係資料庫的設計都要滿足正規化關係
這裡總結一下1NF,2NF,3NF和BCNF
1.第一正規化(1NF)
定義
(1NF, Normal Form) 如果一個關係模式R中的每個屬性A的域值都是原子的,即屬性值是不可再分的,則關係模式R屬於第一正規化,簡記為R ∈ 1NF。若資料庫模式R中的每個關係模式都是1NF,資料庫模式 R∈1NF。
這個非常好理解,基本上,只要題目給了,他就是一個滿足第一正規化的關係模式
2.第二正規化(2NF)
定義
2NF指的就是,我們的關係模式中的所有非主屬性完全依賴於每個鍵。什麼意思呢,這裡呢最重要的是理解什麼是非主屬性
,什麼是主屬性
,什麼是鍵
推薦看另外一個部落格的總結,理解一下鍵的含義: https://blog.csdn.net/fjxcsdn/article/details/76549751
看我之前寫的部落格理解完全依賴和部分依賴的含義: 資料庫基礎(3)函式依賴-平凡依賴,完全依賴,部分依賴,傳遞依賴
那非主屬性和主屬性怎麼理解呢,舉個例子:關係模式R={A,B,C,D} ,已知R的候選鍵是AD , 那麼AD中的A和D就是主屬性,而B和C就是非主屬性。包含在候選鍵裡的屬性就是主屬性!
現在理解鍵和依賴關係的含義之後,我們就可以好好看看2NF是個什麼了
舉例子1:
已知,R={A,B,C},函式依賴集為 F ={ B →C, AC →B } ,判斷關係模式是不是2NF
那麼我們首先看這個R關係模式裡面的鍵是誰
利用資料庫基礎(4)中我們學習的屬性閉包演算法
求出R的候選鍵為:AC
所以第二步 就是看是否有非主屬性部分依賴於主屬性AC (我們這裡的非主屬性就是B)
很明顯並沒有B部分依賴於A或者C ,所以R是2NF
舉例子2
已知,R={A,B,C,D},函式依賴集為F ={ A →C,AD →B },判斷關係模式是不是2NF
和第一個例子一樣,我們首先看這個R中的鍵是誰
用屬性閉包演算法,求出R的候選鍵為:AD (AD+ = ABCD) ,所以C和B都是非主屬性,A和D是主屬性
所以,很明顯,我們發現 AD中的A竟然可以單獨決定C(A->C),所以C部分依賴於AC ,存在非主屬性部分依賴於主屬性,R不是2NF
3.第三正規化(3NF)
定義
第三正規化的意思就是,R中沒有非主屬性傳遞依賴
於R的鍵,R才是3NF
這裡也隱含了一個條件,那就是,如果是R中的主屬性傳遞依賴
於R的鍵,那麼R也是滿足3NF的
注意區分主屬性傳遞依賴和非主屬性傳遞依賴喔
舉例子1
已知R(A,B,C), 其函式依賴集為 F ={ B →C, AC →B };該關係模式是否第3正規化
我們來判斷判斷,首先第一步,找鍵!我們發現AC是候選鍵(AC+=ABC,通過屬性閉包演算法求的候選鍵)
同時由於AC->B , B->C ,所以C傳遞依賴於AC ,那麼R是不是3NF呢?
R 當然是3NF啦,因為R的候選鍵是AC,所以C是主屬性,因此 這裡是主屬性C
傳遞依賴於鍵AC,R是3NF
注意!只有當非主屬性傳遞依賴於R的時候,R才不是3NF
舉例子2
R(A,B,C,D), 其函式依賴集為 F ={AB →C, C →D };該關係模式是否第3正規化