Caro amigos,
Estou com uma demanda de implementar um histórico de algumas informações de um sistema de gestão. Não é log de sistema ou de banco são informações do negócio, por exemplo, guardar as mudanças de salário de uma pessoa ao longo do seu vínculo com a empresa. Já tive analisando duas formas de montar um histórico, um do tipo incremental e outro do tipo completo. Quando falo de incremental ou completo me refiro ao objeto armazenado e não como uma forma de backup. Vou explicar melhor.
Incremental -> somente armazeno o que alterou no objeto (com um timestamp). Por exemplo, o objeto funcionario_A tem um salário de R$ 1000,00 e no dia 01/02 seu salário foi alterado para R$ 1500,00. Na forma incremental eu armazeno que o campo (correponde a uma coluna no banco) que foi alterado foi o salário e o novo valor do salário. Ou seja na tabela de histário teria um registro mais ou menos assim.
funcionario_A (id) -> salario -> 1500
Desta forma pouco espaço no banco, visto que o objeto funcionário armazenado no banco pode ter dezenas de atributos (não me venham dizer para normalizar o objeto, já que ele é somente um funcionário, isso é um exemplo), contudo para fornecer o objeto na sua "forma" mais atual vou ter que ir construindo ele, ou seja, pego o original na tabela e todas as alteraçõe no histórico para poder montar o objeto.
Completo -> este acredito ser o mais usado, é somente gravar outro objeto inteiro com um timestamp. Neste caso todos os atributos do objeto alterados ou não estaram armazenados no histórico, sendo assim tenho maior espaço ocupado, contudo a recuperação é imediata, é so pedir o objeto mais recente.
O que vocês acham destas soluções? Alguem tem uma solução padrão, já testada e aprovada?
Abraços a todos.
Marcelo Magalhães - R.J.
