Visual Basic, VB .NET, ASP, Active X, Access, SQL Server

Banco de Dados: grave histórico de tudo

Muitas vezes o programador negligencia a gravação de históricos nas suas  aplicações de banco de dados e é surpreendido com uma solicitação do usuário para que desenvolva uma aplicação baseada em informações passadas que ele nunca sonhou que poderiam ser úteis. Por esta e outras razões a gravação de históricos deve ser tomada como uma tarefa obrigatória para tudo que ocorrer no seu banco de dados. Não se importe com o crescimento do banco de dados, espaço em disco é muito barato. A economia de alguns gigabytes não irá compensar a impossibilidade de fazer uma aplicação necessária.

A gravação de históricos costuma conter, além dos dados mais atuais do registro afetado por alguma operação: a data e hora em que se deu a operação,  a identificação do usuário responsável,  o tipo de operação e um identificador único para o histórico. Porém, não basta ter uma tabela de históricos para cada tabela no seu banco de dados (inclusive as de relacionamento). Quando você precisar de um histórico, precisará também saber como estava o relacionamento daquele histórico com os históricos das demais tabelas no momento em que aquela operação se deu. Você precisará do relacionamento entre as tabelas de históricos para recriar o estado de um conjunto de informações em determinado momento do passado. Isto pode ser conseguido criando uma tabela de relacionamento entre as diferentes tabelas de históricos. No layout de registro desta tabela, você terá um campo para conter o identificador único do último registro de cada tabela de históricos. Ao criar um registro de histórico para qualquer tabela, você estará alterando o relacionamento entre as tabelas de históricos e precisará gravar um registro na tabela que mantém o relacionamento entre os históricos. O último registro da tabela de relacionamento dos históricos conterá todos os identificadores de último histórico das demais tabelas e mais o identificador do histórico que acaba de ser criado. Na verdade, esta tabela de relacionamento é uma tabela de histórico de relacionamentos. Se quiser ver um artigo que detalha mais esta sugestão, veja o artigo Históricos de Objetos Compostos, onde você tem este esquema melhor explicado.