La tua soluzione non è male. Ecco una soluzione alternativa (non migliore o peggiore in generale, solo diversa). Per molti sistemi, è comune avere una convenzione uniforme per le chiavi primarie del seguente modulo:
Se il tuo sistema segue questo criterio, puoi memorizzare le informazioni di cui sopra in una tabella audit separata con colonne
-
Nome tabella (stringa)
-
PKValue (stesso tipo delle chiavi primarie)
-
Operazione (valori che rappresentano Create
o Update
(o forse anche Delete
)
-
TimeStamp
-
OperationBy (tabella da FK a persona )
Alcuni vantaggi di questa soluzione:
-
più normalizzato,
-
non è necessario aggiungere quattro colonne aggiuntive a ciascuna delle tabelle esistenti
-
consente di tenere traccia delle operazioni di cancellazione
-
le informazioni di controllo si trovano in un unico punto, il che potrebbe consentire di mettere a punto parametri di archiviazione specifici per questa tabella
-
una query sull'intera tabella di controllo diventa più semplice
-
i diritti di accesso alle informazioni di controllo sono indipendenti dai diritti di accesso alle tabelle controllate
Svantaggi:
-
hai bisogno di questa convenzione per i PK
-
ogni aggiornamento o creazione deve ora modificare due record anziché uno
-
se i record delle tabelle principali vengono eliminati, le informazioni di controllo non vengono eliminate automaticamente con loro
-
una query per l'ultima modifica di un record specifico ora richiede un'operazione join
-
i diritti di accesso alle informazioni di controllo sono indipendenti dai diritti di accesso alle tabelle controllate (ho già detto in precedenza: -)?
Quindi, come vedi, entrambi gli approcci differiscono nei dettagli e dovresti verificare quale si adatta meglio alle tue esigenze.