Home >> Blog >> 什麼是資料庫正規化?

正規化是一種資料庫設計技術,可減少數據冗餘並消除插入、更新和刪除異常等不良特徵。正規化規則將較大的表劃分為較小的表,並使用關係將它們鏈接起來。SQL 中正規化的目的是消除冗餘(重複)數據並確保數據按邏輯存儲。

什麼是資料庫正規化?

關係模型的發明者埃德加·科德(Edgar Codd)通過引入第一範式提出了數據歸一化理論,並繼續用第二和第三範式擴展理論。後來他加入了 Raymond F. Boyce,發展了 Boyce-Codd 範式理論。

資料庫範式

以下是 SQL 中的範式列表:

  • 1NF(第一範式)
  • 2NF(第二範式)
  • 3NF(第三範式)
  • BCNF(Boyce-Codd 範式)
  • 4NF(第四範式)
  • 5NF(第五範式)
  • 6NF(第六範式)

MySQL 伺服器中的數據正規化理論仍在進一步發展中。例如,甚至在第 6 範式上也有討論。然而,在大多數實際應用中,歸一化在 3 rd Normal Form中表現最好。SQL理論中正規化的演變如下所示 -

帶有示例的資料庫正規化

借助SEO搜尋引擎優化案例研究,可以輕鬆理解資料庫正規化示例。假設,一個影片庫維護著一個出租電影的資料庫。資料庫中沒有任何正規化,所有資訊都存儲在一個表中,如下所示。讓我們通過正規化示例和解決方案來了解正規化資料庫:

什麼是正規化?

在這裡,您會看到“租借的電影”列有多個值。現在讓我們進入第一範式:

1NF(第一範式)規則

  • 每個表格單元格應包含一個值。
  • 每條記錄都必須是唯一的。

上表在 1NF-

1NF 示例

什麼是正規化?

在我們繼續之前,讓我們了解一些事情 -

SQL 中的 KEY 是什麼?

SQL 中的KEY是用於唯一標識表中記錄的值。SQL KEY 是單個列或多個列的組合,用於唯一標識表中的行或元組。SQL Key用於識別重複資訊,也有助於建立資料庫中多個表之間的關係。

注意:表中不用於唯一標識記錄的列稱為非鍵列。

什麼是主鍵?

主要是用於唯一標識資料庫記錄的單列值。

它具有以下屬性

  • 主鍵不能為NULL
  • 主鍵值必須是唯一的
  • 應該很少更改主鍵值
  • 插入新記錄時,必須給主鍵一個值。

什麼是複合鍵?

複合鍵是由多列組成的主鍵,用於唯一標識一條記錄

在我們的資料庫中,我們有兩個同名的人 Robert Phil,但他們住在不同的地方。

什麼是正規化?

因此,我們需要全名和地址來唯一標識一條記錄。那是一個複合鍵。

讓我們進入第二範式 2NF

2NF(第二範式)規則

  • 規則 1- 符合 1NF
  • 規則 2- 在功能上不依賴於任何候選鍵關係子集的單列主鍵

很明顯,除非我們對上面的表進行分區,否則我們無法繼續以 2 nd Normalization 形式製作我們的簡單資料庫。

什麼是正規化?

我們已將 1NF 表分為兩個表,即。表 1 和表 2。表 1 包含成員資訊。表 2 包含有關租借電影的資訊。

我們引入了一個名為 Membership_id 的新列,它是表 1 的主鍵。可以使用成員 ID 在表 1 中唯一標識記錄

資料庫——外鍵

在表 2 中,Membership_ID 是外鍵

什麼是正規化?

外鍵引用另一個表的主鍵!它有助於連接您的表格

  • 外鍵可以有與其主鍵不同的名稱
  • 它確保一個表中的行在另一個表中具有相應的行
  • 與主鍵不同,它們不必是唯一的。大多數情況下他們不是
  • 即使主鍵不能,外鍵也可以為空

什麼是正規化?

為什麼需要外鍵?

假設一個新手在表 B 中插入一條記錄,例如

什麼是正規化?

您將只能將值插入到存在於父表的唯一鍵中的外鍵中。這有助於參照完整性。

上述問題可以通過將 Table2 中的成員 ID 聲明為 Table1 中的成員 ID 的外鍵來解決

現在,如果有人試圖在成員 ID 字段中插入父表中不存在的值,則會顯示錯誤!

什麼是傳遞函數依賴?

傳遞函數依賴是在更改非鍵列時,可能會導致任何其他非鍵列發生更改

考慮表 1。更改非鍵列 Full Name 可能會更改 Salutation。

什麼是正規化?

讓我們進入 3NF

3NF(第三範式)規則

  • 規則 1- 符合 2NF
  • 規則 2- 沒有傳遞函數依賴

要將我們的 2NF 表移動到 3NF,我們再次需要再次劃分我們的表。

3NF 示例

下面是 SQL 資料庫中的 3NF 示例:

什麼是正規化?

我們再次劃分了表並創建了一個存儲稱呼的新表。

沒有傳遞函數依賴,因此我們的表在 3NF 中

表 3 中 Salutation ID 為主鍵,表 1 中 Salutation ID 與表 3 中的主鍵無關

現在,我們的小示例處於無法進一步分解以在 DBMS 中獲得更高範式類型的正規化的水平。事實上,它已經處於更高的正規化形式。在復雜的資料庫中,通常需要單獨努力進入下一個級別的正規化數據。但是,我們將在下面簡要討論 DBMS 中的下一個正規化級別。

BCNF(Boyce-Codd 範式)

即使資料庫處於第三範式,如果它有多個候選鍵,仍然會導致異常。

有時 BCNF 也稱為3.5 範式。

4NF(第四範式)規則

如果沒有資料庫表實例包含兩個或多個描述相關實體的獨立和多值數據,則它處於第 4範式。

5NF(第五範式)規則

一個表只有在 4NF 中才屬於第 5範式,並且不能在不丟失數據的情況下將其分解為任何數量的較小表。

6NF(第六範式)建議

第六範式沒有正規化,但是,資料庫專家已經討論了一段時間。希望我們能在不久的將來對第 6 範式有一個清晰和正規化的定義……

這就是 SQL 正規化的全部內容!!!

概括

  • 資料庫設計對於成功實施滿足企業系統數據要求的資料庫管理系統至關重要。
  • DBMS 中的正規化是一個有助於生成具有成本效益且具有更好安全模型的資料庫系統的過程。
  • 函數依賴是正規化數據過程中非常重要的組成部分
  • 大多數資料庫系統都是正規化的資料庫,直到 DBMS 中的第三範式。
  • 唯一標識的主鍵是表中的記錄,不能為空
  • 鍵有助於連接表並引用主鍵