https://blog.csdn.net/sumaliqinghua/article/details/86246762 【通俗易懂】關係模式範式分解教程 3NF與BCNF口訣!小白也能看懂原創置頂 沃茲基.碩德 最後發佈於2019-01-10 18:26:14 閱讀數 13082 收藏展開本來是為 ...
https://blog.csdn.net/sumaliqinghua/article/details/86246762
【通俗易懂】關係模式範式分解教程 3NF與BCNF口訣!小白也能看懂
原創置頂 沃茲基.碩德 最後發佈於2019-01-10 18:26:14 閱讀數 13082 收藏
展開
本來是為了複習資料庫期末考試,結果找了一圈都沒有發現比較好的解釋,通過查閱資料和總結,為大家提供通俗易懂的解法,一聽就會!並且配有速記口訣!介是你沒有玩過的船新版本包含最小依賴集求法候選碼求法
在模式分解之前,首先對於1NF,2NF,3NF,BCNF做一個簡明扼要的介紹。
1NF是指資料庫表的每一列都是不可分割的基本數據項,即實體中的某個屬性不能有多個值或者不能有重覆的屬性。
2NF要求屬性完全依賴於主鍵,不能存在僅依賴主關鍵字一部分的屬性。
3NF要求每一個非主屬性既不部分依賴於碼也不傳遞依賴於碼。
BCNF消除了主屬性對候選碼的部分和傳遞函數依賴。
註:1.相對於BCNF,3NF允許存在主屬性對候選碼的傳遞依賴和部分依賴。
2.BCNF比較抽象,略作解釋:在學生信息表裡,學號是一個候選碼,學號可確定學生姓名;(班級,學生姓名)也是一組候選碼,有(班級,學生姓名)->學號,因此在主屬性間形成了傳遞依賴。
3.若對概念不清晰,關於碼、候選碼、主屬性、非主屬性的解釋可參看:
https://blog.csdn.net/sumaliqinghua/article/details/85872446#commentBox
我們的重點是講解範式分解:
一、3NF分解
分為保持依賴和無損連接
為了說明求解保持依賴,我們先要會求最小依賴集
(1)最小依賴集求法:
口訣:右側先拆單,依賴依次刪。
還原即可刪,再拆左非單。
通過求下麵的最小依賴集對口訣進行解釋,
(2)3NF分解:
口訣:
保函依賴分解題,先求最小依賴集。
依賴兩側未出現,分成子集放一邊,剩餘依賴變子集。
若要連接成無損,再添候選做子集。
下麵通過幾道例題講解口訣:
例1.已知R(ABCDE), F={A ->D,E->D,D->B,BC->D,DC->A}求保持函數依賴的3NF分解,和具有無損連接性及保持函數依賴的3NF分解
第一步:保函依賴分解題,先求最小依賴集。先求出R的最小依賴集,可得F={A ->D,E->D,D->B,BC->D,DC->A}
第二步:依賴兩側未出現,分成子集放一邊。首先可以發現沒有不出現在兩側的元素不用單獨分出一個子集,“剩餘依賴變子集”然後我們將各依賴分別劃分為子集得到:{AD} {ED} {DB} {BCD} {DCA},即為所求保持函數依賴的3NF分解
第三步:若要連接成無損,再添候選做子集。
(1)候選碼的求解:所謂候選碼即能決定整個關係的,我們通過找未出現在依賴右邊的和兩側均未出現的元素即可求得,
(2)可以發現C E未出現在右邊,因此候選碼為{CE}。故所求具有無損連接性及保持函數依賴的3NF分解為{AD} {ED} {DB} {BCD} {DCA} {CE}
例2.關係模式R,有U={A,B,C,D,E,G},F={B->G,CE->B,C->A,CE->G,B->D,C->D},將關係模式分解為3NF且保持函數依賴
將關係模式分解為3NF且保持函數依賴:
第一步:保函依賴分解題,先求最小依賴集。先求出R的最小依賴集,
假設B->G冗餘,則(B)+=BD,沒有G故不冗餘。
假設CE->B冗餘,則(CE)+=CEGDA,沒有B故不冗餘。
假設C->A冗餘,則(C)+=CD,故不冗餘。
一次可以得到最小函數依賴集Fm={B->G,CE->B,C->A,B->D,C->D}
第二步:依賴兩側未出現,分成子集放一邊,剩餘依賴變子集。首先可以發現沒有不出現在兩側的元素,然後我們將各依賴分別劃分為子集得{BG} {CEB} {CA} {BD} {CD},即為所求保持函數依賴的3NF分解
第三步:若要連接成無損,再添候選做子集。找到R的一個候選碼為{ACE}。故所求具有無損連接性及保持函數依賴的3NF分解為{BG} {CEB} {CA} {BD} {CD} {ACE} (註:範式分解並不唯一,正確即可)
二、BCNF分解:
將關係模式R<U,F>分解為一個BCNF的基本步驟是
1)先求最小依賴集,候碼非碼成子集
3)餘下左側全候碼,完成BCNF題。
例.關係模式R,有U={A,B,C,D,E,G},F={B->G,CE->B,C->A,CE->G,B->D,C->D},將關係模式分解為3NF且保持函數依賴
將關係模式分解為3NF且保持函數依賴:
第一步:先求最小依賴集。可以發現CE->G多餘,因此最小依賴集為F={B->G,CE->B,C->A,B->D,C->D}。
第二步:候碼非碼成子集。由於候選碼為(CE)因此將CE->B劃分出子集(BCE),而B->G,B->D左側均不含主屬性(C、E)中的任何一個故劃分出(BG),(BD)
第三步:此時剩餘依賴F={C->A,C->D}剩餘元素{A,C,D}檢查發現函數依賴左側都是候選碼即完成BCNF分解,如果不滿足則繼續分解餘下的。
於是BCNF分解的最後結果為{(BG),(BD),(ACD),(BCE)}。
如有疑問請在評論區留言,如有幫助麻煩右上角點個贊~~蟹蟹
三、總結
1.閉包
2.候選碼
3.最小依賴集
4.3NF分解
5.BCNF分解
————————————————
版權聲明:本文為CSDN博主「沃茲基.碩德」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/sumaliqinghua/article/details/86246762