1. 程式人生 > 資料庫 >資料庫的六大正規化,你能滿足幾個?

資料庫的六大正規化,你能滿足幾個?

資料庫之六大正規化詳解

關係資料庫中的關係滿足一定要求的,滿足不同程度要求的為不同的正規化。滿足最低要求的叫第一正規化,簡稱1NF;在第一正規化的基礎上滿足進一步要求的稱為第二正規化,簡稱2NF,其餘正規化以此類推。對於各種正規化之間有如下關係:

資料庫的六大正規化,你能滿足幾個?
如下圖所示:
資料庫的六大正規化,你能滿足幾個?
1. 第一正規化 1NF

定義: 屬於第一正規化關係的所有屬性都不可再分,即資料項不可分。

理解: 第一正規化強調資料表的原子性,是其他正規化的基礎。如下圖所示資料庫就不符合第一正規化:
資料庫的六大正規化,你能滿足幾個?
上表將商品這一資料項又劃分為名稱和數量兩個資料項,故不符合第一正規化關係。改正之後如下圖所示:
資料庫的六大正規化,你能滿足幾個?
上表就符合第一正規化關係。

但日常生活中僅用第一正規化來規範表格是遠遠不夠的,依然會存在資料冗餘過大、刪除異常、插入異常、修改異常的問題,此時就需要引入規範化概念,將其轉化為更標準化的表格,減少資料依賴。

規範化: 一個低一級的關係模式通過模式分解可以轉化為若干個高一級正規化的關係模式的集合,這個過程叫做規範化。

2. 第二正規化 2NF

定義: 若某關係R屬於第一正規化,且每一個非主屬性完全函式依賴於任何一個候選碼,則關係R屬於第二正規化。

此處我們需要理解非主屬性、候選碼和完全函式依賴的概念。

候選碼: 若關係中的某一屬性組的值能唯一地標識一個元組,而其子集不能,則稱該屬性組為候選碼。若一個關係中有多個候選碼,則選定其中一個為主碼。

以下所有內容中,主碼或候選碼都簡稱為碼。

例如下圖所示的學生表中,學號和姓名都可以唯一標識一個元組,故該表的候選碼為學號和姓名,主碼我們可以隨便選定其中一個,則選學號為主碼。

學號 姓名 年齡 性別
101 劉晨 19
102 王琪 21
103 張宇 20
104 李琛 19
105 歐陽慧 20

主屬性: 所有候選碼的屬性稱為主屬性。不包含在任何候選碼中的屬性稱為非主屬性或非碼屬性。

在上面的學生表中,學號和姓名就是該關係的主屬性,年齡和性別就是非主屬性。

函式依賴: 設R(U)是屬性集U上的關係模式,X、Y是U的子集。若對於R(U)的任意一個可能的關係r,r中不可能存在兩個元組在X上的屬性值相等,而在Y上的屬性值不等,則稱Y函式依賴於X或X函式確定Y。

完全函式依賴: 設R(U)是屬性集U上的關係模式,X、Y是U的子集。如果Y函式依賴於X,且對於X的任何一個真子集X’,都有Y不函式依賴於X’,則稱Y對X完全函式依賴。記作:如果Y函式依賴於X,但Y不完全函式依賴於X,則稱Y對X部分函式依賴。

資料庫的六大正規化,你能滿足幾個?

理解: 第二正規化是指每個表必須有一個(有且僅有一個)資料項作為關鍵字或主鍵(primary key),其他資料項與關鍵字或者主鍵一一對應,即其他資料項完全依賴於關鍵字或主鍵。由此可知單主屬性的關係均屬於第二正規化。

判斷一個關係是否屬於第二正規化:

  1. 找出資料表中的所有碼;
  2. 找出所有主屬性和非主屬性;
  3. 判斷所有的非主屬性對碼的部分函式依賴。

以上面的學生表為例,表中的碼為學號(碼可以為學號或者姓名,此處假定碼為學號),非主屬性為性別、年齡(其餘都為主屬性),當學號確定時,性別、年齡也都惟一的被確定為,故學生表的設計滿足第二正規化(學生表為單主屬性的關係)。

下面舉一個不滿足第二正規化的關係。
有關係模式S-L-C(Sno, Sdept, Sloc, Cno, Grade),其中Sno, Sdept, Sloc, Cno, Grade依次表示學生的學號、所在的系、住處、課程號、班級,並且每個系的學生住在同一個地方。可知S-L-C的碼為(Sno, Cno),則存在以下函式依賴:
資料庫的六大正規化,你能滿足幾個?
可以看到,非主屬性Sloc、Sdept並不完全函式依賴於碼,因此關係模式S-L-C(Sno, Sdept, Sloc, Cno, Grade)不符合第二正規化。

3. 第三正規化 3NF

定義: 非主屬性既不傳遞依賴於碼,也不部分依賴於碼。

首先我們要理解傳遞函式依賴的概念。
資料庫的六大正規化,你能滿足幾個?
理解: 第三正規化要求在滿足第二正規化的基礎上,任何非主屬性不依賴於其他非主屬性,即在第二正規化的基礎上,消除了傳遞依賴。

在下圖S-L關係中,Sloc對Sno傳遞函式依賴,故該關係不屬於第三正規化。
資料庫的六大正規化,你能滿足幾個?
4. BC正規化 BCFN

定義: 關係模式R<U,F>中,若每一個決定因素都包含碼,則R<U,F>屬於BCFN。

理解: 根據定義我們可以得到結論,一個滿足BC正規化的關係模式有:

  1. 所有非主屬性對每一個碼都是完全函式依賴;
  2. 所有主屬性對每一個不包含它的碼也是完全函式依賴;
  3. 沒有任何屬性完全函式依賴於非碼的任何一組屬性。

例如有關係模式C(Cno, Cname, Pcno),Cno, Cname, Pcno依次表示課程號、課程名、先修課。可知關係C只有一個碼Cno,且沒有任何屬性對Cno部分函式依賴或傳遞函式依賴,所以關係C屬於第三正規化,同時Cno是C中的唯一決定因素,所以C也屬於BC正規化。

5. 第四正規化 4NF

定義: 限制關係模式的屬性之間不允許有非平凡且非函式依賴的多值依賴。

理解: 顯然一個關係模式是4NF,則必為BCNF。也就是說,當一個表中的非主屬性互相獨立時(3NF),這些非主屬性不應該有多值,若有多值就違反了4NF。

6. 第五正規化 5NF

第五正規化有以下要求:
(1)必須滿足第四正規化;
(2)表必須可以分解為較小的表,除非那些表在邏輯上擁有與原始表相同的主鍵。

第五正規化是在第四正規化的基礎上做的進一步規範化。第四正規化處理的是相互獨立的多值情況,而第五正規化則處理相互依賴的多值情況。