了解3NF:请说明文

时间:2013-02-28 02:48:19

标签: database database-normalization 3nf

我正在解决一个示例问题,我们正在尝试确定以下哪个关系处于第三范式(3NF)。以下是我们给出的关系:

R1(ABCD)
ACD - > B AC - > D D - > C AC - >乙

R2(ABCD)
AB - > C ABD - > C ABC - > D AC - > d

R3(ABCD)
C - > B A - > B CD - > BCD - >甲

R4(ABCD)
C - > B B - > AC - > D AC - >乙

我知道答案是R1在3NF,但我很难理解确定违反3NF的步骤。对于每个关系,有人可以用简单的英语分解吗?如果您能够告诉我每个关系如何违反3NF规则之一,那将非常有帮助:

  1. X - > A,然后A是X
  2. 的子集
  3. X是超级钥匙
  4. A是R
  5. 的某些键的一部分

    对于R1,我采取的第一步是将其分解为闭包:

    ACD + = ABCD
    AC + = ABCD
    D + = C

    ACD和AC是超级键,满足规则2 1. D - > C,但C不是D的子集。违反规则1 2. D不是超级钥匙。违反了规则2 3. C是R的一些关键的一部分.C是AC和ACD的一部分。那么,第3条是否得到维护?

    不确定我是否正确地执行了这些步骤,因此请尽可能简单地将这些步骤分解为挣扎于这些概念的人。感谢。

4 个答案:

答案 0 :(得分:15)

我在third normal form, 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.

现在有三个需要澄清的定义,keysuperkeyprime attribute

对于定义,我们将使用R1关系中的示例来描述它们:

R1(ABCD)
ACD -> B   AC -> D   D -> C   AC -> B

key:键是确定关系的每个属性的属性。换句话说,它是一组属性,它们将为您提供不在集合中的关系的所有其他属性。在上述示例的关系R1中,键是ACAD。为什么?因为通过了解属性AC,您可以确定其余属性BD。为什么AD成为关键?同样的道理。 AD最终会确定BC

superkey:超级密钥基本上是密钥的超集。超级密钥将始终包含密钥,并且可能包含更多属性。在前面的示例中,AC是关键。因此ACACDACB等是超级密钥。请注意,密钥本身就是一个超级密钥。

prime attribute:主要属性基本上是属于键的一部分属性。因此,AC是主要属性,因为它们是键AC的一部分。但请注意,键和超级键之间的区别。对于超级密钥ACBB不是主要属性,因为B不是密钥的一部分。只需将主要属性视为密钥的子集。

现在让我们来看看这四种关系:

R1(ABCD)
ACD -> B   AC -> D   D -> C   AC -> B

R2(ABCD)
AB -> C   ABD -> C   ABC -> D   AC -> D

R3(ABCD)
C -> B   A -> B   CD -> A   BCD -> A

R4(ABCD)
C -> B   B -> A   AC -> D   AC -> B

对于每种关系,我们都会记下keysprime attributes。然后我们将看看是否满足定义。

R1:
keys: AC, AD
prime attributes: A, C, D

ACD -> B:左边是超级钥匙。满足(a)。

AC -> D:左侧是一个键,因此是一个超级键。满足(a)。

D -> C:左侧不是超级钥匙。不满足(a)。但是,右侧是主要属性。满足(b)。

AC -> B:左侧是关键。满足(a)。

在所有情况下都满足(a)或(b)。因此R1位于3NF

R2:
keys: AB
prime attributes: A, B

AB -> C:左侧是一个键,因此是一个超级键。满足(a)。

ABD -> C:左边是超级钥匙。满足(a)。

ABC -> D:左边是超级钥匙。满足(a)。

AC -> D:左侧不是超级钥匙。不满足(a)。右侧不是主要属性。不满足(b)。

由于在所有情况下都不满足(a)或(b),R2不在3NF

R3:
keys: CD, 
prime attributes: C, D

C -> B:左侧不是超级钥匙。不满足(a)。右侧不是主要属性。不满足(b)。

由于我们已经发现一个不满足(a)或(b)的案例,我们可以立即得出结论R3不在3NF

R4:
keys: C
prime attributes: C

C -> B:左侧是一个键,因此是一个超级键。满足(a)。

B -> A:左侧不是超级钥匙。不满足(a)。右侧不是主要属性。不满足(b)。

同样,我们可以在此停止,因为第二种情况既不满足(a)也不满足(b)。关系R4不在3NF

答案 1 :(得分:0)

让我用简单的话来解释:

对于给定的关系, R1(ABCD),功能依赖性为:

  

ACD - > B

     

AC - > d

     

D - > ç

     

AC - >乙

条件为 3NF

X-> Y 此处X是超级键,当Y是非素数属性时,否则它可以是任何属性

  

Prime属性是属于超级键的属性

     

非素数属性是不属于超级键的属性

让我们回到关系R1,

  

AC + = ABCD

     

AD + = ABCD

     

ACD + = ABCD和

     

d + = DC

因此,我们将AD,AC,ACD作为我们的超级密钥

A,C,D prime 属性,而 B 非素数属性

ACD->乙

  

此功能依赖性在3NF中,因为ACD是超级密钥而B是主要属性

AC-> d

  

此功能依赖性也在3NF中,因为AC是超级密钥,D是主要属性

D-&以及c

  

此功能依赖性也在3NF中,因为D是主要属性,C也是主要属性

AC->乙

  

此功能依赖性也在3NF中,因为AC是超级密钥而B是非主要属性

  Thus,the relation is not in 3NF only when non-prime attributes
  does not depend on super key

希望,这有帮助!

答案 2 :(得分:-1)

简单来说,这是3种正常形式:

1NF:“密钥”的存在确保表格在1NF(密钥必须在那里)。

2NF:要求“每个”非关键属性依赖于“整个关键字”以确保2NF。

3NF:进一步要求“每个”非关键属性依赖于“只有关键”,确保3NF。

现在,为此:

  

R1(ABCD)ACD - > B AC - > D D - > C AC - >乙

看看这些ACD - > B和AC - > B:明显违反2NF条件。忘记3NF,这种关系甚至不是2NF。 “整个关键” - >概念不成立。

我认为,你已经使用SET证明了相同。

答案 3 :(得分:-1)

3NF的简化表达式是“如果每个传递依赖于键的属性是关键属性,则关系在3NF中。” 1 关键属性是属于 any的属性候选人密钥。

R 3 是分析3NF的简单方法之一。

[R <子> 3 (ABCD)

  • C - &gt;乙
  • A - &gt;乙
  • CD - &gt; A
  • BCD - &gt; A

唯一的候选键是CD。

  • 是否存在传递依赖?是的,有:CD-> A,和A-> B。 B过渡依赖于密钥。
  • B是关键属性吗?不,这不对; CD是唯一的关键。

所以R 3 不在3NF中。

R 4 类似。 C是唯一的候选键。

  • 是否存在传递依赖?是的,有:C-> B,B-> A.
  • 是一个关键属性吗?不,这不对; C是唯一的关键。

所以R 4 不在3NF中。

在R 1 中,候选键是AC和AD。

  • 是否存在传递依赖?是的,有:AC-&gt; D,和D-&gt; C。
  • C是关键属性吗?是的,是的。

所以R 1 在3NF中


  1. “关系模式设计的新范式”,Carlo Zaniolo,ACM Transactions on Database Systems,Vol。 1982年9月7日,第3期,第492页。最近的工作使用 prime属性来引用属于任何候选键的属性和非主要属性来引用属于任何候选键的一部分的属性。