Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Progettazione del database:calcolo del saldo del conto

Un problema secolare che non è mai stato risolto con eleganza.

Tutti i pacchetti bancari con cui ho lavorato memorizzano il saldo con l'entità del conto. Calcolarlo al volo dalla cronologia dei movimenti è impensabile.

Il modo giusto è:

  • La tabella dei movimenti ha una transazione di "saldo di apertura" per ogni conto. Ti servirà tra qualche anno quando dovrai spostare i vecchi movimenti dalla tabella dei movimenti attiva a una tabella cronologica.
  • L'entità dell'account ha un campo saldo
  • C'è un trigger sulla tabella mobile che aggiorna i saldi contabili per i conti accreditati e addebitati. Ovviamente, ha il controllo dell'impegno. Se non puoi avere un trigger, allora deve esserci un unico modulo che scrive i movimenti sotto il controllo del commit
  • Hai un programma di "rete di sicurezza" che puoi eseguire offline, che ricalcola tutti i saldi e visualizza (ed eventualmente corregge) i saldi errati. Questo è un fortesting molto utile.

Alcuni sistemi memorizzano tutti i movimenti come numeri positivi ed esprimono il credito/debito invertendo i campi da/a o con un flag. Personalmente, preferisco un campo di credito, un campo di debito e un importo firmato, questo rende molto più facile seguire gli storni.

Si noti che questi metodi si applicano sia ai contanti che ai titoli.

Le transazioni in titoli possono essere molto più complicate, specialmente per le azioni societarie, dovrai ospitare una singola transazione che aggiorni uno o più saldi di cassa dell'acquirente e del venditore, i saldi delle loro posizioni in titoli e possibilmente il broker/depositore.