Bom dia, galera!
Venho aqui pedir um auxílio a vocês.
Estamos desenvolvendo um software de gestão (não Java) que usa p/ persistência o banco de dados MySQL. A comunicação toda é feita sob o ODBC.
Na versão anterior do sistema, o controle de estoque dos produtos era feito da seguinte forma: quando ocorria uma saída/entrada, era lançado um registro no extrato do estoque, e o campo Saldo era atualizado no produto.
Entretanto, propus ao patrão que, uma vez tendo em vista que o saldo do produto deve sempre fechar com o saldo do extrato (ou seja, somando todas as entradas e subtraindo as saídas, deve dar o mesmo número) então não há necessidade de armazenar o saldo no cadastro do produto. Simplesmente contabilizando o extrato poderíamos o saldo correto e atualizado sem necessidades adicionais (ficar atualizando o cadastro do produto toda vez que uma NF entra/sai).
Para fazer essa soma, criei uma View. A instrução dela é essa:
SELECT produtos.ID AS IDProduto, estoque_extrato.IDFilial AS Filial, produtos.Descricao AS Produto, SUM(IF(estoque_extrato.Tipo = ‘E’, estoque_extrato.Quantidade, -(estoque_extrato.Quantidade))) AS Saldo FROM estoque_extrato, produtos WHERE produtos.ID = estoque_extrato.IDProduto GROUP BY estoque_extrato.IDFilial, estoque_extrato.IDProduto;
A minha dúvida é a seguinte: o extrato é algo que vai crescer rapidamente, pois cada nota de entrada ou saída da empresa irá criar X entradas no extrato, onde X é o número de produtos das notas.
Há o risco de com o tempo essa view ficar extremamente lenta? Pois imaginem que ela terá de somar todo o extrato para todos os produtos.
O que vocês acham? Vale a pena manter a view (com o risco da queda progressiva de performance com o passar do tempo) ou eu devo mesmo ter o trabalho de atualizar o saldo no cadastro do produto?