Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

🎯 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çãoSímboloFunção VisualAnalogia
SeleçãoσFiltra LinhasUm filtro de busca por preço
ProjeçãoπFiltra ColunasEscolher quais campos exibir
JunçãoCombina TabelasCruzar 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)

  1. ENTREGADOR (id PK, nome, cpf UNIQUE, telefone)
  2. 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.

  1. Com base no cenário da Atividade 02, escreva o esquema lógico das tabelas: CLIENTE, PEDIDO, PRODUTO e ENTREGADOR.
  2. 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 id como PK numérica para otimização do banco, mantendo o cpf como coluna UNIQUE (regra de negócio).
  • PEDIDO: Recebe id_cliente como FK para conectar com o cliente associado.
  • PRODUTO: Usa id como 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

cpfnomeveiculo_id
111Ana Silva10
222João Souza20
333Bia Costa10

📋 Seed: Tabela VEICULO

idtipomodelo
10CaminhãoMercedes 710
20MotoHonda 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 VEICULO porque o ENTREGADOR depende dele (FK).
  • Vínculo: Note que o veiculo_id 10 é compartilhado por Ana e Bia.

📤 Instruções de Entrega (Microsoft Teams)

Após finalizar o mapeamento e as fórmulas matemáticas:

  1. 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).
  2. Salve o arquivo com a nomenclatura Atividade_03_SeuNome.pdf ou Atividade_03_SeuNome.md.
  3. 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 .sql executá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):

  1. Objetivo: Nomes dos Entregadores.

    • Fórmula: π nome (ENTREGADOR)
    • SQL Equivalente:
      SELECT nome FROM entregador;
      
  2. Objetivo: Filtro de Caminhões.

    • Fórmula: σ tipo='Caminhão' (VEICULO)
    • SQL Equivalente:
      SELECT * FROM veiculo WHERE tipo = 'Caminhão';
      
  3. 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;
      

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)
    );