關聯表正規化
正規化最重要的就是處理「主鍵」與「屬性」間的「Functional Depedencies, FD, 功能相依」,它是一種由上而下(Top-Down)的分析法,依照正規化的層度不同,共分為1NF ~ 5 NF(Normal Form)共六種,我沒寫錯共六種,在3 NF ~ 4 NF之間有一個特別的NF稱BCNF(Boyce-Codd Normal Form),所以共六種。在進行正規化之中,由1 NF進行到2 NF,一步步往下進行,而且2 NF一定滿足前一個1 NF的條件,同理,BCNF一定滿足1,2,3 NF的條件。一般而言,最少要進行到3 NF或BCNF,如有特別的情況才會進行之後4, 5 NF。
1NF --> 2NF --> 3NF --> BCNF --> 4NF --> 5NF
正規化的簡易定義
原始的正規化定義寫的非常數學及文言,我用盡量用白話一點來說:- 第一正規化(1 NF, First Normal Form):屬性只包含單元值(Atom Value)。
- 第二正規化(2 NF, Second Normal Form):滿足1NF且關聯表沒有「部份相依(PFD, Partial Functional Depedencies)」。(去除非鍵屬性的部份相依)
- 第三正規化(3 NF, Third Normal Form):滿足2NF且關聯表沒有「移遞相依(TDF, Transitive Functional Depedencies)」。(去除非鍵屬性的遞移相依)
- Boyce-Codd正規化(BCNF, Boyce-Codd Normal Form):廣義的3 NF,關聯表有屬多個複合候選鍵,需要刪除候選鍵之間的功能相依。
第四、第五正規化一般不常見,時間充足的話,再介紹。
FD, Functional Depedencies 功能相依
先解決什麼是「功能相依」,後面你在來頭看就知道什麼是部份相依、移遞相依、候選鍵之間相依。功能相依:在設計Schema時,描述屬性之間的關係就是「功能相依」,一個功能相依就是指兩個屬性集合間的限制條件。
功能相依定義:
若且唯若R中的X資料值可唯一決定Y的資料值時,稱Y功能相依於X。記成「X --> Y」或念成「X功能決定Y」。
以我們之前例子來說明:
A個人資料表(身份證字號, 姓, 名, 性別, 出生, 連絡電話)
B員工資料表(員工編號, 身份證字號, 抬頭, 部門, 電子郵件, 分機)
個人資料表中的身份證字號可以決定你的姓、名、性別…等,所以姓名等功能相依於身份證字號。員工資料表亦同,身份證字號、抬頭、部門…功能相依於員工編號。
那以我們的「ChinaArea(省級, 一級, 二級, 區域, 行政區)」來看:
- 省級 --> 一級
- 省級 --> 二級
- 省級 --> 區域
- 一級 --> 二級
- 一級 --> 區域
- 二級 --> 區域
- 區域 --> 行政區
找出功能相依後,我們大概就能找出:
- 不必要屬性
一些不該屬於此關係表屬性。 - 主鍵或候選鍵
如果關聯表的所有屬性都是相依於一個或一組屬性來決定,那這個一個或一組屬性就是主鍵或候選鍵。
這裡算是前半部結束,從了解異常,了解Keys,了解NF有1到3/BCNF,了解功能相依,這樣我們才能繼續下去走正規化的路。
沒有留言:
張貼留言
感謝您的留言,如果我的文章你喜歡或對你有幫助,按個「讚」或「分享」它,我會很高興的。