Normalização de Banco de Dados
Objetivos
- Compreender o conceito de normalização em bancos de dados.
- Identificar anomalias em tabelas não normalizadas.
- Aplicar a Primeira Forma Normal (1FN).
- Entender dependências funcionais: total, parcial e transitiva.
O que é Normalização?
A normalização é um processo matemático formal introduzido por E. F. Codd em 1970. Consiste em decompor tabelas complexas em estruturas mais simples, eliminando anomalias de atualização e redundâncias desnecessárias.
Objetivo principal: Criar esquemas relacionais “puros” que evitem problemas como:
- Grupos repetitivos de dados
- Dependências parciais em chaves concatenadas
- Redundância desnecessária
- Perda acidental de informação
- Dificuldade na representação da realidade
Anomalias em Tabelas Não Normalizadas
Tabela de pedidos
| Nº Pedido | Entrega | Cliente | Endereço | Cidade | UF | Cod. Prod. | Unid. Prod. | Qtd. Prod. | Descrição Prod. | Valor Unit Prod |
|---|---|---|---|---|---|---|---|---|---|---|
| 001 | 05/12 | JOÃO | RUA DAS FLORES | JARÚ | RO | 001 | P | 10 | MOUSE | 200 |
| 001 | 05/12 | JOÃO | RUA DAS FLORES | JARÚ | RO | 002 | P | 15 | TECLADO | 500 |
| 002 | 10/12 | ANA | RUA X | JIPA | RO | 005 | P | 100 | MODEM | 5000 |
Quando uma tabela não está adequadamente estruturada, podem ocorrer três tipos principais de anomalias:
Anomalia de Inclusão
Não é possível incluir um novo registro sem que ele esteja relacionado a outro dado existente.
Exemplo: Não se pode cadastrar um cliente que ainda não fez compras.
Anomalia de Exclusão
Ao excluir um registro, informações importantes podem ser perdidas.
Exemplo: Excluir um cliente remove também o histórico de suas compras.
Anomalia de Alteração
Alterações em um campo podem exigir múltiplas modificações na mesma tabela.
Exemplo: Alterar o preço de um produto requer atualizar todas as vendas desse produto.
Formas Normais
A normalização é aplicada através de uma série de regras chamadas Formas Normais:
- Primeira Forma Normal (1FN)
- Segunda Forma Normal (2FN)
- Terceira Forma Normal (3FN)
- Forma Normal de Boyce-Codd (FNBC)
- Quarta Forma Normal (4FN)
- Quinta Forma Normal (5FN)
Primeira Forma Normal (1FN)
A 1FN estabelece que cada atributo deve conter apenas valores atômicos (indivisíveis), não permitindo grupos repetitivos.
Regra: Uma tabela está na 1FN se todos os seus atributos contêm apenas valores simples, sem listas ou estruturas complexas.
Aplicando 1FN - Exemplo Prático
Considere uma tabela PEDIDO com itens repetitivos:
Tabela original (não normalizada):
| Nº Pedido | Cliente | Produto1 | Qtd1 | Produto2 | Qtd2 |
|---|---|---|---|---|---|
| 001 | João | Caneta | 2 | Lápis | 1 |
Após 1FN - Duas tabelas: PEDIDO:
| Nº Pedido | Cliente | Endereço | Cidade | UF |
|---|---|---|---|---|
| 001 | João | Av. 7 de Setembro, 456 | Porto Velho | RO |
| 002 | Maria | Av. Rio Madeira, 9812 | Porto Velho | RO |
ITEM_PEDIDO:
| Nº Pedido | Produto | Quantidade | Valor Unit. Prod |
|---|---|---|---|
| 001 | Caneta | 2 | 5,00 |
| 001 | Lápis | 1 | 1,00 |
Dependência Funcional
Uma dependência funcional existe quando um atributo (ou conjunto de atributos) determina unicamente o valor de outro atributo.
Notação: A → B (A determina B)
Exemplo: Em uma tabela ALUNO:
- Matrícula → Nome (cada matrícula tem um único nome)
- Matrícula → Curso (cada matrícula tem um único curso)
Dependência Funcional Total vs Parcial
Em chaves primárias compostas, analisamos se a dependência é da chave completa ou de parte dela.
Dependência Total: O atributo depende de TODOS os campos da chave composta.
Dependência Parcial: O atributo depende apenas de PARTE da chave composta.
Exemplo - Tabela ITEM_VENDA (Nº_Venda + Cod_Produto):
- Quantidade depende TOTALMENTE de (Nº_Venda + Cod_Produto)
- Nome_Produto depende PARCIALMENTE apenas de Cod_Produto
Dependência Funcional Transitiva
Ocorre quando um atributo não-chave determina outro atributo não-chave.
Notação: A → B → C (C depende transitivamente de A através de B)
Exemplo: Em uma tabela FUNCIONARIO:
- CPF → Departamento
- Departamento → Localização
Portanto: CPF → Localização (dependência transitiva)
Benefícios da Normalização
- Redução de redundância: Dados armazenados uma única vez
- Eliminação de anomalias: Atualizações consistentes
- Manutenção da integridade: Relacionamentos bem definidos
- Flexibilidade: Facilita alterações futuras no esquema
A normalização é fundamental para criar bancos de dados robustos e eficientes.
Segunda Forma Normal (2FN)
A 2FN elimina dependências funcionais parciais em chaves primárias compostas. Uma tabela está na 2FN se:
- Está na 1FN
- Todos os atributos não-chave dependem totalmente da chave primária (não de parte dela)
Aplicando 2FN - Exemplo Prático
Considere a tabela ITEM_PEDIDO com chave composta (Nº_Pedido, Cod_Produto):
Tabela original (1FN mas não 2FN):
| Nº_Pedido | Cod_Produto | Qtd | Descrição | Valor_Unit |
|---|---|---|---|---|
| 001 | 1001 | 2 | Caneta | 1.50 |
| 001 | 1002 | 1 | Lápis | 1.00 |
Problema: Descrição e Valor_Unit dependem apenas de Cod_Produto (dependência parcial).
Após 2FN - Três tabelas: PEDIDO:
| Nº_Pedido | Data | Cliente |
|---|---|---|
| 001 | 15/01 | João |
ITEM_PEDIDO:
| Nº_Pedido | Cod_Produto | Quantidade |
|---|---|---|
| 001 | 1001 | 2 |
| 001 | 1002 | 1 |
PRODUTO:
| Cod_Produto | Descrição | Valor_Unit |
|---|---|---|
| 1001 | Caneta | 1.50 |
| 1002 | Lápis | 1.00 |
Terceira Forma Normal (3FN)
A 3FN elimina dependências funcionais transitivas. Uma tabela está na 3FN se:
- Está na 2FN
- Nenhum atributo não-chave depende de outro atributo não-chave
Aplicando 3FN - Exemplo Prático
Considere a tabela PEDIDO com dependência transitiva:
Tabela original (2FN mas não 3FN):
| Nº_Pedido | Cliente | Endereço | Cidade | UF |
|---|---|---|---|---|
| 001 | João | Rua A | São Paulo | SP |
Problema: Endereço, Cidade, UF dependem de Cliente (não da chave).
Após 3FN - Duas tabelas: PEDIDO:
| Nº_Pedido | Cliente | Data_Entrega |
|---|---|---|
| 001 | João | 20/01 |
CLIENTE:
| Cliente | Endereço | Cidade | UF |
|---|---|---|---|
| João | Rua A | São Paulo | SP |
Forma Normal de Boyce-Codd (FNBC)
A FNBC trata casos especiais onde existem múltiplas chaves candidatas que se sobrepõem. Uma tabela está na FNBC se todo determinante for uma chave candidata.
Exemplo FNBC
Considere uma tabela TURMA_PROFESSOR com três chaves candidatas sobrepostas:
Chaves candidatas:
- (Cod_Curso, Turma)
- (Cod_Curso, Matricula_Professor)
- (Turma, Matricula_Professor)
Tabela original:
| Cod_Curso | Turma | Matricula_Professor | Nome_Professor |
|---|---|---|---|
| BD001 | A | P001 | Maria Silva |
Problema: Matricula_Professor determina Nome_Professor, mas não é chave candidata.
Após FNBC - Duas tabelas: TURMA:
| Cod_Curso | Turma | Matricula_Professor |
|---|---|---|
| BD001 | A | P001 |
PROFESSOR:
| Matricula_Professor | Nome_Professor |
|---|---|
| P001 | Maria Silva |
Quarta Forma Normal (4FN)
A 4FN trata dependências multivaloradas independentes. Uma tabela está na 4FN se não existirem duas ou mais dependências multivaloradas independentes.
Exemplo 4FN
Uma dependência multivalorada ocorre quando um atributo determina múltiplos valores independentes de outro atributo.
Exemplo: Um cliente pode ter múltiplos telefones E múltiplos endereços de entrega, independentemente.
Quinta Forma Normal (5FN)
A 5FN trata dependências de junção em relacionamentos complexos (ternários ou superiores). Uma tabela está na 5FN se não puder ser decomposta sem perda de informação.
Quando Aplicar 5FN
Casos raros envolvendo relacionamentos múltiplos onde a decomposição em tabelas menores resultaria em perda de informações originais.
Exemplo: Em um sistema de projetos, onde funcionários trabalham em projetos usando ferramentas específicas, pode haver dependências complexas que exigem análise cuidadosa.
Benefícios das Formas Normais Avançadas
- Eliminação completa de anomalias: 2FN e 3FN resolvem problemas restantes da 1FN
- Otimização de performance: Estruturas mais eficientes para consultas
- Manutenção simplificada: Mudanças locais não afetam outras partes
- Flexibilidade: Adaptação fácil a novos requisitos
Ordem Recomendada de Aplicação
- 1FN - Eliminar grupos repetitivos
- 2FN - Remover dependências parciais
- 3FN - Eliminar dependências transitivas
- FNBC - Tratar chaves candidatas sobrepostas
- 4FN - Resolver dependências multivaloradas
- 5FN - Casos especiais de dependências de junção
A normalização avançada garante bancos de dados robustos e eficientes para aplicações complexas.