Para tutan her sistemde er ya da geç aynı an gelir: müşteri bakiyesinin yanlış olduğunu söyler, siz ekrana bakarsınız ve rakamın nasıl o hâle geldiğini gösteremezsiniz. Bakiye tek bir sütunda tutuluyorsa, elinizde yalnızca sonuç vardır — geçmiş yoktur.
Sütun değil, hareket
Doğru yaklaşım bakiyeyi saklamak değil, türetmektir. Her para hareketi (yükleme, kesinti, iade, düzeltme) ayrı bir satır olarak yazılır; bakiye bu satırların toplamıdır. Böylece "bu rakam nereden geldi" sorusunun cevabı her zaman sorgulanabilir bir listedir.
Bu yaklaşımın maliyeti gerçektir: her okuma bir toplama işlemi gerektirir. Ama bu maliyet, özetlenmiş bakiye alanları veya uygun indeksleme ile yönetilebilir. Yönetilemeyen şey, kaynağı gösterilemeyen bir rakamın yarattığı güven kaybıdır.
Kesinti, olayla aynı işlemde yazılır
İkinci kritik nokta zamanlamadır. Kesintiyi teslimat tamamlandıktan sonra ayrı bir işlemde yazarsanız, arada bir hata bu ikisini ayırır: teslimat tamamlanmış ama para düşmemiş olur. Kesinti, durum geçişiyle aynı veritabanı işleminde yazılmalıdır. İşlem ya bütün olarak başarılı olur ya da hiç olmaz.
Eksi limit bir iş kuralıdır, bir kaza değil
İşletmelerin bakiyesi bitince ne olacağı da açıkça tanımlanmalıdır. Tanımlanmazsa sistem ya siparişi kabul edip alacak biriktirir ya da beklenmedik bir anda hizmeti keser. Her işletme için ayrı bir eksi limit tanımlamak, bu kararı koda gömmek yerine yönetime bırakır.
