- BCNF是3NF的高级版本。它比3NF严格。
- 如果每个功能依赖项X→Y, 则表在BCNF中, X是表的超级键。
- 对于BCNF, 该表应为3NF, 对于每个FD, LHS是超级键。
员工表:
EMP_ID | EMP_COUNTRY | EMP_DEPT | DEPT_TYPE | EMP_DEPT_NO |
---|---|---|---|---|
264 | India | Designing | D394 | 283 |
264 | India | Testing | D394 | 300 |
364 | UK | Stores | D283 | 232 |
364 | UK | Developing | D283 | 549 |
EMP_ID→EMP_COUNTRYEMP_DEPT→{DEPT_TYPE, EMP_DEPT_NO}
候选密钥:{EMP-ID, EMP-DEPT}
该表不在BCNF中, 因为单独的EMP_DEPT和EMP_ID都不是键。
要将给定表转换为BCNF, 我们将其分解为三个表:
EMP_COUNTRY表:
EMP_ID | EMP_COUNTRY |
---|---|
264 | India |
264 | India |
EMP_DEPT | DEPT_TYPE | EMP_DEPT_NO |
---|---|---|
Designing | D394 | 283 |
Testing | D394 | 300 |
Stores | D283 | 232 |
Developing | D283 | 549 |
EMP_ID | EMP_DEPT |
---|---|
D394 | 283 |
D394 | 300 |
D283 | 232 |
D283 | 549 |
EMP_ID→EMP_COUNTRYEMP_DEPT→{DEPT_TYPE, EMP_DEPT_NO}
候选键:
对于第一张表:EMP_ID对于第二张表:EMP_DEPT对于第三张表:{EMP_ID, EMP_DEPT}
【DBMS Boyce Codd范式(BCNF)】现在, 这是在BCNF中, 因为两个功能依赖项的左侧部分都是关键。