【问题标题】:Maximal Number of Functional Dependencies (including trivial)函数依赖的最大数量(包括微不足道的)
【发布时间】:2014-12-02 14:05:16
【问题描述】:

在 N 个属性的关系 R 中,有多少个函数依赖关系(包括微不足道的)?

我知道微不足道的依赖项是右侧是左侧的子集,但我不确定如何计算依赖项的上限。

任何有关答案和方法的信息将不胜感激。

    -

【问题讨论】:

  • 函数依赖表明某些属性决定其他属性。通常,“关系值(或变量)的(或其中)的 FD”是指那些成立的,即真实的陈述。在这里,您的问题可能真的应该是,可以使用给定属性表示的所有 FD 是什么。

标签: database functional-dependencies


【解决方案1】:

函数依赖的最大可能数量为

  • 可能的左侧数 * 可能的右侧数

我们包含了微不足道的函数依赖,因此可能的左侧数等于可能的右侧数。所以这简化为

  • (可能的左侧数)2

假设你有 R{∅AB}。共有三个属性。1可能的左边数是

  • 3 个属性的组合,一次取 1 个,加上
  • 3 个属性的组合,一次取 2 个,加上
  • 3 个属性的组合,一次取 3 个

等于3+3+1,或7。因此对于具有三个属性的任何R,最多有72个可能的函数依赖关系: 49。属性的顺序无关紧要,所以我们使用组合公式,而不是排列公式。

如果你从 R{∅ABC} 开始,你有

  • 4 个属性的组合,一次取 1 个,加上
  • 4 个属性的组合,一次取 2 个,加上
  • 4 个属性的组合,一次取 3 个,加上
  • 4 个属性的组合,一次取 4 个

等于4+6+4+1,或 15。因此,对于任何具有四个属性的 R,最多有 152 个可能的函数依赖:225。

一旦您知道了这个公式,这些计算就很容易使用电子表格。使用 Ruby 或 Python 等脚本语言编写程序以生成所有可能的函数依赖项也很容易。

The Wikipedia article on combinations 提供了如何计算组合的示例,使用和不使用阶乘。

来自 R{∅AB} 的所有可能组合:

A->A A->B A->∅ A->AB A->A∅ A->B∅ A->AB∅ B->A B->B B->∅ B->AB B->A∅ B->B∅ B->AB∅ ∅->A ∅->B ∅->∅ ∅->AB ∅->A∅ ∅->B∅ ∅->AB∅ AB->A AB->B AB->∅ AB->AB AB->A∅ AB->B∅ AB->AB∅ A∅->A A∅->B A∅->∅ A∅->AB A∅->A∅ A∅->B∅ A∅->AB∅ B∅->A B∅->B B∅->∅ B∅->AB B∅->A∅ B∅->B∅ B∅->AB∅ AB∅->A AB∅->B AB∅->∅ AB∅->AB AB∅->A∅ AB∅->B∅ AB∅->AB∅
  1. 大多数人会忽略空集。他们会说 R{∅AB} 只有两个属性,A 和 B,他们会写成 R{AB}。

【讨论】:

  • 空集可以是 FD 的行列式(也可以是候选键)。
  • 一个错误。除了在 this 问题的上下文中,我的观点不止一个。 (ATTR->{} 形式的所有 FD 都是平凡的。我们还需要 {}->ATTR 形式的所有 FD。)
  • 一般形式是任意子集决定任意子集。所以你的答案一次也需要 0 。这意味着不仅要添加单例 & {},还要添加所有可能的子集 & {},包括 {}->{}。
  • 我了解您如何使用组合获得 3 + 3 + 1,但您如何考虑空集?有没有通用的计算形式?
  • @Tomwa:更新答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-08-20
  • 1970-01-01
  • 2018-07-12
  • 1970-01-01
  • 2023-03-24
  • 2013-09-11
  • 1970-01-01
相关资源
最近更新 更多