sql >> Databáze >  >> RDS >> Sqlserver

Návrh databáze:Výpočet zůstatku na účtu

Odvěký problém, který nebyl nikdy elegantně vyřešen.

Všechny bankovní balíčky, se kterými jsem pracoval, ukládají zůstatek u účetní jednotky. Počítat to za běhu z historie pohybu je nemyslitelné.

Správný způsob je:

  • Tabulka pohybu obsahuje pro každý účet transakci „otevřený zůstatek“. Budete to potřebovat za několik let, až budete potřebovat přesunout staré pohyby z aktivní tabulky pohybu do tabulky historie.
  • Účet má pole zůstatku
  • Na tabulce pohybu je spouštěč, který aktualizuje zůstatky na účtech připsaných a odepsaných. Je zřejmé, že má kontrolu závazků. Pokud nemůžete mít spouštěč, pak musí existovat jedinečný modul, který zapisuje pohyby pod kontrolou závazku
  • Máte program „bezpečnostní sítě“, který můžete spustit offline, který přepočítává všechny zůstatky a zobrazuje (a případně opravuje) chybné zůstatky. To je velmi užitečné fortestování.

Některé systémy ukládají všechny pohyby jako kladná čísla a vyjadřují kredit/debet invertováním polí z/do nebo pomocí příznaku. Osobně preferuji kreditní pole, debetní pole a podepsanou částku, díky tomu je mnohem snazší sledovat změny.

Všimněte si, že tyto metody platí jak pro hotovost, tak pro cenné papíry.

Transakce s cennými papíry mohou být mnohem složitější, zejména pro podnikové akce, budete muset přizpůsobit jedinou transakci, která aktualizuje hotovostní zůstatky jednoho nebo více kupujících a prodávajících, zůstatky jejich cenných papírů a případně makléře/depozitáře.



  1. odstranit sloupec neexistuje

  2. SQL Server – Co se stane, když je aktualizován řádek v tabulce?

  3. Rozdíl mezi LIKE a =v MYSQL?

  4. TO_CHAR typu Oracle PL/SQL TABLE