Até aqui o banco só guarda produtos. Nesta atividade você registra vendas, dá baixa no estoque de forma segura e descobre qual produto é o campeão de vendas.

Ficha da atividade

  • Ambiente: Google Colab
  • Tempo estimado: 40 minutos
  • Pré-requisito: Nota 1 concluída (arquivo gestao_produtos.db com 5 produtos)
  • Resultado esperado: tabela Vendas com 6 registros, estoque atualizado e o ranking de vendas por produto
  • Próxima nota: Visualização

Desafio

O que você deve fazer

  1. Crie a tabela Vendas com id_venda, id_produto (chave estrangeira para Produto), quantidade (maior que zero) e data_venda (preenchida automaticamente).
  2. Registre as vendas abaixo e dê baixa no estoque de cada produto vendido.
  3. Descubra o produto mais vendido em unidades.
id_produtoProdutoQuantidade
1Smartphone3
2Notebook2
1Smartphone4
3Sofá1
4Cadeira de Escritório5
5Camisa Polo10

Antes de abrir a solução, pense nestas perguntas:

  • Em qual ordem devem acontecer o registro da venda e a baixa do estoque?
  • O que deve acontecer se faltar estoque para uma venda?
  • Como garantir que a venda e a baixa aconteçam juntas ou não aconteçam?

Solução

Resultado esperado

O produto mais vendido deve ser a Camisa Polo, com 10 unidades e R$ 800,00 de faturamento. O ranking completo:

ProdutoQtd. vendidaFaturamentoEstoque restante
Camisa Polo10R$ 800,0015
Smartphone7R$ 11.200,003
Cadeira de Escritório5R$ 1.750,007
Notebook2R$ 7.000,003
Sofá1R$ 800,002

Por que usar uma transação?

Registrar a venda e baixar o estoque são duas operações que precisam acontecer juntas. Se apenas uma delas fosse gravada, o banco ficaria inconsistente: estoque reduzido sem venda registrada, ou venda registrada sem baixa.

O bloco with conn: garante essa propriedade, chamada de atomicidade: ou as duas operações são confirmadas, ou nenhuma é.

Experimentos

Reabra a conexão (lembre-se do PRAGMA foreign_keys = ON) e teste os cenários abaixo.

Experimento 1: estoque insuficiente

Tente registrar a venda de 100 notebooks: registrar_venda(conn, 2, 100). Depois, consulte o estoque do Notebook e a tabela Vendas. O que mudou?

Experimento 2: excluir produto com vendas

Tente excluir o Smartphone com DELETE FROM Produto WHERE id_produto = 1;. O que acontece?

Análise de dados

Use o df_vendas para responder:

  1. Qual produto gerou o maior faturamento?
  2. Qual categoria vendeu mais unidades?
  3. Qual categoria teve o maior faturamento?

Desafio extra

O faturamento está correto?

A consulta calcula o faturamento com p.preco, o preço atual do produto. O que acontece com o histórico de vendas se o preço do Smartphone mudar amanhã? Como alterar a tabela Vendas para guardar o preço praticado em cada venda?

Checklist de verificação

  • A tabela Vendas tem chave estrangeira para Produto
  • Os 6 registros de venda foram inseridos uma única vez
  • O estoque final é: Smartphone 3, Notebook 3, Sofá 2, Cadeira 7, Camisa Polo 15
  • O produto mais vendido é a Camisa Polo (10 unidades)
  • O experimento de estoque insuficiente não alterou nenhum dado
  • O experimento de exclusão foi recusado pelo banco

Próximo passo

Continue em Visualização para transformar o ranking em gráfico.