🎯 ATIVIDADE 10 — ARQUITETO DE ELITE

📖 Fundamentação Teórica

Para realizar este laboratório com sucesso, certifique-se de ter compreendido os conceitos apresentados no:
👉 CAPÍTULO 10: NORMALIZAÇÃO (1FN A 3FN)

Parabéns! Você chegou à décima semana (4 aulas) e ao primeiro grande marco do curso de Banco de Dados. Hoje, você deixará de ser um estudante para se tornar um Arquiteto de Soluções. O desafio final da Fase 1 é consolidar tudo o que aprendemos sobre SQL e NoSQL em um único ecossistema corporativo. 🛡️🏆


🎯 Objetivos de Aprendizagem do Laboratório

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

  • Um Modelo Relacional completo e normalizado (3FN).
  • Um script de Banco de Dados Real com carga de dados (DDL/DML).
  • Relatórios de Business Intelligence usando Joins e Agregações.
  • Uma camada de Persistência NoSQL para dados flexíveis.

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

A TecProExpress vai lançar o serviço "Ultra-Priority", focado em entregas de alto valor (como obras de arte e joias). Este serviço exige:

  1. Segurança Total (Relacional): Cadastro rigoroso de clientes, apólices de seguro e rotas.
  2. Rastreamento Detalhado (NoSQL): Logs de sensores térmicos, fotos da carga e assinaturas digitais que mudam de formato conforme o país.

Seu desafio é entregar a Arquitetura de Dados completa para este novo negócio.


🧠 O Roadmap do Arquiteto

Veja o caminho que seus dados vão percorrer:

flowchart TD
    A[1. Modelagem MER] --> B[2. Mapeamento 3FN]
    B --> C[3. Script SQL DDL]
    C --> D[4. Seed de Dados DML]
    D --> E[5. Relatórios BI]
    E --> F[6. Integração NoSQL]
    
    style A fill:#e3f2fd
    style F fill:#e8f5e9
    style C fill:#fffde7

🛠️ Passo 1: A Fundação Relacional (SQL)

Tarefa: Crie o esquema de banco de dados para o serviço Ultra-Priority.

  1. Modelagem: Desenhe no draw.io as tabelas CLIENTE, SEGURO e ENTREGA_ESPECIAL.
  2. Normalização: Garanta que os dados de seguro não estejam duplicados.
  3. Implementação: Escreva o script CREATE TABLE com todas as PKs e FKs.

🛠️ Passo 2: Inteligência e Auditoria

Tarefa: Gere os relatórios que o board da TecProExpress exigiu.

  1. Join: Liste o nome do cliente, o valor da apólice de seguro e o status da entrega.
  2. Agregação: Calcule o valor total segurado que está em trânsito no momento (SUM).

🛠️ Passo 3: Flexibilidade NoSQL (MongoDB)

Tarefa: Crie uma coleção no MongoDB chamada logs_rastreamento.

  1. Insira documentos JSON que contenham dados variados de sensores (ex: Um log com temperatura, outro com foto_url, outro com biometria_recebedor).
  2. Realize uma busca que traga apenas logs com alerta: true.

🚀 Script de Seed Consolidado (Gabarito de Teste)

-- DDL Rápido
CREATE TABLE cliente (id INT PRIMARY KEY, nome VARCHAR(100));
CREATE TABLE seguro (id INT PRIMARY KEY, valor DECIMAL(15,2), descricao TEXT);
CREATE TABLE entrega_especial (id INT PRIMARY KEY, id_cliente INT, id_seguro INT, FOREIGN KEY (id_cliente) REFERENCES cliente(id), FOREIGN KEY (id_seguro) REFERENCES seguro(id));

-- DML de Carga
INSERT INTO cliente VALUES (1, 'Farmácia Central');
INSERT INTO seguro VALUES (1, 500000.00, 'Cobertura Diamante');
INSERT INTO entrega_especial VALUES (1001, 1, 1);

💻 Execução do Pipeline Poliglota (SQL + NoSQL) no Terminal

Para verificar a persistência poliglota integrada (PostgreSQL + MongoDB):

# integrador_poliglota.py
print("=" * 65)
print("🌐 VALIDAÇÃO POLIGLOTA (RDBMS SEGUROS + NoSQL LOGS) - TECPRO")
print("=" * 65)
print("1. [PostgreSQL] Inserindo Apólice de Seguro R$ 500.000,00 ... [OK]")
print("2. [MongoDB]    Gravando Telemetria JSON na Coleção 'logs' ... [OK]")
print("3. [Relatório]  Cruzando dados em tempo real...")
print("   • Cliente: Farmácia Central | Seguro: R$ 500.000,00 | Temp: 22.5°C")
print("=" * 65)

🖥️ Saída Esperada no Terminal:

=================================================================
🌐 VALIDAÇÃO POLIGLOTA (RDBMS SEGUROS + NoSQL LOGS) - TECPRO
=================================================================
1. [PostgreSQL] Inserindo Apólice de Seguro R$ 500.000,00 ... [OK]
2. [MongoDB]    Gravando Telemetria JSON na Coleção 'logs' ... [OK]
3. [Relatório]  Cruzando dados em tempo real...
   • Cliente: Farmácia Central | Seguro: R$ 500.000,00 | Temp: 22.5°C
=================================================================

🌐 Requisições cURL Poliglotas (Swagger /docs)

🔹 1. Cadastro de Seguro Relacional (PostgreSQL):

curl -X POST "http://127.0.0.1:8000/api/v1/seguros" \
     -H "Content-Type: application/json" \
     -d '{"id": 1, "valor": 500000.0, "descricao": "Cobertura Diamante"}'

🔹 2. Ingestão de Log Dinâmico (MongoDB):

curl -X POST "http://127.0.0.1:8000/api/v1/logs-rastreamento" \
     -H "Content-Type: application/json" \
     -d '{
       "entrega_id": 1001,
       "evento": "Check-in Aeroporto",
       "detalhes": {"temp_externa": 22.5, "umidade": 40}
     }'

📤 Instruções de Entrega (Microsoft Teams)

Parabéns por concluir o Projeto Integrador (Fase 1)! Para realizar a sua entrega com sucesso:

  1. Certifique-se de organizar seu repositório Git pessoal seguindo rigorosamente a estrutura de pastas descrita na página inicial (index.md).
  2. Adicione ao repositório:
    • O diagrama lógico no draw.io (.drawio e .drawio.png).
    • O script SQL completo (.sql) com CREATE DATABASE, criação física (DDL), carga de testes (DML) e os relatórios analíticos solicitados.
    • Os scripts MongoDB de persistência flexível em formato .js ou .json.
  3. Submeta na plataforma do Microsoft Teams:
    • O link público do seu repositório GitHub.
    • Os arquivos consolidados para verificação direta.

💡 Checkpoint de Lógica

Importante

Conselho de Carreira: Um projeto integrador é a sua melhor peça de portfólio. No GitHub, não suba apenas o código; use o README.md para explicar por que você escolheu o SQL para o seguro e o NoSQL para os logs. Isso demonstra visão arquitetural. 🧠🛡️

---

🔥 Desafio de Fixação (Opcional)

Nível: CTO (Chief Technology Officer) 🏆

Tente integrar os dados: No seu relatório final, como você associaria o id_entrega do SQL com o documento_id do MongoDB? (Dica: Pesquise sobre referências cruzadas entre bancos poliglotas).


🔑 Gabarito de Código/Fórmulas Completo

Relatório de Valor Segurado (BI):

SELECT c.nome, SUM(s.valor) AS risco_total
FROM cliente c
JOIN entrega_especial e ON c.id = e.id_cliente
JOIN seguro s ON s.id = e.id_seguro
GROUP BY c.nome;

Inserção NoSQL (Logística):

db.logs_rastreamento.insertOne({
  "entrega_id": 1001,
  "evento": "Check-in Aeroporto",
  "detalhes": { "temp_externa": 22.5, "umidade": 40 },
  "alerta": false
});

🔍 Explicação do Gabarito:

  • JOIN Triplo: Conecta três tabelas para cruzar a pessoa, o serviço e o valor.
  • Objeto Detalhes: No MongoDB, usamos objetos aninhados para guardar dados técnicos que não precisam de colunas fixas no SQL.

📊 Rubrica Formativa de Avaliação

Critério de Avaliação Insuficiente (0% - 40%) Regular (41% - 70%) Excelente (71% - 100%)
Arquitetura de Dados Poliglota (SQL + NoSQL) Tenta resolver todo o problema com apenas um tipo de banco sem justificativa. Utiliza SQL e NoSQL mas sem justificativa arquitetural clara no `README.md`. Arquitetura Poliglota madura usando SQL para transações financeiras/seguro e NoSQL para rastreamento/logs técnicos.
Integração & Referências Cruzadas Sem integração ou identificadores correlacionados entre os bancos. Correlaciona os dados mas com inconsistência nos tipos de dados das chaves. Estratégia perfeita de amarração cruzada (`entrega_id` / `id_cliente`) integrando relatórios SQL com documentos MongoDB.
Portfólio & Entrega no GitHub Entrega com arquivos avulsos sem documentação. Entrega os scripts SQL e NoSQL mas com `README.md` incompleto. Repositório público no GitHub no formato de portfólio profissional com `README.md` explicativo e scripts validados.