推奨されます, 2019

エディターズチョイス

3NFとBCNFの違い

正規化は、関係から冗長性を取り除き、それによってデータベースのパフォーマンスを低下させる挿入、削除、および更新の異常を最小限に抑える方法です。 この記事では、2つのより高い正規形、すなわち3NFとBCNFを区別します。 3NFとBCNFの基本的な違いは、 3NFはリレーションとテーブルから推移的な依存関係を削除してBCNFに入れることです。Xがスーパーキーである場合に限り、リレーションにおける自明な関数依存関係X-> Yが成り立ちます。

3NFとBCNFの違いを以下の比較表を使って説明しましょう。

比較表

比較基準3NFBCNF
概念素数以外の属性は、推移的に候補キーに依存してはいけません。関係Rの自明な依存関係がX-> Yの場合、Xは関係Rのスーパーキーになるはずです。
依存3NFは、すべての依存関係を犠牲にすることなく取得できます。依存関係はBCNFでは保存されない可能性があります。
分解無損失分解は3NFで達成できます。無損失分解は、BCNFでは達成が困難です。

3NFの定義

テーブルまたはリレーションは、テーブルがすでに2NFで、リレーションの候補キー推移的に依存する非素数属性がない場合にのみ、 第3正規形であると見なされます。

したがって、3NFでテーブルを正規化するプロセスを説明する前に、候補キーについて説明します。 候補キーは、 最小スーパーキー、つまり関係のすべての属性を定義できる最小属性を持つスーパーキーです。 そのため、テーブルを正規化する過程で、まず、特定の関係の候補キーを認識します。 候補キーの一部である属性素数属性であり、候補キーの一部ではない属性は非素数属性です

ここで、関係R(A、B、C、D、E、F)であり、関係Rについて次の関数依存関係があるとします。

関数の依存関係を観察すると、キーABを使用してリレーションR内のすべての属性の値を検索できるため、 ABはリレーションRの候補キーであると結論付けることができます。 属性C、D、E、Fはどれも候補キーの一部ではないため、 非素数属性になります。

素数以外の属性は候補キーに部分的に依存していないため、表は2NFです。

しかし、属性Fは候補キーABに直接依存していないため、提供された機能依存関係の中には推移的な依存関係が観察されます。 代わりに、属性Fは属性Dを介して候補キーABに 推移的に依存しています。 属性Dが、候補キーABからFの属性値に到達できる値を持つまで。 属性Dの値がNULLの場合、候補キーABの助けを借りてFの値を見つけることはできません。 これが、3NFが関係から推移的な依存関係を取り除くことを要求する理由です。

したがって、この推移的な依存関係を取り除くには、関係Rを分割する必要があります。関係を分割するときは、常に候補キーと、その候補キーに依存するすべての属性を最初の関係に配置します。 次の分割関係では、推移的な依存関係を引き起こす属性とそれに依存する属性を2番目の関係に配置します。

現在、テーブルR1とR2は3NFになっています。これは、部分的および推移的な依存関係が残っていないためです。 関係R1(A、B、C、D、E)は候補キーABを有するが、関係R2(D、E)はその候補キーとしてを有する。

BCNFの定義

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

それでは、BCNFをよりよく理解するための例に移りましょう。 次の関数依存性を持つ関係R(A、B、C、D、F)があるとします。

関係Rを観察すると、 ABFは関係Rの候補キーであると言えます。これらは単独で関係R内のすべての属性の値を検索できるからです。したがって、 A、B、F素数属性です。 素数でない属性です。 上記の機能的依存関係には、推移的な依存関係は見られません。 したがって、テーブルRは3NFにあります。

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

さて、テーブルR1とR2はBCNFにあります。 関係R1は、2つの候補 キー および 、すなわちR1のささいな機能依存性、すなわちA→BCDおよびB→ACDを有し、AおよびBは関係に対するスーパーキーであるので、BCNFを保持する。 関係R2候補キーとしてDを持ち、Dはスーパーキーであるため、機能的な依存関係D - > FもBCNFに対して成り立ちます。

3NFとBCNFの主な違い

  1. 3NFは、非素数属性が関係の候補キーに推移的に依存してはならないと述べています。 一方、BCNFは、ある関係に対して些細な機能的依存関係X - > Yが存在すると述べています。 Xはスーパーキーでなければなりません。
  2. 関係の依存性を犠牲にすることなく3NFを得ることができる。 ただし、BCNFの取得中は依存関係が保持されない可能性があります。
  3. 3NFは古いテーブルから情報を失うことなく達成できますが、BCNFを取得している間は古いテーブルから情報を失う可能性があります。

結論:

BCNFは3NFよりもはるかに限定的で、テーブルの正規化に役立ちます。 3NFにおける関係は、BCNFによってさらに除去される最小の冗長性が残されている。

Top