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

🧮 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 ForteVira uma Tabela independente (com PK).
Atributo SimplesVira uma Coluna na tabela.
Relacionamento 1:NA PK do lado 1 vira FK no lado N.
Relacionamento N:MVira uma Tabela Associativa (composta pelas duas FKs).
Atributo MultivaloradoVira 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_entregador só tem sentido de existir por causa do entregador. Por isso ela tem ON 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 WHERE no SQL. Ex: Mostrar apenas entregas de SP.
  • Projeção (π - Pi): Funciona como um filtro vertical (Colunas). É o SELECT coluna1, coluna2 no 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.

  1. 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! 🚀🛡️