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规则之一,那将非常有帮助:
对于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
,superkey
和prime attribute
.
对于定义,我们将使用R1关系中的示例来描述它们:
R1(ABCD)
ACD -> B ? AC -> D ? D -> C ? AC -> B
Run Code Online (Sandbox Code Playgroud)
key:
键是确定关系的每个属性的属性.换句话说,它是一组属性,它们将为您提供不在集合中的关系的所有其他属性.在以上示例的关系R1中,键是AC
和AD
.为什么?因为通过了解属性AC
,A
您可以确定剩余的属性,C
以及B
.为什么是D
钥匙?同样的道理.AD
并A
最终决定D
和B
.
C
超级键基本上是键的超集.超级密钥将始终包含密钥,并且可能包含更多属性.在前面的例子中,superkey:
是一个关键.因此AC
,AC
,ACD
等是superkeys.请注意,密钥本身就是一个超级密钥.
ACB
prime属性基本上是属于键的一部分的属性.因此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)
对于每个关系,我们都会写下来B
和keys
.然后我们将看看定义是否满足.
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\n1NF: “键”的存在确保该表处于1NF(键必须存在)。
\n\n2NF:要求“每个”非密钥属性依赖于“整个密钥”以保证2NF。
\n\n3NF:进一步要求“每个”非关键属性依赖于“除了关键”之外的任何其他属性,以确保 3NF。
\n\n现在,为此:
\n\n\n\n\nR1(ABCD) ACD -> B \xe2\x80\x83 AC -> D \xe2\x80\x83 D -> C \xe2\x80\x83 AC -> B
\n
看看这些ACD -> B 和AC -> B:显然违反了2NF 条件。忘记 3NF,这种关系甚至在 2NF 中也不存在。“整个钥匙”-->概念不成立。
\n\n我想,你已经用 SET 证明了同样的结果。
\n