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:
Conta Exclusiva ChatGPT: Acesso Ilimitado
Desbloqueie o poder do ChatGPT com recursos premium. Aproveite 80,5% de desconto e garantia de 100% de satisfação. Junte-se hoje e viva a melhor experiência de chat com IA!
Cypress, do Zero à Nuvem: domine a automação de testes com confiabilidade e eficiência
Aprimore suas habilidades de automação de testes com Cypress, desde o início até a integração contínua.
Saiba Mais💻 Torne-se um Desenvolvedor Fullstack!
Domine as tecnologias mais requisitadas do mercado e conquiste sua carreira dos sonhos como Desenvolvedor Fullstack. Inscreva-se hoje!
Inscreva-seID 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:
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!
Gostou deste conteúdo?
Assine o E-Zine Ramos da Informática e receba semanalmente conteúdos exclusivos focados em desenvolvimento frontend, backend e bancos de dados para turbinar sua carreira tech.
📘 Conteúdo Exclusivo
Dicas, insights e guias práticos para alavancar suas habilidades em desenvolvimento e bancos de dados.
🚀 Hacks de Carreira
Ferramentas, atalhos e estratégias para se destacar e crescer rapidamente no mercado de tecnologia.
🌟 Tendências Tech
As novidades mais relevantes sobre desenvolvimento web, mobile e bancos de dados para você se manter atualizado.
Já somos mais de 5.000 assinantes! Junte-se a uma comunidade de profissionais que compartilham conhecimento e crescem juntos no universo tech.