criar pedidos com nome dos produtos ou com codigo dos produtos

Enviada por Marcelo Cajaíba 
Marcelo Cajaíba
criar pedidos com nome dos produtos ou com codigo dos produtos
18 de August de 2010 às 07:58AM
Olá galera nossa estou numa duvida grande.

tenho um sistema de controle de pedidos, só que fico na duvida se insiro o código do produto no pedido ou ou nome, primeiro por que se for o codigo, o gerente nao pode apagar o produto senaõ quando for emitir relatorio nao aparece o nome do produto, agora a vantagem é que já deixa o sistema mais rápido, já eu poderia deixa o nome do produto inserido no pedido junto com o codigo do produto, assim o gerente pode apagar o produto quando quiser , pois quando for emitir relatorios o produto continuará parecendo !

O que me dizem colocando o nome do produto no pedido ao escolher o produto ?
Webster Moitinho
Re: criar pedidos com nome dos produtos ou com codigo dos produtos
18 de August de 2010 às 09:01AM
O ideal é que a tabela de pedidos contenha apenas o código para que fique mais ágil, como você havia dito. O correto seria que o cadastro de produtos fosse conciso. Portanto, ao invés de disponibilizar a deleção do produto para o gerente, experimente adicionar um campo chamado "ativo". Ao invés de apagar o produto, desative-o.

Apenas uma dúvida: Quando você diz "nome do produto no pedido" quer dizer na tabela "pedidos" ou no relatório "pedido"?
Marcelo Cajaíba
Re: criar pedidos com nome dos produtos ou com codigo dos produtos
18 de August de 2010 às 10:07AM
Obrigado Motinho.

mas tipo são mais de 2000 produtos, e se eles nao utilizarem alguns deles mais vc acha que nao seria mais pratico, deixa somente o nome na tabela pedidos para nao deixar , a tabela de produtos cheia de produtos inativos ?

quanto sua duvida é
Na tabela pedidos ficaria o nome pois o relatorio sai puxando os dados da tabela pedidos
Jayme A. C. Gimenez
Re: criar pedidos com nome dos produtos ou com codigo dos produtos
18 de August de 2010 às 01:56PM
O conceito chave de banco de dados, em minha opinião, é o de normalização (vale a pena dar uma boa estudada nele). Mas é um lance bem abstrato; então, vou tentar falar dele na prática, nos itens abaixo. O segundo conceito mais importante (sempre em minha modesta opinião, claro) é o de indexação.

1) 2.000 produtos para um bom banco de dados, como o MySQL, por exemplo, não são nada! Ele tira de letra.

2) Quando você usa um recurso como o que o Motinho sugeriu (um campo a mais na tabela, com 0 e 1 - zero para ativo e 1 para inativo) e INDEXA esse campo, o banco de dados, quando vc, por exemplo, para compor uma combobox, pedir para ele listar somente os ativos, ele simplesmente ignora os inativos e lista, direto, somente os ativos - essa é a vantagem fundamental da indexação: na prática, é como se o banco estivesse tratando de tabelas distintas - a de ativos e a de inativos. Se fôssemos comparar com o mundo real, um campo indexado seria como se você abrisse um armário real para pegar uma pasta que contivesse somente os registros ativos. Vc poderia ignorar completamente a pasta que tem somente os inativos.

3) Quando vc coloca o id (ao invés do nome) na sua tabela pedidos, você está em acordo com o conceito de normalização (o nome do produto só será escrito uma única vez no banco de dados. Todas as operações que envolverem um produto serão feitas utilizando-se o id do produto). E esse id, na tabela produtos, será uma chave primária (uma, digamos, super-indexação :-)). Será muito rápido para o banco buscar essa chave primária sempre que necessário.

4) E quanto ao volume de dados? Imagine só. Se sua tabela produtos tem 2.000 produtos, quantas linhas vai ter a tabela pedidos? Muito, mas muito mais que 2.000 linhas. Se vc escrever de novo o nome do produto em cada pedido, além de estar indo contra o conceito de normalização, vc vai estar criando um volume enorme de dados desnecessariamente (um número ocupa bem menos "espaço" que um nome).

5) E se você ainda quiser fazer brilhantismos :-), vc pode criar um script assim: quando um gerente tentar deletar um produto na tabela produtos, o sistema checa se já existe algum pedido para esse produto. Se existir pelo menos um pedido para esse produto, o sistema simplesmente mantém esse produto mas o transforma em inativo. Caso ainda não exista nenhum pedido para esse produto, então, aí sim, o sistema o deletaria de verdade.
Marcelo Cajaíba
Re: criar pedidos com nome dos produtos ou com codigo dos produtos
18 de August de 2010 às 05:10PM
OLá Jayme eu fiz o exemplo 5 que vc disse mas , nesse sistema por ser pedidos misturados de fornecedores diferentes um pedido tem u produto entendeu não é 1 para N um pedido nao tem como colocar vários produtos é 1 para 1, mas vou seguir seu conseho de indexação. Muito obrigado me ajudou muito
Jayme A. C. Gimenez
Re: criar pedidos com nome dos produtos ou com codigo dos produtos
18 de August de 2010 às 06:29PM
Não entendi qual seria o problema de ser 1 para 1...

A tabela que cadastra os produtos tem 20.000 itens.

Se tudo correr bem, logo sua tabela pedidos vai ter 100.000 linhas!

Um gerente, então, resolve deletar um produto da tabela produtos: seu script procura na tabela pedidos se, algum dia, algum pedido do produto que está prestes a ser deletado já foi feito (ele fará isso rapidamente porque vc indexou o campo pedidos_id_produto!). Se o script achar pelo menos um pedido feito para esse produto, ele vai manter esse produto na tabela produtos, mas vai alterar o status dele (do produto, na tabela produto) para inativo. Caso não encontre nenhum pedido para esse produto, aí sim, vai deletá-lo de fato.
Você precisa estar logado no PHPBrasil.com para poder enviar mensagens para os nossos fóruns.

Faça o login aqui.