我正在解决一个示例问题,我们正在尝试确定以下哪个关系处于第三范式(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规则之一,那将非常有帮助:
对于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条是否得到维护?
不确定我是否正确地执行了这些步骤,因此请尽可能简单地将这些步骤分解为挣扎于这些概念的人。感谢。
答案 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.
现在有三个需要澄清的定义,key
,superkey
和prime attribute
。
对于定义,我们将使用R1关系中的示例来描述它们:
R1(ABCD)
ACD -> B AC -> D D -> C AC -> B
key:
键是确定关系的每个属性的属性。换句话说,它是一组属性,它们将为您提供不在集合中的关系的所有其他属性。在上述示例的关系R1中,键是AC
和AD
。为什么?因为通过了解属性A
和C
,您可以确定其余属性B
和D
。为什么AD
成为关键?同样的道理。 A
和D
最终会确定B
和C
。
superkey:
超级密钥基本上是密钥的超集。超级密钥将始终包含密钥,并且可能包含更多属性。在前面的示例中,AC
是关键。因此AC
,ACD
,ACB
等是超级密钥。请注意,密钥本身就是一个超级密钥。
prime attribute:
主要属性基本上是属于键的一部分属性。因此,A
和C
是主要属性,因为它们是键AC
的一部分。但请注意,键和超级键之间的区别。对于超级密钥ACB
,B
不是主要属性,因为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
对于每种关系,我们都会记下keys
和prime 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)
唯一的候选键是CD。
所以R 3 不在3NF中。
R 4 类似。 C是唯一的候选键。
所以R 4 不在3NF中。
在R 1 中,候选键是AC和AD。
所以R 1 在3NF中。