🧭 CAPÍTULO 08: EXTENSÕES DO MER E REVISÃO DA MODELAGEM
Até agora, lidamos com objetos simples (Clientes, Produtos, Pedidos). Mas a vida real não é apenas "Pai e Filho". Como mapeamos um "Dependente" que só existe se o titular existir? Como mapeamos a herança de características? Hoje vamos ver as Extensões do MER. 🛡️🧩
🎯 Objetivo Curricular
Dominar a modelagem avançada resolvendo problemas de Entidades Fracas, Generalização/Especialização (Herança) e consolidar os fundamentos preparatórios para a Normalização.
🏢 O Cenário Prático (Seu Desafio)
O RH da TecProExpress solicitou que o banco de dados armazene os Dependentes (filhos) de cada funcionário para o plano de saúde. Além disso, a empresa agora possui uma frota mista: Caminhões (que têm capacidade de carga) e Motos (que têm cilindrada), mas ambos são Veículos.
"Seu desafio é elevar o nível da sua arquitetura, aplicando os conceitos de 'Entidade Fraca' para os dependentes e 'Herança' para a frota, garantindo que o banco de dados seja escalável e evite colunas com valores NULL desnecessários."
🧠 Fundamentos: Modelagem Avançada
1. Entidade Fraca (Dependência Existencial)
Uma Entidade Fraca não tem vida própria. O "Filho do João" só está no plano de saúde porque o João é funcionário. Se João for demitido (deletado), o dependente deve desaparecer do banco também.
- No SQL, garantimos isso usando a restrição
ON DELETE CASCADEna Chave Estrangeira.
2. Generalização e Especialização (Herança)
Assim como na Programação Orientada a Objetos (POO), no banco de dados podemos ter uma tabela "Pai" Genérica e tabelas "Filhas" Específicas.
📊 Diagrama de Herança (IS-A)
flowchart TD
VEI["🚙 VEÍCULO <br/> ID, Placa, Ano"] -->|Especialização| CAM["🚛 CAMINHÃO <br/> Cap_Carga"]
VEI -->|Especialização| MOT["🏍️ MOTO <br/> Cilindradas"]
style VEI fill:#e3f2fd
style CAM fill:#fffde7
style MOT fill:#fffde7
- Vantagem: Evita colocar "Capacidade_Carga" e "Cilindradas" na mesma tabela, o que faria as Motos terem a coluna de carga como
NULL(desperdício de espaço e lógica).
📖 Exemplo Guiado: Criando uma Entidade Fraca (DDL -> DML)
Veja como modelar a dependência forte no PostgreSQL ou MySQL para a TecProExpress.
🛠️ Código do Exemplo
-- PASSO 1: DDL (A Entidade Forte / Titular)
CREATE TABLE funcionario (
id INT PRIMARY KEY,
nome VARCHAR(100)
);
-- PASSO 2: DDL (A Entidade Fraca / Dependente)
CREATE TABLE dependente (
id_func INT,
nome_dep VARCHAR(100),
data_nasc DATE,
PRIMARY KEY (id_func, nome_dep), -- Chave Composta!
CONSTRAINT fk_titular FOREIGN KEY (id_func)
REFERENCES funcionario(id)
ON DELETE CASCADE -- A mágica acontece aqui!
);
-- PASSO 3: DML (Carga Inicial)
INSERT INTO funcionario VALUES (10, 'Carlos Oliveira');
INSERT INTO dependente VALUES (10, 'Pedrinho', '2015-05-10');
🔍 Detalhamento do Código:
- Chave Composta: A PK do dependente é a junção do ID do funcionário + o nome do dependente.
ON DELETE CASCADE: Se rodarmosDELETE FROM funcionario WHERE id = 10;, o banco de dados, sozinho, vai deletar o "Pedrinho" da tabela dependente. Integridade automática!
🛠️ Prática Obrigatória: Implementando a Frota (Herança)
Cenário: A frota mista da TecProExpress.
- Crie a tabela genérica
veiculo(Pai). - Crie as tabelas filhas
caminhaoemoto. - Faça com que a Chave Primária das filhas também seja a Chave Estrangeira que aponta para o Pai.
🚀 Script de Seed (Gabarito Físico)
-- DDL Genérico (Pai)
CREATE TABLE veiculo (
id INT PRIMARY KEY,
placa VARCHAR(7) UNIQUE,
ano INT
);
-- DDL Específico (Caminhão)
CREATE TABLE caminhao (
id_veiculo INT PRIMARY KEY, -- PK e FK ao mesmo tempo!
capacidade_toneladas INT,
FOREIGN KEY (id_veiculo) REFERENCES veiculo(id)
);
-- DML (Inserindo a Herança)
-- Passo A: Insere na tabela Pai
INSERT INTO veiculo VALUES (1, 'AAA1234', 2026);
-- Passo B: Complementa na tabela Filha
INSERT INTO caminhao VALUES (1, 15);
🔍 O Segredo da Abstração
No DML acima, o veículo ID 1 existe em duas partes: os dados gerais estão no Pai, e os dados específicos estão no Caminhão. Na hora do relatório, usaremos um JOIN para juntar as duas metades.
📤 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
[!IMPORTANT] Revisão Estratégica: Chegamos ao fim da modelagem pura. Você aprendeu a criar Entidades, ligar Relacionamentos (1:N, N:M), lidar com Dependências e Herança. O próximo passo será refinar tudo isso com a "Normalização", a vacina contra as redundâncias. O seu raciocínio estrutural está preparado? 🧠🛡️