Skip to content
Read this post in: de_DEen_USes_ESfr_FRid_IDjapl_PLpt_PTru_RUvizh_CNzh_TW
Home » Data Modeling / Database » 優化資料:資料庫正規化的指南

優化資料:資料庫正規化的指南

引言

在資料庫的世界中,效率與資料完整性至關重要。資料庫正規化是一種將資料混亂狀態有序化的過程,可減少重複資料,並確保資訊的一致性。在這份全面的指南中,我們將帶您走過資料庫正規化的關鍵步驟。我們將從概念的基本理解開始,逐步深入探討達成第三正規形式的細節。在本教程結束時,您將具備優化資料庫以達到最佳效能與可維護性的知識與技能。

什麼是資料庫正規化?

資料庫正規化是一種系統性的流程,用於關係式資料庫的設計與組織,以減少資料重複並提升資料完整性。它涉及以一種方式設計資料庫結構,使資料能有效儲存、更新與查詢,同時盡可能降低異常與錯誤的發生機率。資料庫正規化的首要目標包括:

  1. 消除資料重複:透過有效組織資料,正規化可減少在資料庫內多處儲存相同資料的需求。這不僅節省儲存空間,也確保資料在整個資料庫中保持一致。
  2. 提升資料完整性:正規化透過降低異常的風險來維持資料的準確性與一致性,例如更新異常(資料更新不一致)、插入異常(新增資料困難)以及刪除異常(意外刪除資料)。
  3. 簡化資料管理:一個良好正規化的資料庫更易於維護與修改。它簡化了新增、更新與刪除記錄的流程,使資料庫維護工作更加直接。

正規化通常被分為不同的「正規形式」,每種形式都有其規則,用以指導表格內資料的組織方式。最常見的正規形式包括:

  1. 第一正規形式(1NF):確保表格中的每一欄僅包含原子(不可分割)的值,且不存在重複群組或資料陣列。
  2. 第二正規形式(2NF):在1NF的基礎上,確保所有非鍵屬性(欄位)完全函數依賴於主鍵。它消除了部分依賴。
  3. 第三正規形式(3NF):在2NF的基礎上,移除傳遞依賴,確保不存在依賴於其他非鍵屬性的非鍵屬性。

超過3NF後,還有更進一步的正規形式,例如博伊斯-科德正規形式(BCNF)與第四正規形式(4NF),用以處理更複雜的情境與依賴關係。選擇達成哪一種正規形式,取決於資料庫的特定需求,以及資料重複與查詢效能之間的權衡。

資料庫正規化是一項關鍵的設計流程,可優化關係式資料庫中資料的組織,進而提升效率、資料準確性與維護便利性。這對於從事關係式資料庫的資料庫管理員與開發人員而言,是不可或缺的概念。

圖書館系統案例研究

資料庫情境:假設我們有一個資料庫,用於儲存圖書館中書籍的資訊。最初的設計只有一個稱為「書籍」的單一表格,其結構如下:

書籍表格(未正規化):

書籍編號 書名 作者 類型 年份 ISBN
1 「大亨小傳」 「F. 斯科特·菲茨傑拉德」 「小說」 1925 978-0743273565
2 《守望者》 「哈波·李」 小說 1960 978-0061120084
3 《麥田裡的守望者》 「J.D. 萨林杰」 小說 1951 978-0316769488
4 《霍比特人》 J.R.R. 托爾金 奇幻 1937 978-0547928227

我們可以看到這個表格中有些重複。例如,每位書籍的作者和類型資訊都被重複列出。讓我們開始規範化流程。

步驟 1:第一正規化形式(1NF)

在第一正規化形式中,我們確保表格中的每一欄只包含原子(不可分割)的值。為達成此目標,我們為相關資料建立獨立的表格。

  1. 建立作者資料表:

作者資料表(1NF):

作者編號 作者
1 「F. 斯科特·菲茨傑拉德」
2 「哈波·李」
3 「J.D. 萨林杰」
4 “J.R.R. 托爾金”
  1. 建立一個類別的資料表:

類別資料表(第一正規化):

類別編號 類別
1 “小說”
2 “奇幻”
  1. 修改書籍資料表以參考作者與類別資料表:

書籍資料表(第一正規化):

書籍編號 書名 作者編號 類別編號 年份 國際標準書號
1 “了不起的蓋茨比” 1 1 1925 978-0743273565
2 “守望者” 2 1 1960 978-0061120084
3 《麥田裡的守望者》 3 1 1951 978-0316769488
4 《霍比特人》 4 2 1937 978-0547928227

現在,資料處於第一範式,因為每一欄都包含原子值,並且我們為相關資料建立了獨立的資料表。

步驟 2:第二範式(2NF)

在第二範式中,我們確保所有非鍵屬性(欄位)完全函數依賴於主鍵。為達成此目標:

  1. 識別 Books 資料表的主鍵。在此情況下,它是 BookID。
  2. 為書籍作者建立一個新資料表:

BookAuthors 資料表(2NF):

BookID AuthorID
1 1
2 2
3 3
4 4
  1. 修改 Books 資料表以移除 AuthorID 欄位(它現在位於 BookAuthors 資料表中):

Books 資料表(2NF):

書籍編號 書名 類型編號 年份 國際標準書號
1 「大亨小傳」 1 1925 978-0743273565
2 「梅岡城故事」 1 1960 978-0061120084
3 「麥田捕手」 1 1951 978-0316769488
4 「哈比人」 2 1937 978-0547928227

現在,資料已處於第二範式,因為所有非鍵屬性都完全函數依賴於主鍵。

步驟 3:第三範式(3NF)

在第三範式中,我們確保非鍵屬性之間不存在傳遞依賴。為達成此目的:

  1. 識別書籍表的主鍵。在這種情況下,仍然是書籍編號。
  2. 為書籍類型建立一個新表:

書籍類型表(第三範式):

書籍編號 類型編號
1 1
2 1
3 1
4 2
  1. 修改書籍表以移除 GenreID 欄位(它現在位於 BookGenres 表中):

書籍表(第三範式):

書籍編號 書名 年份 國際標準書號
1 《了不起的蓋茨比》 1925 978-0743273565
2 《守望者》 1960 978-0061120084
3 《麥田裡的守望者》 1951 978-0316769488
4 《霍比特人》 1937 978-0547928227

現在,資料已處於第三範式,因為非鍵屬性之間不存在傳遞依賴關係。

結論

本指南《數據優化:資料庫規範化的指南》提供了一個逐步教程,介紹資料庫規範化的過程。從概念介紹開始,說明規範化如何減少資料冗餘並確保資料完整性。透過圖書館圖書資料庫的實際範例,本指南帶領您完成達成第一、第二和第三範式(1NF、2NF 和 3NF)的步驟。完成本教程後,您將對如何有效組織資料庫以提升效能和維護便利性有穩固的理解。

 

 

發佈留言