Я считаю (и делаю :) ), что непотвержденные транзакции суть есть совсем не транзакции, а сущности запросов. Таким образом имеем 2 таблицы. Одну с запросами, где держим данные типа «кто, сколько, когда создал, когда отменил или подтвердил», а вторую уже с записями — фактическими движениями средств. Если заявка подтверждается модератором — создается запись в транзакциях.
Хранить входящий и исходящий балансы правильно в том случае, если вам потребуются отчеты, где будет выборка по периодам дат, и где нужно будет показать «входящий остаток» на начало этого периода. Вот тут-то оно очень сильно пригодится. Ибо считать его по транзакциям больно накладно получается (особенно, если их много очень)