我找到的关系的最佳定义是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
, and prime attribute
.
对于定义,我们将使用 R1 关系中的示例来描述它们:
R1(ABCD)
ACD -> B AC -> D D -> C AC -> B
key:
键是确定关系的每个属性的属性。换句话说,这组属性将为您提供关系中不在该组中的所有其他属性。在上例的关系 R1 中,键是AC
and AD
。为什么是AC
关键?因为通过了解属性A
and C
您可以确定剩余的属性,B
and D
。为什么是AD
关键?同样的原因。A
and D
将最终决定B
and C
.
superkey:
超级密钥基本上是密钥的超集。超级密钥将始终包含该密钥以及可能更多的属性。在前面的例子中,AC
是一把钥匙。因此AC
, ACD
, ACB
等是超级键。请注意,密钥本身就是超级密钥。
prime attribute:
主要属性基本上是作为键一部分的属性。因此A
and 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
is in 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
.