数据库 · 3 11 月, 2024

關係型數據庫設計三大範式

關係型數據庫設計三大範式

在當今數據驅動的世界中,關係型數據庫(RDBMS)是存儲和管理數據的主要方式之一。為了確保數據的完整性和一致性,數據庫設計師通常遵循一系列的設計原則,這些原則被稱為「範式」。本文將探討關係型數據庫設計的三大範式,幫助讀者理解如何有效地設計數據庫結構。

第一範式(1NF)

第一範式的核心概念是確保數據表中的每一個欄位都只包含原子值,即不可再分的數據。這意味著每一列都應該是唯一的,並且每一行都應該是唯一的。為了滿足第一範式的要求,數據表中的每一個欄位都必須是單一的數據類型,且不應包含重複的數據。

範例

CREATE TABLE 學生 (
    學生ID INT PRIMARY KEY,
    姓名 VARCHAR(100),
    課程 VARCHAR(100) -- 不符合1NF,因為課程可以有多個
);

在上述範例中,課程欄位可能包含多個課程名稱,這不符合第一範式。為了滿足1NF,我們可以將課程分拆到另一個表中:

CREATE TABLE 學生 (
    學生ID INT PRIMARY KEY,
    姓名 VARCHAR(100)
);

CREATE TABLE 學生課程 (
    學生ID INT,
    課程 VARCHAR(100),
    PRIMARY KEY (學生ID, 課程)
);

第二範式(2NF)

第二範式要求數據表必須滿足第一範式的要求,並且所有非主鍵欄位必須完全依賴於主鍵。這意味著如果一個欄位依賴於主鍵的一部分,那麼這個表就不符合第二範式。這通常發生在複合主鍵的情況下。

範例

CREATE TABLE 訂單 (
    訂單ID INT,
    產品ID INT,
    產品名稱 VARCHAR(100), -- 不符合2NF,因為產品名稱依賴於產品ID
    PRIMARY KEY (訂單ID, 產品ID)
);

在這個例子中,產品名稱依賴於產品ID,而不是整個主鍵。為了滿足第二範式,我們可以將產品名稱移到另一個表中:

CREATE TABLE 訂單 (
    訂單ID INT,
    產品ID INT,
    PRIMARY KEY (訂單ID, 產品ID)
);

CREATE TABLE 產品 (
    產品ID INT PRIMARY KEY,
    產品名稱 VARCHAR(100)
);

第三範式(3NF)

第三範式要求數據表必須滿足第二範式的要求,並且所有非主鍵欄位必須直接依賴於主鍵,而不是依賴於其他非主鍵欄位。這有助於消除數據冗餘,並提高數據的一致性。

範例

CREATE TABLE 員工 (
    員工ID INT PRIMARY KEY,
    姓名 VARCHAR(100),
    部門ID INT,
    部門名稱 VARCHAR(100) -- 不符合3NF,因為部門名稱依賴於部門ID
);

在這個例子中,部門名稱依賴於部門ID,而不是直接依賴於員工ID。為了滿足第三範式,我們可以將部門名稱移到另一個表中:

CREATE TABLE 員工 (
    員工ID INT PRIMARY KEY,
    姓名 VARCHAR(100),
    部門ID INT
);

CREATE TABLE 部門 (
    部門ID INT PRIMARY KEY,
    部門名稱 VARCHAR(100)
);

總結

關係型數據庫設計的三大範式——第一範式、第二範式和第三範式,為數據庫的結構提供了清晰的指導原則。遵循這些範式不僅能夠提高數據的完整性和一致性,還能夠減少數據冗餘,從而提升數據庫的性能和可維護性。對於希望在香港尋找高效能的數據庫解決方案的企業,選擇合適的 VPS香港伺服器 是至關重要的。了解這些範式將幫助您在設計數據庫時做出更明智的決策。