logo

ボイス・コッド正規形 (BCNF)

前提条件: 第一正規形第 2 正規形第 3 正規形

2NF および 3NF の一般的な定義を適用すると、1 つまたは複数の候補キーに違反する依存関係によって引き起こされる追加の冗長性が特定される可能性があります。ただし、これらの追加の制約にもかかわらず、3NF 関係に冗長性が生じる原因となる依存関係が依然として存在する可能性があります。 3NF のこの弱点により、 ボイス-コッド正規形 (Codd、1974)



3NF はリレーショナル データベースにとって適切な正規形ですが、X が指定されたリレーションの候補キーでない場合、X->Y 関数の依存関係により、この (3NF) 正規形でも 100% の冗長性が除去されない可能性があります。これはボイス・コッド正規形 (BCNF) によって解決できます。

ボイス・コッド正規形 (BCNF)

Boyce-Codd Normal Form (BCNF) は、関係内のすべての候補キーを考慮した関数依存関係に基づいています。ただし、BCNF には、3NF の一般的な定義と比較して追加の制約もあります。

BCNFのルール

ルール 1: テーブルは第 3 正規形である必要があります。



ルール 2: X は、特定の関係におけるすべての関数依存関係 (FD) X->Y のスーパーキーである必要があります。

注記: 関係が BCNF にあるかどうかをテストするには、すべての行列式を特定し、それらが候補キーであることを確認します。

DBMS の BCNF



として知られる同様の階層に遭遇しました。 チョムスキー標準形 計算理論で。ここで、上記の階層を注意深く調べてください。推測できるのは、 BCNF 内のすべての関係は 3NF にもあります 。別の言い方をすると、3NF 内の関係は BCNF 内に存在する必要はありません。この言葉についてしばらく考えてみましょう。

関数依存関係を持つ特定の関係 R の最高正規形を決定するには、最初のステップは BCNF 条件が成立するかどうかを確認することです。 R が BCNF 内にあることが判明した場合、その関係も BCNF 内にあると安全に推測できます。 3NF2NF、 そして 1NF 階層が示すように。 1NF には最も制限の少ない制約があり、各タプルにアトミック値を持つリレーション R のみが必要です。 2NF には、もう少し制限的な制約があります。

3NF には、最初の 2 つの正規形よりも制限的な制約がありますが、BCNF よりも制限は緩やかです。このように、階層を下に進むにつれて制限が増加します。

ここでは、BCNF の特性を理解するための基本的な例をいくつか説明します。ここでは複数の例について説明します。

例1

学生のデータが記載されている学生データベースを考えてみましょう。

このID この支店 Stu_Course 支店番号 Stu_Course_No
101 コンピュータサイエンスとエンジニアリング DBMS B_001 201
101 コンピュータサイエンスとエンジニアリング コンピューターネットワーク B_001 202
102 電子・通信工学 VLSIテクノロジー B_003 401
102 電子・通信工学 モバイル通信 B_003 402

上記の関数の依存関係は次のとおりです。

Stu_ID −>Stu_Branch Stu_Course −> {支店番号, Stu_Course_No}>

上の表の候補キーは次のとおりです。 {このID、このコース}

このテーブルが BCNF にないのはなぜですか?

上記のテーブルは BCNF にありません。これは、見てわかるように、Stu_ID も Stu_Course もスーパー キーではないためです。上記のルールが明確に示しているように、テーブルを BCNF に含めるには、関数の依存関係 X->Y の場合、X はスーパー キーになければならないというプロパティに従う必要があり、ここでこのプロパティは失敗します。そのため、このテーブルは BCNF にありません。 。

BCNFを満たすにはどうすればよいでしょうか?

BCNF でこのテーブルを満たすには、それをさらにテーブルに分解する必要があります。このテーブルを BCNF に変換する完全な手順は次のとおりです。まずこのメインテーブルを 2 つのテーブルに分割しましょう この支店 そして Stu_Course テーブル。

Stu_Branch テーブル

このID この支店
101 コンピュータサイエンスとエンジニアリング
102 電子・通信工学

このテーブルの候補キー: このID

Javaメソッド

Stu_Cours テーブル

Stu_Course 支店番号 Stu_Course_No
DBMS B_001 201
コンピューターネットワーク B_001 202
VLSIテクノロジー B_003 401
モバイル通信 B_003 402

このテーブルの候補キー: Stu_Course

Stu_ID から Stu_Course_No までのテーブル

このID Stu_Course_No
101 201
101 202
102 401
102 402

このテーブルの候補キー: {Stu_ID、Stu_Course_No}。

さらにテーブルに分解した後、スーパー キーの条件を渡しているため、関数依存関係 X->Y で X が BCNF になります。 スーパーキー。

例 2

FD を次のように設定して、関係 R(A、B、C、D、E) の最高正規形を求めます。

{ BC->D、AC->BE、B->E }>>

説明:

  • ステップ1: ご覧のとおり、(AC)+ ={A, C, B, E, D} ですが、そのサブセットのどれも関係のすべての属性を決定できないため、AC が候補キーになります。 A または C はリレーションの他の属性から導出できないため、候補キー {AC} は 1 つだけになります。
  • ステップ2: プライム属性は、この例では候補キー {A, C} の一部である属性であり、その他はこの例では非プライム属性 {B, D, E} になります。
  • ステップ-3: リレーショナル DBMS では複数値または複合属性が許可されないため、リレーション R は第 1 正規形になります。

BC->D は第 2 正規形 (BC は候補キー AC の適切なサブセットではない) であり、AC->BE は第 2 正規形 (AC は候補キー) であり、B->E であるため、この関係は第 2 正規形になります。は第 2 正規形です (B は候補キー AC の適切なサブセットではありません)。

関係は ない BC->D (BC はスーパーキーでも D もプライム属性でもない) および B->E (B もスーパーキーでも E もプライム属性でもない) であるため、第 3 正規形になりますが、次の第 3 正規形を満たすためです。 、FD の LHS がスーパーキーであるか、RHS がプライム属性である必要があります。したがって、関係の最高正規形は第 2 正規形になります。

注記: プライム属性は、BCNF 関係のキーに推移的に依存することはできません。

ある関係 R のこれらの関数的依存関係を考えてみましょう。

AB ->C C ->B AB ->B>>

R の唯一の候補キーが AB であることがわかっているとします。プライム属性 B がキー AB から C に推移的に依存するため、上記の依存関係が推移的依存関係であると結論付けるには、注意深い観察が必要です。 さて、最初と 3 番目の FD は、両方とも候補キー (または単純に) を含むため、BCNF 内にあります。 KEY)を左側に配置します。ただし、2 番目の依存関係は BCNF にはありませんが、右側にプライム属性が存在するため、明らかに 3NF にあります。したがって、3 つの FD がすべて 3NF になるために必要な条件を満たしているため、R の最高正規形は 3NF になります。

例 3

たとえば、関係 R(A, B, C) を考えてみましょう。

A ->BC、B -> A>

A と B は両方ともスーパー キーであるため、上記の関係は BCNF にあります。

注記: BCNF 分解は、ロスレス結合条件では常に可能であるとは限りません。たとえば、関数依存関係のあるリレーション R (V、W、X、Y、Z) は次のようになります。

V, W ->X Y、Z -> X W -> Y>>

BCNF 分解を保持する依存関係は満たされません。

注記: 冗長性を完全に排除することが常に可能であるとは限らないため、BCNF 関係に冗長性が依然として存在することがあります。

第 4 正規形や第 5 正規形など、高次の正規形もいくつかあります。

詳細については、第 4 および第 5 正規形を参照してください。