Dúvida Lógica - Itens pedidos

11 respostas
marcospaulo.suporte

Fala Galera… bom dia…
Minha duvida é de iniciante, estou com duvida na parte de lógica o inserir itens em um pedido.

Como poderia faze-lo…?
por exemplo, pegar os ‘itens’ de uma tabela e inseri-lo na tabela de pedido? logicamente permanecendo o mesmo numero de pedido?

Vlw

11 Respostas

slashjvc

WHAT!?..

JoaoBluSCBR

O ideal é sempre separa em várias tabelas tudo o que puder.

Uma tabela de pedidos que geralmente tem o
número do pedido
codigo de cliente
data de emissao
e algo mais que seja genérico do pedido.

Outra tabela você vai colecionar os ítens do pedido.
lá vai ter
numero do pedido
codproduto
quantidade
%desconto

Outra tabela você vai colecionar os produtos que terá
codProduto
descricaoProduto
precoProduto

Separando assim você evita de ter muitas linhas com informações duplicadas.
Imagine que você fosse colocar numa única tabela Pedidos, teria de duplicar
muitas informacoes e geraria um banco enorme, veja:

cliente pedido dataEmissao codProduto quantidade %desconto descricao preco
FULANO 45 07/06/2011 34 5 20 CREME DENTAL 3,00
FULANO 45 07/06/2011 27 6 15 DESODORANTE 6,00
FULANO 45 07/06/2011 95 4 12 HIDRATANTE 5,00
CICLANO 46 08/06/2011 27 9 10 DESODORANTE 6,00

Veja como você duplicou em várias linhas o nome do cliente quando ele podia estar só na tabela de Pedidos

O mesmo acontece com a descricao do Produto que poderia estar só uma vez na tabela de produtos

então no que é chamado de Normalização (procure apostilas ) de bancos de dados sempre
se sugere separa em outra tabela tudo que se repete mais de uma vez em uma tabela.
Então se tem uma palavra que aparece mais de uma vez numa tabela, coloque ela numa outra tabela e
use o código, fica bem mais economico.

marcospaulo.suporte

Desculpa a falta de explicação…

Gostaria de fazer um tela de pedido (normal).Onde.:

O usuario selecionaria os itens (ja cadastrado em outra tabela do banco) e adicionaria ao pedido, como se fosse vender normalmente onde ‘um’ cliente pode comprar varios itens.

Porém, ja montei a interface de pedido, gostaria de saber qual seria a melhor lógica pra fazer esse processo? tipo, gostaria de mostrar os itens já inseridos no pedido em um ‘jTable’ antes de gravar o pedido no banco.

marcospaulo.suporte

JoaoBluSCBR:
O ideal é sempre separa em várias tabelas tudo o que puder.

Uma tabela de pedidos que geralmente tem o
número do pedido
codigo de cliente
data de emissao
e algo mais que seja genérico do pedido.

Outra tabela você vai colecionar os ítens do pedido.
lá vai ter
numero do pedido
codproduto
quantidade
%desconto

Outra tabela você vai colecionar os produtos que terá
codProduto
descricaoProduto
precoProduto

Separando assim você evita de ter muitas linhas com informações duplicadas.
Imagine que você fosse colocar numa única tabela Pedidos, teria de duplicar
muitas informacoes e geraria um banco enorme, veja:

cliente pedido dataEmissao codProduto quantidade %desconto descricao preco
FULANO 45 07/06/2011 34 5 20 CREME DENTAL 3,00
FULANO 45 07/06/2011 27 6 15 DESODORANTE 6,00
FULANO 45 07/06/2011 95 4 12 HIDRATANTE 5,00
CICLANO 46 08/06/2011 27 9 10 DESODORANTE 6,00

Veja como você duplicou em várias linhas o nome do cliente quando ele podia estar só na tabela de Pedidos

O mesmo acontece com a descricao do Produto que poderia estar só uma vez na tabela de produtos

então no que é chamado de Normalização (procure apostilas ) de bancos de dados sempre
se sugere separa em outra tabela tudo que se repete mais de uma vez em uma tabela.
Então se tem uma palavra que aparece mais de uma vez numa tabela, coloque ela numa outra tabela e
use o código, fica bem mais economico.

Amigo… ajudou bastante… Mas ainda tenho outra duvida.
No caso … O usuario está digitando o pedido, como seria melhor mostrar pra ele os itens já inseridos no pedido?

douglaskd

você vai precisar de algumas entidades(tabelas) no banco de dados…

para o pedido são as seguintes

um pedido possui varios itens,
um item pode estar em varios pedidos

relação muitos para muitos, nessa condição cria-se uma nova tabela, abaixo a nomeei de itemdepedido

pedido(cod,codCli)

item(cod,nome,valorUn)

itemdepedido(coditem,codpedido,quantidade)
coditem referencia tabela item
codpedido referencia tabela pedido

para inserir um item de pedido, primeiro você deve previamente ter os itens cadastrados na tabela item

depois você criará um novo pedido, perceba que não criei a tabela cliente…mais tudo bem…

esse pedido pode conter outras informações, data etc, coloquei daquela forma para simplificar…

após criar o pedido que irá gerar um cod unico, você irá criar o itemdepedido… após criar o itemdepedido ele fará um select para que as informações sejam mostradas no pedido

você deve criar um select interligando as tabelas para informar os itens no pedido…

ai vai depender das regras de negócio para definir se é isso que você quer…

a questão é que você tem que entender as relações UpU, UpM, MpM,

douglaskd

marcospaulo.suporte:
JoaoBluSCBR:
O ideal é sempre separa em várias tabelas tudo o que puder.

Uma tabela de pedidos que geralmente tem o
número do pedido
codigo de cliente
data de emissao
e algo mais que seja genérico do pedido.

Outra tabela você vai colecionar os ítens do pedido.
lá vai ter
numero do pedido
codproduto
quantidade
%desconto

Outra tabela você vai colecionar os produtos que terá
codProduto
descricaoProduto
precoProduto

Separando assim você evita de ter muitas linhas com informações duplicadas.
Imagine que você fosse colocar numa única tabela Pedidos, teria de duplicar
muitas informacoes e geraria um banco enorme, veja:

cliente pedido dataEmissao codProduto quantidade %desconto descricao preco
FULANO 45 07/06/2011 34 5 20 CREME DENTAL 3,00
FULANO 45 07/06/2011 27 6 15 DESODORANTE 6,00
FULANO 45 07/06/2011 95 4 12 HIDRATANTE 5,00
CICLANO 46 08/06/2011 27 9 10 DESODORANTE 6,00

Veja como você duplicou em várias linhas o nome do cliente quando ele podia estar só na tabela de Pedidos

O mesmo acontece com a descricao do Produto que poderia estar só uma vez na tabela de produtos

então no que é chamado de Normalização (procure apostilas ) de bancos de dados sempre
se sugere separa em outra tabela tudo que se repete mais de uma vez em uma tabela.
Então se tem uma palavra que aparece mais de uma vez numa tabela, coloque ela numa outra tabela e
use o código, fica bem mais economico.

Amigo… ajudou bastante… Mas ainda tenho outra duvida.
No caso … O usuario está digitando o pedido, como seria melhor mostrar pra ele os itens já inseridos no pedido?

de mais informações sobre sua aplicação…é em java, esta usando qual banco, é desktop ou web ?

marcospaulo.suporte

Estou usando Sql Server 2008… programando pra aprender mesmo… usando Java para Desktop

JoaoBluSCBR

Desculpa a falta de explicação…

Gostaria de fazer um tela de pedido (normal).Onde.:

O usuario selecionaria os itens (ja cadastrado em outra tabela do banco) e adicionaria ao pedido, como se fosse vender normalmente onde ‘um’ cliente pode comprar varios itens.

Porém, ja montei a interface de pedido, gostaria de saber qual seria a melhor lógica pra fazer esse processo? tipo, gostaria de mostrar os itens já inseridos no pedido em um ‘jTable’ antes de gravar o pedido no banco.

Bem, por experiência diria que é exatemente isso que você propos:

Uma tela de pedidos em qualquer aplicação geralmente vem encimada por campos genéricos do cliente e pedido
e um table mais abaixo mostrando os ítens daquele pedido

Qual a sua dúvida específica em colocar essa idéia em prática?

JoaoBluSCBR

douglaskd:
você vai precisar de algumas entidades(tabelas) no banco de dados…

para o pedido são as seguintes

um pedido possui varios itens,
um item pode estar em varios pedidos

relação muitos para muitos, nessa condição cria-se uma nova tabela, abaixo a nomeei de itemdepedido

pedido(cod,codCli)

item(cod,nome,valorUn)

itemdepedido(coditem,codpedido,quantidade)
coditem referencia tabela item
codpedido referencia tabela pedido

para inserir um item de pedido, primeiro você deve previamente ter os itens cadastrados na tabela item

depois você criará um novo pedido, perceba que não criei a tabela cliente…mais tudo bem…

esse pedido pode conter outras informações, data etc, coloquei daquela forma para simplificar…

após criar o pedido que irá gerar um cod unico, você irá criar o itemdepedido… após criar o itemdepedido ele fará um select para que as informações sejam mostradas no pedido

você deve criar um select interligando as tabelas para informar os itens no pedido…

ai vai depender das regras de negócio para definir se é isso que você quer…

a questão é que você tem que entender as relações UpU, UpM, MpM,

Douglas

Em que situação você já viu um caso em que um ítem de pedido pode aparecer em muitos pedidos?

Pra mim essa relação é sempre de UM pedido para Muitos ítens. Mas nunca o contrário.

Um ítem de pedido envolve sempre a questão da quantidade, produto e preço.

Mesmo que dois pedidos possam coincidemente tem a mesma relação destes 3 valores em um ítem destes, seria dificil gerenciar essa relação. Creio que é melhor cadastrar um novo ítem mesmo que tenham os mesmos valores.

Claro que se só considerarmos um item como um codigo de produto, tudo bem, aí sim, teremos muitos pedidos com os mesmos produtos.

douglaskd

é que coloquei o nome item, mais na verdade é Produto

você concorda que existe essa relação: Pedido(1,n) ------------ (1,n) Produto, nesse caso o mais apropriado é se criar uma nova entidade

Pedido(1,1)---------------------(0,n)itemdepedido(0,n)------------------(1,1)Produto

-um pedido possui varios itensdepedido
-um itemdepedido esta em apenas um pedido
-um itemdepedido deve ter um produto
-um produto pode estar em varios itemdepedido

douglaskd

não li sua ultima linha mais é isso, um item é um produto

Criado 6 de julho de 2011
Ultima resposta 6 de jul. de 2011
Respostas 11
Participantes 4