
3NFとBCNFの違いを以下の比較表を使って説明しましょう。
比較表
比較基準 | 3NF | BCNF |
---|---|---|
概念 | 素数以外の属性は、推移的に候補キーに依存してはいけません。 | 関係Rの自明な依存関係がX-> Yの場合、Xは関係Rのスーパーキーになるはずです。 |
依存 | 3NFは、すべての依存関係を犠牲にすることなく取得できます。 | 依存関係はBCNFでは保存されない可能性があります。 |
分解 | 無損失分解は3NFで達成できます。 | 無損失分解は、BCNFでは達成が困難です。 |
3NFの定義
テーブルまたはリレーションは、テーブルがすでに2NFで、リレーションの候補キーに推移的に依存する非素数属性がない場合にのみ、 第3正規形であると見なされます。
したがって、3NFでテーブルを正規化するプロセスを説明する前に、候補キーについて説明します。 候補キーは、 最小スーパーキー、つまり関係のすべての属性を定義できる最小属性を持つスーパーキーです。 そのため、テーブルを正規化する過程で、まず、特定の関係の候補キーを認識します。 候補キーの一部である属性は素数属性であり、候補キーの一部ではない属性は非素数属性です 。
ここで、関係R(A、B、C、D、E、F)であり、関係Rについて次の関数依存関係があるとします。

素数以外の属性は候補キーに部分的に依存していないため、表は2NFです。
しかし、属性Fは候補キーABに直接依存していないため、提供された機能依存関係の中には推移的な依存関係が観察されます。 代わりに、属性Fは属性Dを介して候補キーABに 推移的に依存しています。 属性Dが、候補キーABからFの属性値に到達できる値を持つまで。 属性Dの値がNULLの場合、候補キーABの助けを借りてFの値を見つけることはできません。 これが、3NFが関係から推移的な依存関係を取り除くことを要求する理由です。
したがって、この推移的な依存関係を取り除くには、関係Rを分割する必要があります。関係を分割するときは、常に候補キーと、その候補キーに依存するすべての属性を最初の関係に配置します。 次の分割関係では、推移的な依存関係を引き起こす属性とそれに依存する属性を2番目の関係に配置します。

BCNFの定義
BCNFは3NFより強いと考えられています。 BCNFにある関係Rは3NFになければなりません。 そして、 自明でない関数依存関係A - > Bが関係Rで成り立つ場合は常に 、 Aは関係Rのスーパーキーでなければなりません。私たちが知っているように、スーパーキーは全体を決定する単一の属性または属性のセットを持つキーです。関係の属性。
それでは、BCNFをよりよく理解するための例に移りましょう。 次の関数依存性を持つ関係R(A、B、C、D、F)があるとします。

しかし、1つの機能的な依存関係、すなわちD - > FはBCNFの定義に違反しています。D - > Fが存在する場合、 Dがここでは当てはまらないスーパーキーであるはずです。 それで、関係Rを分割します。

3NFとBCNFの主な違い
- 3NFは、非素数属性が関係の候補キーに推移的に依存してはならないと述べています。 一方、BCNFは、ある関係に対して些細な機能的依存関係X - > Yが存在すると述べています。 Xはスーパーキーでなければなりません。
- 関係の依存性を犠牲にすることなく3NFを得ることができる。 ただし、BCNFの取得中は依存関係が保持されない可能性があります。
- 3NFは古いテーブルから情報を失うことなく達成できますが、BCNFを取得している間は古いテーブルから情報を失う可能性があります。
結論:
BCNFは3NFよりもはるかに限定的で、テーブルの正規化に役立ちます。 3NFにおける関係は、BCNFによってさらに除去される最小の冗長性が残されている。