関係について私が見つけた最良の定義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.
ここで、明確化が必要な 3 つの定義、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
はキーの一部であるため、主要な属性ですAC
。ただし、キーとスーパーキーの違いに注意してください。スーパー キー のACB
場合、はキーの一部ではないB
ため、主要な属性でB
はありません。主要な属性をキーのサブセットと考えてください。
次に、4 つの関係を見てみましょう。
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)を満たさない。
繰り返しますが、2 番目のケースは (a) も (b) も満たさないため、ここで終了できます。関係R4
は にありません3NF
。