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 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 CASCADE na 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 rodarmos DELETE 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.

  1. Crie a tabela genérica veiculo (Pai).
  2. Crie as tabelas filhas caminhao e moto.
  3. 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? 🧠🛡️