Modelo para histórico de informações

4 respostas
Marcelo_Magalhaes

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.  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,  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,  testada e aprovada?

Abraços a todos.

Marcelo Magalhães - R.J.

4 Respostas

eduardoac

Olá,

Dependendo do caso prefiro o completo. Seria algo parecido com Journal Table no Oracle, ele automaticamente fará isso para você. Depois de uma lida abaixo e veja se já conhece o conceito nesse banco de dados.

http://oracle.ittoolbox.com/documents/creating-oracle-journal-table-18273

Abraços!

kenneth

Fala brow,

Uma duvida… Se eu entendi direito, voce ta pensando em manter uma so tabela com as informacoes
do funcionario. Seria isso?

Aqui no meu trabalho nos temos uma situacao parecida com a sua, um cadastro de funcionarios,
e estes tem sua evolucao nos vencimentos.
Mas controlamos isso em tabelas separadas. Uma tabela com as informacoes dele (nome, e-mail…),
e outra, mais simples, so com o codigo dele, data da alteracao, novo valor e um motivo, por exemplo…

Acredito eu que seja melhor montar as informacoes em tempo de execucao. Evita duplicidade de
informacoes no banco.

Mas eh so uma opiniao.
:smiley:

Abraco!

Marcelo_Magalhaes

kenneth:
Fala brow,

Uma duvida… Se eu entendi direito, voce ta pensando em manter uma so tabela com as informacoes
do funcionario. Seria isso?

Aqui no meu trabalho nos temos uma situacao parecida com a sua, um cadastro de funcionarios,
e estes tem sua evolucao nos vencimentos.
Mas controlamos isso em tabelas separadas. Uma tabela com as informacoes dele (nome, e-mail…),
e outra, mais simples, so com o codigo dele, data da alteracao, novo valor e um motivo, por exemplo…

Acredito eu que seja melhor montar as informacoes em tempo de execucao. Evita duplicidade de
informacoes no banco.

Mas eh so uma opiniao.
:smiley:

Abraco!

Caro kenneth,

Com certeza vou normalizar esta estrutura, ou seja, dados básicos em uma tabela, dados de endereço em outra, etc... salários em outra... e assim vai. Mas pense OO, pense no objeto funcionário, com falei. Na "tabela" de salários com certeza você terá outras colunas e não só ID do funcionário, data e valor, neste caso o histórico completo irá duplicar informação, já o histórico incremental não. Com é a sua tabela de salário ai? Com você faz o histórico de salários dos seus funcionários?

Abraços

Marcelo Magalhães - R.J.

kenneth

Fala brow,

No meu caso, tenho outras informacoes nesta tabela sim, mas elas (a maioria) e distinta em cada registros…
Quais campos voce utilizaria e que se repetiriam nesta tabela?

Abraco!

Criado 21 de fevereiro de 2011
Ultima resposta 21 de fev. de 2011
Respostas 4
Participantes 3