Ir ao conteúdo
  • Cadastre-se

Devo fazer uma tabela pra cada venda? Ou uma so com campos repetidos


redhorse

Posts recomendados

Galera minha duvida é como registar os detalhes de cada venda com varios produtos diferentes:

Eu sei que esta errado, mas eu imaginei duas situações

1- A cada venda seria atribuída a ela um ID e seria gravado na tabela vendas, dessa maneira se a venda tivesse 10 itens, seriam inseridas 10 novas linhas na tabela, cada linha com o produto, vendedor, data etc... Todas com o mesmo ID aquele atribuído a venda

Para recuperar a venda usaria "...where id_venda = 8". O total conseguiria com sum()

O problema é que as colunas vendedor, data ficariam repetidos.

Outra situação

2- Pra cada venda simplesmente criaria uma tabela ^_^

Mas acho que isso não seria legal

bom parece que tem que ter uma tabela de "iten_venda" isso seria só pra um tipo de produto? E se eu quisesse guardar vários produtos iguais uma nota fiscal?

Link para o comentário
Compartilhar em outros sites

  • Moderador

Em partes você está certo.

criar uma tabela para cada venda é inviável.

é obrigatorio ter uma tabela "itens_vendas" pois ela é a tabela que interage com outras duas... ou seja ela é a ligação de um relacionamento N:N entre duas tabelas.

Então seguindo essa lógica, a tabela itens_vendas recebe a ID do produto, a quantidade do item comprada e o total.

para cada venda será um registro diferente... obviamente repetindo os campos... logo se o vendedor tiver feito uma venda de 5 itens diferentes e cada item uma quantidade X .. cada item será um registro novo na tabela itens vendas.

em pratica você veria assim na tabela:


ID id_produto quant total
1 1 5 50.00
2 1 2 20.00
3 1 1 10.00

e na tabela vendas você registra a venda em si:


ID id_venda dataVenda vendedor
1 1 2012-11-26 1
2 2 2012-11-26 1
3 3 2012-11-26 1

Perceba que a tabela itens vendas recebe cada item, sua quantidade comprada e o total... e a tabela vendas recebe a id da venda, a data e o ID do vendedor..

para recuperar os valores da tabela... é só fazer sua consulta sql não se se esquecendo de usar o inner join ..

Link para o comentário
Compartilhar em outros sites

Ainda não entendi a tabela de "iten_venda" isso seria só pra um tipo de produto? E se eu quisesse guardar vários tipos diferentes iguais uma nota fiscal?

pois no exemplo que o dif deu a venda teria so um tipo de produto id_produto=1 ?

Como ficaria se na venda tivesse por exemplo:


produto quantidade total
pincel 4 10.00
tinta 3 50.00
lixa 5 6.00

Como armazenar tudo isso em uma linha só?

como ficaria no iten_venda onde o id=1 tivesse mais produto com ids diferentes de 1


ID id_produto quant total
1 1 5 50.00
2 1 2 20.00
3 1 1 10.00

Link para o comentário
Compartilhar em outros sites

  • Moderador

Bem como ainda não entendeu vou tentar ser um pouco mais claro.

Uma tabela N:N age como um intermediador entre duas tabelas. isto quer dizer que nesta tabela só serão armazenados valores.. ou seja, ID's do produto, qtd comprada e o valor total.

cada registro dentro dessa tabela é um produto, ou seja, no seu exemplo o pincel, tinta e lixa ficarão 1 em cada linha de registro.

Depois para agrupar para um relatório de nota fiscal é preciso inserir numa tabela de vendas todas as informações da venda.

Então isto quer dizer que cada linha do registro na tabela vendas será uma venda e dentro desta venda poderá ter mais de um item, portanto, seria um relacionamento de 1:N.

sabendo isso agora é um pouco mais fácil entender a finalidade do itens vendas, serve só para receber os itens comprados... como não é possível( ou não sei fazer) armazenar vários itens em uma linha .. então precisa que cada produto comprado seja um registro.

Na tabela vendas, você recebe o ID destes itens comprados, juntamente com o ID de quem vendeu, quando vendeu, e quem comprou.

No fim, é na tabela vendas que você fará a consulta para uma nota fiscal.

Link para o comentário
Compartilhar em outros sites

Olá, para simplificar o que o DIF lhe sugeriu, vou dar um exemplo simples. (ele já falou tudo isso, desculpe se já tiver entendido e eu estiver apenas no ctrl+v)

Vou fazer uma Venda para um cliente, só que posso vender vários itens de uma vez, ou seja, só emitirei UMA nota,

daí vem o relacionamento 1 para N

Por isso crio a tabela VENDAS

e a tabela ITENS DA VENDA

VENDAS = TAB_VENDA

ITENS DA VENDA = TAB_ITEM_VE

TAB_VENDA

CODIGO DA VENDA   CLIENTE     DATA DA VENDA
1 1 27/11/2012

TAB_ITEM_VE

CODIGO DA VENDA      CODIGO DO PRODUTO VENDIDO     QUANTIDADE     VALOR UNITÁRIO
1 10 1 R$ 5,00
1 50 2 R$ 3,30
1 48 3 R$ 2.25
1 15 1 R$ 1,99

Veja que o campo que liga os registros da tabela TAB_ITEM_VE com o registro da tabela TAB_VENDA, é o campo CODIGO DA VENDA

Cada venda feita, terá um CODIGO DA VENDA, e cada venda, poderá ter vários itens.

Link para o comentário
Compartilhar em outros sites

Acho que entrendi,

mas então quer dizer que a tebela itens_venda nao vai ter chave primária e essa tabela vai ser gigante depois de um tempo, afinal cada venda poderá inserir uma ou varias linhas nela né.

E a cada venda sera feito 2 querys de insert, uma na venda e outra na iten_venda, e depois recupera com join

bom, vou por em pratica aqui, acho que nao vai dar zebra :D

valeu galera obrigadoo

Link para o comentário
Compartilhar em outros sites

  • Moderador
as então quer dizer que a tebela itens_venda nao vai ter chave primária

Não, ela vai ter sim, a propria ID dos registros desta tabela serão a chave primária até porque ela é auto increment.

E sim, basicamente você fará duas querys.. exatamente isto.

uma sugestão que posso te dar é usar tabelas espelhos ou VIEWS .. de uma pesquisada no google sobre isto .. e aqui mesmo no fórum já ajudei com a criação de views é só procurar :D

elas são ótimas para fazer consulta em tabelas onde precisa escrever muitos campos.. a view simplifica a consulta!

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...