官术网_书友最值得收藏!

3.1.3 關系模式的規范化

關系數據庫中的關系是要滿足一定規范化要求的,對于不同的規范化要求程度,可以用“范式”來衡量,記作NF(Normal Formulation)。范式是表示關系模型的級別,是衡量關系模型規范程度的標準,達到范式的關系才是規范化的。滿足最低要求的關系為第一范式,簡稱為1NF;在第一范式的基礎上,進一步滿足一些要求的關系為第二范式,簡稱為2NF,依次類推。

1.第一范式(1NF)

定義:如果關系R的每一個屬性的值為不可分離的原子值,即每個屬性都是不可再分的基本數據項,則R是第一范式,記作R∈1NF。

這是關系模式必須達到的最低要求,不滿足該條件的關系模式稱為非規范化關系,即非第一范式。目前,大部分商用的關系數據庫管理系統處理的關系要求至少是1NF的。下面的兩個關系中,“部門”關系是1NF的,而“職工”關系是非1NF的。

部門:

職工:

將“職工”關系轉換為1NF:

即將屬性“工資”分解成3個不可再分的屬性——基本工資、補貼、獎金。

2.第二范式(2NF)

定義:如果關系R∈1NF,且R中每一非主屬性完全函數依賴于主關鍵字,則R是第二范式,即R∈2NF。

設有一個“職工情況表”關系如下:

職工情況表(職工工號,職工姓名,性別,出生年月,起始至終止年月,工作單位,證明人)

該關系的關鍵字為{職工工號,起始至終止年月{。而在非主屬性中,只有屬性“工作單位”和“證明人”是完全函數依賴于主關鍵字,職工姓名、性別、出生年月對主關鍵字都是部分函數依賴,因為只要有了“職工工號”就可以確定它們的值。所以,“職工情況表”關系模式不是2NF。

通過簡單的投影分解可以使非2NF的關系轉化為2NF的關系,其方法為:將部分函數依賴關系中的主屬性(決定方)和非主屬性從關系模式中提出,單獨構成一個關系模式;將關系模式中的余下的屬性,加上主關鍵字,構成另一個關系模式。如“職工情況表”關系模式可分解成以下兩個2NF的關系模式:

職工情況(職工工號,職工姓名,性別,出生年月)

職工履歷(職工工號,起始至終止年月,工作單位,證明人)

下劃線標出的屬性構成主關鍵字。

這里所說的投影分解,是指所得關系是原關系的投影。

而在分解后的關系模式中,仍存在著分解前的函數依賴關系:

{職工工號}→{職工姓名},{職工工號}→{性別},{職工工號}→{出生年月},每個職工的工號是唯一的。

{職工工號,起始至終止年月}→{工作單位},{職工工號,起始至終止年月}→{證明人}。

3.第三范式(3NF)

定義:如果R∈2NF,且它的任何一個非主屬性都不傳遞依賴于任何主關鍵字,則R是第三范式,記作R∈3NF。

將非3NF的關系轉化為3NF的關系可以采用以下方法。

(1)將起傳遞作用的函數依賴關系中的主屬性(決定方)和非主屬性提出單獨構成一個關系模式,再將它的決定方和關系模式中余下的屬性,加上主關鍵字,構成另一個關系模式。

(2)去掉關系模式中的多余項。

設有一個“配件庫存”關系如下:

配件庫存(配件編號,供應商名稱,價格,庫存數量,庫存占用資金)

其中同一種配件可以由不同的供應商提供,不同的供應商提供的同一種配件的價格是不一樣的,庫存數量也是不一樣的,所以,該關系模式中存在的函數依賴是{配件編號,供應商名稱{→{價格{,{配件編號,供應商名稱{→{庫存數量{,{價格,庫存數量{→{庫存占用資金{,該關系是2NF,但非主屬性“庫存占用資金”傳遞函數依賴于主關鍵字{配件編號,供應商名稱{,因為“庫存占用資金”等于“價格”乘以“庫存數量”,而“價格”和“庫存數量”是函數依賴于主關鍵字的,所以“庫存占用資金”傳遞函數依賴于主關鍵字,該關系模式不是3NF。可將關系模式中非主屬性“庫存占用資金”去掉,使其成為以下的3NF:

配件庫存(配件編號,供應商姓名,價格,庫存數量)

4.BCNF

第三范式的關系模式消除了非主屬性對關鍵字的傳遞函數依賴和部分函數依賴,但并不很徹底,因為在存在多個關鍵字或關鍵字為屬性組時,仍有可能存在主屬性對關鍵字的部分函數依賴和傳遞函數依賴,由此也會造成數據的冗余,從而給操作帶來問題。

為了解決第三范式的不徹底性,Boyce和Codd于1974年共同提出了改進的第三范式,即Boyce/Codd范式,簡記為BCNF。Boyce/Codd范式通過消除決定因素不含關鍵字的函數依賴,從而消去主屬性之間的部分函數依賴和傳遞函數依賴。

定義:如果關系R∈3NF, X,YU,若X→Y,且YX時,X必含有碼,則R是BCNF,即R∈BCNF。

從BCNF的定義可以看出,一個滿足BCNF的關系模式一定是:

(1)非主屬性對關鍵字完全函數依賴;

(2)主屬性對不包含它的關鍵字完全函數依賴;

(3)沒有屬性完全函數依賴于一組非主屬性。

第三范式和BCNF有一定的關系。一個關系模式屬于BCNF,則一定屬于3NF, BCNF是3NF的特例。但反之則不然,屬于3NF的關系不一定是BCNF,3NF是對BCNF放寬一個限制,即允許決定因素中不包含碼。

5.第四范式

第四范式是BCNF的推廣,它適用于多值依賴的關系模式。

定義:如果關系模式R∈BCNF,若X→→Y(YX)是非平凡的多值依賴,且X含有碼,則稱R是第四范式,即R∈4NF。

一個關系范式如果屬于4NF,則一定屬于BCNF,但一個BCNF的關系模式不一定是4NF。使關系模式達到4NF的方法是消除非平凡、非函數依賴的多值依賴。

如果關系模式R(X, Y,Z)滿足多值依賴X→→Y, Y→→Z,那么可以將其投影分解為R1(X, Y)和R2(Y, Z)兩個關系模式。

到目前為止,規范理論已經提出五級范式,但在實際應用中最有價值的是3NF或BCNF。所以,一般分解到3NF就可以了。

主站蜘蛛池模板: 湄潭县| 江北区| 来宾市| 桐庐县| 宜丰县| 武宁县| 黄龙县| 马公市| 宣化县| 平谷区| 昌平区| 黔西| 庄河市| 且末县| 彩票| 印江| 宁远县| 上高县| 耿马| 昭平县| 宁晋县| 天等县| 阿尔山市| 陆良县| 旺苍县| 庆安县| 防城港市| 宣化县| 安岳县| 辽宁省| 衡阳市| 高邮市| 屯昌县| 榕江县| 喀喇沁旗| 天门市| 定安县| 平陆县| 滦平县| 虹口区| 商城县|