Skip to content

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 

Repository files navigation

Sistema de Loja Online — SQL/PostgreSQL

Projeto de banco de dados relacional desenvolvido em PostgreSQL para simular o funcionamento básico de uma loja online.
O objetivo é aplicar conceitos de modelagem de dados, criação de tabelas, relacionamentos, inserção de dados fictícios, consultas SQL, análises comerciais e criação de views.


Objetivo do projeto

Este projeto tem como finalidade representar a estrutura de um sistema de e-commerce, permitindo o gerenciamento de:

  • clientes;
  • endereços;
  • categorias de produtos;
  • produtos;
  • pedidos;
  • itens dos pedidos;
  • pagamentos;
  • entregas.

Além da criação do banco, o projeto também inclui consultas para análise de vendas, acompanhamento de pedidos, controle de estoque e geração de relatórios.


Tecnologias utilizadas

  • PostgreSQL
  • pgAdmin 4
  • SQL

Estrutura do projeto

loja-online-sql/
│
├── scripts/
│   ├── 01_criacao_tabelas.sql
│   ├── 02_insercao_dados.sql
│   ├── 03_consultas_basicas.sql
│   ├── 04_consultas_com_join.sql
│   ├── 05_consultas_analiticas.sql
│   └── 06_views.sql
│
├── docs/
│   └── modelo_relacional.png
│
└── README.md

Descrição dos arquivos

Arquivo Descrição
01_criacao_tabelas.sql Criação das tabelas, chaves primárias, chaves estrangeiras e restrições
02_insercao_dados.sql Inserção de dados fictícios para testes
03_consultas_basicas.sql Consultas simples com SELECT, WHERE, ORDER BY, BETWEEN, IN, ILIKE, COUNT e LIMIT
04_consultas_com_join.sql Consultas com JOIN, LEFT JOIN, relacionamentos entre tabelas e cálculos de subtotal
05_consultas_analiticas.sql Consultas analíticas com faturamento, ticket médio, produtos mais vendidos e clientes que mais gastaram
06_views.sql Criação de views para relatórios e consultas reutilizáveis

Modelo do banco de dados

O banco foi modelado com as seguintes entidades principais:

Tabela Função
clientes Armazena os clientes cadastrados
enderecos Armazena os endereços dos clientes
categorias Armazena as categorias dos produtos
produtos Armazena os produtos vendidos pela loja
pedidos Registra os pedidos realizados pelos clientes
itens_pedido Registra os produtos presentes em cada pedido
pagamentos Armazena as informações de pagamento dos pedidos
entregas Armazena as informações de entrega dos pedidos

Relacionamentos principais

O projeto utiliza relacionamentos do tipo um-para-muitos, um-para-um e muitos-para-muitos.

Principais relacionamentos:

  • um cliente pode ter vários endereços;
  • um cliente pode realizar vários pedidos;
  • uma categoria pode possuir vários produtos;
  • um pedido pode conter vários itens;
  • um produto pode aparecer em vários pedidos;
  • um pedido possui um pagamento;
  • um pedido possui uma entrega;
  • um endereço pode ser usado em várias entregas.

O relacionamento muitos-para-muitos entre pedidos e produtos é resolvido pela tabela intermediária itens_pedido.

clientes 1 --- N enderecos
clientes 1 --- N pedidos
categorias 1 --- N produtos
pedidos 1 --- N itens_pedido
produtos 1 --- N itens_pedido
pedidos 1 --- 1 pagamentos
pedidos 1 --- 1 entregas
enderecos 1 --- N entregas

Como executar o projeto

1. Criar o banco de dados

No PostgreSQL, crie um banco de dados com o nome:

CREATE DATABASE loja_online_db;

Depois, selecione esse banco no pgAdmin 4.


2. Executar os scripts na ordem correta

Execute os arquivos da pasta scripts/ na seguinte ordem:

1. 01_criacao_tabelas.sql
2. 02_insercao_dados.sql
3. 03_consultas_basicas.sql
4. 04_consultas_com_join.sql
5. 05_consultas_analiticas.sql
6. 06_views.sql

Os dois primeiros scripts criam e populam o banco.
Os demais contêm consultas e views para análise dos dados.


Principais conceitos aplicados

Durante o desenvolvimento do projeto, foram utilizados conceitos como:

  • criação de tabelas com CREATE TABLE;
  • chaves primárias com PRIMARY KEY;
  • chaves estrangeiras com FOREIGN KEY;
  • restrições com NOT NULL, UNIQUE, CHECK e DEFAULT;
  • inserção de dados com INSERT INTO;
  • consultas com SELECT, WHERE, ORDER BY, BETWEEN, IN e ILIKE;
  • junções com JOIN e LEFT JOIN;
  • agrupamentos com GROUP BY;
  • filtros em grupos com HAVING;
  • funções agregadas como COUNT, SUM, AVG e ROUND;
  • manipulação de datas com DATE_TRUNC e EXTRACT;
  • criação de views com CREATE OR REPLACE VIEW.

Exemplos de consultas

Listar pedidos com o nome do cliente

SELECT 
    p.id_pedido,
    c.nome AS cliente,
    p.data_pedido,
    p.status_pedido
FROM pedidos p
JOIN clientes c 
    ON p.id_cliente = c.id_cliente
ORDER BY p.data_pedido ASC;

Calcular o valor total de cada pedido

SELECT 
    p.id_pedido,
    c.nome AS cliente,
    p.data_pedido,
    p.status_pedido,
    SUM(ip.quantidade * ip.preco_unitario) AS valor_total
FROM pedidos p
JOIN clientes c 
    ON p.id_cliente = c.id_cliente
JOIN itens_pedido ip 
    ON p.id_pedido = ip.id_pedido
GROUP BY 
    p.id_pedido,
    c.nome,
    p.data_pedido,
    p.status_pedido
ORDER BY p.id_pedido ASC;

Identificar produtos mais vendidos

SELECT 
    pr.nome AS produto,
    SUM(ip.quantidade) AS quantidade_vendida
FROM itens_pedido ip
JOIN produtos pr 
    ON ip.id_produto = pr.id_produto
JOIN pedidos p 
    ON ip.id_pedido = p.id_pedido
JOIN pagamentos pg 
    ON p.id_pedido = pg.id_pedido
WHERE pg.status_pagamento = 'Aprovado'
GROUP BY pr.nome
ORDER BY quantidade_vendida DESC;

Calcular faturamento por mês

SELECT 
    DATE_TRUNC('month', data_pagamento) AS mes,
    SUM(valor_pago) AS faturamento_mensal
FROM pagamentos
WHERE status_pagamento = 'Aprovado'
GROUP BY DATE_TRUNC('month', data_pagamento)
ORDER BY mes ASC;

Views criadas

O projeto também possui views para facilitar a reutilização de consultas.

View Descrição
vw_resumo_pedidos Mostra pedidos com cliente, data, status e valor total
vw_produtos_categorias Mostra produtos com suas categorias
vw_pedidos_pagamentos Mostra pedidos com informações de pagamento
vw_acompanhamento_entregas Mostra entregas com rastreio e endereço completo
vw_faturamento_produtos Mostra faturamento e quantidade vendida por produto
vw_faturamento_categorias Mostra faturamento e quantidade vendida por categoria
vw_clientes_mais_gastaram Mostra os clientes com maior gasto total
vw_produtos_estoque_baixo Lista produtos com estoque baixo
vw_faturamento_mensal Mostra o faturamento mensal da loja
vw_formas_pagamento Mostra uso e faturamento por forma de pagamento
vw_tempo_entrega_pedidos Mostra tempo de entrega por pedido
vw_resumo_geral_loja Exibe indicadores gerais da loja

Exemplos de uso das views

SELECT *
FROM vw_resumo_pedidos
ORDER BY id_pedido;
SELECT *
FROM vw_faturamento_produtos
ORDER BY faturamento_total DESC;
SELECT *
FROM vw_clientes_mais_gastaram
ORDER BY total_gasto DESC;
SELECT *
FROM vw_produtos_estoque_baixo
ORDER BY estoque ASC;

Possíveis melhorias futuras

Algumas melhorias que poderiam ser adicionadas em versões futuras:

  • criação de tabela de cupons de desconto;
  • controle de frete;
  • sistema de avaliações de produtos;
  • histórico de alteração de status dos pedidos;
  • controle mais detalhado de estoque;
  • criação de procedures e functions;
  • integração com uma aplicação backend;
  • dashboard com gráficos a partir das consultas analíticas.

Aprendizados

Este projeto permitiu praticar a criação de um banco de dados relacional completo, desde a modelagem das entidades até a criação de consultas analíticas.
Também foi possível aplicar relacionamentos entre tabelas, restrições de integridade, consultas com múltiplos JOINs, agrupamentos, cálculos de faturamento e criação de views para facilitar relatórios.


Autor

Desenvolvido por Pedro Tonon como projeto de estudo e portfólio em SQL/PostgreSQL.

About

Sistema de banco de dados relacional para uma loja online desenvolvido em PostgreSQL, com modelagem, consultas SQL, JOINs, views e análises de dados.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors