🎯 ATIVIDADE 03 — DO DESENHO À GRADE
Bem-vindo à terceira semana (4 aulas) do curso de Banco de Dados. Agora que você já sabe "desenhar" as necessidades do cliente (Modelo Conceitual), vamos aprender a traduzir esse desenho para a linguagem que os computadores entendem: o Modelo Lógico (Relacional) e a matemática que rege tudo isso, a Álgebra Relacional. 🛡️🧩
🎯 Objetivo da Aula
Ao final desta semana, você será capaz de:
- Mapear Entidades e Relacionamentos para Tabelas e Colunas.
- Implementar a Integridade Referencial através de Chaves Estrangeiras (FK).
- Executar operações de Seleção, Projeção e Junção usando Álgebra Relacional.
- Criar diagramas lógicos profissionais no draw.io.
🏢 O Cenário Prático (Seu Desafio)
A TecProExpress aprovou seu MER (Atividade 02). Agora, a equipe de desenvolvimento precisa que você entregue o Esquema Lógico. Eles precisam saber exatamente quais colunas cada tabela terá e como elas se conectam via IDs.
Além disso, o time de BI (Business Intelligence) solicitou que você descreva, de forma lógica, como extrair relatórios específicos (Ex: "Quais entregadores estão usando veículos do tipo 'Caminhão'?").
🧠 Fundamentos: A Teoria Traduzida
O mapeamento é a ponte entre o abstrato e o concreto.
1. A Anatomia do Mapeamento
Mapear é transformar "caixas" em "tabelas". Veja a regra visual:
graph LR
subgraph Conceitual ["Nível Conceitual (MER)"]
A["Entidade: CLIENTE"] --- B(("Atributo: Nome"))
end
Conceitual -->|Mapeamento| Logico
subgraph Logico ["Nível Lógico (Tabelas)"]
C["Tabela: cliente"]
C --- D["Coluna: nome (VARCHAR)"]
end
style Conceitual fill:#e3f2fd,stroke:#1e88e5
style Logico fill:#f1f8e9,stroke:#558b2f
2. Álgebra Relacional: Os Três Pilares
O banco de dados não "procura" dados; ele realiza operações matemáticas sobre conjuntos.
| Operação | Símbolo | Função Visual | Analogia |
|---|---|---|---|
| Seleção | σ | Filtra Linhas | Um filtro de busca por preço |
| Projeção | π | Filtra Colunas | Escolher quais campos exibir |
| Junção | ⋈ | Combina Tabelas | Cruzar dados de duas planilhas |
flowchart TD
subgraph Sigma ["σ Seleção (Horizontal)"]
S1[Linha 1] --- S2[Linha 2] --- S3[Linha 3]
end
subgraph Pi ["π Projeção (Vertical)"]
P1[Coluna A]
P2[Coluna B]
end
Sigma -.->|Filtra| R1[Resultado]
Pi -.->|Escolhe| R1
📖 Exemplo Guiado: Mapeando 1:N
No cenário da TecProExpress:
- Entidade: ENTREGADOR (1)
- Entidade: VEÍCULO (N) - Assumindo que um entregador pode usar vários veículos.
🏁 Resultado Esperado (Modelo Lógico)
ENTREGADOR (id PK, nome, cpf UNIQUE, telefone)VEICULO (id PK, placa UNIQUE, modelo, ano, id_entregador FK)
🔍 Detalhamento do Mapeamento:
- PK (Primary Key): Identificador único sequencial (geralmente numérico auto-incremental).
- FK (Foreign Key): A PK do "lado 1" (Entregador) que viaja para o "lado N" (Veículo) como
id_entregador. - UNIQUE: Restrição que impede duplicidade (ex: não podem existir dois entregadores com o mesmo CPF ou duas placas iguais).
- Integridade: Garante que não exista um veículo sem um entregador responsável.
🛠️ Prática Obrigatória 1: Mapeamento Logístico
Cenário: Transformação do MER da TecProExpress para o Modelo Lógico.
- Com base no cenário da Atividade 02, escreva o esquema lógico das tabelas: CLIENTE, PEDIDO, PRODUTO e ENTREGADOR.
- Indique claramente quais são as Primary Keys (PK) e as Foreign Keys (FK).
🏁 Resultado Esperado (Para sua Referência)
CLIENTE (id PK, nome, cpf UNIQUE, endereco)
PEDIDO (id PK, data, id_cliente FK)
PRODUTO (id PK, sku UNIQUE, nome, preco)
🔍 Detalhamento das Decisões:
- CLIENTE: Adotamos
idcomo PK numérica para otimização do banco, mantendo ocpfcomo colunaUNIQUE(regra de negócio). - PEDIDO: Recebe
id_clientecomo FK para conectar com o cliente associado. - PRODUTO: Usa
idcomo PK, mantendo o SKU como chave única secundária para fins de código de barras industrial.
🛠️ Prática Obrigatória 2: Laboratório de Álgebra
Cenário: Extração de lógica para relatórios usando as tabelas abaixo (Seeds).
📋 Seed: Tabela ENTREGADOR
| cpf | nome | veiculo_id |
|---|---|---|
| 111 | Ana Silva | 10 |
| 222 | João Souza | 20 |
| 333 | Bia Costa | 10 |
📋 Seed: Tabela VEICULO
| id | tipo | modelo |
|---|---|---|
| 10 | Caminhão | Mercedes 710 |
| 20 | Moto | Honda Cargo |
🚀 Script de Seed (SQL)
-- PASSO 1: Criar as Tabelas (Estrutura)
CREATE TABLE veiculo (
id INT PRIMARY KEY,
tipo VARCHAR(50),
modelo VARCHAR(100)
);
CREATE TABLE entregador (
cpf VARCHAR(11) PRIMARY KEY,
nome VARCHAR(100),
veiculo_id INT,
FOREIGN KEY (veiculo_id) REFERENCES veiculo(id)
);
-- PASSO 2: Popular as Tabelas (Dados)
INSERT INTO veiculo (id, tipo, modelo) VALUES (10, 'Caminhão', 'Mercedes 710');
INSERT INTO veiculo (id, tipo, modelo) VALUES (20, 'Moto', 'Honda Cargo');
INSERT INTO entregador (cpf, nome, veiculo_id) VALUES ('111', 'Ana Silva', 10);
INSERT INTO entregador (cpf, nome, veiculo_id) VALUES ('222', 'João Souza', 20);
INSERT INTO entregador (cpf, nome, veiculo_id) VALUES ('333', 'Bia Costa', 10);
🔍 Detalhamento do Seed:
- Ordem: Inserimos primeiro o
VEICULOporque oENTREGADORdepende dele (FK). - Vínculo: Note que o
veiculo_id10 é compartilhado por Ana e Bia.
📤 Instruções de Entrega (Microsoft Teams)
Após finalizar o mapeamento e as fórmulas matemáticas:
- Digite a sua resposta contendo o mapeamento lógico e as fórmulas equivalentes da Álgebra Relacional (pode ser em formato texto no Word/Markdown ou PDF).
- Salve o arquivo com a nomenclatura
Atividade_03_SeuNome.pdfouAtividade_03_SeuNome.md. - Envie a resposta na plataforma correspondente do Microsoft Teams para avaliação técnica. (Esta atividade é conceitual e foca na matemática relacional, sem necessidade de código
.sqlexecutável).
💡 Checkpoint de Lógica
[!IMPORTANT] Reflexão Profissional: Imagine que você tem 1 milhão de clientes. É mais eficiente fazer a Seleção (σ) antes ou depois da Junção (⋈)? Na indústria, filtrar os dados antes de cruzar tabelas economiza processamento e tempo. 🧠🛡️
🔥 Desafio de Fixação (Opcional)
Nível: Expert 🏆
O relacionamento entre PEDIDO e PRODUTO é Muitos para Muitos (N:M). Como mapear isso para o modelo lógico?
🏁 Resultado Esperado do Desafio
ITEM_PEDIDO (id_pedido FK, sku_produto FK, quantidade)
🔍 Explicação da Solução:
Relacionamentos N:M sempre geram uma terceira tabela (Associativa). Esta tabela carrega as chaves estrangeiras de ambos os lados e as transforma em uma Chave Primária Composta.
🔑 Gabarito de Código/Fórmulas Completo
Prática 1 (Mapeamento Completo):
CLIENTE (id PK, nome, cpf UNIQUE, endereco)PRODUTO (id PK, sku UNIQUE, nome, preco)PEDIDO (id PK, data, id_cliente FK, id_entregador FK)ENTREGADOR (id PK, nome, cpf UNIQUE, veiculo_id FK)VEICULO (id PK, placa UNIQUE, modelo, tipo)
Prática 2 (Álgebra vs SQL Passo a Passo):
-
Objetivo: Nomes dos Entregadores.
- Fórmula:
π nome (ENTREGADOR) - SQL Equivalente:
SELECT nome FROM entregador;
- Fórmula:
-
Objetivo: Filtro de Caminhões.
- Fórmula:
σ tipo='Caminhão' (VEICULO) - SQL Equivalente:
SELECT * FROM veiculo WHERE tipo = 'Caminhão';
- Fórmula:
-
Objetivo: Cruzamento de Dados (Nome + Modelo).
- Fórmula:
π nome, modelo (ENTREGADOR ⋈ veiculo_id=id VEICULO) - SQL Equivalente:
SELECT e.nome, v.modelo FROM entregador e INNER JOIN veiculo v ON e.veiculo_id = v.id;
- Fórmula:
Desafio (Mapeamento N:M):
- Lógico:
ITEM_PEDIDO (id_pedido FK, sku_produto FK, quantidade) - SQL de Criação:
CREATE TABLE item_pedido ( id_pedido INT, sku_produto VARCHAR(50), quantidade INT, PRIMARY KEY (id_pedido, sku_produto), FOREIGN KEY (id_pedido) REFERENCES pedido(id), FOREIGN KEY (sku_produto) REFERENCES produto(sku) );