資料庫管理系統中的正規化


規範化是組織資料庫中資料以減少冗餘並提高資料一致性的過程。主鍵在組織資料庫中的資訊方面非常重要。它們有助於確保表中的每一行都有唯一的標識,從而避免任何資訊混淆或丟失。

在本文中,我們將討論資料庫規範化的不同正規化。

規範化

規範化是組織資料庫中資料以避免資料冗餘、插入異常、更新異常和刪除異常的過程。

規範化是組織資料庫中資料以最大限度地減少冗餘和依賴關係的過程。在資料庫設計中,根據表的主鍵存在不同的正規化。這些包括:

第一正規化 (1NF)

1NF 要求表中的每一列都包含原子值,並且每一行都有唯一的標識。這意味著表不能包含重複的組或陣列作為列,並且每一行都必須具有唯一的主鍵。

示例

如果每一列都包含原子值,並且每一行都有唯一的標識,則該表處於 1NF。例如,一個列出客戶及其電話號碼的表:

客戶ID

姓名

電話號碼

1

John

555-1234, 555-5678

2

Jane

555-9876

3

Michael

555-5555

這違反了 1NF,因為“電話號碼”列包含重複的組。

為了將此表規範化為 1NF,我們可以將“電話號碼”列拆分為單獨的行,並新增一個單獨的主鍵列:

客戶ID

姓名

電話號碼

1

John

555-1234

1

John

555-5678

2

Jane

555-9876

3

Michael

555-5555

第二正規化 (2NF)

2NF 在 1NF 的基礎上,要求表中的每一列非主鍵列都完全函式依賴於主鍵。這意味著表不應該存在部分依賴,其中非主鍵列僅依賴於主鍵的一部分。

示例

如果每個非主鍵列都完全函式依賴於主鍵,則該表處於 2NF。例如,一個列出訂單及其明細項的表:

訂單ID

客戶ID

客戶姓名

商品ID

商品名稱

數量

1

1

John

1

襯衫

2

1

1

John

2

褲子

1

2

2

Jane

1

襯衫

1

2

2

Jane

3

帽子

3

這違反了 2NF,因為“客戶姓名”列僅依賴於主鍵的一部分(客戶ID)。為了將此表規範化為 2NF,我們可以將其拆分為兩個表:

訂單ID

客戶ID

商品ID

數量

1

1

1

2

1

1

2

1

2

2

1

1

2

2

3

3

客戶ID

客戶姓名

1

John

2

Jane

第三正規化 (3NF)

3NF 在 2NF 的基礎上,要求表中的每一列非主鍵列都不傳遞依賴於主鍵。這意味著表不應該存在傳遞依賴,其中非主鍵列依賴於另一個非主鍵列。

示例

為了進一步解釋 3NF,讓我們考慮一個列出客戶訂單的表的示例:

訂單ID

客戶ID

客戶姓名

客戶城市

訂單日期

訂單總額

1

100

John Smith

紐約

2022-01-01

100

2

101

Jane Doe

洛杉磯

2022-01-02

200

3

102

Bob Johnson

舊金山

2022-01-03

300

在此示例中,非主鍵列“客戶城市”傳遞依賴於主鍵。也就是說,它依賴於“客戶ID”(不是主鍵的一部分),而不是直接依賴於主鍵“訂單ID”。為了使此表達到 3NF,我們可以將其拆分為兩個表:

表 1:客戶

客戶ID

客戶姓名

客戶城市

100

John Smith

紐約

101

Jane Doe

洛杉磯

102

Bob Johnson

舊金山

表 2:訂單

訂單ID

客戶ID

訂單日期

訂單總額

1

100

2022-01-01

100

2

101

2022-01-02

200

3

102

2022-01-03

300

現在,“客戶城市”列不再傳遞依賴於主鍵,而是位於與主鍵具有直接關係的單獨表中。這使得表符合 3NF。

Boyce-Codd 正規化 (BCNF)

BCNF 是 3NF 的更嚴格形式,適用於具有多個候選鍵的表。BCNF 要求表中的每個非平凡依賴都是對候選鍵的依賴。這意味著表不應該存在非平凡依賴,其中非主鍵列依賴於另一個非主鍵列。BCNF 確保資料庫中的每個表都是一個單獨的實體,並消除了冗餘。

示例

如果每個決定因素都是候選鍵,則該表處於 BCNF。換句話說,表中的每個非平凡函式依賴都必須在候選鍵上。例如,考慮一個列出書籍及其作者資訊的表:

表:書籍

書籍ID

書名

作者ID

作者姓名

作者國籍

1

罪與罰

100

陀思妥耶夫斯基

俄羅斯

2

了不起的蓋茨比

101

F.斯科特·菲茨傑拉德

美國

3

傲慢與偏見

102

簡·奧斯汀

英國

在此示例中,“作者ID”和“作者姓名”之間的函式依賴違反了 BCNF,因為它不在候選鍵上。為了使此表達到 BCNF,我們可以將其拆分為兩個表:

表 1:作者

作者ID

作者姓名

作者國籍

101

陀思妥耶夫斯基

俄羅斯

101

F.斯科特·菲茨傑拉德

美國

102

簡·奧斯汀

英國

表 2:書籍

書籍ID

書名

作者ID

1

罪與罰

100

2

了不起的蓋茨比

101

3

傲慢與偏見

102

現在,“作者姓名”和“作者國籍”列不再傳遞依賴於主鍵,並且該表處於 BCNF。

第四正規化 (4NF)

4NF 在 BCNF 的基礎上,要求表不應該存在多值依賴。當非主鍵列依賴於其他非主鍵列的組合時,就會發生多值依賴。例如,一個列出客戶訂單的表,其主鍵為訂單ID,非主鍵列為客戶ID和訂單項,違反了 4NF,因為訂單項依賴於訂單ID和客戶ID。

例如,一個列出訂單及其產品的表,其中包含訂單ID、產品ID和產品詳細資訊的列,違反了 4NF,因為產品詳細資訊依賴於訂單ID和產品ID的組合。

示例

考慮以下訂單和產品的表:

訂單ID

產品ID

產品名稱

產品描述

1

100

Widget

紅色 Widget

1

200

Widget

藍色 Widget

2

100

Widget

紅色 Widget

2

300

Thing

綠色 Thing

3

200

Widget

藍色 Widget

3

300

Thing

綠色 Thing

在此表中,產品名稱和描述都依賴於訂單ID和產品ID,從而產生多值依賴。為了使表達到 4NF,我們可以將其拆分為三個表:

訂單ID

產品ID

1

100

1

200

2

100

2

300

3

200

3

300

產品ID

產品名稱

100

Widget

200

Widget

300

Thing

產品ID

產品描述

100

紅色 Widget

200

藍色 Widget

300

綠色 Thing

規範化的優缺點

規範化的優點

  • 減少資料冗餘

  • 提高資料一致性

  • 簡化資料庫維護

  • 提高查詢效能

規範化的缺點

  • 增加複雜性

  • 降低讀取效能

  • 提高寫入效能

  • 增加儲存空間

  • 過度規範化

結論

因此,我們已經解釋了資料庫管理系統 (DBMS) 中規範化的概念及其在資料管理中的重要性。我們涵蓋了資料庫規範化的不同正規化,包括 1NF、2NF、3NF、BCNF 和 4NF。我們解釋了規範化如何幫助消除資料冗餘、插入、更新和刪除異常。我們還提供了不同正規化中表的示例以及如何將其規範化為所需正規化的示例。我們已經撰寫了關於規範化在確保 DBMS 中資料一致性和準確性方面的重要性。

更新於:2023年5月18日

36K+ 次瀏覽

開啟您的職業生涯

透過完成課程獲得認證

開始學習
廣告
© . All rights reserved.