Eu costumo fazer uma tabela a parte para registrar os históricos, mesmo sendo o teu banco grande vale a pena, até mesmo porque os bancos suportam grande volume de dados. Ex de como monto minha tabela chave integer --> um campo sequencial chaveorigem --> este é o campo da tua tabela de origem para que tu possa fazer a ligação descrição varchar(500) -->depende do teu banco o tamanho do varchar. serve para registrar o seguinte: alterado o valor de 1,00 para 2,00 como exemplo campo smallint --> 01 - alterou o preço, 02 - alterou a quantidade etc... (serve para saber o que foi alterado para fins estatistico, já que o campo da descrição é apenas um string usuario --> usuário que fez a alteração data --> data da alteração Espero ter ajudado.