首頁 > 資料庫 > mysql教程 > 了解資料庫設計中的範式:綜合指南

了解資料庫設計中的範式:綜合指南

Susan Sarandon
發布: 2024-12-31 22:19:09
原創
726 人瀏覽過

Understanding Normal Forms in Database Design: A Comprehensive Guide

資料庫設計中的不同範式

在資料庫設計中,標準化是組織資料以最大限度地減少冗餘和依賴性、提高資料完整性的過程。這個過程涉及將大表劃分為更小的、可管理的表並在它們之間建立關係。這樣可以確保資料庫不會出現插入、更新、刪除等異常。

不同的範式代表特定的標準化等級。每種範式都建立在前一種範式的基礎上,並且有自己的一套規則。以下是最常見範式的解釋:


1.第一範式 (1NF)

1NF 是最基本的規範化級別,重點是消除重複數據並確保表中的數據以每列包含原子值(無重複組)的方式組織。

  • 1NF 法則
    1. 每個表格單元格應包含一個值(原子性)。
    2. 每筆記錄(行)必須是唯一的。
    3. 每列應包含單一類型的值(例如,所有整數、所有字串)。
    4. 沒有重複的列組或單一列中的多個值。

1NF 例

1NF之前:

OrderID Products Quantities
1 Apple, Banana 2, 3
2 Orange 5

轉換為 1NF 後:

OrderID Product Quantity
1 Apple 2
1 Banana 3
2 Orange 5

2.第二範式 (2NF)

2NF 建立在 1NF 之上,消除了 部分依賴。當非主屬性(不屬於主鍵的列)僅依賴主鍵的一部分(在複合主鍵的情況下)時,就會發生部分依賴關係。要實現 2NF,表必須先滿足 1NF 的要求。

  • 2NF 法則
    1. 表格必須位於1NF
    2. 每個非主屬性必須在功能上完全依賴整個主鍵(消除部分依賴)。

2NF 例

在 2NF(部分依賴)之前:

OrderID Product CustomerName Price
1 Apple John 10
1 Banana John 5
2 Orange Jane 8

這裡,CustomerName 只取決於 OrderID,而不取決於完整的主鍵(OrderID、Product)。為了刪除這個,我們拆分了表格。

2NF之後:
表格

  • 訂單(訂單 ID、客戶名稱)
  • 訂單詳細資料(訂單 ID、產品、價格)

訂單表:

OrderID CustomerName
1 John
2 Jane

訂單明細表:

OrderID Product Price
1 Apple 10
1 Banana 5
2 Orange 8

3.第三範式 (3NF)

3NF 建構在2NF 之上,並解決了 傳遞依賴,當一個非主屬性依賴於另一個非主屬性時會發生這種情況。非主屬性應僅依賴主鍵。如果表位於 2NF 中,且所有傳遞依賴項均已刪除,則該表位於 3NF 中。

  • 3NF 法則
    1. 表格必須位於2NF
    2. 任何非主屬性都不應依賴另一個非主屬性(刪除傳遞依賴)。

3NF 例

在 3NF(傳遞依賴)之前:

OrderID Product Category Supplier
1 Apple Fruit XYZ
2 Carrot Vegetable ABC

這裡,供應商取決於類別,而不是直接取決於訂單ID。為了解決這個問題,我們拆分了表格。

3NF之後:
表格

  • 訂單(訂單 ID、產品、類別)
  • 類別(類別、供應商)

訂單表:

OrderID Product Category
1 Apple Fruit
2 Carrot Vegetable

類別表:

Category Supplier
Fruit XYZ
Vegetable ABC

4. Boyce-Codd 範式 (BCNF)

BCNF3NF 的更嚴格版本。若滿足下列條件,則表格位於 BCNF 中:

  • 位於3NF
  • 對於每個函數依賴,左邊必須是候選鍵(即最小超級鍵)。

簡單來說,BCNF 解決了表處於 3NF 中但仍具有一些涉及非候選鍵屬性的依賴關係的情況。

  • BCNF法則
    1. 表格必須位於3NF
    2. 每個行列式都必須是候選鍵。

BCNF 例:

BCNF之前:

CourseID Instructor Room
101 Dr. Smith A1
102 Dr. Smith B1
101 Dr. Johnson A2

這裡,Instructor確定了Room,但是Instructor不是候選鍵,這違反了BCNF。為了實現 BCNF,我們將依賴項分離到不同的表中。

BCNF 之後:
表格

  • 課程(課程ID、講師)
  • 房間(教練室)

課程表:

CourseID Instructor
101 Dr. Smith
102 Dr. Smith
101 Dr. Johnson

房間表:

Instructor Room
Dr. Smith A1
Dr. Smith B1
Dr. Johnson A2

5.第四範式 (4NF)

4NF 解決了多值依賴關係,當一個屬性確定另一個屬性的多個值並且這些值彼此獨立時會發生這種情況。若符合以下條件,則表格位於 4NF 中:

  • 它位於BCNF
  • 它沒有多值依賴關係。

4NF 例

在 4NF(多值依賴)之前:

StudentID Subject Hobby
1 Math Painting
1 Science Cycling

4NF之後:
表格

  • 學生(學生 ID、主題)
  • 學生興趣嗜好(學生ID、興趣嗜好)

學生表:

StudentID Subject
1 Math
1 Science

學生興趣愛好表:

StudentID Hobby
1 Painting
1 Cycling

結論

在資料庫設計中,標準化是有效組織資料的基本過程。不同的範式——1NF、2NF、3NF、BCNF 和 4NF——確保資料儲存無冗餘、保持完整性並且易於管理。每種範式都建立在前一種範式的基礎上,消除了特定類型的依賴性或異常。雖然標準化可以提高資料質量,但必須在其與效能考量之間取得平衡,有時在需要最佳化時選擇非規範化。

嗨,我是 Abhay Singh Kathayat!
我是一名全端開發人員,擁有前端和後端技術的專業知識。我使用各種程式語言和框架來建立高效、可擴展且用戶友好的應用程式。
請隨時透過我的商務電子郵件與我聯繫:kaashshorts28@gmail.com。

以上是了解資料庫設計中的範式:綜合指南的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板