// aula 04 · SQL · Modelagem
O que é modelagem de dados?
Modelagem de dados é o processo de definir a estrutura do banco antes de criar as tabelas — quais entidades existem, quais atributos cada uma tem e como elas se relacionam. Um banco bem modelado é mais rápido, mais fácil de manter e evita inconsistências.
Alto nível. Entidades e relacionamentos sem se preocupar com tecnologia. Ferramenta: diagrama ER.
Define tabelas, colunas, tipos de dados e chaves. Independente do banco de dados escolhido.
O SQL real. CREATE TABLE, índices, constraints. Específico para SQL Server, MySQL, etc.
Chaves — PK e FK
-- Criando tabelas com PK e FK CREATE TABLE clientes ( id INT PRIMARY KEY AUTO_INCREMENT, nome VARCHAR(100) NOT NULL, email VARCHAR(150) UNIQUE, ativo BOOLEAN DEFAULT TRUE ); CREATE TABLE pedidos ( id INT PRIMARY KEY AUTO_INCREMENT, cliente_id INT NOT NULL, valor DECIMAL(10,2) NOT NULL, criado_em DATETIME DEFAULT NOW(), FOREIGN KEY (cliente_id) REFERENCES clientes(id) ON DELETE CASCADE -- apaga pedidos se cliente for deletado ON UPDATE CASCADE -- atualiza se o id do cliente mudar );
Tipos de relacionamento
Cada registro A tem no máximo um B. Ex: pessoa ↔ CPF, usuário ↔ perfil detalhado. Raro — geralmente pode ser uma tabela só.
O mais comum. Um A tem vários B, mas cada B pertence a um A. Ex: cliente → pedidos, categoria → produtos. FK fica na tabela N.
Vários A para vários B. Ex: aluno ↔ curso, produto ↔ pedido. Resolve com uma tabela associativa no meio.
-- Relacionamento N:N — aluno ↔ curso -- Tabela associativa: matriculas CREATE TABLE alunos ( id INT PRIMARY KEY AUTO_INCREMENT, nome VARCHAR(100) ); CREATE TABLE cursos ( id INT PRIMARY KEY AUTO_INCREMENT, nome VARCHAR(100) ); CREATE TABLE matriculas ( -- tabela associativa aluno_id INT, curso_id INT, data_inicio DATE, PRIMARY KEY (aluno_id, curso_id), -- PK composta FOREIGN KEY (aluno_id) REFERENCES alunos(id), FOREIGN KEY (curso_id) REFERENCES cursos(id) );
Exemplo de diagrama ER — loja virtual
Normalização — as formas normais
Normalização é o processo de organizar as tabelas para eliminar redundâncias e dependências problemáticas. Seguir as formas normais garante um banco mais limpo, consistente e fácil de manter.
Cada coluna tem um único valor atômico. Sem grupos repetitivos. Cada linha é única.
Está na 1FN + todo atributo não-chave depende da chave primária inteira (sem dependências parciais).
Está na 2FN + sem dependências transitivas (atributo não-chave depende de outro não-chave).