image

Acesso vitalício ao Atalho Secreto + bootcamps ilimitados

86
%OFF
Article image
Custódio Junior
Custódio Junior10/02/2026 12:41
Share
Microsoft Azure Cloud Native 2026Recommended for youMicrosoft Azure Cloud Native 2026

Desafio - BD Estruturado para Ecommerce

    Projeto Prático: Banco de Dados para E-commerce

    Crie esse projeto baseado no desafio do banco de dados voltado para um cenário de e-commerce. O objetivo foi aplicar conceitos de modelagem lógica, relacionamento EER e SQL avançado em um projeto realista, incluindo persistência de dados e consultas complexas.

    1️⃣ Contexto do Projeto

    Nesse projeto, resolvi me desafiar um pouco mais e ficou com a seguinte estrutura:

    • Clientes PF e PJ (uma conta não pode ser as duas ao mesmo tempo)
    • Pedidos com múltiplos pagamentos
    • Entregas com status e código de rastreio
    • Produtos, fornecedores e estoque
    • Relacionamentos complexos entre entidades

    O projeto foi desenvolvido em SQL, com scripts de criação do banco, inserção de dados e consultas para análise.

    2️⃣ Diagrama EER (Modelo Lógico)

    Abaixo, um diagrama minimalista e didático mostrando as principais tabelas e seus relacionamentos:

    O diagrama destaca:

    • PF/PJ como especializações da tabela Cliente
    • Múltiplos pagamentos por pedido
    • Relacionamentos N:N entre Produto e Fornecedor
    • Integração com Estoque e Entregas

    image

    3️⃣ Criação do Banco (DDL)

    CREATE DATABASE ecommerce;
    USE ecommerce;
    
    
    CREATE TABLE cliente (
      id_cliente INT AUTO_INCREMENT PRIMARY KEY,
      nome VARCHAR(100) NOT NULL,
      email VARCHAR(100) UNIQUE NOT NULL
    );
    
    
    CREATE TABLE cliente_pf (
      id_cliente INT PRIMARY KEY,
      cpf CHAR(11) UNIQUE NOT NULL,
      FOREIGN KEY (id_cliente) REFERENCES cliente(id_cliente)
    );
    
    
    CREATE TABLE cliente_pj (
      id_cliente INT PRIMARY KEY,
      cnpj CHAR(14) UNIQUE NOT NULL,
      FOREIGN KEY (id_cliente) REFERENCES cliente(id_cliente)
    );
    
    
    CREATE TABLE pedido (
      id_pedido INT AUTO_INCREMENT PRIMARY KEY,
      id_cliente INT NOT NULL,
      data_pedido DATE NOT NULL,
      status VARCHAR(30),
      FOREIGN KEY (id_cliente) REFERENCES cliente(id_cliente)
    );
    
    
    CREATE TABLE pagamento (
      id_pagamento INT AUTO_INCREMENT PRIMARY KEY,
      id_pedido INT NOT NULL,
      tipo VARCHAR(30),
      valor DECIMAL(10,2),
      FOREIGN KEY (id_pedido) REFERENCES pedido(id_pedido)
    );
    
    
    CREATE TABLE entrega (
      id_entrega INT AUTO_INCREMENT PRIMARY KEY,
      id_pedido INT NOT NULL,
      status VARCHAR(30),
      codigo_rastreio VARCHAR(50),
      FOREIGN KEY (id_pedido) REFERENCES pedido(id_pedido)
    );
    
    
    CREATE TABLE produto (
      id_produto INT AUTO_INCREMENT PRIMARY KEY,
      nome VARCHAR(100),
      preco DECIMAL(10,2)
    );
    
    
    CREATE TABLE fornecedor (
      id_fornecedor INT AUTO_INCREMENT PRIMARY KEY,
      nome VARCHAR(100)
    );
    
    
    CREATE TABLE produto_fornecedor (
      id_produto INT,
      id_fornecedor INT,
      PRIMARY KEY (id_produto, id_fornecedor),
      FOREIGN KEY (id_produto) REFERENCES produto(id_produto),
      FOREIGN KEY (id_fornecedor) REFERENCES fornecedor(id_fornecedor)
    );
    
    
    CREATE TABLE estoque (
      id_produto INT PRIMARY KEY,
      quantidade INT,
      FOREIGN KEY (id_produto) REFERENCES produto(id_produto)
    );
    
    
    CREATE TABLE vendedor (
      id_vendedor INT AUTO_INCREMENT PRIMARY KEY,
      nome VARCHAR(100)
    );
    

    4️⃣ Inserção de Dados (DML)

    INSERT INTO cliente (nome, email) VALUES
    ('Ana Silva', 'ana@email.com'),
    ('Empresa XPTO', 'contato@xpto.com');
    
    
    INSERT INTO cliente_pf VALUES (1, '12345678901');
    INSERT INTO cliente_pj VALUES (2, '98765432000199');
    
    
    INSERT INTO pedido (id_cliente, data_pedido, status) VALUES
    (1, '2024-01-10', 'Concluído'),
    (1, '2024-01-15', 'Em andamento'),
    (2, '2024-01-20', 'Concluído');
    
    
    INSERT INTO pagamento (id_pedido, tipo, valor) VALUES
    (1, 'Cartão', 200.00),
    (1, 'Pix', 50.00),
    (2, 'Boleto', 300.00);
    
    
    INSERT INTO entrega (id_pedido, status, codigo_rastreio) VALUES
    (1, 'Entregue', 'BR123'),
    (2, 'Em transporte', 'BR456');
    
    
    INSERT INTO produto (nome, preco) VALUES
    ('Notebook', 3500),
    ('Mouse', 150);
    
    
    INSERT INTO fornecedor (nome) VALUES
    ('Fornecedor Tech'),
    ('Fornecedor Acessórios');
    
    
    INSERT INTO produto_fornecedor VALUES
    (1,1),
    (2,2);
    
    
    INSERT INTO estoque VALUES
    (1, 10),
    (2, 50);
    

    5️⃣ Consultas SQL Práticas

    Quantos pedidos cada cliente realizou?

    SELECT c.nome, COUNT(p.id_pedido) AS total_pedidos
    FROM cliente c
    JOIN pedido p ON c.id_cliente = p.id_cliente
    GROUP BY c.nome;
    

    Pedidos com status “Concluído”

    SELECT *
    FROM pedido
    WHERE status = 'Concluído';
    

    Total pago por pedido

    SELECT id_pedido, SUM(valor) AS total_pago
    FROM pagamento
    GROUP BY id_pedido;
    

    Produtos e fornecedores com estoque

    SELECT p.nome AS produto, f.nome AS fornecedor, e.quantidade
    FROM produto p
    JOIN produto_fornecedor pf ON p.id_produto = pf.id_produto
    JOIN fornecedor f ON pf.id_fornecedor = f.id_fornecedor
    JOIN estoque e ON p.id_produto = e.id_produto;
    

    6️⃣ Aprendizado

    Durante este projeto, pratiquei toda a jornada de um banco de dados real:

    • Do mapeamento conceitual ao lógico
    • Criação de scripts SQL completos
    • Desenvolvimento de consultas simples e complexas
    • Compreensão de como uma boa modelagem facilita análises e garante integridade

    É um ótimo exercício para quem está começando e quer colocar a mão na prática.

    Share
    Recommended for you
    Riachuelo - Cibersegurança
    Microsoft Certification Challenge #5 - AZ-204
    Microsoft Certification Challenge #5 - DP 100
    Comments (0)
    Recommended for youMicrosoft Azure Cloud Native 2026