Normalização de Banco de Dados: Guia Essencial

Classificado em Computação

Escrito em em português com um tamanho de 6,42 KB

Anomalias na Normalização

A normalização visa eliminar anomalias que podem ocorrer em bancos de dados mal estruturados:

  • Anomalia de Inserção: Dificuldade em adicionar novos dados se parte da informação necessária (geralmente relacionada a outra entidade) ainda não existir, ou a necessidade de inserir dados redundantes ou valores nulos.
  • Anomalia de Exclusão: Perda não intencional de informações sobre uma entidade ao excluir dados sobre outra entidade presente na mesma tabela.
  • Anomalia de Atualização: Necessidade de atualizar a mesma informação em múltiplos registros, aumentando o risco de inconsistências caso alguma atualização falhe.

Tipos de Chaves em Banco de Dados

Chave Candidata

Atributo ou conjunto de atributos que identificam unicamente cada registro em uma tabela.

Exemplos: CODIGO, CPF, RG

Chave Primária (PK - Primary Key)

A chave candidata escolhida para ser o identificador principal e único da tabela.

Chave Estrangeira (FK - Foreign Key)

Atributo ou conjunto de atributos em uma tabela que estabelece uma ligação com a chave primária de outra tabela (ou da mesma tabela), garantindo a integridade referencial.

Dependências Funcionais e Multivaloradas

Dependência Funcional Trivial

Ocorre quando um atributo ou conjunto de atributos determina a si mesmo ou um subconjunto de si mesmo. Exemplo: Se A e B são atributos, a dependência {A, B} -> A é trivial.

Dependência Funcional Não Trivial

Ocorre quando um determinante (atributo ou conjunto de atributos) identifica outro atributo que não faz parte do determinante. Exemplo: CPF -> Nome.

Dependência Multivalorada

Ocorre quando o valor de um atributo (ou conjunto) determina um conjunto de valores de outro atributo, independentemente de outros atributos na tabela. Exemplo: Em uma tabela de Funcionários com múltiplos Projetos e múltiplas Habilidades, pode haver uma dependência multivalorada Funcionário ->> Projeto e Funcionário ->> Habilidade.

O Processo de Normalização

A normalização é um processo passo a passo de organização dos dados em um banco de dados para minimizar a redundância e melhorar a integridade dos dados. Isso é feito através da análise das estruturas de dados e da aplicação das Formas Normais.

Formas Normais (FN)

Primeira Forma Normal (1FN)

Objetivo: Eliminar grupos repetitivos e garantir que cada coluna contenha apenas valores atômicos (indivisíveis).

Exemplo: Uma coluna 'Telefones' contendo '111-111, 222-222' viola a 1FN. Deve ser dividida em múltiplos registros ou colunas separadas.

Segunda Forma Normal (2FN)

Requisito: Estar na 1FN.

Objetivo: Remover dependências parciais. Todos os atributos não chave devem depender funcionalmente da chave primária inteira (relevante para chaves primárias compostas).

Exemplo: Tabela PedidoItens (PedidoID, ProdutoID, NomeProduto, Quantidade, DataPedido). Se 'NomeProduto' depende apenas de 'ProdutoID' e 'DataPedido' depende apenas de 'PedidoID', existem dependências parciais. Deve-se criar tabelas separadas: Produtos (ProdutoID, NomeProduto), Pedidos (PedidoID, DataPedido) e manter PedidoItens (PedidoID, ProdutoID, Quantidade).

Terceira Forma Normal (3FN)

Requisito: Estar na 2FN.

Objetivo: Remover dependências transitivas. Nenhum atributo não chave pode depender funcionalmente de outro atributo não chave.

Exemplo: Tabela Funcionário (FuncionarioID, Nome, DepartamentoID, NomeDepartamento). Se 'DepartamentoID' determina 'NomeDepartamento', e 'DepartamentoID' não é chave candidata, existe uma dependência transitiva (FuncionarioID -> DepartamentoID -> NomeDepartamento). Deve-se criar uma tabela Departamentos (DepartamentoID, NomeDepartamento) e manter Funcionário (FuncionarioID, Nome, DepartamentoID).

Quarta Forma Normal (4FN)

Requisito: Estar na 3FN (ou mais estritamente, na Forma Normal de Boyce-Codd - BCNF).

Objetivo: Remover dependências multivaloradas não triviais, exceto aquelas onde o determinante é uma superchave.

Exemplo: Tabela Professor_Disciplina_Aluno (Professor, Disciplina, Aluno). Se um professor leciona várias disciplinas e tem vários alunos, mas as disciplinas e os alunos não estão diretamente relacionados entre si (um professor pode ter um aluno que não está em todas as suas disciplinas), podem existir dependências multivaloradas Professor ->> Disciplina | Aluno. A solução é decompor em tabelas como Professor_Disciplina (Professor, Disciplina) e Professor_Aluno (Professor, Aluno).

Quinta Forma Normal (5FN)

Requisito: Estar na 4FN.

Objetivo: Remover dependências de junção (Join Dependencies) e garantir que a tabela não possa ser decomposta em tabelas menores sem perda de informação e depois rejuntada para obter a tabela original (decomposição sem perdas).

Exemplo: Considere uma tabela Agente_Companhia_Produto que registra quais agentes vendem produtos de quais companhias. Se houver uma regra complexa (uma dependência de junção) que só pode ser representada corretamente decompondo a tabela em projeções menores (ex: Agente_Companhia, Companhia_Produto, Agente_Produto) e a junção dessas projeções reconstrói a tabela original sem linhas espúrias, então a tabela original pode não estar na 5FN.

Entradas relacionadas: