- 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 にあります。これは、両方の関数の依存関係の左側の部分がキーであるためです。