Posso dar minha sugestão?
Tabelas:
Material (cadastro de produtos): Id, Descricao
Depositos(Locais de Estocagem):Id, Descricao
LocalXMat (Saldo em estoque de materiais por local) : Id, material_id, Deposito_id, saldo, data_ultimo_movto
EstoqMovto (log das entrdas e saídas: Kardex):
id, material_id, data_movimento, deposito_id, transacao(entrada/saida), quantidade, referencia, saldo_anterior, saldo_atual, id_estorno
Trigger beforeInsert em EstoqMovto:
- Aqui faz todo o processo ao incluir um registro nesta tabela (Só permitido inserção):
- Cria o Deposito para o material caso não exista,
- busca o saldo em LocalxMat,
- atualiza em LocalxMat o saldo conforme o movimento (entrada ou saida),
- se id_estorno <> 0 le o registro em EstoqMovto por esse id, e gera o registro invertendo a transação
Só com essas tabelas é possível desenvolver um controle de estoques, e o único movimento é o insert na tabela EstoqMovto, a trigger faz o resto.