How do I keep a 'running total' of purchases?
If the numbers have to be accurate, the trigger solution is the best one.
To prevent the application from messing with the summary table directly, have that table owned by a different user than the one the application uses to connect. Grant only the SELECT privilege to the application user.