sql >> Database >  >> RDS >> Sqlserver

Database-ontwerp:het rekeningsaldo berekenen

Een eeuwenoud probleem dat nooit elegant is opgelost.

Alle bankpakketten waarmee ik heb gewerkt, slaan het saldo op bij de rekeningentiteit. Het on-the-fly berekenen uit de bewegingsgeschiedenis is ondenkbaar.

De juiste manier is:

  • De verplaatsingstabel heeft een 'openingssaldo'-transactie voor elke rekening. Je hebt dit over een paar jaar nodig als je oude bewegingen van de actieve bewegingstabel naar een geschiedenistabel moet verplaatsen.
  • De rekeningentiteit heeft een saldoveld
  • Er is een trigger op de verplaatsingstabel die de rekeningsaldi voor de gecrediteerde en gedebiteerde rekeningen bijwerkt. Uiteraard heeft het commitmentcontrol. Als je geen trigger kunt hebben, moet er een unieke . zijn module die bewegingen schrijft onder commitment control
  • Je hebt een 'vangnet'-programma dat je offline kunt gebruiken, dat alle saldi opnieuw berekent en foutieve saldi weergeeft (en optioneel corrigeert). Dit is erg handig om te testen.

Sommige systemen slaan alle bewegingen op als positieve getallen en drukken de credit/debet uit door de van/naar-velden om te keren of met een vlag. Persoonlijk geef ik de voorkeur aan een creditveld, een debetveld en een getekend bedrag, dit maakt terugboekingen veel gemakkelijker te volgen.

Merk op dat deze methoden zowel van toepassing zijn op contanten als op effecten.

Effectentransacties kunnen veel lastiger zijn, vooral voor zakelijke acties, u zult een enkele transactie moeten accommoderen die een of meer kassaldi van kopers en verkopers, hun effectenpositiesaldi en mogelijk de makelaar/bewaarder bijwerkt.



  1. Hoe Access 2019 werkt en hoe u ermee werkt

  2. Hoe te migreren van Oracle naar MySQL / Percona Server

  3. SQL Server gebruikt een hoge CPU bij het zoeken in nvarchar-strings

  4. Hoe kom ik erachter wanneer een bepaalde tabel in Oracle is gemaakt?