8

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

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

我知道答案是 R1 在 3NF 中,但我很难理解确定什么违反 3NF 的步骤。有人可以用简单的英语为每个关系分解吗?如果您可以逐步向我展示每个关系如何违反 3NF 规则之一,那将非常有帮助:

  1. X -> A,则 A 是 X 的子集
  2. X 是一个超级键
  3. A 是 R 的某个键的一部分

对于 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

4 回答 4

20

我发现的关系的最佳定义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钥匙?因为通过知道属性AC你可以确定剩余的属性,BD。为什么是AD钥匙?同样的原因。A并将D最终确定BC

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

prime attribute:主要属性基本上是作为键的一部分的属性。因此AC是主要属性,因为它们是 key 的一部分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:左侧是超级键。满足(一)。

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

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

AC -> B:左边是钥匙。满足(一)。

在所有情况下都满足(a)或(b)。因此R13NF.

R2:
keys: AB
prime attributes: A, B

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

ABD -> C:左侧是超级键。满足(一)。

ABC -> D:左侧是超级键。满足(一)。

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:左侧是一个键,因此是一个超级键。满足(一)。  

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

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

于 2015-05-15T20:35:57.980 回答
0

3NF 的简化表达式是“如果每个传递依赖于键的属性都是键属性,则关系在 3NF 中”。1 键属性是任何候选键的一部分的属性。

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

R 3 (ABCD)

  • C -> B
  • A -> B
  • 光盘 -> 一个
  • BCD -> A

唯一的候选键是 CD。

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

所以 R 3不在 3NF 中。

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

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

所以 R 4不在 3NF 中。

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

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

所以 R 1 3NF 中。


  1. “关系模式设计的新范式”,Carlo Zaniolo,ACM Transactions on Database Systems,Vol。7,第 3 期,1982 年 9 月,第 492 页。最近的工作使用素数属性来指代属于任何候选键的属性,使用非素数属性来指代属于任何候选键的属性。
于 2013-07-16T23:14:51.830 回答
0

让我用简单的话解释一下:

对于给定的关系 R1(ABCD),函数依赖关系是:

ACD -> B

交流-> D

D -> C

交流 -> 乙

处于3NF的条件

X->Y这里当 Y 是非主属性时X 是超级键,否则它可以是任何属性

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

非主属性是不属于超键的属性

让我们回到关系 R1,

AC+=ABCD

AD+=ABCD

ACD+=ABCD 和

D+=直流

因此,我们得到 AD、AC、ACD 作为我们的超级键

A , C,D素数属性,B是非素数属性

ACD->B

这种功能依赖在 3NF 中,因为 ACD 是超级键,B 是主要属性

交流->D

这种功能依赖也在 3NF 中,因为 AC 是超级键,D 是主要属性

D->C

这种函数依赖也在 3NF 中,因为 D 是主要属性,C 也是主要属性

交流->乙

这种功能依赖也在 3NF 中,因为 AC 是超级键,B 是非主属性

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

希望这可以帮助!

于 2015-05-09T13:11:20.603 回答
-1

用简单的英语,这里有 3 种范式:

1NF: “key”的存在保证了表在1NF(key must be there)。

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

3NF:进一步要求“每个”非关键属性都依赖于“除了关键”确保了 3NF。

现在,为此:

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

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

我认为,您已经使用 SET 证明了这一点。

于 2013-02-28T09:46:24.453 回答