🎯 ATIVIDADE 02 — A PLANTA BAIXA DOS DADOS

📖 Fundamentação Teórica

Para realizar este laboratório com sucesso, certifique-se de ter compreendido os conceitos apresentados no:
👉 CAPÍTULO 02: FUNDAMENTOS DE SGBDS E SISTEMAS DE ARQUIVOS

Bem-vindo à segunda semana (4 aulas) do curso de Banco de Dados. Se na semana anterior preparamos as ferramentas, agora vamos aprender a usá-las para "desenhar" a solução. Na engenharia de software, antes de qualquer linha de código, criamos a Planta Baixa — o Modelo Entidade-Relacionamento (MER). 🛡️🧩


🎯 Objetivos de Aprendizagem do Laboratório

Ao final deste laboratório prático (estimativa: 4 horas presenciais / autoguiadas), você será capaz de:

  • Extrair Regras de Negócio de um briefing técnico.
  • Identificar e classificar Entidades, Atributos e Relacionamentos.
  • Definir Cardinalidades (1:1, 1:N, N:M) com precisão cirúrgica.
  • Construir diagramas profissionais no draw.io seguindo a notação de Peter Chen ou Crow's Foot.

🏢 O Cenário Prático (Seu Desafio)

A TecProExpress, uma gigante do e-commerce, precisa de um novo módulo para gerenciar suas Entregas de Última Milha. O Gerente de Operações descreveu a necessidade:

"Preciso cadastrar nossos Entregadores (nome, CPF, veículo). Cada entregador realiza diversas Entregas. Cada entrega pertence a um único Pedido (número do pedido, data, valor). Um pedido pode conter vários Produtos, e um mesmo produto pode estar em vários pedidos diferentes. Além disso, cada entrega é enviada para um Cliente (nome, endereço, CEP)."

Seu desafio como Arquiteto de Dados é transformar esse texto em um modelo que o banco de dados consiga entender.


🧠 Fundamentos: A Teoria Traduzida

Modelagem é a arte de ignorar o que não importa e focar no que é essencial.

1. Entidades (Os Substantivos)

São os objetos do mundo real sobre os quais queremos armazenar informações. Se você pode dar um nome e ele tem propriedades, é uma entidade.

  • Ex: CLIENTE, PRODUTO, VEÍCULO.

2. Atributos (Os Adjetivos)

São as características das entidades. Todo objeto tem detalhes que o definem.

  • Ex: O Cliente tem NOME, o Produto tem PREÇO.

3. Relacionamentos (Os Verbos)

É como as entidades interagem entre si.

  • Ex: Um Cliente FAZ um Pedido. Um Entregador CONDUZ um Veículo.

📊 Visualizando a Hierarquia de Abstração

flowchart TD
    A[Mundo Real] -->|Abstração| B[Modelo Conceitual - MER]
    B -->|Mapeamento| C[Modelo Lógico]
    C -->|Implementação| D[Modelo Físico - SQL]
    style B fill:#e3f2fd,stroke:#1e88e5,stroke-width:2px

📖 Exemplo Guiado: Analisando Cardinalidade

A cardinalidade define o "ritmo" do negócio. Vamos analisar o relacionamento entre PEDIDO e PRODUTO:

Regra de NegócioCardinalidadeNotação (Crow's Foot)
Um Pedido pode ter muitos produtos1:N`
Um Produto pode estar em muitos pedidos1:N`
Resultado FinalN:M (Muitos para Muitos)Necessita de tabela associativa no futuro

🛠️ Prática Obrigatória 1: O Mini-Mundo Logístico

Cenário: Identificação de componentes do cenário TecProExpress.

  1. Liste as Entidades: Identifique pelo menos 4 entidades no texto do desafio.
  2. Atributos: Para cada entidade, liste 3 atributos essenciais, marcando qual seria o Identificador Único (PK).
  3. Relacionamentos: Descreva em texto os relacionamentos (Ex: Cliente Realiza Pedido).

🏁 Resultado Esperado (Para sua Referência)

Suas entidades principais devem ser: CLIENTE, PEDIDO, PRODUTO, ENTREGADOR.

🔍 Detalhamento das Regras:

  • CLIENTE: Pessoa física ou jurídica que gera a demanda (O "Quem").
  • PEDIDO: Documento que formaliza a transação (O "O que" e "Quando").
  • ENTREGADOR: O agente que executa o serviço de Last Mile.


💻 Validador de Cardinalidades do MER em Python

Para auditar se as relações conceituais ($1:1$, $1:N$, $N:M$) respeitam as regras da TecProExpress:

# validador_mer.py
entidades_mer = {
    "CLIENTE": {"pk": "id_cliente", "cardinalidade": "1:N com PEDIDO"},
    "PEDIDO": {"pk": "id_pedido", "cardinalidade": "N:1 com CLIENTE e N:M com PRODUTO"},
    "PRODUTO": {"pk": "sku_produto", "cardinalidade": "N:M com PEDIDO"},
    "ENTREGADOR": {"pk": "cpf_entregador", "cardinalidade": "1:N com ENTREGA"}
}

print("=" * 65)
print("🗺️ AUDITORIA DE MODELO ENTIDADE-RELACIONAMENTO (MER) - TECPRO")
print("=" * 65)

for ent, meta in entidades_mer.items():
    print(f"📦 Entidade: {ent:<12} | PK: {meta['pk']:<15} | Relação: {meta['cardinalidade']}")

print("-" * 65)
print("✅ Validação: Todas as entidades possuem Chave Primária atômica.")
print("=" * 65)

🖥️ Saída Esperada no Terminal:

=================================================================
🗺️ AUDITORIA DE MODELO ENTIDADE-RELACIONAMENTO (MER) - TECPRO
=================================================================
📦 Entidade: CLIENTE      | PK: id_cliente      | Relação: 1:N com PEDIDO
📦 Entidade: PEDIDO       | PK: id_pedido       | Relação: N:1 com CLIENTE e N:M com PRODUTO
📦 Entidade: PRODUTO      | PK: sku_produto     | Relação: N:M com PEDIDO
📦 Entidade: ENTREGADOR   | PK: cpf_entregador  | Relação: 1:N com ENTREGA
-----------------------------------------------------------------
✅ Validação: Todas as entidades possuem Chave Primária atômica.
=================================================================

🌐 Exemplo de Payload JSON para Catálogo de Entidades (Swagger /docs)

{
  "entidade": "PEDIDO",
  "atributos": [
    {"nome": "id_pedido", "tipo": "INTEGER", "pk": true},
    {"nome": "data_emissao", "tipo": "DATETIME", "pk": false},
    {"nome": "valor_total", "tipo": "DECIMAL(10,2)", "pk": false}
  ],
  "relacionamentos": [
    {"alvo": "CLIENTE", "tipo": "N:1", "fk": "cliente_id"},
    {"alvo": "PRODUTO", "tipo": "N:M", "tabela_associativa": "item_pedido"}
  ]
}

🛠️ Prática Obrigatória 2: Modelagem no draw.io

Cenário: Transformação da análise em diagrama visual de banco de dados.

🧭 Mini-Guia do draw.io:

  1. Acesse o site draw.io.
  2. No menu esquerdo inferior, clique em Mais Formas (More Shapes).
  3. Marque a caixa Relação de Entidades (Entity Relation) e clique em aplicar.
  4. Utilize o componente retangular com três divisões para desenhar a Entidade (Nome) e seus Atributos (com PK marcada).
  5. Para desenhar os relacionamentos com cardinalidade pé de galinha, use as setas do grupo "Relação de Entidades" (ex: as conexões de 1 para N possuem a barra vertical | de um lado e as três ramificações < do outro).
  6. Exportação: Salve o arquivo fonte como .drawio e exporte a imagem final em formato .png (lembre-se de marcar a opção de embutir os metadados do diagrama na imagem).

📤 Instruções de Entrega (Microsoft Teams)

Após validar a estrutura visual do seu diagrama conceitual:

  1. Certifique-se de que todas as entidades e cardinalidades (Crow's Foot) estão legíveis.
  2. Salve o arquivo fonte do diagrama com a extensão .drawio.
  3. Exporte a imagem em alta resolução no formato .png.
  4. Envie ambos os arquivos (Atividade_02_SeuNome.drawio e Atividade_02_SeuNome.png) na tarefa correspondente no Microsoft Teams. (Nesta etapa, não há arquivos de código .sql a serem entregues).

💡 Checkpoint de Lógica

Importante

A Importância da Chave Primária: Por que não usamos o NOME de um cliente como identificador único? Na indústria, nomes se repetem (homônimos). Um erro na modelagem da PK (Primary Key) pode causar a mistura de dados de clientes diferentes. Sempre escolha atributos imutáveis e únicos, como CPF, Código de Barra ou IDs auto-incrementais. 🧠🛡️

---

🔥 Desafio de Fixação (Opcional)

Nível: Arquiteto 🏆

Adicione ao modelo a entidade OCORRÊNCIA (Ex: "Endereço não encontrado", "Cliente ausente"). Uma Entrega pode ter várias ocorrências ao longo do tempo. Como isso altera o seu diagrama?


🔑 Gabarito de Código/Fórmulas

Prática 1 (Sugestão de Análise):

  • Entidades: CLIENTE, PEDIDO, PRODUTO, ENTREGADOR.
  • PKs sugeridas: CPF_Cliente, ID_Pedido, SKU_Produto, CPF_Entregador.

Prática 2 (Lógica do Diagrama):

CLIENTE (1) ---- <Realiza> ---- (N) PEDIDO
PEDIDO (N) ---- <Contém> ---- (M) PRODUTO
ENTREGADOR (1) ---- <Efetua> ---- (N) ENTREGA
ENTREGA (1) ---- <Refere-se> ---- (1) PEDIDO

Modelo Entidade-Relacionamento TecProExpress (DER/ERD)


📊 Rubrica Formativa de Avaliação

Critério de Avaliação Insuficiente (0% - 40%) Regular (41% - 70%) Excelente (71% - 100%)
Modelagem Conceitual (DER) Omite entidades principais ou confunde atributos com entidades. Cria as entidades mas com cardinalidades erradas. Mapeia todas as entidades do negócio com cardinalidades Crow's Foot perfeitas.
Identificação de Chaves Primárias Utiliza atributos repetíveis/inseguros (como nomes) para PKs. Mapeia PKs em apenas metade das entidades. Define PKs imutáveis e únicas para todas as entidades do modelo.
Entrega dos Arquivos (.drawio e .png) Entrega apenas a imagem sem o arquivo editável `.drawio`. Entrega os arquivos mas com imagem em baixa resolução. Submete `Atividade_02_SeuNome.drawio` e `.png` em alta definição.