Interpretar um esquema relacional normalizado com 4 tabelas e seus relacionamentos
Usar IA para converter tabelas SQL em documentos JSON desnormalizados para MongoDB
Escrever filtros MongoDB para responder perguntas analíticas de negócio
Comparar a experiência de consulta entre SQL relacional e filtros NoSQL orientados a documento
clientes, produtos, pedidos e itens_pedido. São 8 clientes, 10 produtos e 12 pedidos com múltiplos itens — um volume propositalmente pequeno para caber no tier gratuito do MongoDB Atlas (M0, limite de 512 MB).
-- ============================================================
-- UrbanCart · Banco de Dados Relacional (PostgreSQL)
-- Gestão de BD e BI · ESPM · Aula 6
-- ============================================================
-- 1. TABELA CLIENTES
CREATE TABLE clientes (
cliente_id SERIAL PRIMARY KEY,
nome VARCHAR(100) NOT NULL,
email VARCHAR(120) UNIQUE NOT NULL,
cidade VARCHAR(60),
plano VARCHAR(20) DEFAULT 'gratuito',
data_cadastro DATE DEFAULT CURRENT_DATE
);
-- 2. TABELA PRODUTOS
CREATE TABLE produtos (
produto_id SERIAL PRIMARY KEY,
nome VARCHAR(120) NOT NULL,
categoria VARCHAR(60),
preco NUMERIC(10,2) NOT NULL,
estoque INT DEFAULT 0,
marca VARCHAR(60)
);
-- 3. TABELA PEDIDOS
CREATE TABLE pedidos (
pedido_id SERIAL PRIMARY KEY,
cliente_id INT REFERENCES clientes(cliente_id),
data_pedido DATE DEFAULT CURRENT_DATE,
status VARCHAR(30) DEFAULT 'pendente',
valor_total NUMERIC(10,2),
canal VARCHAR(20)
);
-- 4. TABELA ITENS_PEDIDO
CREATE TABLE itens_pedido (
item_id SERIAL PRIMARY KEY,
pedido_id INT REFERENCES pedidos(pedido_id),
produto_id INT REFERENCES produtos(produto_id),
quantidade INT NOT NULL,
preco_unit NUMERIC(10,2) NOT NULL
);
-- ==========================================================
-- DADOS SINTÉTICOS
-- ==========================================================
-- CLIENTES (8 registros)
INSERT INTO clientes (nome, email, cidade, plano, data_cadastro) VALUES
('Ana Beatriz Costa', 'ana.costa@email.com', 'São Paulo', 'premium', '2024-01-15'),
('Bruno Ferreira', 'bruno.f@email.com', 'Rio de Janeiro', 'gratuito', '2024-02-20'),
('Carla Mendes', 'carla.m@email.com', 'Belo Horizonte', 'premium', '2024-03-05'),
('Diego Oliveira', 'diego.o@email.com', 'Curitiba', 'gratuito', '2024-03-18'),
('Elisa Rocha', 'elisa.r@email.com', 'São Paulo', 'premium', '2024-04-02'),
('Felipe Santos', 'felipe.s@email.com', 'Recife', 'gratuito', '2024-04-22'),
('Gabriela Lima', 'gabi.lima@email.com', 'Porto Alegre', 'premium', '2024-05-10'),
('Henrique Alves', 'henrique.a@email.com', 'São Paulo', 'gratuito', '2024-06-01');
-- PRODUTOS (10 registros)
INSERT INTO produtos (nome, categoria, preco, estoque, marca) VALUES
('Tênis Streetwear X1', 'calçados', 349.90, 45, 'UrbanStep'),
('Moletom Oversized', 'roupas', 189.90, 80, 'CoolWear'),
('Boné Snapback Classic', 'acessórios', 79.90, 120, 'UrbanCap'),
('Calça Jogger Cargo', 'roupas', 219.90, 60, 'StreetFit'),
('Mochila Tática 30L', 'acessórios', 299.90, 35, 'CargoGear'),
('Camiseta Gráfica Fade', 'roupas', 99.90, 150, 'CoolWear'),
('Óculos Retrô Polarizado','acessórios', 159.90, 50, 'VisionUrban'),
('Shorts Tactel Premium', 'roupas', 129.90, 90, 'StreetFit'),
('Tênis Running Lite', 'calçados', 429.90, 30, 'UrbanStep'),
('Carteira Slim Couro', 'acessórios', 89.90, 200, 'LeatherLab');
-- PEDIDOS (12 registros)
INSERT INTO pedidos (cliente_id, data_pedido, status, valor_total, canal) VALUES
(1, '2025-01-10', 'entregue', 539.80, 'app'),
(1, '2025-03-22', 'entregue', 349.90, 'site'),
(2, '2025-02-05', 'entregue', 189.90, 'app'),
(3, '2025-01-28', 'entregue', 729.70, 'site'),
(3, '2025-04-14', 'em_transito',299.90, 'app'),
(4, '2025-02-19', 'cancelado', 219.90, 'site'),
(5, '2025-03-08', 'entregue', 479.80, 'app'),
(5, '2025-04-30', 'pendente', 159.90, 'site'),
(6, '2025-03-15', 'entregue', 99.90, 'app'),
(7, '2025-04-02', 'entregue', 589.80, 'site'),
(7, '2025-05-01', 'em_transito',429.90, 'app'),
(8, '2025-05-10', 'pendente', 269.80, 'site');
-- ITENS_PEDIDO (20 registros)
INSERT INTO itens_pedido (pedido_id, produto_id, quantidade, preco_unit) VALUES
(1, 1, 1, 349.90), (1, 6, 2, 99.90),
(2, 9, 1, 429.90),
(3, 2, 1, 189.90),
(4, 1, 1, 349.90), (4, 4, 1, 219.90), (4, 3, 2, 79.90),
(5, 5, 1, 299.90),
(6, 4, 1, 219.90),
(7, 1, 1, 349.90), (7, 8, 1, 129.90),
(8, 7, 1, 159.90),
(9, 6, 1, 99.90),
(10, 9, 1, 429.90), (10, 3, 2, 79.90),
(11, 9, 1, 429.90),
(12, 2, 1, 189.90), (12, 8, 1, 129.90);
0.0.0.0/0) durante a atividade.urbancartpedidos_clientes
pedidos_clientes criada no database urbancart.
Converta este esquema SQL do PostgreSQL (tabelas clientes,
pedidos, produtos e itens_pedido) em documentos JSON
desnormalizados para MongoDB. Cada documento deve representar
um PEDIDO completo, incorporando os dados do cliente e
os itens com detalhes do produto em arrays embutidos.
Adapte para inserção via MongoDB Atlas Data Explorer
(JSON estrito: sem comentários, apenas aspas duplas,
sem vírgulas finais, sem BOM).
Cole o DDL completo aqui:
[COLE O SCRIPT SQL DA PÁGINA ANTERIOR]
{
"pedido_id": 1,
"data_pedido": "2025-01-10",
"status": "entregue",
"canal": "app",
"valor_total": 539.80,
"cliente": {
"cliente_id": 1,
"nome": "Ana Beatriz Costa",
"email": "ana.costa@email.com",
"cidade": "São Paulo",
"plano": "premium",
"data_cadastro": "2024-01-15"
},
"itens": [
{
"produto_id": 1,
"nome_produto": "Tênis Streetwear X1",
"categoria": "calçados",
"marca": "UrbanStep",
"quantidade": 1,
"preco_unit": 349.90,
"subtotal": 349.90
},
{
"produto_id": 6,
"nome_produto": "Camiseta Gráfica Fade",
"categoria": "roupas",
"marca": "CoolWear",
"quantidade": 2,
"preco_unit": 99.90,
"subtotal": 199.80
}
]
}
pedidos_clientes → clique em INSERT DOCUMENT → troque para a aba [ ] (array) → cole o array JSON completo → clique em Insert.{ "campo": "valor" } // igual a
{ "campo": { "$gt": 100 } } // maior que
{ "campo": { "$in": ["a", "b"] } } // está em lista
{ "array.subcampo": "valor" } // busca em subdocumento
status."cliente.cidade".$gt (greater than) no campo valor_total."itens.categoria". O MongoDB busca dentro de arrays automaticamente.{ "canal": "app", "status": "entregue" } — o MongoDB trata múltiplos campos como AND implícito."cliente.plano") com operadores de range ($gte e $lte) no valor total.| Tarefa | Entregável | Pontos |
|---|---|---|
| Tarefa 1 — Configuração Atlas | Print do cluster + coleção criada | 2,0 |
| Tarefa 2 — Conversão SQL → JSON | JSON inserido + print + resposta de modelagem | 3,0 |
| Tarefa 3 — Consultas (Q1–Q6) | Filtro + resultado + resposta de negócio por questão | 5,0 |
| Total | 10,0 | |