Normalization

如何僅基於重複來規範化數據

  • February 19, 2013

給定一個非規範化的數據表,是否有一個好的策略來嘗試基於重複數據進行規範化?假設我們沒有關於列重要性的資訊。

在一個小例子中

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.

我可以看到有三個源表,可能分別稱為ContinentsCountriesCities。對於更大的數據集呢?比如說 45 列和幾十萬行。 查看數據顯然不會有太大幫助。

我不得不對幾個現有的複雜數據集進行逆向工程。要建立的最重要的事情是數據中的鍵和依賴關係。坦率地說,這個問題是 NP 困難的,所以一些直覺和檢查將大大幫助你得到一個明智的答案,所以不要指望一個簡單的“轉動曲柄”解決方案,除非你有很多時間在你的手。

您需要做的是一次查詢一列數據並按列組合查詢數據。您需要列值(和列組合值)的頻率分佈。最大頻率為 1 的列(或組合)是候選鍵。

您還可以查看列組合的頻率分佈以找到潛在的層次結構。在您的範例中,每個值都Col2只有一個值Col1,依此類推。

當您辨識列之間的候選鍵和依賴關係時,您可以應用規範化。


**編輯:**回應OP在評論中的問題:

這是一個查詢,它會告訴您一列是否可能對另一列有功能依賴:

select COL2 
from MYSTERY
group by COL2
having count(distinct(COL1)) <> 1

如果COL2具有函式依賴關係,COL1則此查詢將返回 0 行。這是因為 的每個值COL2都有 1 個對應的值COL1

引用自:https://dba.stackexchange.com/questions/34669