🎯 ATIVIDADE 02 — A PLANTA BAIXA DOS DADOS
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ócio | Cardinalidade | Notação (Crow's Foot) |
|---|---|---|
| Um Pedido pode ter muitos produtos | 1:N | ` |
| Um Produto pode estar em muitos pedidos | 1:N | ` |
| Resultado Final | N: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.
- Liste as Entidades: Identifique pelo menos 4 entidades no texto do desafio.
- Atributos: Para cada entidade, liste 3 atributos essenciais, marcando qual seria o Identificador Único (PK).
- 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:
- Acesse o site draw.io.
- No menu esquerdo inferior, clique em Mais Formas (More Shapes).
- Marque a caixa Relação de Entidades (Entity Relation) e clique em aplicar.
- Utilize o componente retangular com três divisões para desenhar a Entidade (Nome) e seus Atributos (com PK marcada).
- 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). - Exportação: Salve o arquivo fonte como
.drawioe 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:
- Certifique-se de que todas as entidades e cardinalidades (Crow's Foot) estão legíveis.
- Salve o arquivo fonte do diagrama com a extensão
.drawio. - Exporte a imagem em alta resolução no formato
.png. - Envie ambos os arquivos (
Atividade_02_SeuNome.drawioeAtividade_02_SeuNome.png) na tarefa correspondente no Microsoft Teams. (Nesta etapa, não há arquivos de código.sqla serem entregues).
💡 Checkpoint de Lógica
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
📊 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. |