Avançar para o conteúdo
Read this post in: de_DEen_USes_ESfr_FRid_IDjapl_PLpt_PTru_RUvizh_CNzh_TW
Home » Data Modeling / Database » Um Guia Completo sobre Normalização de Banco de Dados com Exemplos

Um Guia Completo sobre Normalização de Banco de Dados com Exemplos

Introdução

A normalização de bancos de dados é um conceito fundamental no mundo da gestão de bancos de dados. É um processo que otimiza a estrutura do banco de dados reduzindo a redundância de dados e melhorando a integridade dos dados. A normalização é um conjunto de regras e diretrizes que ajudam a organizar os dados de forma eficiente e a prevenir anomalias comuns nos dados, como anomalias de atualização, inserção e exclusão.

Neste artigo, vamos aprofundar os fundamentos da normalização de bancos de dados, as diversas formas normais e fornecer exemplos práticos para ilustrar cada nível de normalização.

Por que normalizar um banco de dados?

Antes de mergulharmos nos detalhes da normalização de bancos de dados, é essencial compreender por que ela é necessária. A normalização oferece várias vantagens:

  1. Integridade dos dados: A normalização ajuda a manter a precisão e a consistência dos dados reduzindo a redundância. Quando os dados são armazenados de forma não repetitiva, são menos propensos a erros.
  2. Armazenamento eficiente: Bancos de dados normalizados tendem a ocupar menos espaço de armazenamento, pois os dados duplicados são minimizados. Isso reduz o custo total de armazenamento.
  3. Otimização de consultas: As consultas tornam-se mais eficientes em bancos de dados normalizados, pois precisam acessar tabelas menores e bem estruturadas em vez de tabelas grandes e não normalizadas.
  4. Flexibilidade: Bancos de dados normalizados são mais flexíveis ao lidar com mudanças nas exigências de dados ou nas regras de negócios.

Níveis de normalização

A normalização de bancos de dados é geralmente dividida em vários níveis, conhecidos como formas normais. As formas normais mais comumente usadas são:

  1. Primeira Forma Normal (1FN): Garante que cada coluna em uma tabela contenha valores atômicos e indivisíveis. Não deve haver grupos repetidos, e cada coluna deve ter um nome único.
  2. Segunda Forma Normal (2FN): Baseando-se na 1FN, a 2FN elimina dependências parciais. Uma tabela está na 2FN se estiver na 1FN e todos os atributos não-chave forem funcionalmente dependentes da chave primária inteira.
  3. Terceira Forma Normal (3FN): Baseando-se na 2FN, a 3FN elimina dependências transitivas. Uma tabela está na 3FN se estiver na 2FN e todos os atributos não-chave forem funcionalmente dependentes da chave primária, mas não de outros atributos não-chave.
  4. Forma Normal de Boyce-Codd (BCNF): Uma versão mais rigorosa da 3FN, a BCNF garante que toda dependência funcional não trivial seja uma superchave. Isso significa que não são permitidas dependências parciais ou transitivas.
  5. Quarta Forma Normal (4FN): A 4FN lida com dependências multivaloradas, onde um atributo depende de outro atributo, mas não é uma função da chave primária.
  6. Quinta Forma Normal (5FN) ou Forma Normal de Projeto-Junção (PJNF): Essas formas lidam com casos em que uma tabela está na 4FN, mas existem dependências de junção que podem ser ainda mais otimizadas.

Agora, vamos ilustrar essas formas normais com exemplos:

Primeira Forma Normal (1FN)

Considere uma tabela não normalizada que armazena pedidos de clientes:

ID do Pedido Cliente Produtos
1 João Maçãs, Bananas, Laranjas
2 Alice Uvas, Morangos
3 Bob Limões, Limas

Esta tabela viola a 1FN porque a colunaProdutos contém uma lista de itens. Para trazê-la à 1FN, dividimos os produtos em linhas separadas:

ID do Pedido Cliente Produto
1 João Maçãs
1 João Bananas
1 João Laranjas
2 Alice Uvas
2 Alice Morangos
3 Bob Limões
3 Bob Limões

Agora, cada célula contém um valor atômico, e a tabela está na 1FN.

Segunda Forma Normal (2FN)

Considere uma tabela que armazena informações sobre alunos e seus cursos:

ID do Aluno ID do Curso Nome do Curso Instrutor
1 101 Matemática Prof. Smith
1 102 Física Prof. Johnson
2 101 Matemática Prof. Smith
3 103 História Prof. Davis

Esta tabela viola a 2FN porque o Instrutor atributo depende de ambos ID do Aluno e ID do Curso. Para alcançar a 2FN, dividimos a tabela em duas tabelas separadas:

Tabela de Alunos:

ID do Aluno Nome do Aluno
1 John
2 Alice
3 Bob

Tabela de Cursos:

ID do Curso Nome do Curso Instrutor
101 Matemática Prof. Smith
102 Física Prof. Johnson
103 História Prof. Davis

Agora, o Instrutor atributo depende apenas do IDCurso, e a tabela está na 2FN.

Terceira Forma Normal (3FN)

Considere uma tabela que armazena informações sobre funcionários e seus projetos:

IDFuncionário IDProjeto NomeProjeto Gerente
1 101 ProjetoA John
1 102 ProjetoB Alice
2 101 ProjetoA John
3 103 ProjetoC Bob

Esta tabela viola a 3FN porque o Gerente atributo depende do IDFuncionário, não diretamente na chave primária. Para levá-lo à 3FN, dividimos a tabela em duas tabelas separadas:

Tabela de Funcionários:

IDFuncionário NomeFuncionário
1 João
2 Alice
3 Bob

Tabela de Projetos:

IDProjeto NomeProjeto
101 ProjetoA
102 ProjetoB
103 ProjetoC

Tabela de FuncionáriosProjetos:

IDFuncionário IDProjeto
1 101
1 102
2 101
3 103

Agora, o Gerente atributo depende do ProjectID, e a tabela está na 3FN.

Forma Normal de Boyce-Codd (BCNF)

A BCNF é uma versão mais rigorosa da 3FN. Para ilustrar a BCNF, considere uma tabela que armazena informações sobre professores e suas áreas de pesquisa:

ID do Professor Área de Pesquisa Número do Escritório
1 Inteligência Artificial 101
2 Aprendizado de Máquina 102
3 Inteligência Artificial 103

Esta tabela viola a BCNF porque existe uma dependência funcional não trivial entre Área de Pesquisa e Número do Escritório (ou seja, o número do escritório depende da área de pesquisa). Para alcançar a BCNF, dividimos a tabela em duas tabelas separadas:

Tabela de Professores:

ID do Professor Nome do Professor
1 Prof. Smith
2 Prof. Johnson
3 Prof. Davis

Tabela ResearchAreas:

Área de Pesquisa Número do Escritório
Inteligência Artificial 101
Aprendizado de Máquina 102

Tabela ProfessorResearch:

ID do Professor Área de Pesquisa
1 Inteligência Artificial
2 Aprendizado de Máquina
3 Inteligência Artificial

Agora, a tabela está em FNBC porque não existem dependências funcionais não triviais.

Quarta Forma Normal (4FN)

A 4FN lida com dependências multivaloradas. Considere uma tabela que armazena informações sobre livros e seus autores:

ID do Livro Título Autores
1 LivroA AuthorX, AuthorY
2 BookB AuthorY, AuthorZ
3 BookC AuthorX

Esta tabela viola a 4NF porque existe uma dependência multi-valorada entre BookID e Autores. Para alcançar a 4NF, dividimos a tabela em três tabelas separadas:

Tabela de Livros:

BookID Título
1 BookA
2 BookB
3 BookC

Tabela de Autores:

AuthorID Nome do Autor
1 AuthorX
2 AuthorY
3 AuthorZ

Tabela BookAuthors:

BookID AuthorID
1 1
1 2
2 2
2 3
3 1

Agora, cada tabela está na 4FN, e as dependências multivaloradas foram removidas.

Quinta Forma Normal (5FN) ou Forma Normal de Projeto-Junção (FNPJ)

A 5FN ou FNPJ lida com dependências de junção, que estão além do escopo deste artigo introdutório. Alcançar a 5FN geralmente envolve uma decomposição adicional e é frequentemente necessária para bancos de dados complexos.

Conclusão

A normalização de bancos de dados é um processo crítico no design de bancos de dados, voltado para otimizar o armazenamento de dados, melhorar a integridade dos dados e reduzir anomalias de dados. Organizando os dados em tabelas normalizadas, você pode aumentar a eficiência e a manutenibilidade do seu sistema de banco de dados.

Lembre-se de que alcançar formas normais mais altas, como a BCNF e a 4NF, nem sempre é necessário para todos os bancos de dados. O nível de normalização depende dos requisitos específicos da sua aplicação e dos trade-offs entre integridade de dados e desempenho.

Ao projetar um banco de dados, é essencial encontrar um equilíbrio entre normalização e praticidade. Em muitos casos, alcançar a 3FN é suficiente para garantir a integridade dos dados, mantendo um bom desempenho de consultas.

Compreender os princípios da normalização e praticá-los com exemplos do mundo real é crucial para administradores de bancos de dados e desenvolvedores criarem sistemas de bancos de dados eficientes e robustos.

Deixe um comentário