logo

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

  • BCNF は 3NF の発展版です。 3NFよりも厳しいです。
  • すべての関数依存関係 X → Y があり、X がテーブルのスーパーキーである場合、テーブルは BCNF にあります。
  • BCNF の場合、テーブルは 3NF にある必要があり、すべての FD の LHS がスーパー キーです。

例: 従業員が複数の部門で働いている会社があると仮定します。

Javaメソッド

従業員テーブル:

EMP_ID EMP_COUNTRY EMP_DEPT DEPT_TYPE EMP_DEPT_NO
264 インド デザインする D394 283
264 インド テスト D394 300
364 イギリス 店舗 D283 232
364 イギリス 現像 D283 549

上の表では、機能の依存関係は次のとおりです。

 EMP_ID → EMP_COUNTRY EMP_DEPT → {DEPT_TYPE, EMP_DEPT_NO} 

候補キー: {EMP-ID, EMP-DEPT}

EMP_DEPT も EMP_ID も単独ではキーではないため、このテーブルは BCNF にはありません。

指定されたテーブルを BCNF に変換するには、テーブルを 3 つのテーブルに分解します。

EMP_COUNTRY テーブル:

EMP_ID EMP_COUNTRY
264 インド
264 インド

EMP_DEPT テーブル:

EMP_DEPT DEPT_TYPE EMP_DEPT_NO
デザインする D394 283
テスト D394 300
店舗 D283 232
現像 D283 549

EMP_DEPT_MAPPING テーブル:

EMP_ID EMP_DEPT
D394 283
D394 300
D283 232
D283 549

機能的な依存関係:

 EMP_ID → EMP_COUNTRY EMP_DEPT → {DEPT_TYPE, EMP_DEPT_NO} 

候補キー:

最初のテーブルの場合: EMP_ID
2 番目のテーブルの場合: EMP_DEPT
3 番目のテーブルの場合: {EMP_ID、EMP_DEPT}

さて、これは BCNF にあります。これは、両方の関数の依存関係の左側の部分がキーであるためです。