Chapter 34
Financial-Grade Database
Financial Database Design
Financial databases require absolute precision, complete idempotency, full auditability, and the ability to reconcile at any point in time.
Core Rules
- DECIMAL only for monetary values — never FLOAT/DOUBLE
- Atomic transactions — debit + credit + ledger entry in one transaction
- Immutable ledger — never DELETE or UPDATE ledger rows
- Idempotency — every payment API must be idempotent via unique idempotency keys
Transfer Pattern
Lock both account rows (in consistent order to prevent deadlock), check balance, debit source, credit destination, insert ledger entries — all in one transaction. The stored procedure approach enforces this atomicity at the database layer.
Reconciliation
Take daily balance snapshots. Reconcile: yesterday_snapshot + today_ledger_net = today_snapshot. Any discrepancy triggers an alert.
High Availability
Mandatory: sync_binlog=1 + innodb_flush_log_at_trx_commit=1 (dual-1 config). Semi-synchronous replication for zero data loss on failover. Never trade durability for write performance in financial systems.