Este FAQ detalhado aborda as formas normais de banco de dados, desde a 1ª Forma Normal (1FN) até a 5ª Forma Normal (5FN), incluindo conceitos, exemplos e hacks úteis. Vamos explorar as melhores práticas para criar um banco de dados bem projetado e eficiente.
É também um complemento do artigo: O que é normalização de banco de dados?
O que é Normalização em Banco de Dados?
A normalização é um processo sistemático para organizar dados em tabelas de um banco de dados relacional, reduzindo a redundância e garantindo a integridade dos dados. Ela é dividida em formas normais (normal forms), cada uma com critérios específicos.
1ª Forma Normal (1FN)
Critérios:
- Os dados devem ser armazenados em tabelas bidimensionais (linhas e colunas).
- Cada célula deve conter um único valor (atomização).
- Não deve haver grupos repetitivos ou listas dentro de colunas.
Exemplo:
Tabela Não Normalizada:
| ID do Cliente | Nome | Telefones |
|---|---|---|
| 1 | João | 12345, 67890 |
| 2 | Maria | 54321 |
Tabela em 1FN:
| ID do Cliente | Nome | Telefone |
|---|---|---|
| 1 | João | 12345 |
| 1 | João | 67890 |
| 2 | Maria | 54321 |
Hack:
Use o comando UNNEST em SQL para separar valores de uma lista em diferentes linhas:
SELECT ID, Nome, UNNEST(string_to_array(Telefones, ',')) AS Telefone
FROM clientes;
2ª Forma Normal (2FN)
Critérios:
- Satisfaz todos os requisitos da 1FN.
- Cada coluna não-chave deve depender exclusivamente da chave primária (eliminação de dependências parciais).
Exemplo:
Tabela em 1FN:
| ID do Pedido | Produto | Preço | Cliente | Endereço |
|---|---|---|---|---|
| 1 | Livro | 30.00 | João | Rua A, Nº 123 |
| 2 | Caneta | 5.00 | Maria | Rua B, Nº 456 |
Problema:
- Dependência Parcial: O endereço depende apenas do cliente, não do ID do Pedido.
Tabelas em 2FN:
Pedidos:
| ID do Pedido | Produto | Preço | ID do Cliente |
|---|---|---|---|
| 1 | Livro | 30.00 | 1 |
| 2 | Caneta | 5.00 | 2 |
Clientes:
| ID do Cliente | Nome | Endereço |
|---|---|---|
| 1 | João | Rua A, Nº 123 |
| 2 | Maria | Rua B, Nº 456 |
3ª Forma Normal (3FN)
Critérios:
- Satisfaz todos os requisitos da 2FN.
- Elimina dependências transitivas (uma coluna não-chave não deve depender de outra coluna não-chave).
Exemplo:
Tabela em 2FN:
| ID do Cliente | Nome | CEP | Cidade |
|---|---|---|---|
| 1 | João | 12345 | São Paulo |
| 2 | Maria | 67890 | Rio |
Problema:
- Dependência Transitiva: O CEP determina a cidade.
Tabelas em 3FN:
Clientes:
☕
Café com Deus Pai Vol. 6 - 2026: Porções Diárias de Amor
oferece 365 mensagens diárias que convidam você a um encontro íntimo com Deus, fortalecendo a fé e nutrindo a alma.
👉
Confira na Amazon
.
Nas compras você contribui para manter o site no ar.
| ID do Cliente | Nome | CEP |
|---|---|---|
| 1 | João | 12345 |
| 2 | Maria | 67890 |
Endereços:
| CEP | Cidade |
|---|---|
| 12345 | São Paulo |
| 67890 | Rio |
Forma Normal de Boyce-Codd (BCNF)
Critérios:
- Satisfaz todos os requisitos da 3FN.
- Cada determinante deve ser uma chave candidata (elimina dependências funcionais inadequadas).
Exemplo:
Tabela em 3FN:
| ID do Curso | Professor | Departamento |
|---|---|---|
| 1 | Dr. Silva | Matemática |
| 2 | Dr. Lima | Física |
Problema:
- Um professor pode ensinar em mais de um departamento, o que cria uma dependência funcional inadequada.
Tabelas em BCNF:
Cursos:
| ID do Curso | Departamento |
|---|---|
| 1 | Matemática |
| 2 | Física |
Professores:
| Professor | Departamento |
|---|---|
| Dr. Silva | Matemática |
| Dr. Lima | Física |
4ª Forma Normal (4FN)
Critérios:
- Satisfaz todos os requisitos da BCNF.
- Elimina dependências multivaloradas (uma entidade não deve ter múltiplos valores independentes associados).
Exemplo:
Tabela em BCNF:
| Aluno | Curso | Atividade |
|---|---|---|
| João | Matemática | Xadrez |
| João | Física | Futebol |
Problema:
- A relação entre cursos e atividades não é dependente.
Tabelas em 4FN:
Alunos-Cursos:
| Aluno | Curso |
|---|---|
| João | Matemática |
| João | Física |
Alunos-Atividades:
| Aluno | Atividade |
|---|---|
| João | Xadrez |
| João | Futebol |
5ª Forma Normal (5FN)
Critérios:
- Satisfaz todos os requisitos da 4FN.
- Remove dependências de junção (a tabela não deve depender de mais de uma relação composta).
Exemplo:
Tabela em 4FN:
| Aluno | Curso | Professor |
|---|---|---|
| João | Matemática | Dr. Silva |
| Maria | Física | Dr. Lima |
Problema:
- A dependência entre Aluno e Professor deve ser analisada separadamente.
Tabelas em 5FN:
Alunos-Cursos:
| Aluno | Curso |
|---|---|
| João | Matemática |
| Maria | Física |
Cursos-Professores:
| Curso | Professor |
|---|---|
| Matemática | Dr. Silva |
| Física | Dr. Lima |
Hacks e Dicas Práticas
- Identifique Dependências: Use consultas para detectar dependências não normalizadas:sqlCopiar código
SELECT coluna1, coluna2, COUNT(*) FROM tabela GROUP BY coluna1, coluna2 HAVING COUNT(*) > 1; - Automatize a Normalização: Utilize ferramentas de modelagem, como o MySQL Workbench ou pgAdmin, para identificar problemas de design.
- Desnormalize Quando Necessário: Em sistemas de alto desempenho (OLAP), a desnormalização pode ser útil para reduzir o número de junções:sqlCopiar código
CREATE VIEW view_denormalizada AS SELECT c.ID, c.Nome, e.Cidade FROM Clientes c JOIN Enderecos e ON c.CEP = e.CEP; - Teste o Desempenho: Utilize índices adequados para evitar lentidão após a normalização:sqlCopiar código
CREATE INDEX idx_cliente_cep ON Clientes(CEP);
Resumo
A normalização é um processo crucial para o design de bancos de dados eficientes e livres de anomalias. Cada forma normal aborda um problema específico, desde a atomização de dados na 1FN até a eliminação de dependências complexas na 5FN. Aplicar essas técnicas garante um banco de dados robusto e escalável, pronto para atender às demandas do mundo real.
Se você tem dúvidas ou quer aprofundar o conhecimento, sinta-se à vontade para perguntar! 😊
Comandos SQL: 10 essenciais para todo programador!
☕
Café com Deus Pai Vol. 6 - 2026: Porções Diárias de Amor
oferece 365 mensagens diárias que convidam você a um encontro íntimo com Deus, fortalecendo a fé e nutrindo a alma.
👉
Confira na Amazon
.
Nas compras você contribui para manter o site no ar.
