1
resposta

Explicação 5FN

Ficou muita confusa a explicação da 5FN. Não está claro, para mim, a forma correta para identificar o problema , assim como a técnica para corrigir.

1 resposta

Oii, Humberto! Tudo bom?

Realmente, são conceitos que vamos pegando aos poucos conforme avançamos nos estudos. Não se preocupe, deixo abaixo algumas informações sobre a 5FN para te ajudar a absover o conteúdo, vamos lá!

O que é a 5FN?

A 5FN (Quinta Forma Normal) é uma etapa avançada da normalização que resolve problemas de dependências de junção que não são cobertas pelas formas normais anteriores (como 1FN, 2FN, 3FN e 4FN). Ela evita que uma tabela seja dividida em tabelas menores e reconstruída sem perder informações ou criar inconsistências, a menos que essa divisão seja realmente necessária.

O foco da 5FN está em lidar com dependências multivaloradas complexas ou situações onde há ciclos de dependências entre atributos que só fazem sentido quando considerados juntos.

Como identificar um problema de 5FN?

Um problema de 5FN aparece quando:

  1. Uma tabela tem dependências cíclicas entre três ou mais atributos.
  2. Essas dependências não podem ser resolvidas apenas pela 4FN (que lida com dependências multivaloradas simples).
  3. Se você dividir a tabela em partes menores (projeções) e tentar juntá-las novamente (junção), você acaba com dados espúrios (linhas que não estavam na tabela original) ou perde a capacidade de garantir a integridade dos dados.

Exemplo prático para identificar:

Imagine uma tabela que registra professores, disciplinas e salas:

ProfessorDisciplinaSala
JoãoMatemáticaS1
JoãoFísicaS2
MariaFísicaS2
MariaMatemáticaS1
  • João ensina Matemática na sala S1 e Física na sala S2.
  • Maria ensina Física na sala S2 e Matemática na sala S1.
  • Parece haver uma relação implícita: "Se um professor ensina uma disciplina, ele usa uma sala específica, mas isso depende de outras combinações."

Se você tentar dividir essa tabela em duas (por exemplo, Professor-Disciplina e Disciplina-Sala) e depois juntá-las, pode acabar com combinações inválidas, como "João ensina Física na S1", o que não é verdade. Isso indica um problema de 5FN: há uma dependência cíclica entre Professor, Disciplina e Sala que não foi resolvida.

Técnica para corrigir (como chegar à 5FN)?

Para corrigir um problema de 5FN, você precisa:

  1. Identificar todas as dependências de junção entre os atributos.
  2. Decompor a tabela em tabelas menores que representem essas dependências de forma independente.
  3. Garantir que a junção dessas tabelas menores reconstrua exatamente a tabela original, sem adicionar ou perder informações.

Passo a passo no exemplo:

  1. Analise as dependências:

    • Um professor pode ensinar várias disciplinas.
    • Uma disciplina pode estar associada a várias salas.
    • Mas a combinação Professor-Disciplina-Sala só é válida em certos casos.
  2. Divida em tabelas menores:

    • Tabela 1: Professor-Disciplina

      ProfessorDisciplina
      JoãoMatemática
      JoãoFísica
      MariaFísica
      MariaMatemática
    • Tabela 2: Disciplina-Sala

      DisciplinaSala
      MatemáticaS1
      FísicaS2
    • Tabela 3: Professor-Sala

      ProfessorSala
      JoãoS1
      JoãoS2
      MariaS2
      MariaS1
  3. Verifique a junção:

    • Ao juntar essas três tabelas (usando junções naturais), você deve obter exatamente a tabela original, sem linhas extras ou perdidas. Se isso não acontecer, ajuste as decomposições até que a integridade seja mantida.

A 5FN é rara na prática porque exige situações muito específicas (dependências cíclicas complexas). Geralmente, se você chegou à 4FN e os dados estão consistentes, já é suficiente. Para identificar se a 5FN é necessária, pergunte: "Minha tabela tem combinações de atributos que só fazem sentido juntas e não podem ser separadas sem criar inconsistências?". Se sim, aplique a decomposição como no exemplo.

Para ler mais sobre o tema, segue um artigo para leitura:

Espero ter ajudado, bons estudos e até mais, Humberto!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado!