了解3NF:请说明文

rap*_*yen 6 database 3nf database-normalization

我正在研究一个示例问题,其中我们试图确定以下哪个关系处于第三范式(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条是否得到维护?

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

Mar*_*ars 17

我发现的关系的最佳定义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.
Run Code Online (Sandbox Code Playgroud)

现在有需要澄清的,三个定义key,superkeyprime attribute.

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

R1(ABCD)
ACD -> B ? AC -> D ? D -> C ? AC -> B
Run Code Online (Sandbox Code Playgroud)

key:键是确定关系的每个属性的属性.换句话说,它是一组属性,它们将为您提供不在集合中的关系的所有其他属性.在以上示例的关系R1中,键是ACAD.为什么?因为通过了解属性AC,A您可以确定剩余的属性,C以及B.为什么是D钥匙?同样的道理.ADA最终决定DB.

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

ACBprime属性基本上是属于键的一部分的属性.因此prime attribute:,A它们是主要属性,因为它们是关键的一部分C.但请注意,键和超级键之间的区别.对于超级密钥AC,ACB不是主要属性,因为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
Run Code Online (Sandbox Code Playgroud)

对于每个关系,我们都会写下来Bkeys.然后我们将看看定义是否满足.

R1:
keys: AC, AD
prime attributes: A, C, D
Run Code Online (Sandbox Code Playgroud)

prime attributes左边是超级钥匙.满足(a).

ACD -> B:左侧是钥匙,因此是超级钥匙.满足(a).

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

D -> C:左侧是关键.满足(a).

在所有情况下都满足(a)或(b).因此AC -> B:就在R1.

R2:
keys: AB
prime attributes: A, B
Run Code Online (Sandbox Code Playgroud)

3NF左侧是钥匙,因此是超级钥匙.满足(a).  

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

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

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

由于(a)或(b)在所有情况下均不满足,AC -> D:因此不在R2.

R3:
keys: CD, 
prime attributes: C, D
Run Code Online (Sandbox Code Playgroud)

3NF左侧不是超级钥匙.不满足(a).右侧不是主要属性.不满足(b).

由于我们已经发现一个不满足(a)或(b)的情况,我们可以立即得出结论,C -> B:即不存在R3.

R4:
keys: C
prime attributes: C
Run Code Online (Sandbox Code Playgroud)

3NF左侧是钥匙,因此是超级钥匙.满足(a).  

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

同样,我们可以在此停止,因为第二种情况既不满足(a)也不满足(b).关系B -> A:不在R4.


May*_*Roy -1

简单来说,以下是 3 种范式:

\n\n

1NF: “键”的存在确保该表处于1NF(键必须存在)。

\n\n

2NF:要求“每个”非密钥属性依赖于“整个密钥”以保证2NF。

\n\n

3NF:进一步要求“每个”非关键属性依赖于“除了关键”之外的任何其他属性,以确保 3NF。

\n\n

现在,为此:

\n\n
\n

R1(ABCD) ACD -> B \xe2\x80\x83 AC -> D \xe2\x80\x83 D -> C \xe2\x80\x83 AC -> B

\n
\n\n

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

\n\n

我想,你已经用 SET 证明了同样的结果。

\n