Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Conception de la base de données :calcul du solde du compte

Un problème séculaire qui n'a jamais été résolu avec élégance.

Tous les packages bancaires avec lesquels j'ai travaillé stockent le solde auprès de l'entité de compte. Le calculer à la volée à partir de l'historique des mouvements est impensable.

La bonne façon est :

  • Le tableau des mouvements a une transaction "solde d'ouverture" pour chaque compte. Vous en aurez besoin dans quelques années lorsque vous devrez déplacer les anciens mouvements de la table des mouvements actifs vers une table d'historique.
  • L'entité de compte a un champ solde
  • Il existe un déclencheur sur la table des mouvements qui met à jour les soldes des comptes crédités et débités. De toute évidence, il a un contrôle d'engagement. Si vous ne pouvez pas avoir de déclencheur, il doit y avoir un unique module qui écrit les mouvements sous contrôle d'engagement
  • Vous disposez d'un programme "filet de sécurité" que vous pouvez exécuter hors ligne, qui recalcule tous les soldes et affiche (et éventuellement corrige) les soldes erronés. C'est très utile.

Certains systèmes stockent tous les mouvements sous forme de nombres positifs et expriment le crédit/débit en inversant les champs de/à ou avec un indicateur. Personnellement, je préfère un champ crédit, un champ débit et un montant signé, cela facilite grandement le suivi des annulations.

Notez que ces méthodes s'appliquent à la fois aux espèces et aux titres.

Les transactions sur titres peuvent être beaucoup plus délicates, en particulier pour les opérations sur titres, vous devrez gérer une seule transaction qui met à jour un ou plusieurs soldes de trésorerie d'acheteurs et de vendeurs, leurs soldes de positions de titres et éventuellement le courtier/dépositaire.