所謂的正規化其實就是規則,要設計好乙個結構合理的關係型資料庫,必須滿足一定的規則。
在實際開發中,最常見的設計正規化有三個:
這是最基本的正規化,要求表中的所有字段值都是不可分解的原子值。舉個例子,某些資料庫系統要用到「位址」這個屬性,本來直接將這個「位址」屬性儲存到乙個欄位裡就可以了。但是如果系統會經常訪問「位址」屬性中的城市部分,那麼就得將「位址」這個屬性重新拆分成國別、省份、城市、縣、鄉等詳細的各個部分進行儲存,這樣對位址中某一部分操作的時候會特別方便,如下表所示:
id姓名
省份城市
詳細位址1老王
江蘇南京
***2
老李浙江
杭州***
上邊的**就遵循了第一正規化的要求,這樣對使用者按照城市進行分類的話就非常方便了。
第二正規化在第一正規化的基礎之上,第二正規化要求資料庫表中的每列必須和主鍵相關,而不是跟主鍵中的某一部分相關。即,在同一張表裡只能儲存一種型別的資料,不能毫不相關的資料都扔到一張表裡。如下表所示:
訂單編號
商品編號
商品名稱
客戶所屬單位
****
0011
挖掘機老王
南京皮革產
010-1234567
0022
叉車老李
阿里巴巴
010-1234567
這樣設計**的話,商品名稱實際上不與主鍵訂單編號相關,不滿足第二正規化。我們將其拆分成如下的**:
--------------------------訂單資訊表--------------------------
訂單編號
商品編號
0011
0022
--------------------------訂單專案表--------------------------
訂單編號
客戶所屬單位
****
001老王
南京皮革產
010-1234567
002老李
阿里巴巴
010-1234567
--------------------------商品資訊表--------------------------
商品編號
商品名稱
1挖掘機2叉車
這樣設計就可以了
第三正規化需要確保每列都和主鍵列直接相關而不是間接相關。比如在設計訂單資料表的時候,可以把客戶編號作為乙個外來鍵與訂單表簡歷相應的聯絡。如下兩張表就滿足第三正規化:
--------------------------訂單資訊表--------------------------
訂單編號
訂單專案
業務員訂單數量
客戶編號
001挖掘機李靜3
1002
叉車劉天42
--------------------------客戶資訊表--------------------------
客戶編號
客戶名稱
所屬公司
****1李白
中國銀行
121232141262杜甫
建設銀行
13124354363
這樣在查詢訂單資訊的時候,就可以使用客戶編號來引用客戶資訊表中的記錄,也不必在訂單資訊多次輸入客戶資訊減少了資料的冗餘。
資料庫設計三大正規化資料庫設計三大正規化
為了建立冗餘較小 結構合理的資料庫,設計資料庫時必須遵循一定的規則。在關係型資料庫中這種規則就稱為正規化。正規化是符合某一種設計要求的總結。要想設計乙個結構合理的關係型資料庫,必須滿足一定的正規化。在實際開發中最為常見的設計正規化有三個 1 第一正規化 確保每列保持原子性 第一正規化是最基本的正規化...
資料庫設計三大正規化
為了建立冗餘較小 結構合理的資料庫,設計資料庫時必須遵循一定的規則。在關係型資料庫中這種規則就稱為正規化。正規化是符合某一種設計要求的總結。要想設計乙個結構合理的關係型資料庫,必須滿足一定的正規化。在實際開發中最為常見的設計正規化有三個 1 第一正規化 確保每列保持原子性 第一正規化是最基本的正規化...
資料庫設計三大正規化
為了建立冗餘較小 結構合理的資料庫,設計資料庫時必須遵循一定的規則。在關係型資料庫中這種規則就稱為正規化。正規化是符合某一種設計要求的總結。要想設計乙個結構合理的關係型資料庫,必須滿足一定的正規化。在實際開發中最為常見的設計正規化有三個 1 第一正規化 確保每列保持原子性 第一正規化是最基本的正規化...