更新於 2024/12/08閱讀時間約 6 分鐘

資料庫正規化(關聯式資料庫的基礎與最佳實踐)

在當今的軟體開發與資料管理中,資料庫是不可或缺的一部分。無論是 MySQL、PostgreSQL、Oracle 還是 SQL Server,這些都是常見的關聯式資料庫系統,幫助我們管理結構化資料。今天,我們將深入探討 資料庫正規化 的概念,並了解如何利用它來提升資料庫的效能與可維護性。


什麼是關聯式資料庫?

在了解資料庫正規化之前,我們需要先明白什麼是 關聯式資料庫。關聯式資料庫是以「表格」形式來儲存資料,每個表格由多列(記錄)和多欄(欄位)組成。這些資料表彼此之間通常會透過外鍵(Foreign Key, FK)來建立關聯。這種方式讓資料庫能夠組織並管理大量的資料。

常見的關聯式資料庫:

  • MySQL:目前由甲骨文公司(Oracle)所擁有,但仍然是一個開源資料庫系統。
  • MariaDB:MySQL 的分支,也是開源的,並且在 MySQL 之後有一些進一步的功能強化。
  • PostgreSQL:以其強大的擴展性與符合 SQL 標準而聞名。
  • SQL Server:微軟的資料庫解決方案,廣泛應用於企業環境中。

什麼是資料庫正規化?

資料庫正規化(Database Normalization)是一種設計資料庫結構的過程,目的是通過消除資料冗餘和確保資料的一致性來提高資料庫的效能。它有助於避免資料異常,從而提高資料庫的可維護性。

正規化的主要目的:

  1. 減少資料冗餘:避免資料重複存儲,節省空間並提升效能。
  2. 提升資料一致性:確保資料的正確性與完整性,避免不一致的資料。
  3. 提高查詢效率:透過清晰的結構設計,提高查詢效能。

資料庫正規化通常有五個階段,稱為 正規化形式(Normal Forms, NF)。但大多數應用只會使用前三個正規化形式。接下來,我們來詳細了解這三個階段吧。


第一正規化(1NF)—— 資料的基本結構化

第一正規化(1NF) 的目的是將資料表中的資料拆解成更小的單位,並確保每一個欄位只有一個值。這樣不僅讓資料更加清晰,也避免了資料表中可能出現的重複或錯誤資料。

1NF 要求:

  1. 每個欄位只能有一個值:避免有欄位存放多個值,像是列表或陣列。例如,將顧客的多個電話號碼分開存儲,而不是將它們放在同一欄位中。
  2. 每筆資料須有唯一標識:每一筆記錄必須有一個唯一的標識符,這通常是 主鍵(Primary Key, PK)
  3. 資料表中的每筆資料不能完全相同:每一筆資料必須是唯一的。

範例:

假設我們有一個儲存顧客資料的資料表,原始資料可能長這樣:

顧客ID顧客名稱顧客電話1張三0912345678, 09223334442李四0955555555

為了符合1NF,我們需要將顧客的多個電話號碼拆分到不同的列中:

顧客ID顧客名稱顧客電話1張三09123456781張三09223334442李四0955555555


第二正規化(2NF)—— 消除重複資料

第二正規化(2NF) 的目的是進一步消除資料表中的冗餘資料。要達到2NF,資料表必須先符合 1NF,並且每個非主鍵欄位都必須完全依賴於 主鍵

2NF 要求:

  1. 滿足1NF的要求
  2. 消除部分依賴:如果資料表的某個欄位僅依賴於主鍵的一部分,而不是整個主鍵,則需要將這些欄位拆分到新的資料表中。

範例:

假設我們有一個儲存訂單資料的資料表,記錄了顧客訂單的商品及價格。原始資料可能長這樣:

訂單ID顧客ID商品名稱商品價格顧客名稱11筆電30000張三22手機15000李四

在這個表中,顧客名稱 依賴於 顧客ID,而不是整個主鍵(訂單ID, 顧客ID)。因此,應該將顧客名稱移到一個新的顧客資料表,來消除重複。


第三正規化(3NF)—— 移除依賴資料

第三正規化(3NF) 旨在進一步消除不必要的依賴關係。如果某個欄位不依賴於主鍵,而依賴於其他非主鍵欄位,那麼這些欄位應該移到其他資料表中。

3NF 要求:

  1. 符合2NF
  2. 消除傳遞依賴:如果欄位 A 依賴於欄位 B,欄位 B 又依賴於欄位 C,則欄位 A 也間接依賴於欄位 C。在這種情況下,我們需要將這些欄位分開。

範例:

假設我們有一個儲存員工資料的資料表,其中包含員工的 部門名稱部門負責人,原始資料可能長這樣:

員工ID員工名稱部門名稱部門負責人1王五IT張總2趙六HR李總

在這裡,部門負責人 是依賴於 部門名稱,而不是直接依賴於主鍵(員工ID)。因此,我們應該將 部門名稱部門負責人 分開到另一個表格中:

新的資料表設計:

員工表格

員工ID員工名稱部門ID1王五12趙六2

部門表格

部門ID部門名稱部門負責人1IT張總2HR李總

這樣,我們就消除了部門負責人對部門名稱的依賴,符合3NF。


結語

有沒有覺得資料庫正規化可以讓資料更清楚呢?資料庫正規化是一項重要的資料庫設計技術,有助於提升資料庫的結構性、維護性以及效能喔。理解並實踐1NF、2NF和3NF將幫助開發者更有效地管理資料,並確保資料庫的正確性與一致性。隨著資料庫設計的複雜性增加,正規化的過程將成為成功實現穩定資料管理的關鍵步驟。接下來會介紹SQL語法。


對於這類的撰寫方式習慣嗎?歡迎多多進行良性的知識交流喔!目前是在學習階段,大家有不同看法的話歡迎進行良性的知識交流!

 

大家可以考慮多多分享文章和考慮訂閱沙龍方案或贊助等喔!不過請注意不要違反著作權等行為。當然決定權都在於您,不會干涉您的任何決定。

 

提醒,文章僅供正當的知識參考,文章不負任何責任。

分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.