The balance is both stored and derivable
accounts.balance is what every screen reads, and the transactions ledger is what proves it. Keeping only the ledger makes every balance check a sum over an unbounded table; keeping only the column leaves no way to explain a figure. Both means a transaction must update the account in the same atomic write, and balance_after makes the two reconcilable row by row rather than only in aggregate.