Olá, Gabriel. Tudo bom?
Então, seu banco de dados é (me corrija se eu estiver errado):
Tabela_VENDAS
Id,
Data,
Total
Tabela_PRODUTOS
(colunas não mencionadas)
Tabela_ITEMS
Id,
FK_PRODUTO, <~~ (estrangeira p/ Tabela_PRODUTOS)
FK_VENDA, <~~ (estrangeira p/ Tabela_VENDAS)
Quantidade,
SubTotal,
PrecoUnitario
Alguns comentários sobre a modelagem do banco:
- A
Tabela_ITEMS
possui uma coluna chamada PrecoUnitario
. Será que esta coluna não deveria fazer parte de Tabela_PRODUTOS
? - A
Tabela_ITEMS
possui a coluna SubTotal
. Mas, este valor é calculado à partir do preço unitário. Eu sugiro que você remova esta coluna da sua tabela e deixe o trabalho de cálculo para sua aplicação. - A
Tabela_VENDAS
possui uma coluna Total
. Este valor poderia ser calculado pela aplicação no momento de exibição também.
Essas alterações no modelo fazem sentido quando pensamos na situação em que o preço de um produto muda. Nesta mudança, no modelo atual, deveremos atualizar várias outras tabelas: a tabela de items (coluna SubTotal) e a tabela de Vendas (coluna Total).
Gostaria de comentar também sobre a coluna Data
da Tabela_VENDAS
. Este nome pode ganhar muitos significados: data de criação VS. data de finalização VS. data de pagamento, etc.
Uma mudança no modelo pode trazer a estrutura a seguir:
Tabela_VENDAS
Id,
DataCriacao,
DataFinalizacao
Tabela_PRODUTOS
Id,
Nome,
Descricao,
Valor
Tabela_ITEMS
Id,
FK_PRODUTO, <~~ (estrangeira p/ Tabela_PRODUTOS)
FK_VENDA, <~~ (estrangeira p/ Tabela_VENDAS)
Quantidade
Agora, com relação a tela, você tem uma infinidade de escolhas para popular estas tabelas! Pelo que entendi, você está em uma aplicação Desktop. Certo? Você pode criar um formulário para criação de venda com a usabilidade:
- 1.) Usuário adiciona um produto (pode ser por meio de um ComboBox ou um botão que abre outra grid para ele selecionar o produto);
- 2.) No produto adicionado, o usuário pode mudar a quantidade de produtos;
- 3.) Usuário pode adicionar mais produtos e ter uma quantidade diferente;
- 4.) Usuário clica em OK e você tem sua venda criada.
Neste formulário, a coluna SubTotal (o total de cada Qtd. X Produto.Preco
) é calculada dinamicamente. No formulário das vendas, a coluna Total também é calculada dinamicamente (soma do SubTotal de todas as vendas).
Então, pra finalizar, vamos supor o exemplo de uma loja de peças de computador.
- Teremos os produtos HD de 500gb e o processador Intel Core I7;
- Uma pessoa comprou 2 hds enquanto;
- Outra pessoa comprou 1 hd e 1 processador.
Seu banco de dados ficará desta forma:
Tabela_PRODUTOS:
+----+-------------+------------------------+---------+
| Id | Nome | Descricao | Valor |
+----+-------------+------------------------+---------+
| 01 | HD | HD de 500GB | 200.00 |
| 02 | Processador | Intel Core I7, 3.2ghz | 1400.00 |
+----+-------------+------------------------+---------+
Tabela_VENDAS:
+----+-------------+
| Id | DataCriacao |
+----+-------------+
| 01 | 13/06/2018 |
| 02 | 13/06/2018 |
+----+-------------+
Tabela_ITEMS:
+----+------------+----------+------------+
| Id | FK_PRODUTO | FK_VENDA | Quantidade |
+----+------------+----------+------------+
| 01 | 1 | 1 | 2 | < ~~ Produto 1 (hd), da Venda 1 e qtd. 2
| 02 | 1 | 2 | 1 | < ~~ Produto 1 (hd), da Venda 2 e qtd. 1
| 03 | 2 | 2 | 1 | < ~~ Produto 2 (processador), da Venda 2 e qtd. 1
+----+------------+----------+------------+
O que você acha? Deu uma clarificada?
Abs e bons estudos.