什麼是資料庫正規化?

資料庫正規化是資料庫設計的其中一項程序,目的是有效率地整理資料,進而減少資料冗餘 (重複資料) 並提高資料完整性 (資料準確度和一致性)。這就像整理雜亂的檔案櫃:與其在多個地方存放相同資訊,不如將所有資訊儲存在同一個位置,然後透過交叉比對系統將它們連結起來。

「資料庫」是什麼?

資料庫是經過整理的資料集合,通常以電子形式儲存在電腦系統,就像數位檔案櫃一樣。您不再需要紙本資料夾和抽屜,而是使用結構化資料表 (或其他資料整理方法),快速有效地儲存、管理及擷取資訊。

現今企業使用資料庫追蹤各種資訊,包括顧客訂單、庫存量、使用者帳戶詳情和金融交易等,而許多企業選擇使用雲端資料庫。

什麼是關聯資料庫?

關聯式資料庫會將資料整理成一或多個資料表,並以資料欄和資料列呈現。之所以稱為「關聯式」,是因為這類資料庫會在資料表之間,預先明確定義關係。核心概念是將複雜資訊拆分成較小的單元,避免多次儲存相同資訊。

資料庫正規化範例

假設您為網路商店建立一個簡單的資料庫,並用「顧客」資料表記錄姓名、地址和電話,以及用「訂單」資料表記錄日期和總金額。當顧客下單時,您不必將顧客的完整地址複製到「訂單」資料表,只要使用顧客專屬 ID,就能將訂單連結回顧客的完整詳細資料。

如果顧客搬家並變更地址,您只需要在「顧客」資料表中更新地址即可。如果將地址複製到 100 筆訂單記錄中,就必須更新所有 100 筆資料,這很可能導致資料雜亂且不一致。這種需要更新多處資訊的問題稱為資料異常

不過,您仍希望在顧客購買時,將產品價格複製到訂單記錄中。這是因為主產品資料表中的產品價格未來可能會變動,但訂單記錄必須反映客戶在交易當天「實際支付」的價格。針對這種情況,複製並凍結資料 (或建立快照) 將會是正確選擇。

正規化指的是以系統化的程序設計關聯式資料表,以及建立各表之間的關係,以消除資料不一致的情況並節省儲存空間。「正規形式」(1NF、2NF、3NF 等) 是一系列規範指引,可解決資料重複問題,以及因該問題產生的資料異常狀況,讓您根據應用需求有效率地整理資料,確保資料可靠性。

不同的正規形式 (1NF、2NF、3NF)

正規化指的是按部就班將資料表結構化,每個步驟 (或「形式」) 都以前一個步驟為基礎。資料表如要符合第三正規形式 (3NF),必須通過 1NF 和 2NF 測試。大多數作業資料庫的設計至少符合 3NF 標準,因為這樣能兼顧資料完整性和效能。

第一正規形式的規則是確保資料表從一開始就結構正確,好比建立格式整齊的試算表。

規則:每個資料欄的名稱必須不重複,且每個儲存格只能包含單一、不可分割的值。

此做法的優點:您無法在單一儲存格中記錄項目清單。舉例來說,在「訂單」資料表的「已訂購產品」欄位中,您無法於單個儲存格中同時列出「牛奶、雞蛋、麵包」。每項產品都必須單獨列於一列,確保資料可搜尋及管理。

只有在資料表使用複合索引鍵時,才適用 2NF 規則。複合索引鍵是由兩或多個欄位組合而成的主鍵 (例如訂單 ID 加產品 ID)。主鍵是資料欄或一組資料欄,其值可明確識別資料表中的每個資料列。非鍵欄是指「不屬於」主鍵的資料欄。

規則:資料表必須已符合 1NF 標準,且所有非鍵資料欄都必須依附於整個 (而非部分) 複合索引鍵。

此做法的優點:資料應儲存在最適合的位置。如果資料表的鍵是 (訂單 ID、產品 ID),則不應包含「產品價格」這類資料欄,因為價格只取決於產品 ID,而非訂單 ID。解決方法是將「產品 ID」和「產品價格」移至獨立的「產品」資料表,並將「產品 ID」設為單一主鍵,這樣就能避免在每筆包含該產品的訂單中重複顯示產品價格。

3NF 規則是資料庫設計最常見的目標,主要在於移除資料點之間的間接關係。

規則:資料表必須符合 2NF 標準,且非索引鍵資料欄只能依附於主鍵,不能依附於任何其他非索引鍵資料欄。

此做法的優點:避免一個非索引鍵資料決定另一個非索引鍵資料的值。假設「員工」資料表儲存了「辦公室 ID」和「辦公室地點」這兩個非索引鍵欄。「辦公室地點」是由辦公室 ID 決定,而非員工 ID (資料表的主鍵)。這種間接連結屬於轉換依附關係。為修正這個問題,您必須建立新的「辦公室」資料表,當中只包含「辦公室 ID」和「辦公室地點」,然後用「辦公室 ID」連結這兩個資料表。這樣一來,如果辦公室地點有變動,您只需要在一處更新資料即可。

正規化與去正規化

功能

正規化

去標準化

主要目標

減少資料重複,並提升其完整性。

提高讀取效能。

應用實例範例

交易資料庫 (頻繁更新)。

分析資料庫和資料倉儲 (經常讀取);建立後不得變更的資料 (例如合約或帳單快照)。

結果

資料表數量較多,減少資料重複。

資料表數量較少,刻意允許資料重複。

功能

正規化

去標準化

主要目標

減少資料重複,並提升其完整性。

提高讀取效能。

應用實例範例

交易資料庫 (頻繁更新)。

分析資料庫和資料倉儲 (經常讀取);建立後不得變更的資料 (例如合約或帳單快照)。

結果

資料表數量較多,減少資料重複。

資料表數量較少,刻意允許資料重複。

去正規化是指刻意在資料庫中加入多餘資料,通常是為了提升製表或分析的查詢效能。這是權衡取捨後的結果:雖然會犧牲部分資料完整性,占用更多儲存空間,但可以加快資料擷取速度。如果是法律合約等類型的資料,便可能會允許這種冗餘情形,這是為了建立不受未來變更影響的資料快照。即使主要客戶或產品資料日後更新,簽訂合約當時所記載的條款、名稱和價格仍會固定且有效。

為什麼資料庫正規化很重要?

正規化指的是用「正規形式」整理資料,避免引發常見問題,同時讓 Cloud SQLSpanner關聯式資料庫運作起來更有效率、更可靠且更容易管理。

減少資料冗餘

將每筆資料 (例如客戶地址) 儲存在同一位置,以節省儲存空間並提高存取效率。

消除資料異常情形

避免因資料重複而出現不一致的情況,例如插入、刪除或更新等異常情形。

提升資料完整性

保證每筆資料正確無誤,而且只儲存在一個位置,確保整個資料庫的資料準確性和一致性。

如果您注重超高效能、大規模或靈活的結構定義,則可選用非關聯式 (NoSQL) 資料庫,例如 BigtableFirestore。NoSQL 資料庫採用不同設計原則,刻意加入資料備援機制,以盡可能提高讀取速度和可用性。

透過 Google Cloud 解決業務難題

新客戶可以獲得價值 $300 美元的免費抵免額,盡情試用各項 Google Cloud 功能。

展開下一步行動

運用價值 $300 美元的免費抵免額和超過 20 項一律免費的產品,開始在 Google Cloud 中建構產品與服務。