Ho utilizzato con successo un modello in cui ogni tabella ha una copia di controllo:la stessa tabella con alcuni campi aggiuntivi (marcatura temporale, ID utente, tipo di operazione) e 3 trigger sulla prima tabella per inserimento/aggiornamento/eliminazione.
Penso che questo sia un ottimo modo per gestirlo, perché tabelle e trigger possono essere generati da un modello e c'è poco sovraccarico dal punto di vista della gestione. L'applicazione può utilizzare le tabelle per mostrare una cronologia di controllo all'utente (leggi -solo).