Vous ne dites pas ce que la base de données, et je ne vois pas dans le post tags. Si c'est pour Oracle, je peux recommander l'approche qui est intégré dans le Concepteur: utiliser les tables du journal. Si c'est pour une toute autre base de données, et bien, en gros, je recommande la même manière, trop...
La manière dont il fonctionne, dans le cas où vous souhaitez le reproduire dans une autre base de données, ou peut-être si vous voulez juste de comprendre, c'est que pour une table n'est plus que l'ombre de la table créée trop, juste normale table de base de données, avec le même champ de cahier des charges, en plus de certains champs supplémentaires: à l'instar de ce que l'action a été la dernière prise (chaîne des valeurs typiques "INS" pour les insérer, "UPD" pour mettre à jour et "SUPPR" pour supprimer), datetime lorsque l'action a eu lieu, et l'id utilisateur pour qui l'a fait.
Par le biais de déclencheurs, chaque action à une ligne dans la table insère une nouvelle ligne dans la table de revue avec les nouvelles valeurs, quelles mesures ont été prises, quand et par quel utilisateur. Vous n'avez pas jamais supprimer des lignes (au moins pas pour les quelques derniers mois). Oui, il va pousser de gros, facilement des millions de lignes, mais vous pouvez facilement le suivi de la valeur pour tout enregistrer à n'importe quel point dans le temps depuis la journalisation commencé ou l'ancien journal rangées ai purgé dernier, et qui a fait la dernière modification.
Dans Oracle tout ce dont vous avez besoin est générée automatiquement en code SQL, tout ce que vous avez à faire est de compiler/exécuter, et il est livré avec un CRUD de base de l'application (en fait, seul "R") pour l'inspecter.