🧮 CAPÍTULO 09: MAPEAMENTO MER-RELACIONAL E ÁLGEBRA
Chegamos à fase final do design de banco de dados. Você já tem um Diagrama Entidade-Relacionamento (DER) validado com o cliente. Agora, você precisa "traduzir" esse desenho para a estrutura física (Tabelas, Chaves) que o SGBD entende. Além disso, vamos espiar o motor matemático que faz o SQL ser tão rápido: a Álgebra Relacional. 🛡️🧩
🎯 Objetivo Curricular
Executar o roteiro de mapeamento lógico (MER para Relacional) sem perda de semântica e compreender os operadores algébricos (Seleção, Projeção, Junção) que fundamentam as consultas corporativas.
🏢 O Cenário Prático (Seu Desafio)
Os diretores da TecProExpress aprovaram no quadro branco o diagrama de como a empresa funciona: "O Cliente faz um Pedido, que é entregue por um Motorista usando um Veículo".
"Seu desafio é pegar esse desenho (MER) e transformá-lo em tabelas reais usando regras estritas de mapeamento para que a equipe de desenvolvimento possa finalmente conectar a aplicação ao SGBD."
🧠 Fundamentos: O Roteiro de Mapeamento (MER -> Lógico)
A tradução de um diagrama para tabelas segue um roteiro matemático. Você não pode adivinhar o resultado; deve aplicar a regra:
| Componente no MER (Mundo Abstrato) | O que vira no Relacional (Tabelas) |
|---|---|
| Entidade Forte | Vira uma Tabela independente (com PK). |
| Atributo Simples | Vira uma Coluna na tabela. |
| Relacionamento 1:N | A PK do lado 1 vira FK no lado N. |
| Relacionamento N:M | Vira uma Tabela Associativa (composta pelas duas FKs). |
| Atributo Multivalorado | Vira uma Nova Tabela atrelada à original (Ex: Telefones). |
📖 Exemplo Guiado: Mapeamento da Rota de Entregas (DDL -> DML)
A TecProExpress tem Entregadores e Telefones. Como o entregador pode ter vários telefones (Multivalorado), não podemos colocar 3 colunas de telefone na mesma tabela. A regra diz: "Crie uma nova tabela".
🛠️ Código do Exemplo
-- PASSO 1: DDL (A Tabela Principal - Entidade)
CREATE TABLE entregador_tecpro (
id INT PRIMARY KEY,
nome VARCHAR(100) NOT NULL
);
-- PASSO 2: DDL (A Nova Tabela gerada pelo Atributo Multivalorado)
CREATE TABLE telefone_entregador (
id_entregador INT,
numero VARCHAR(15),
PRIMARY KEY (id_entregador, numero), -- Chave Composta!
FOREIGN KEY (id_entregador) REFERENCES entregador_tecpro(id) ON DELETE CASCADE
);
-- PASSO 3: DML (Carga dos Dados)
INSERT INTO entregador_tecpro VALUES (1, 'Marcos Silva');
INSERT INTO telefone_entregador VALUES (1, '11-9999-8888');
INSERT INTO telefone_entregador VALUES (1, '11-7777-6666');
🔍 Detalhamento do Código:
- A tabela
telefone_entregadorsó tem sentido de existir por causa do entregador. Por isso ela temON DELETE CASCADE. - A junção do ID com o Número forma a Chave Primária, garantindo que não cadastraremos o mesmo número duas vezes para a mesma pessoa.
🧮 Álgebra Relacional (O Motor Oculto)
Você nunca escreverá "Álgebra Relacional" no terminal do seu trabalho. No entanto, o motor do MySQL/PostgreSQL lê o seu SQL, o converte em álgebra relacional nos bastidores, e otimiza a matemática para responder rápido.
1. Operadores Unários (Atuam em uma tabela)
- Seleção (σ - Sigma): Funciona como um filtro horizontal (Linhas). É o
WHEREno SQL. Ex: Mostrar apenas entregas de SP. - Projeção (π - Pi): Funciona como um filtro vertical (Colunas). É o
SELECT coluna1, coluna2no SQL. Ex: Mostrar apenas os Nomes, não os CPFs.
2. Operadores Binários (Juntam tabelas)
- Produto Cartesiano (X): Cruza todas as linhas de A com todas as linhas de B. (Geralmente evitado, pois gera caos).
- Junção (⋈ - Join): A operação mais importante! Ela cruza a Tabela A com a Tabela B apenas onde as chaves (PK e FK) batem.
📊 Fluxo da Junção (⋈)
flowchart LR
T1["Tabela: CLIENTE<br/>ID=10, Nome=Maria"] --> J{"⋈<br/>Onde as chaves batem"}
T2["Tabela: PACOTE<br/>ID_Cliente=10, Item=Laptop"] --> J
J --> RESULT["Resultado Unificado:<br/>Maria comprou um Laptop"]
🛠️ Prática Obrigatória: O Encontro do SQL com a Álgebra
Cenário: O diretor pediu a lista de pacotes e seus donos na TecProExpress.
- Crie a query SQL que representa a Junção (⋈) entre a tabela Cliente e a tabela Pacote.
🚀 Script de Seed (Gabarito da Junção)
-- DDL de Setup Rápido (Se você não os tiver da unidade passada)
-- CREATE TABLE cliente (id INT PRIMARY KEY, nome VARCHAR(50));
-- CREATE TABLE pacote (id INT PRIMARY KEY, fk_cliente INT);
-- DML (A Consulta SQL que representa a Álgebra: Cliente ⋈ Pacote)
SELECT cliente.nome, pacote.id
FROM cliente
JOIN pacote ON cliente.id = pacote.fk_cliente;
🔍 Detalhamento da Consulta:
- O comando
JOIN ... ONé a tradução exata do símbolo⋈(Junção Natural). Ele varre as duas tabelas e só retorna os dados que estão perfeitamente linkados.
📤 Instruções de Entrega (Microsoft Teams)
Após validar seus códigos práticos e de estudo:
Use o operador e para critérios rigorosos e ou para critérios flexíveis. Salve os arquivos com a extensão .sql (Ex: Atividade_XX_SeuNome.sql ou Atividade_XX_SeuNome.png ou Atividade_XX_SeuNome.drawio
💡 Checkpoint de Lógica
[!TIP] Dica do Especialista: Por que aprender a teoria da Álgebra se você vai programar em SQL? Porque quando você escreve uma query SQL que demora 10 minutos para rodar, o SGBD fornece um "Plano de Execução" estruturado matematicamente na Álgebra. Quem entende os símbolos (σ, π, ⋈) consegue corrigir o gargalo em segundos! 🚀🛡️