資料庫正規化是資料庫設計的其中一項程序,目的是有效率地整理資料,進而減少資料冗餘 (重複資料) 並提高資料完整性 (資料準確度和一致性)。這就像整理雜亂的檔案櫃:與其在多個地方存放相同資訊,不如將所有資訊儲存在同一個位置,然後透過交叉比對系統將它們連結起來。
資料庫是經過整理的資料集合,通常以電子形式儲存在電腦系統,就像數位檔案櫃一樣。您不再需要紙本資料夾和抽屜,而是使用結構化資料表 (或其他資料整理方法),快速有效地儲存、管理及擷取資訊。
現今企業使用資料庫追蹤各種資訊,包括顧客訂單、庫存量、使用者帳戶詳情和金融交易等,而許多企業選擇使用雲端資料庫。
關聯式資料庫會將資料整理成一或多個資料表,並以資料欄和資料列呈現。之所以稱為「關聯式」,是因為這類資料庫會在資料表之間,預先明確定義關係。核心概念是將複雜資訊拆分成較小的單元,避免多次儲存相同資訊。
假設您為網路商店建立一個簡單的資料庫,並用「顧客」資料表記錄姓名、地址和電話,以及用「訂單」資料表記錄日期和總金額。當顧客下單時,您不必將顧客的完整地址複製到「訂單」資料表,只要使用顧客專屬 ID,就能將訂單連結回顧客的完整詳細資料。
如果顧客搬家並變更地址,您只需要在「顧客」資料表中更新地址即可。如果將地址複製到 100 筆訂單記錄中,就必須更新所有 100 筆資料,這很可能導致資料雜亂且不一致。這種需要更新多處資訊的問題稱為資料異常。
不過,您仍希望在顧客購買時,將產品價格複製到訂單記錄中。這是因為主產品資料表中的產品價格未來可能會變動,但訂單記錄必須反映客戶在交易當天「實際支付」的價格。針對這種情況,複製並凍結資料 (或建立快照) 將會是正確選擇。
正規化指的是以系統化的程序設計關聯式資料表,以及建立各表之間的關係,以消除資料不一致的情況並節省儲存空間。「正規形式」(1NF、2NF、3NF 等) 是一系列規範指引,可解決資料重複問題,以及因該問題產生的資料異常狀況,讓您根據應用需求有效率地整理資料,確保資料可靠性。
正規化指的是按部就班將資料表結構化,每個步驟 (或「形式」) 都以前一個步驟為基礎。資料表如要符合第三正規形式 (3NF),必須通過 1NF 和 2NF 測試。大多數作業資料庫的設計至少符合 3NF 標準,因為這樣能兼顧資料完整性和效能。
第一正規形式的規則是確保資料表從一開始就結構正確,好比建立格式整齊的試算表。
規則:每個資料欄的名稱必須不重複,且每個儲存格只能包含單一、不可分割的值。
此做法的優點:您無法在單一儲存格中記錄項目清單。舉例來說,在「訂單」資料表的「已訂購產品」欄位中,您無法於單個儲存格中同時列出「牛奶、雞蛋、麵包」。每項產品都必須單獨列於一列,確保資料可搜尋及管理。
只有在資料表使用複合索引鍵時,才適用 2NF 規則。複合索引鍵是由兩或多個欄位組合而成的主鍵 (例如訂單 ID 加產品 ID)。主鍵是資料欄或一組資料欄,其值可明確識別資料表中的每個資料列。非鍵欄是指「不屬於」主鍵的資料欄。
規則:資料表必須已符合 1NF 標準,且所有非鍵資料欄都必須依附於整個 (而非部分) 複合索引鍵。
此做法的優點:資料應儲存在最適合的位置。如果資料表的鍵是 (訂單 ID、產品 ID),則不應包含「產品價格」這類資料欄,因為價格只取決於產品 ID,而非訂單 ID。解決方法是將「產品 ID」和「產品價格」移至獨立的「產品」資料表,並將「產品 ID」設為單一主鍵,這樣就能避免在每筆包含該產品的訂單中重複顯示產品價格。
3NF 規則是資料庫設計最常見的目標,主要在於移除資料點之間的間接關係。
規則:資料表必須符合 2NF 標準,且非索引鍵資料欄只能依附於主鍵,不能依附於任何其他非索引鍵資料欄。
此做法的優點:避免一個非索引鍵資料決定另一個非索引鍵資料的值。假設「員工」資料表儲存了「辦公室 ID」和「辦公室地點」這兩個非索引鍵欄。「辦公室地點」是由辦公室 ID 決定,而非員工 ID (資料表的主鍵)。這種間接連結屬於轉換依附關係。為修正這個問題,您必須建立新的「辦公室」資料表,當中只包含「辦公室 ID」和「辦公室地點」,然後用「辦公室 ID」連結這兩個資料表。這樣一來,如果辦公室地點有變動,您只需要在一處更新資料即可。
功能 | 正規化 | 去標準化 |
主要目標 | 減少資料重複,並提升其完整性。 | 提高讀取效能。 |
應用實例範例 | 交易資料庫 (頻繁更新)。 | 分析資料庫和資料倉儲 (經常讀取);建立後不得變更的資料 (例如合約或帳單快照)。 |
結果 | 資料表數量較多,減少資料重複。 | 資料表數量較少,刻意允許資料重複。 |
功能
正規化
去標準化
主要目標
減少資料重複,並提升其完整性。
提高讀取效能。
應用實例範例
交易資料庫 (頻繁更新)。
分析資料庫和資料倉儲 (經常讀取);建立後不得變更的資料 (例如合約或帳單快照)。
結果
資料表數量較多,減少資料重複。
資料表數量較少,刻意允許資料重複。
去正規化是指刻意在資料庫中加入多餘資料,通常是為了提升製表或分析的查詢效能。這是權衡取捨後的結果:雖然會犧牲部分資料完整性,占用更多儲存空間,但可以加快資料擷取速度。如果是法律合約等類型的資料,便可能會允許這種冗餘情形,這是為了建立不受未來變更影響的資料快照。即使主要客戶或產品資料日後更新,簽訂合約當時所記載的條款、名稱和價格仍會固定且有效。
Google Cloud 有多種服務皆支援資料庫正規化程序,並可從中獲益。



