确定表中列之间的依赖关系

时间:2016-09-27 16:07:58

标签: sql database-normalization

我有一个非正规化形式的表,如下所示:

Col1               Col2      Col3            Col4 Col5 
Paris              France    Europe          1     4
Paris              France    Europe          2     5
Paris              France    Europe          3     6
Washington D.C.    USA       North America   8     9
Washington D.C.    USA       North America   7     7
... 
many more rows
...

为了规范化,我需要了解数据的结构。

据推测,从Col3到Col2以及从Col2到Col1存在逻辑依赖性。巴黎是法国的首都,法国是欧洲的一个国家。

如何使用SQL查询证明这一点?基本上我需要证明有像#"巴黎 - 法国 - 欧洲","华盛顿特区 - 美国 - 北美"等等,但从来没有"巴黎 - 美国 - 欧洲"或者"华盛顿特区 - 美国 - 欧洲"例如。实际上,如果我找到类似"柏林 - 德国 - 非洲"在我的数据库中,只要我找不到"柏林 - 德国 - 欧洲"。

2 个答案:

答案 0 :(得分:2)

你不能。

SQL查询可以反驳依赖项,因为您只需要一个计数器示例。但证明依赖意味着显示它可以从不被破坏,而当前的DB内容只代表一个例子。

答案 1 :(得分:1)

您可以使用聚合:

select col3, count(*), count(distinct col2)
from t
group by col3;

期望第二列的值为" 1"。您可以使用col2having count(distinct col2) > 1中获取包含多个值的所有示例。

当然,城市的名称相同。例如,巴黎是一个众所周知的city in Texas