正規化
消除資料間的依賴性,而使得資料庫檔案內的資料欄位分配合理化,確定哪些資料欄位該在同一檔案內,哪些欄位又該分開在不同檔案內,使資料不重複。
解決在資料更新、增刪時所衍生之問題。
比較常見的有
- 第一正規式
- 第二正規式
- 第三正規式
- BC正規式
依賴性
在一檔案中,若B欄位對A欄位依賴,則表示B欄位的值可由A欄位的值唯一決定,以A $\rightarrow$ B表示。
- 全依賴 : 主鍵由多個欄位組合而成,若某非主鍵欄位依賴主鍵之全部時,則稱該欄位全依賴於主鍵。
- 部分依賴 : 主鍵由多個欄位組合而成,若某非主鍵欄位依賴主鍵之部分時,則稱該欄位部分依賴於主鍵。
- 遞移依賴 : 若一檔案中的A、B、C三欄位,形成B依賴A,C依賴B,C也依賴A,即稱為遞移依賴。
第一正規化
沒有重複群組(repeating group)的檔案即為第一正規式。
重複群組之意為某一或多個欄位儲存於一個以上的資料值。
沒有第一正規化會衍生出的問題
新增記錄時
當有一新人加入時,但未有任何經歷時,將造成資料記錄不完整,若資料已存在造成資料重複。更新資料時
所某人有多種經歷,則有多筆記錄在檔案中,每筆記錄均含有此人之身分證字號、姓名、居住地等資料,此人若有資料異動,則必須更動多筆資料。如此不僅浪費空間,而且更新時亦浪費時間刪除記錄時
若某人有多種經歷,則有多筆紀錄在檔案中,若我們要刪除此人的資料,則必須刪除多筆
轉成第一正規化的方法
去除重複群組的欄位
並將主鍵與重複群組建為一組
第二正規化
必為第一正規式
所有非主鍵欄位均對主鍵全依賴。
沒有第二正規化會衍生出的問題
新增記錄時
當有一新供應商設立,但未供應任何零件時,我們無法將其名稱和基本資料鍵入檔案中,因主鍵中只有供應商代號而無零件代號,主鍵不完全的紀錄無存在的意義。更新資料時
若某一供應商供應多種零件,則有多筆資料在檔案中,每筆紀錄均含有此時供應商名稱和基本資料,此時若該供應商的基本資料有異動,則有多筆資料需更新。如此不僅重複儲存浪費空間,而更新時亦浪費時間。刪除記錄時
當某一供應商僅供應一種零件時,則僅有一筆紀錄在檔案中,此時若該供應商不供應該零件了,我們勢必要刪除此記錄,但這個動作將連結供應商名稱和基本資料一併刪除,這可能不是我們要的結果。
轉成第二正規化的方法
把部分依賴的欄位及他依賴的主鍵另建一組
原來的檔案只保留全依賴的欄位和主鍵
第三正規化
必為第二正規式
去除遞移依賴
沒有第三正規化會衍生出的問題
新增記錄時
當學校新聘一位教師,但該教師未正式授課時,我們無法新增教師的資料,因主鍵為空白的紀錄無存在的意義。更新資料時
若某一教師教授多門課時,則有多筆記錄在檔案中,每筆記錄均含有教師住所資料,此時若該教師住所資料有異動,則有多筆紀錄紀錄需更新,如此不僅重複儲存浪費空間,而更新時亦浪費時間。刪除記錄時
當某教師僅教授一門課時,則僅有一筆紀錄在檔案中,此時若該門課停開,勢必刪除此記錄,但這個動作將連教師住所資料一併刪除。
轉成第三正規化的方法
把遞移依賴的欄位和其所依賴的主鍵欄位另組一檔,保留非遞移依賴的欄位和主鍵。