Accesso al database: prima registra o prima l'azione?

1

Per farla breve, sto lavorando a un front-end basato sul web che interagisce con un database e una delle funzioni è che ogni azione su una determinata tabella viene registrata per conservare una cronologia completa di tutte le modifiche a quella tabella.

Un precedente tentativo di utilizzare i trigger in postgreSQL per gestire la registrazione ha funzionato automaticamente su un paio di altri requisiti del software che utilizzerà detto database come back-end, quindi sono tornato a creare manualmente le voci di registro e a salvarle.

La mia domanda è, qual è la migliore pratica? Creare e archiviare prima il registro, quindi apportare la modifica o apportare prima la modifica, quindi memorizzare il registro? Mi rendo conto che è essenzialmente un punto controverso perché sto avvolgendo l'intero processo in una transazione comunque, ma all'improvviso mi chiedo se ci sono argomenti a favore di entrambi i metodi.

    
posta Shadur 04.04.2013 - 09:53
fonte

3 risposte

2

Un log è tradizionalmente qualcosa che registra ciò che è già successo (si pensi al log delle navi), quindi "agire prima dopo il log" è la norma.

Anche se fa poca differenza nel tuo scenario (dato che stai usando le transazioni) la miglior pratica è quella di fare le cose come la maggior parte degli sviluppatori si aspetterebbero se non hai buone ragioni per non farlo (principio di minima sorpresa).

    
risposta data 04.04.2013 - 10:17
fonte
1

Inizia una transazione, apporta le modifiche, registra le modifiche, quindi effettua il commit della transazione. Se le modifiche falliscono, non le si registra e, se la registrazione fallisce, è consigliabile eseguire il rollback della transazione (a seconda dell'importanza della registrazione nel sistema).

    
risposta data 04.04.2013 - 10:05
fonte
1

In realtà, la procedura migliore sarebbe quella di registrare la richiesta, quindi eseguire il commit, quindi tentare l'aggiornamento.

In questo modo hai una registrazione delle azioni richieste anche se hanno fallito.

Se sei veramente paranoico puoi registrare "successo" o "fallire" dopo aver tentato l'aggiornamento.

    
risposta data 04.04.2013 - 11:34
fonte

Leggi altre domande sui tag