Quando a gente fala de analisar um banco de dados pra ver se ele tá nas formas normais, estamos falando de estudar a estrutura das tabelas, como elas se relacionam e as dependências entre os atributos. O objetivo principal dessa análise é achar onde a normalização tá sendo quebrada e avaliar como isso afeta a performance, a integridade e a facilidade de trabalhar com os dados.
Falando de um jeito mais simples, é tipo uma auditoria de contabilidade: você confere se o dinheiro não tá jogado de qualquer jeito, mas sim separado certinho nas categorias certas de gasto.
Abordagem prática pra analisar um banco de dados
Em qualquer banco de dados, a gente começa fazendo três perguntas básicas, cada uma ligada a uma das três formas normais.
Imagina que a gente tem um banco de dados de estoque com uma tabela assim:
| product_id | product_name | supplier_name | supplier_phone | stock_quantity |
|---|---|---|---|---|
| 1 | Pregos | StroyKomplekt | +12301112233 | 150 |
| 2 | Parafusos | KrepyoshPro | +12306667788 | 200 |
| 3 | Porcas | StroyKomplekt | +12301112233 | 100 |
Como a gente verifica se essa tabela tá nas formas normais?
Lembrando, uma tabela tá em 1NF se:
- Cada célula tem só um valor.
- Não tem colunas repetidas pro mesmo tipo de dado.
No nosso exemplo, não tem violação da 1NF: cada célula tem um valor atômico. Ou seja, a tabela tá em 1NF. Boa! Bora pra próxima.
Uma tabela tá em 2NF se:
- Ela já tá em 1NF.
- Todos os atributos que não fazem parte da chave dependem só da chave primária inteira (e não de uma parte dela).
Nessa tabela, dá pra ver que supplier_name e supplier_phone dependem só do product_id — que é a chave primária. Mas tem duplicação de dados: pro mesmo fornecedor, a gente guarda o nome e o telefone em várias linhas.
Pra deixar a tabela em 2NF, dá pra separar em duas tabelas:
Tabela Products:
| product_id | product_name | supplier_id | stock_quantity |
|---|---|---|---|
| 1 | Pregos | 1 | 150 |
| 2 | Parafusos | 2 | 200 |
| 3 | Porcas | 1 | 100 |
Tabela Suppliers:
| supplier_id | supplier_name | supplier_phone |
|---|---|---|
| 1 | StroyKomplekt | +78901112233 |
| 2 | KrepyoshPro | +78906667788 |
Agora cada fornecedor aparece só uma vez, e a ligação entre as tabelas é pelo foreign key supplier_id.
Uma tabela tá em 3NF se:
- Ela já tá em 2NF.
- Todos os atributos que não fazem parte da chave dependem só da chave primária, e não de outros atributos que também não são chave.
No caso das tabelas normalizadas Products e Suppliers, não tem dependências transitivas. Ou seja, as tabelas tão em 3NF.
Exercício prático
Imagina que a gente tem a tabela original "Universidade"
| student_id | student_name | course_name | professor_name | professor_email |
|---|---|---|---|---|
| 101 | Otto Lin | Matemática | Peter Pen | pen@university.com |
| 102 | Anna Song | Física | Alex Sid | sid@university.com |
| 103 | Otto Lin | Física | Alex Sid | sid@university.com |
- Verifica se a tabela tá nas formas normais.
- Coloca ela em 1NF, 2NF e 3NF, se precisar.
Solução
PASSO 1: Verificando 1NF
A tabela já tá em 1NF: cada célula tem só um valor.
PASSO 2: Verificando 2NF
A tabela quebra a 2NF: info dos professores (nome e email) se repete. Dá pra jogar isso pra uma tabela separada:
Tabela Students:
| student_id | student_name |
|---|---|
| 101 | Otto Lin |
| 102 | Anna Song |
Tabela Courses:
| course_id | course_name | professor_id |
|---|---|---|
| 1 | Matemática | 1 |
| 2 | Física | 2 |
Tabela Professors:
| professor_id | professor_name | professor_email |
|---|---|---|
| 1 | Peter Pen | pen@university.com |
| 2 | Alex Sid | sid@university.com |
Tabela Enrollments:
| enrollment_id | student_id | course_id |
|---|---|---|
| 1 | 101 | 1 |
| 2 | 102 | 2 |
| 3 | 103 | 2 |
PASSO 3: Verificando 3NF
Na nova estrutura não tem dependências transitivas. As tabelas tão em 3NF.
Dicas práticas
- Não tenta buscar o ideal sem necessidade. Às vezes normalizar demais deixa as queries mais complicadas.
- Analisa como um detetive. Procura duplicidade, dependências desnecessárias e outras "anomalias".
- Não esquece da performance. Normalização é um equilíbrio entre dados limpos e velocidade de processamento.
Agora que você já sabe achar problemas no banco de dados e resolver, já consegue fazer uma "auditoria" honesta em qualquer banco, de qualquer tamanho. Lembra: um banco de dados bom não é só funcional, mas também bonito (ou seja, normalizado).
GO TO FULL VERSION