技術世界中的許多不同角色都會將數據標準化作為許多項目的常規部分。開發人員、數據庫管理員、領域建模者、業務利益相關者以及更多人在規范化過程中取得了進展,就像他們呼吸一樣。然而,看起來如此不可或缺的東西會變得過時嗎?
隨著數據庫環境變得更加多樣化,硬件變得更加強大,我們可能想知道是否還需要數據規范化的實踐。我們是否應該擔心優化數據存儲和查詢以便返回最少的數據量?或者,如果我們應該這樣做,某些數據結構是否比其他數據結構更能解決這些問題?
在本文中,我們將回顧數據標準化的過程,并評估何時需要此過程,或者它是否仍然是數字化存儲和檢索數據的必要部分。
什么是數據標準化?
數據規范化正在優化關系數據庫中的數據結構,以確保數據完整性和查詢效率。它通過將數據經過一系列步驟來標準化結構(范式)來減少冗余并提高準確性。從本質上講,數據規范化有助于避免插入、更新和刪除數據異常。這些異常在創建新數據、更新現有數據或刪除數據時發生,并對保持數據值同步(完整性)造成挑戰。當我們逐步完成規范化過程時,我們將詳細討論這一點。
這些步驟需要驗證鍵(相關數據的鏈接)、將不相關的實體與其他表分開,以及將行和列作為統一的數據對象進行檢查。雖然范式步驟的完整列表相當嚴格,但我們將重點關注商業實踐中最常用的范式:第一范式、第二范式和第三范式。其他范式主要用于學術和統計學。范式步驟必須按順序完成,在前一個范式完成之前我們不能移動到下一個范式。
我們如何進行數據標準化?
由于我們有三種范式來獲取數據,因此我們將分為三個步驟來完成此過程。它們如下:
- 第一范式 (1NF)
- 第二范式 (2NF)
- 第三范式 (3NF)
一位大學數據庫教授教我的班級記住三種范式:“關鍵,整個關鍵,除了關鍵之外什么都沒有”(就像在法庭上宣誓真相一樣)。我不得不刷新本文的一些正常形式的詳細信息,但這個基本短語一直困擾著我。希望它也能幫助您記住它們。
我最近發現了一個咖啡店數據集,它似乎很適合我們用作標準化數據集的示例。通過對此處的示例進行一些調整,我們可以逐步完成該過程。
非規范化數據
<正文>
交易日期
transaction_time
instore_yn
客戶
loyalty_num
line_item_id
產品
數量
單價
promo_item_yn
2019-04-01
12:24:53
Y
卡米爾·泰勒
102-192-8157
1
哥倫比亞中度烘焙咖啡
1
2.00
N
2019-04-01
12:30:00
N
格里菲斯·林賽
769-005-9211
1,2
牙買加咖啡河 Sm,燕麥烤餅
1,1
2.45,3.00
N,N
2019-04-01
16:44:46
Y
斯圖爾特·努涅斯
796-362-1661
1
早晨日出柴 Rg
2
2.50
N
2019-04-01
14:24:55
Y
阿利斯泰爾·拉米雷斯
253-876-9471
1,2
卡布奇諾 Lg、特大咸味烤餅
2,1
4.25,3.75
N,N
表>