2009年12月28日

資料正規化

在講正規化之前必需先說明的是「功能相依」,假設一個學生資料表之中,學號的欄位值是唯一的,所以學號的欄位值決定了姓名的欄位值;我們就可以說姓名功能相依於學號,或者說學號功能相依姓名。

將表格細分成多個更小的表格,直到每個表格只描述一種事實為止,這一連串的調整過程就稱為資料正規化(Normalization)

正規化的目的何在?簡單的說就是要將資料的重覆性降至最低(避免資料重複的狀況發生)。倘若在不同的表格中都有學生的姓名時,一旦有個學生改名了,則必須 同步更改多個表格的內容;修改的過程中若稍有遺漏,有些資料沒更正,就會發生不一致的狀況。因此,避免資料重複是相當重要的。

一般來說,正規化的步驟分為四個
第一正規化(1NF):每個一表格都會有一個 主鍵 ( Primary Key ),同時每一個表格 ( Table ) 中的每一列 ( Row ) 的每一欄 ( Column ),都只能存放單一的資料值。
第二正規化(2NF):在表格中的每一個不是主鍵的欄位都只能與主鍵有功能相依性。
第三正規化(3NF):在表格中的每一個不是主鍵的欄位都必須與完整的主鍵有功能相依性。
廣義第三正規化(BCNF):如果主鍵為單一欄位時,就不需要考慮這個狀況了。但是當主鍵為複合欄位時,必須逐一檢視主鍵中每一個單獨的欄位是否與其他欄位有相依性的關係,如果有的話就必須進一步拆解表格。
每一步驟的正規化都是往下包含的,也就是說符合第三正規化也就一定符合第二正規化,也就一定符合第一正規化。

當然也是有人提出第四、五正規化,但是一般的資料庫設計並不需要用到那麼細緻的分割,有時甚至還需要反正規化,因此,就不詳細介紹第四、五正規化。

沒有留言:

張貼留言