資料庫三大正規化

木头左發表於2024-04-19

資料庫三大正規化

在資料庫設計中,正規化是一種規範化的設計方法,它可以幫助我們避免資料冗餘和不一致性。目前,資料庫中比較常用的正規化有三種,分別是第一正規化(1NF)、第二正規化(2NF)和第三正規化(3NF)。本文將介紹這三種正規化,並舉例說明。

1. 第一正規化(1NF)

第一正規化是最基本的正規化,它要求關係中的每個屬性都是原子性的,即不可再分。換句話說,每個屬性都應該是一個單一的值,而不是多個值的組合。例如,一個學生表中的“姓名”屬性應該是單一的值,而不是由姓和名組成的值。

2. 第二正規化(2NF)

第二正規化是在第一正規化的基礎上進一步規範化的正規化。它要求關係表中的每個非主鍵屬性都完全依賴於主鍵,而不是依賴於主鍵的一部分。例如,一個訂單表中的“訂單金額”屬性應該依賴於訂單號,而不是依賴於訂單中的某個商品。

3. 第三正規化(3NF)

第三正規化是在第二正規化的基礎上進一步規範化的正規化。它要求關係表中的每個非主鍵屬性都不依賴於其他非主鍵屬性。換句話說,每個非主鍵屬性都應該直接依賴於主鍵。例如,一個學生表中的“年齡”屬性應該直接依賴於學生的學號,而不是依賴於學生所在的班級。

區別

第二正規化:2NF 設R為任一給定關係,若R為 1NF,且其所有非主屬性都 完全函式依賴 於候選關鍵字,則R為 第二正規化。

第一正規化到第二正規化的 過程:消除第一正規化的 部分函式依賴 的過程。

第三正規化:3NF 設R為任一給定關係,若R為 2NF,且其每一個非主屬性都 不傳遞函式依賴 於候選關鍵字,則R為 第三正規化。

第二正規化到第三正規化的 過程:消除第二正規化的 傳遞函式依賴 的過程。

舉例說明

假設有一個訂單表,包含以下屬性:訂單號、客戶號、客戶姓名、商品號、商品名稱、商品數量、商品單價、訂單金額。該表的主鍵是訂單號和商品號。

如果按照第一正規化來設計該表,每個屬性都應該是原子性的,即不可再分。因此,我們需要將客戶姓名、商品名稱和商品單價這些屬性分別拆分成單獨的屬性。

如果按照第二正規化來設計該表,我們需要保證每個非主鍵屬性都完全依賴於主鍵。因此,我們需要將訂單金額和商品數量屬性從訂單表中移除,並建立一個新的表來儲存訂單金額,該表的主鍵為訂單號和商品號。

如果按照第三正規化來設計該表,我們需要保證每個非主鍵屬性都不依賴於其他非主鍵屬性。因此,我們需要將客戶姓名、商品名稱和商品單價這些屬性從訂單表中移除,並建立新的表來儲存這些屬性。

相關文章