Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

5FN Explicação

A explicação do 5FN ficou um pouco confusa. Ficou difícil entender o que era bom ou ruim na dependência de junção, Assim como o que é preciso manter ou modificar para estar na 5FN

Também ficou difícil entender como que faz a junção depois de separar as tabelas. Como a junção é feita de forma que cria novas informações?

A atividade seguinte também fica difícil entender essa "matemática" de informações: Como a junção adicionou novas informações e como a junção com a 3ª tabela removeu as novas informações

4 respostas

Olá João, tudo bem?

A Quinta Forma Normal (5FN) é uma etapa da normalização de dados que evita um problema chamado dependência de junção. Ela garante que, quando você separa uma tabela em partes menores, depois consiga juntar tudo de volta (fazer os JOINs) sem criar combinações falsas nem perder dados.

Então, para que uma tabela esteja na 5FN, é necessário que todas as dependências de junção sejam representadas corretamente. Com isso, você só pode separar a tabela se for possível reconstruir exatamente os mesmos dados com JOINs sem criar novas combinações.

Para ficar mais claro como isso funciona deixo um exemplo abaixo utilizando três tabelas, cursos, colaboradores e eventos:

Imagine uma empresa que oferece eventos de treinamento, e quer saber quais colaboradores fizeram quais cursos em quais eventos. Você poderia ter uma tabela assim:

ColaboradorCursoEvento
AnaExcelWorkshop A
AnaExcelWorkshop B
JoãoExcelWorkshop A
JoãoPowerPointWorkshop A

Até aqui, tudo certo.

Agora suponha que você separa essa tabela em três tabelas diferentes:

  • Colaborador x Curso
ColaboradorCurso
AnaExcel
JoãoExcel
JoãoPowerPoint
  • Colaborador x Evento
ColaboradorEvento
AnaWorkshop A
AnaWorkshop B
JoãoWorkshop A
  • Curso x Evento
CursoEvento
ExcelWorkshop A
ExcelWorkshop B
PowerPointWorkshop A

Se você der JOIN nas 3 tabelas, vai acabar formando combinações que não existiam antes! Por exemplo:

ColaboradorCursoEvento
AnaExcelWorkshop A ✅
AnaExcelWorkshop B ✅
JoãoExcelWorkshop A ✅
JoãoPowerPointWorkshop A ✅
JoãoPowerPointWorkshop B ❌ (falso)
AnaPowerPointWorkshop A ❌ (falso)
AnaPowerPointWorkshop B ❌ (falso)

Ou seja: a junção inventou dados(tuplas falsas). Isso quebra a 5FN. A decomposição só é válida se, ao juntar tudo de volta, você recuperar somente os dados originais.

Então o que precisamos fazer neste caso que a junção trouxe tuplas falsas? Precisamos manter a tabela original para que isso não aconteça. Agora, se a junção foi como esperado, não criou tuplas falsas, poderíamos deixar a tabela quebrada em partes (como fizemos no exemplo anterior), para facilitar a organização, leitura, manutenção e compreensão dos dados.

Espero ter ajudado.

Qualquer dúvida, compartilhe no fórum.

Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!

Sim, como a junção tá com problemas eu cheguei a entender. O que eu não consegui replicar na atividade é a junção das tabelas criando as informações falsas. Eu não entendi como o JOIN acha essas informações falsas. Obrigado.

Estou com a mesma dúvida exatamente, com a resposta da Monalisa esse JOIN entendi que o sistema que faz sozinho. Mas quando em um exercício como podemos reproduzir e entender a mecânica das junções para chegar na tabela das 3 junções e nas informações falsas.

Obrigado por compartilhar a sua João!

solução!

Olá João, olá Victor! Tudo bem?

Que ótimo que vocês levantaram essa dúvida. Vamos ver bem devagar como o problema acontece, tá?

Considerando as três tabelas separadas:

Colaborador x Curso

ColaboradorCurso
AnaExcel
JoãoExcel
JoãoPowerPoint

Colaborador x Evento

ColaboradorEvento
AnaWorkshop A
AnaWorkshop B
JoãoWorkshop A

Curso x Evento

CursoEvento
ExcelWorkshop A
ExcelWorkshop B
PowerPointWorkshop A

JOIN

Agora, o que acontece no JOIN?

Quando damos JOIN nas tabelas, o banco de dados tenta combinar todas as linhas que têm algum valor em comum.

Vamos fazer o passo a passo:

  1. Pegamos uma linha da tabela Colaborador x Curso, exemplo:

    Ana | Excel

  2. Procuramos onde Ana aparece na tabela Colaborador x Evento:

    • Ana aparece no Workshop A
    • Ana aparece no Workshop B

    Agora temos dois pares possíveis:

    • Ana | Excel | Workshop A
    • Ana | Excel | Workshop B
  3. Cruzamos com a tabela Curso x Evento, procurando se o Curso Excel está nesses Workshops:

    • Excel + Workshop A → Existe
    • Excel + Workshop B → Existe

    ✅ As duas combinações são válidas!

Agora, vamos tentar outro exemplo:

  1. Linha da tabela Colaborador x Curso:

    João | PowerPoint

  2. Onde João aparece na tabela Colaborador x Evento?

    • João aparece no Workshop A

    Então podemos montar: - João | PowerPoint | Workshop A

  3. Conferindo no Curso x Evento:

    • PowerPoint + Workshop A → Existe

    ✅ Combinação válida.

O problema aparece agora:

Como na tabela Curso x Evento também existe:

  • PowerPoint | Workshop B

E como Ana está no Workshop B (na tabela Colaborador x Evento), o JOIN pode tentar montar:

  • Ana | PowerPoint | Workshop B

Mas isso não existia antes! Ana nunca fez PowerPoint no Workshop B.Foi uma junção errada porque:

  • Ana nunca fez o curso PowerPoint
  • PowerPoint acontece no Workshop B
  • Ana participou do Workshop B

O sistema combinou tudo que podia. Ele não sabe que você não queria combinar Ana com PowerPoint – ele simplesmente junta o que os dados permitem.

Agora, atenção:

Para saber se uma combinação é verdadeira ou falsa, você deve comparar o resultado do JOIN com a tabela original completa.

A tabela original, que mostra o que realmente existia, era a seguinte:

ColaboradorCursoEvento
AnaExcelWorkshop A
AnaExcelWorkshop B
JoãoExcelWorkshop A
JoãoPowerPointWorkshop A

Essa tabela é a referência.Tudo o que não existir nela é considerado uma combinação falsa 🚨.

✅ Se a linha montada existir aqui → é verdadeira.

🚨 Se não existir → é falsa!

Resumindo:

O JOIN vai "encaixar" tudo que combinar as colunas. Se o mesmo colaborador aparecer em vários eventos, e o curso aparecer em vários eventos, o banco gera todas as combinações possíveis que respeitam os dados... mesmo que a combinação nunca tenha acontecido na prática!

Por isso, sempre compare com a tabela original para confirmar se a linha faz sentido.

Dica prática para vocês:

Sempre que der JOIN em tabelas separadas, pergunte:

  • "Esse colaborador fez esse curso?"
  • "Esse curso aconteceu nesse evento?"
  • "Esse colaborador foi nesse evento?"

E compare o resultado com a tabela original completa!

Se bater → linha verdadeira ✅.

Se não bater → linha falsa 🚨.

Espero que agora tenha ficado mais claro!

Abraços e bons estudos! ✨

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!