Normalização

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 XYX \rightarrow Y, o conjunto XX seja uma chave candidata da relação, e que YY não esteja contido em XX.

A definição formal da FNBC é:

Uma relação RR está na Forma Normal de Boyce-Codd (FNBC) se, e somente se, para toda dependência funcional não trivial XYX \rightarrow Y existente em RR, XX for uma chave candidata de RR.

Uma dependência é não trivial se YY não é subconjunto de XX.

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

PACIENTEUBSMÉDICO
JoséPortoRicardo
MariaPortoRicardo
MariaBoa EsperançaJoana
JoanaPortoFabiana

Vamos, então, analisar as dependências funcionais.

  1. (PACIENTE, UBS): identifica unicamente cada atendimento, sendo a chave candidata da tabela.
  2. MÉDICO → UBS: lembremos que, conforme o enunciado, cada médico trabalha em apenas uma UBS. O problema é que MÉDICO não é chave candidata da tabela, mas determina UBS. 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ÉDICOUBS
RicardoPorto
JoanaBoa Esperança
FabianaPorto
  • Aqui, MÉDICO é chave candidata.
  • A dependência MÉDICO → UBS está satisfeita.

ATENDIMENTOS

🔑 PACIENTE🔑 MÉDICO
JoséRicardo
MariaRicardo
MariaJoana
JoanaFabiana

A chave candidata desta tabela é (PACIENTE, MÉDICO) e, agora, não há mais dependências funcionais violando a FNBC.