数据库 - 确定功能依赖性

时间:2016-11-06 11:32:04

标签: database dependencies

我遇到了如何确定功能依赖性的问题。

我们说我们有一张桌子

A B C
1 2 2
1 3 2
1 4 2
2 5 2

如何确定该表外的功能依赖性?根据一些同学的结果应该是

A->C
CB->A
AB->C
AC->B

但遗憾的是我不知道如何解决这个问题。有人可以帮我一点吗?

1 个答案:

答案 0 :(得分:0)

如何检查单一功能依赖

要检查给定数据的函数依赖 X1,X2,...,Xn→Y ,您应该:

  1. 项目数据(X1,X2,...,Xn,Y),即删除所有其他列,然后删除重复的行(如果有的话)。
  2. 项目数据(X1,X2,...,Xn)。注意,这次省略 Y
  3. 当且仅当第一个投影中的行数与第二个投影中的行数相同时,功能依赖性才会成立。
  4. 让我们考虑你的例子并检查功能依赖 A→C 。删除重复行之前的第一个投影:

    A C
    1 2
    1 2
    1 2
    2 2
    

    实际首次投影:

    A C
    1 2
    2 2
    

    第二次投影:

    A
    1
    2
    

    投影中的行数相同,因此 A→C 适用于此数据。

    让我们考虑另一个例子: CB→A 。第一个投影与原始表相同(没有删除列,也没有找到重复的行)。第二个预测是:

    A B
    1 2
    1 3
    1 4
    2 5
    

    它包含与第一行相同的行数,因此 CB→A 也成立。

    最后一个例子: AC→B 。第一个投影与前面的例子相同。第二个是:

    A C
    1 2
    2 2
    

    糟糕,行数少于第一个投影,因此 AC→B 不适用于此数据。

    如何查找所有功能依赖

    查找包含给定数据的所有功能依赖项:

    1. 为列的每个子集构建一个投影大小表。
    2. 按缩小的投影尺寸对其进行排序。
    3. 如果子集S具有与子集T相同的投影大小,则 S→T \ S (其中 T \ S 设置差异)。
    4. 让我们考虑一下这个例子的部分表:

      4 ABC
      4 AB
      2 AC
      2 A
      

      从这个部分表中我们可以看到 AB→C A→C 都成立。

      您需要完整的表来查找数据的所有功能依赖项。

      <强>备注

      您是否注意到针对给定数据立场的重复功能依赖性?样本数据可以证明功能依赖性是无效的。但是,从所有可能的数据集的角度来看,对于给定数据的功能依赖性仍然是无效的。