Forma Normal de Boyce-Codd
A Forma Normal de Boyce-Codd (FNBC) é uma versão mais rigorosa da 3FN, utilizada para eliminar certos tipos de anomalias que podem permanecer mesmo quando uma relação já está na 3FN. Embora muitas vezes seja aplicada após a 3FN, não há obrigatoriedade de seguir essa ordem: um esquema pode ser projetado diretamente para atender à FNBC, sem necessariamente passar pelas formas normais anteriores.
De forma específica, a FNBC remove a segunda condição da 3FN, exigindo que, para toda dependência funcional , o conjunto seja uma chave candidata da relação, e que não esteja contido em .
A definição formal da FNBC é:
Uma relação está na Forma Normal de Boyce-Codd (FNBC) se, e somente se, para toda dependência funcional não trivial existente em , for uma chave candidata de .
Uma dependência é não trivial se não é subconjunto de .
Isso significa que qualquer atributo (ou conjunto de atributos) que determine outro, isto é, em uma dependência funcional, deve ser uma chave candidata da relação. Em outras palavras, não pode existir nenhum atributo ou combinação de atributos que determine outro atributo, a menos que esse conjunto identifique unicamente as tuplas da relação.
De forma ainda mais direta, a FNBC estabelece que só podem existir dependências funcionais cujo determinante (lado esquerdo) seja uma chave candidata da relação.
O conceito de superchave refere-se a qualquer conjunto de atributos de uma relação capaz de identificar unicamente cada tupla, podendo conter atributos redundantes. Se for mínima, é chamada de chave candidata.
As aplicações da FNBC são bem particulares e até incomuns. Ela se aplica a casos em que as relações: possuem duas ou mais chaves candidatas compostas e com atributos em comum.
Vejamos um exemplo:
A Secretaria de Saúde criou uma planilha para registrar os atendimentos médicos da população. As regras são:
- Um médico atua em apenas uma UBS.
- Um paciente pode visitar várias UBS e ser atendido por diferentes médicos ao longo da vida, mas sempre pelo mesmo médico em cada UBS.
- Uma UBS pode ter vários médicos.
A tabela inicial é:
ATENDIMENTOS
PACIENTE | UBS | MÉDICO |
---|---|---|
José | Porto | Ricardo |
Maria | Porto | Ricardo |
Maria | Boa Esperança | Joana |
Joana | Porto | Fabiana |
Vamos, então, analisar as dependências funcionais.
(PACIENTE, UBS)
: identifica unicamente cada atendimento, sendo a chave candidata da tabela.MÉDICO → UBS
: lembremos que, conforme o enunciado, cada médico trabalha em apenas uma UBS. O problema é queMÉDICO
não é chave candidata da tabela, mas determinaUBS
. Isso viola a FNBC, pois o determinante da dependência funcional não é chave candidata.
Para resolver a violação da FNBC, decompondo a tabela em duas relações:
MEDICOS
🔑 MÉDICO | UBS |
---|---|
Ricardo | Porto |
Joana | Boa Esperança |
Fabiana | Porto |
- Aqui,
MÉDICO
é chave candidata. - A dependência
MÉDICO → UBS
está satisfeita.
ATENDIMENTOS
🔑 PACIENTE | 🔑 MÉDICO |
---|---|
José | Ricardo |
Maria | Ricardo |
Maria | Joana |
Joana | Fabiana |
A chave candidata desta tabela é (PACIENTE, MÉDICO)
e, agora, não há mais dependências funcionais violando a FNBC.