Estou desenvolvendo um software de inventário para varejistas de telefones celulares. Há várias coisas que me confundem.
Pronto, temos:
- produtos
- Atributos do produto
- código de barras
- Estoque em lote (compras/devoluções, etc)
- Lote de falta de estoque (amostras/vendas, etc.)
- Lote de Transferência de Estoque (Transferir estoque do armazém A para B)
Pretendo fazer uma tabela de transações para entrada/saída/transferência de estoque. Portanto, minha tabela de produtos e atributos e código de barras não deve ter um campo de quantidade, certo?
Abaixo estão minhas regras de negócios
1 product, 0 or many attributes;
1 attributes, 1 to many product
1 product, 0 to many barcode;
1 barcode, 1 product
1 attributes, 0 to many barcode;
1 barcode, 1 attributes
1 barcode, 0 to many quantity
Quantas tabelas devo criar para isso?
O design da minha mesa é assim:
- warehouse (warehouse id[pk])
- product (product id[pk])
- attributes (attribute id[pk])
- product attributes (product id[pfk], attribute id[pfk])
- barcode (barcode id[pk])
- stock in batch (sib_id[pk], warehouse id[fk])
- stock in batch item (item_id[pk], sib_id[fk], product id[fk], qty, unit cost)
- stock in batch item attributes (item_id[pfk], attribute id[pfk])
- stock in batch item barcode (item_id[pfk], barcode id[pfk])
- stock out batch (sob_id[pk], warehouse id[fk])
- stock out batch item (item_id[pk], sob_id[fk], product id[fk], qty, unit cost)
- stock out batch item attributes (item_id[pfk], attribute id[pfk])
- stock out batch item barcode (item_id[pfk], barcode id[pfk])
- stock transfer batch (stb_id[pk], from warehouse id[fk], to warehouse id[fk])
- stock transfer batch item (item_id[pk], stb_id[fk], product id[fk], qty, unit cost)
- stock transfer batch item attributes (item_id[pfk], attribute id[pfk])
- stock transfer batch item barcode (item_id[pfk], barcode id[pfk])
Devo ter o campo qty? Onde devo colocar a quantidade?
Estou pensando em usar sum() na transação de entrada e saída de estoque menos () para obter a quantidade do produto, mas depois de pensar, estou ficando muito complicado e preso aqui.
Também estou pensando em usar o campo qty, para cada transação ele ajustará automaticamente o campo qty, mas temo que o qty final não coincida com o cálculo da transação.
Por favor informar.
Sua ideia de soma funciona até certo ponto e, em seguida, você terminará com uma transação lenta sempre que adicionar ou remover itens do estoque devido a problemas de escalabilidade.
A maneira como fiz isso para um problema semelhante foi manter uma tabela total em execução, o que funcionaria no seu caso.
Eu também tinha uma tabela de auditoria para fins de contabilidade, que tinha valores originais no caso de os contadores ficarem nervosos, mas a opção de execução total é mais escalável.