Normalization
如何僅基於重複來規範化數據
給定一個非規範化的數據表,是否有一個好的策略來嘗試基於重複數據進行規範化?假設我們沒有關於列重要性的資訊。
在一個小例子中
Col1 Col2 Col3 ======================================== Europe France Paris Europe France Marseilles Europe England London Europe England Manchester N.America USA St. Louis N.America USA Washington D.C.
我可以看到有三個源表,可能分別稱為
Continents
、Countries
和Cities
。對於更大的數據集呢?比如說 45 列和幾十萬行。 查看數據顯然不會有太大幫助。
我不得不對幾個現有的複雜數據集進行逆向工程。要建立的最重要的事情是數據中的鍵和依賴關係。坦率地說,這個問題是 NP 困難的,所以一些直覺和檢查將大大幫助你得到一個明智的答案,所以不要指望一個簡單的“轉動曲柄”解決方案,除非你有很多時間在你的手。
您需要做的是一次查詢一列數據並按列組合查詢數據。您需要列值(和列組合值)的頻率分佈。最大頻率為 1 的列(或組合)是候選鍵。
您還可以查看列組合的頻率分佈以找到潛在的層次結構。在您的範例中,每個值都
Col2
只有一個值Col1
,依此類推。當您辨識列之間的候選鍵和依賴關係時,您可以應用規範化。
**編輯:**回應OP在評論中的問題:
這是一個查詢,它會告訴您一列是否可能對另一列有功能依賴:
select COL2 from MYSTERY group by COL2 having count(distinct(COL1)) <> 1
如果
COL2
具有函式依賴關係,COL1
則此查詢將返回 0 行。這是因為 的每個值COL2
都有 1 個對應的值COL1
。