sql >> Base de Datos >  >> RDS >> Sqlserver

Diseño de base de datos:cálculo del saldo de la cuenta

Un antiguo problema que nunca se ha resuelto con elegancia.

Todos los paquetes bancarios con los que he trabajado almacenan el saldo con la entidad de cuenta. Calcularlo sobre la marcha a partir del historial de movimientos es impensable.

La forma correcta es:

  • La tabla de movimientos tiene una transacción de "saldo de apertura" para todas y cada una de las cuentas. Necesitará esto dentro de algunos años cuando necesite mover movimientos antiguos de la tabla de movimientos activos a una tabla de historial.
  • La entidad de cuenta tiene un campo de saldo
  • Hay un activador en la tabla de movimientos que actualiza los saldos de las cuentas acreditadas y debitadas. Obviamente, tiene control de compromiso. Si no puede tener un activador, debe haber un único módulo que escribe movimientos bajo control de compromiso
  • Tiene un programa de 'red de seguridad' que puede ejecutar sin conexión, que vuelve a calcular todos los saldos y muestra (y opcionalmente corrige) los saldos erróneos. Esto es muy útil para realizar pruebas.

Algunos sistemas almacenan todos los movimientos como números positivos y expresan el crédito/débito invirtiendo los campos desde/hasta o con una bandera. Personalmente, prefiero un campo de crédito, un campo de débito y una cantidad firmada, esto hace que las reversiones sean mucho más fáciles de seguir.

Tenga en cuenta que estos métodos se aplican tanto al efectivo como a los valores.

Las transacciones de valores pueden ser mucho más complicadas, especialmente para las acciones corporativas, deberá acomodar una sola transacción que actualice uno o más saldos de efectivo de compradores y vendedores, sus saldos de posiciones de valores y posiblemente el corredor/depositario.