- BCNF ist die Vorabversion von 3NF. Es ist strenger als 3NF.
- Eine Tabelle ist in BCNF, wenn jede funktionale Abhängigkeit X → Y, X der Superschlüssel der Tabelle ist.
- Für BCNF sollte die Tabelle in 3NF vorliegen und für jeden FD ist LHS der Superschlüssel.
Beispiel: Nehmen wir an, es gibt ein Unternehmen, in dem Mitarbeiter in mehr als einer Abteilung arbeiten.
Datum und Uhrzeit des Typoskripts
MITARBEITER-Tabelle:
EMP_ID | EMP_COUNTRY | EMP_DEPT | DEPT_TYPE | EMP_DEPT_NO |
---|---|---|---|---|
264 | Indien | Entwerfen | D394 | 283 |
264 | Indien | Testen | D394 | 300 |
364 | Vereinigtes Königreich | Shops | D283 | 232 |
364 | Vereinigtes Königreich | Entwicklung | D283 | 549 |
In der obigen Tabelle sind die funktionalen Abhängigkeiten wie folgt:
EMP_ID → EMP_COUNTRY EMP_DEPT → {DEPT_TYPE, EMP_DEPT_NO}
Kandidatenschlüssel: {EMP-ID, EMP-DEPT}
Die Tabelle befindet sich nicht in BCNF, da weder EMP_DEPT noch EMP_ID allein Schlüssel sind.
Um die angegebene Tabelle in BCNF umzuwandeln, zerlegen wir sie in drei Tabellen:
EMP_COUNTRY-Tabelle:
EMP_ID | EMP_COUNTRY |
---|---|
264 | Indien |
264 | Indien |
EMP_DEPT-Tabelle:
EMP_DEPT | DEPT_TYPE | EMP_DEPT_NO |
---|---|---|
Entwerfen | D394 | 283 |
Testen | D394 | 300 |
Shops | D283 | 232 |
Entwicklung | D283 | 549 |
EMP_DEPT_MAPPING-Tabelle:
EMP_ID | EMP_DEPT |
---|---|
D394 | 283 |
D394 | 300 |
D283 | 232 |
D283 | 549 |
Funktionale Abhängigkeiten:
EMP_ID → EMP_COUNTRY EMP_DEPT → {DEPT_TYPE, EMP_DEPT_NO}
Kandidatenschlüssel:
Für die erste Tabelle: EMP_ID
Für die zweite Tabelle: EMP_DEPT
Für die dritte Tabelle: {EMP_ID, EMP_DEPT}
Dies ist nun in BCNF der Fall, da der linke Teil beider funktionaler Abhängigkeiten ein Schlüssel ist.