我发现的关系的最佳定义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
。为什么是AC
钥匙?因为通过知道属性A
和C
你可以确定剩余的属性,B
和D
。为什么是AD
钥匙?同样的原因。A
并将D
最终确定B
和C
。
superkey:
超级键基本上是键的超集。超级键将始终包含键并且可能包含更多属性。在前面的例子中,AC
是一个键。因此AC
, ACD
,ACB
等是超级键。请注意,密钥本身就是超级密钥。
prime attribute:
主要属性基本上是作为键的一部分的属性。因此A
和C
是主要属性,因为它们是 key 的一部分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:
左侧是超级键。满足(一)。
AC -> D:
左侧是一个键,因此是一个超级键。满足(一)。
D -> C:
左侧不是超级键。不满足(a)。但是,右侧是主要属性。满足 (b)。
AC -> B:
左边是钥匙。满足(一)。
在所有情况下都满足(a)或(b)。因此R1
在3NF
.
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
.