10-5 正規化步驟
雖然我們並不需要達到第六階層的正規化,但最起碼還是需要到 3NF 的正規化,因此,我需要由 1NF、2NF、到 3NF 之間按部就班達成。 第一正規化定義如下:『在一個資料表內,所屬欄位的內容都是單元值(Atomic Value),則稱該資料表滿足 1NF。』簡單的說,每個欄位的內容都是最小單元,不可以再分割的。如需要再分割,則需另外再設計資料表的欄位。譬如:學生資料表內某一筆資料的地址是『高雄市鳥松區澄清路 840 號』,它就是一個單元值,不可以再區分其它欄位,譬如縣市、區域等等。
真的需要將地址再區分縣市、區域的話,則資料表必須重新設計,將地址劃分為縣市、區域、道路,如下:(但它每個欄位也是單元值)
如果,如下面設計,姓名與地址同一個欄位存放,那它就不能滿足第一正規化。
第二正規化定義如下:『一個資料表,除了符合第一正規化特性外,所有主鍵以外的欄位都必須與主鍵功能相依,則稱該資料表滿足 2NF。』簡單的說,所有欄位都必須與主鍵之間功能性相依。假設學生選課資料表,記錄著學生選讀那些課程,每一位學生可修讀多門課,主鍵為 {學號、課程名稱},設計如下:
從上表可以看出它包含學生個人資料與成績,由資料表看得出來,我們必須選擇{學號、課程名稱}當複合主鍵。是否主鍵以外的欄位都與主鍵功能相依,探討如下:
如此看起來它不符合第二正規化,可能出現問題如下:
解決的方法很簡單,只要將表格拆成:學生資料表與選課總表等兩個表格即可,當然不僅這樣,往後還會慢慢談到相關技巧。 第三正規化定義如下:『一個資料表,除了符合第二正規化特性外,所有主鍵以外的欄位都僅能與主鍵功能相依,且沒有與其它欄位相依,則稱該資料表滿足 3NF。』簡單的說,所有欄位都必須、且僅能與主鍵之間功能性相依,其它欄位之間不可以有相依的特性存在。假設我們設計學生資料表如下圖,欄位包含有:{學號、姓名、地址、郵遞區號、性別、電話},很容易可以看出必須選擇『學號』為主鍵,是否滿足 3NF 分析如下:
由此可以看出此學生資料表並不能符合 3NF 特性,期可能出現問題如下:
解決的方法是:
由上述正規化的操作可以發現,為了滿足更嚴謹的正規化,就是需要再細分資料表,如此可能再延伸查詢、更新與其它操作的困難。本人建議初學者正規化到這個階段就可以了,目前市面上 70% 以上資料庫系統,也幾乎只到規劃到這樣,如果熟悉資料庫運作之後,有興趣或需要再學習更進一步的正規化階段。 |
翻轉工作室:粘添壽
資料庫系統概論(含邏輯設計)
翻轉電子書系列:
|