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.