Já viu alguma tabela de banco de dados que parecia um depósito de tralha? Em uma célula tem uma lista de telefones, em outra — endereços escritos numa frase gigante, na terceira — várias datas separadas por vírgula. Essa "bagunça" dificulta buscar, atualizar e gerenciar os dados. Mas tem um jeito de colocar ordem nisso. O nome disso é normalização de dados.
Falando de boa, normalização de dados é o processo de organizar os dados nas tabelas pra minimizar redundância e evitar problemas na hora de atualizar, deletar ou inserir dados.
Olha só os problemas que a normalização resolve:
- Eliminar duplicidade de dados. Pra quê guardar a mesma informação duas vezes? Ou três? Isso só aumenta o tamanho do banco e pode deixar os dados inconsistentes.
- Minimizar anomalias. Sabe aquelas anomalias da vida? Tipo esquecer de tirar o ex-colega da lista de contatos. No banco de dados rola a mesma coisa. Normalização ajuda a evitar esses micos.
- Simplificar a estrutura dos dados. Quanto mais simples, mais fácil de mexer.
- Deixar o banco mais rápido. Menos dados = consultas mais rápidas.
E se não normalizar?
Sem normalização, os dados ficam "grudentos" — sempre puxando junto um monte de informação desnecessária.
Imagina a tabela Estudantes:
| ID do Estudante | Nome | Cursos |
|---|---|---|
| 1 | Otto Lin | Matemática, Física |
| 2 | Anna Song | Química |
| 3 | Otto Lin | Biologia, Química |
O que pode dar ruim:
- Duplicidade de dados:
Otto Linaparece várias vezes. Por quê? Porque ele faz vários cursos. - Difícil atualizar informação: se o telefone do Otto Lin mudar, tem que achar todas as linhas dele pra atualizar.
- Deletar pode quebrar tudo: imagina que o Otto resolve largar os cursos. Se apagar todas as linhas dele, perde até o nome do cara.
Quando normalizar pode ser demais?
Falando real, normalização é tipo rotina certinha: sempre bom, mas às vezes dá vontade de improvisar. Tem situações em que desnormalizar é melhor:
- Em bancos de dados analíticos, onde o que importa é a velocidade das consultas, não o tamanho dos dados.
- Quando a estrutura fica complexa demais: se pra seguir as formas normais precisa de dezenas de tabelas, as consultas vão ficar cada vez mais pesadas.
- Pra agregados usados toda hora: se você vive calculando o mesmo total, melhor guardar ele direto.
Tipo, num e-commerce. Se a galera sempre busca o valor total dos pedidos, pode guardar esse total na tabela Pedidos em vez de calcular toda vez.
Só que, ó: desnormalizar é um acordo. Aumenta o risco de dar ruim na hora de atualizar os dados.
Exemplos de estrutura ruim e como normalizar
Bora ver um exemplo de tabela antes da normalização:
| ID do Pedido | Cliente | Produtos | Total do Pedido |
|---|---|---|---|
| 1 | Otto Lin | Celular, Fone de ouvido | 20000 |
| 2 | Anna Song | Geladeira | 30000 |
| 3 | Otto Lin | Televisão | 40000 |
Dá pra ver fácil o erro:
- Dados dos clientes se repetem.
- Produtos estão em lista — isso quebra o princípio da atomicidade dos dados.
Depois de normalizar
Vamos dividir essa tabela em três: Tabela Clientes
| ID do Cliente | Nome |
|---|---|
| 1 | Otto Lin |
| 2 | Anna Song |
Tabela Produtos
| ID do Produto | Nome | Preço |
|---|---|---|
| 1 | Celular | 10000 |
| 2 | Fone de ouvido | 10000 |
| 3 | Geladeira | 30000 |
| 4 | Televisão | 40000 |
Tabela Pedidos
| ID do Pedido | ID do Cliente | ID do Produto |
|---|---|---|
| 1 | 1 | 1 |
| 1 | 1 | 2 |
| 2 | 2 | 3 |
| 3 | 1 | 4 |
Agora a gente tem:
- Nada de dados duplicados.
- Cada produto numa linha separada.
- Dá pra adicionar novos produtos e pedidos de boa.
Normalização é a arte de criar ordem no meio do caos. Sim, às vezes parece chata e exigente, mas o objetivo final vale a pena. Nas próximas aulas, vamos estudar as formas normais na sequência: primeiro 1NF, depois 2NF e por fim 3NF. Bora pro mundo dos dados organizados!
GO TO FULL VERSION