總網頁瀏覽量

2013年1月22日 星期二

資料庫正規化的觀念

第一正規化1NF:每個欄位只能有一個值,且要有主鍵
第二正規化2NF:選出多個主鍵能與每個欄位相依,
再依主鍵相依關係切出多張資料表。
踢掉redundant data欄位。另一說將與主鍵不相干的欄位踢掉

第三正規化3NF:將遞移關係的欄位,
再切出適當無遞移關係的資料表

第一正規化不難理解,table每個格子只能有一個值,且紀錄不可重複,所以用主鍵區別紀錄


但是第二正規化跟第三正規化
只看定義就很難理解阿.........
一直以來不懂相依的定義是什麼?何謂相依關係?
何謂遞移關係?什麼叫適當無遞移關係?
在我理解:相依就是"不獨立"的意思,遞移就是a>b且b>c則a>c
可是實在無法將資料表單與數學連接在一起......


看到BBS的database板網友Adonisy以下描述,讓我立刻明白正規化是幹嘛用的:

第二正規化為了避免屬性重複存在不同於實體,造成重複修改問題
例如顧客有地址屬性,訂單有地址屬性,如果這兩個是同個定義
你修改顧客地址就也要修改訂單

第三正規化為了避免資料刪除後,就把隱實體刪除
例如訂單中有顧客,如果顧客沒有獨立成一個實體,你刪訂單
刪著刪著,有一天顧客都會被你刪掉而找不到
所以才會有什麼遞移相依,間接相依有的沒有的名詞


正規化是一種"檢查",而非設計資料庫時以"設計正規化為主"
就是設計資料庫會先找一個方法論設計,像用 ER方法論設計
 設計完後,用正規化原理檢查是否還要再分出實體
 而非用正規化來設計資料庫
 換言之,我們 ER方法論一開始就開宗名義,實體屬性,用屬性描述實體
 在實體的眾多屬性中,找一個屬性為主鍵代表實體

沒有留言:

張貼留言