MySQL: Teoria do projeto e da normalização de bancos de…
Última atualização: 2026-08-26
Um bom projeto de banco de dados é a base do sucesso de um sistema — um projeto inadequado pode levar a problemas intermináveis no futuro.
Esta aula aborda a teoria e a prática do projeto de bancos de dados.
1. O que você vai aprender
- Processo de projeto de banco de dados
- Projeto de diagramas ER
- Teoria das Formas Normais (1NF → BCNF)
- Design antiparadigma
- Convenções de nomenclatura
2. Processo de design
graph TB
A[Requirements Analysis] --> B[Conceptual Design ER Diagram]
B --> C[Logical Design Table Structure]
C --> D[Physical Design Index/Partition]
D --> E[Implementation and Deployment]
E --> F[Operations and Maintenance Optimization]
3. Teoria dos Paradigmas
| Paradigma | Requisitos | Exemplo |
|---|---|---|
| 1NF | Os campos não podem ser divididos ainda mais | Um número de telefone não pode ter várias entradas |
| 2NF | Eliminação de dependências parciais | Os campos que não fazem parte da chave primária são totalmente dependentes da chave primária |
| 3NF | Eliminar a transitividade | Os campos que não são de chave primária não podem depender de outros campos que também não sejam de chave primária |
| BCNF | Todo fator determinante é uma chave candidata | Uma forma mais restrita da 3NF |
▶ Exemplo: Projeto em 3NF
-- Violation of 3NF (Department name depends on dept_id, not directly on employee id)
CREATE TABLE employees_bad (
id INT PRIMARY KEY,
name VARCHAR(50),
dept_id INT,
dept_name VARCHAR(50) -- Transitive dependency
);
-- ✅ Comply with 3NF
CREATE TABLE departments (
id INT PRIMARY KEY,
name VARCHAR(50)
);
CREATE TABLE employees (
id INT PRIMARY KEY,
name VARCHAR(50),
dept_id INT,
FOREIGN KEY (dept_id) REFERENCES departments(id)
);
4. Design antiparadigma
Às vezes, em prol do desempenho, quebramos deliberadamente as regras.
| Cenário | Abordagem antiparadigma | Motivo |
|---|---|---|
| JOINs frequentes | Campos redundantes | Menos JOINs |
| Consultas estatísticas | Colunas calculadas | Como evitar cálculos em tempo real |
| Relatórios | Relatórios resumidos | Agilizar consultas |
5. Convenções de nomenclatura
| Melhores práticas | Recomendações | O que evitar |
|---|---|---|
| Nome da tabela | snake_case, plural | singular, camelCase |
| Nome do campo | snake_case | camelCase, chinês |
| Chave primária | id | userId |
| Chave Estrangeira | table_id | customerId |
| Índice | idx_table_col | table_col_idx |
6. Projeto de diagramas ER
erDiagram
CUSTOMERS ||--o{ ORDERS : places
ORDERS ||--|{ ORDER_ITEMS : contains
PRODUCTS ||--o{ ORDER_ITEMS : includes
CUSTOMERS {
int id PK
string name
string email
}
ORDERS {
int id PK
int customer_id FK
decimal amount
date order_date
}
PRODUCTS {
int id PK
string name
decimal price
}
❓ Perguntas Frequentes
P: É necessário seguir a 3NF? R: Na maioria dos casos, sim. No entanto, em cenários com muitas leituras e poucas gravações, é aceitável se desviar da forma normal.
P: Quais tipos de dados devem ser usados para os campos? R: Use BIGINT para a chave primária, DECIMAL para valores monetários, TIMESTAMP para datas e horários e VARCHAR para texto.
P: Os nomes das tabelas devem estar no singular ou no plural? R: Recomendamos usar o plural (usuários, pedidos) para indicar “um conjunto de registros”.
P: É necessário seguir as três formas normais? R: Não necessariamente. Em cenários de consultas com alta concorrência, é possível se afastar das formas normais; uma redundância adequada pode reduzir o número de JOINs.
P: Quais ferramentas podem ser usadas para diagramas ER? R: MySQL Workbench (engenharia direta/reversa), draw.io (ferramenta online gratuita) e dbdiagram.io (geração de diagramas ER a partir de código).
📖 Resumo
- Processo de projeto: Requisitos → Diagrama ER → Estrutura das tabelas → Índices → Implantação
- Formas normais: 1NF (não atomizada) → 2NF (eliminação de dependências parciais) → 3NF (eliminação de dependências transitivas)
- Anti-padrão: Redundância adequada para o desempenho
- Convenções de nomenclatura: snake_case, chave primária id, chave estrangeira table_id
📝 Exercícios
-
Problema básico (Dificuldade: ⭐): Elabore um diagrama ER para um sistema de blog.
-
Problema avançado (Dificuldade ⭐⭐): Normalize uma tabela da 1NF para a 3NF.
-
Questão desafiadora (Dificuldade: ⭐⭐⭐): Projete um banco de dados de comércio eletrônico que inclua tabelas para usuários, produtos, pedidos e pagamentos.