Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Datenbankdesign:Berechnung des Kontostands

Ein uraltes Problem, das nie elegant gelöst wurde.

Alle Bankpakete, mit denen ich gearbeitet habe, speichern den Kontostand bei der Kontoentität. Eine spontane Berechnung aus der Bewegungshistorie ist undenkbar.

Der richtige Weg ist:

  • Die Bewegungstabelle hat eine 'Eröffnungssaldo'-Transaktion für jedes einzelne Konto. Sie werden dies in ein paar Jahren brauchen, wenn Sie alte Bewegungen aus der aktiven Bewegungstabelle in eine Verlaufstabelle verschieben müssen.
  • Die Kontoentität hat ein Kontostandsfeld
  • Es gibt einen Auslöser in der Bewegungstabelle, der die Kontostände für die gutgeschriebenen und belasteten Konten aktualisiert. Offensichtlich hat es Commitment Control. Wenn Sie keinen Auslöser haben können, muss es einen eindeutigen geben Modul, das Bewegungen unter Commitment-Kontrolle schreibt
  • Sie haben ein "Sicherheitsnetz"-Programm, das Sie offline ausführen können, das alle Salden neu berechnet und fehlerhafte Salden anzeigt (und optional korrigiert). Dies ist sehr nützlich zum Testen.

Einige Systeme speichern alle Bewegungen als positive Zahlen und drücken die Gutschrift/Belastung durch Invertieren der Von/Bis-Felder oder mit einem Flag aus. Ich persönlich bevorzuge ein Haben-Feld, ein Soll-Feld und einen unterschriebenen Betrag, das macht Rückbuchungen viel einfacher zu verfolgen.

Beachten Sie, dass diese Methoden sowohl für Bargeld als auch für Wertpapiere gelten.

Wertpapiertransaktionen können viel kniffliger sein, insbesondere bei Kapitalmaßnahmen, müssen Sie eine einzelne Transaktion unterbringen, die einen oder mehrere Käufer- und Verkäufer-Barsalden, ihre Wertpapierpositionssalden und möglicherweise den Makler/Verwahrer aktualisiert.