🎯 ATIVIDADE 10 — ARQUITETO DE ELITE
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. 🛡️🏆
🎯 Objetivo da Aula
Ao final desta semana, você terá construído:
- 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:
- Segurança Total (Relacional): Cadastro rigoroso de clientes, apólices de seguro e rotas.
- 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.
- Modelagem: Desenhe no draw.io as tabelas
CLIENTE,SEGUROeENTREGA_ESPECIAL. - Normalização: Garanta que os dados de seguro não estejam duplicados.
- Implementação: Escreva o script
CREATE TABLEcom todas as PKs e FKs.
🛠️ Passo 2: Inteligência e Auditoria
Tarefa: Gere os relatórios que o board da TecProExpress exigiu.
- Join: Liste o nome do cliente, o valor da apólice de seguro e o status da entrega.
- 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.
- Insira documentos JSON que contenham dados variados de sensores (ex: Um log com
temperatura, outro comfoto_url, outro combiometria_recebedor). - Realize uma busca que traga apenas logs com
alerta: true.
🚀 Script de Seed Consolidado (Gabarito de Teste)
-- DDL Rápido
CREATE TABLE seguro (id INT PRIMARY KEY, valor DECIMAL(15,2), descricao TEXT);
CREATE TABLE entrega_especial (id INT PRIMARY KEY, id_seguro INT, FOREIGN KEY (id_seguro) REFERENCES seguro(id));
-- DML de Carga
INSERT INTO seguro VALUES (1, 500000.00, 'Cobertura Diamante');
INSERT INTO entrega_especial VALUES (1001, 1);
📤 Instruções de Entrega (Microsoft Teams)
Parabéns por concluir o Projeto Integrador (Fase 1)! Para realizar a sua entrega com sucesso:
- Certifique-se de organizar seu repositório Git pessoal seguindo rigorosamente a estrutura de pastas descrita na página inicial (
index.md). - Adicione ao repositório:
- O diagrama lógico no draw.io (
.drawioe.drawio.png). - O script SQL completo (
.sql) comCREATE 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
.jsou.json.
- O diagrama lógico no draw.io (
- 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
[!IMPORTANT] 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.mdpara 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.