- BCNF é a versão avançada do 3NF. É mais rigoroso que 3NF.
- Uma tabela está em BCNF se toda dependência funcional X → Y, X for a superchave da tabela.
- Para BCNF, a tabela deve estar em 3NF, e para cada FD, LHS é a superchave.
Exemplo: Suponhamos que exista uma empresa onde os funcionários trabalham em mais de um departamento.
configuração do caminho python
Tabela FUNCIONÁRIO:
EMP_ID | EMP_COUNTRY | EMP_DEPT | DEPT_TYPE | EMP_DEPT_NO |
---|---|---|---|---|
264 | Índia | Projetando | D394 | 283 |
264 | Índia | Teste | D394 | 300 |
364 | Reino Unido | Lojas | D283 | 232 |
364 | Reino Unido | Em desenvolvimento | D283 | 549 |
Na tabela acima, as dependências funcionais são as seguintes:
EMP_ID → EMP_COUNTRY EMP_DEPT → {DEPT_TYPE, EMP_DEPT_NO}
Chave do candidato: {EMP-ID, EMP-DEPT}
A tabela não está em BCNF porque nem EMP_DEPT nem EMP_ID sozinhos são chaves.
Para converter a tabela fornecida em BCNF, nós a decompomos em três tabelas:
Tabela EMP_COUNTRY:
EMP_ID | EMP_COUNTRY |
---|---|
264 | Índia |
264 | Índia |
Tabela EMP_DEPT:
EMP_DEPT | DEPT_TYPE | EMP_DEPT_NO |
---|---|---|
Projetando | D394 | 283 |
Teste | D394 | 300 |
Lojas | D283 | 232 |
Em desenvolvimento | D283 | 549 |
Tabela EMP_DEPT_MAPPING:
EMP_ID | EMP_DEPT |
---|---|
D394 | 283 |
D394 | 300 |
D283 | 232 |
D283 | 549 |
Dependências funcionais:
EMP_ID → EMP_COUNTRY EMP_DEPT → {DEPT_TYPE, EMP_DEPT_NO}
Chaves candidatas:
Para a primeira tabela: EMP_ID
Para a segunda tabela: EMP_DEPT
Para a terceira tabela: {EMP_ID, EMP_DEPT}
Agora, isso está no BCNF porque a parte esquerda de ambas as dependências funcionais é uma chave.