Возможно, это не тот ответ, который вы ищете, но вот мои 2 цента.
По моему личному мнению, если кто-то не контролирует ваши выделенные серверы 24/7, вам никогда не следует хранить номера кредитных карт в вашей базе данных в любом формате, это слишком рискованно.
Очень хорошим решением, с которым я столкнулся в прошлом году, было BrainTree http://www.braintreepayments.com/. Вы можете настроить очень хорошую систему оплаты кредитной картой, не принимая на себя никаких обязательств. Их API позволяет выполнять транзакции между серверами и прозрачным перенаправлением (формировать сообщения на своем сайте, а они перенаправляют обратно на ваш сайт). В то же время их сервис Vault
позволяет вам хранить кредитные карты на их конце, и вы просто используете токен в межсерверном API для обработки платежа. Вы можете сохранить последние 4 цифры (которые они предоставляют в деталях транзакции) в вашей БД вместе с типом CC и токеном, при этом вы можете отобразить раскрывающийся список для пользователя, чтобы выбрать, какую карту он хочет использовать, и вы просто используйте токен при общении с их API.
API очень хорошо документирован с полными примерами. Я думаю, вы должны изучить их.
Edit:
Я считаю, что у вас должна быть таблица, так как вы предложили сохранить всю историю и поле «итогов» в таблице пользователей, которые можно использовать для отображения в разных местах. Каждый раз, когда сделка сделана, вычисляют сумму и кешируют ее в этом поле для готового использования. Однако, это хорошая идея, чтобы пересчитать это в определенных критических местах, чтобы убедиться, что все в порядке. Хотя это поле открыто, но у вас есть полный журнал, который может помочь вам пересчитать все, если это необходимо.