Таблица баланса: id, дата/время, приход, расход, остаток, откуда (ID из таблицы способов пополнения), куда (ID из таблицы заказов), комментарий, user_id
После проведения операции - обновляйте баланс в профиле пользователя. (таблица: user, поле: balance), чтобы не делать выборку по таблице баланса для его отображения (при необходимости) при каждом запросе страницы.
ДО проведения любой операции с балансом:
1. Баланс-1: выборка - производится для конкретного юзера с LIMIT 1 и обратной сортировкой по полю дата/время (timestamp).
2. Баланс-2: значение balance из таблицы пользователя.
3. И сверяйте эти два поля: при несовпадении - блокируйте проведение транзакций с оповещением администратора.