【问题标题】:3NF and lossless decomposition of relation and functional dependencies关系和函数依赖的 3NF 和无损分解
【发布时间】:2016-10-11 00:36:56
【问题描述】:

我试图找到以下关于函数依赖关系的 3NF 无损分解:

首先,我从上面给出的函数依赖中派生出键。我认为关键如下:

{L,T}, {E,T} 和 {T,M} 因为关系中的所有属性都可以使用这些键中的任何一个来获得。

现在,我熟悉的3NF的定义是:

A relation schema R is in 3NF if, whenever a function dependency X -> A holds in R, either
(a) X is a superkey of R, or
(b) A is a prime attribute of R.

如果我们将此应用于问题中给出的 FD,则以下内容成立:

  • LT -> E 满足 (a) 因为 LT 是一个键(因此是一个超级键)。
  • ET -> L 满足 (a) 因为 ET 是密钥(因此是超级密钥)。
  • TM -> E 满足 (a) 因为 TM 是一个密钥(因此是一个超级密钥)。
  • E-> M 满足 (b) 因为 M 是素数属性。

鉴于此,如何获得关于函数依赖关系的 3NF 无损分解?我怀疑我认为关系在 3NF 中的假设可能是错误的,因为存在传递依赖关系但不是 100% 确定。

如果有人能就我可能出错的地方提供意见,我将不胜感激。

【问题讨论】:

    标签: database database-design database-normalization 3nf


    【解决方案1】:

    你的答案是正确的:

    1. 所有键实际上都是 LT、ET、TM,因为它们决定了所有其他属性,并且没有其他键,因为它们的子集都不满足此属性。

    2. 依赖关系已经是关系的规范覆盖。

    3. 由于您所说的原因,该关系已经处于 3NF 中。

    请注意,如果您按照正确的方式遵循第三范式的定义,则无需检查是否存在传递函数依赖关系。

    我们还可以注意到原始关系不是 Boyce-Codd 范式,因为依赖 E → M,并且通过应用分析算法将其带入 BCNF 产生分解:

    R1 <(E M), {E → M}>
    
    R2 <(E L T), {L T → E, E T → L}>
    

    具有依赖 T M → E 丢失的属性。

    【讨论】:

    • 所以我假设没有将关系无损分解为保留依赖关系的 BCNF?
    • 实际上,如果我们使用所有书籍中定义的最常见的算法(“分析”算法),就会丢失依赖关系。然而,还有其他算法在实践中没有使用,它们可以在 BCNF 中产生不同的分解。其中之一是Tsou and Fisher,在这种情况下,它产生分解:R1(M L T),R2(E L T),它具有更多冗余,但保留了依赖关系。正如我所说,这个算法没有被使用,因为它会产生“不自然”的分解,而且经常有太多的表格。
    • 最后说明:存在模式,我们可以证明在保留依赖关系的 BCNF 中没有分解(这些在许多书中都有介绍),但总的来说问题是决定是否存在泛型关系的函数依赖保持分解是一个 NP-hard 问题(参见wikipedia),所以我们不知道任何多项式算法来解决这个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多