Это дизайн базы данных, который я получил только с одной таблицей для хранения истории операций / транзакций. В настоящее время работает шармом на многих небольших проектах.
Это не заменяет определенный дизайн. Это универсальное решение, которое подходит для большинства приложений.
ID : ИНТ
стандартный номер строки
operation_type : ИНТ
тип операции. платить, собирать, проценты и т. д.
source_type : ИНТ
откуда операция продолжается.
целевая таблица или категория: пользователь, банк, поставщик и т. д.
source_id : ИНТ
идентификатор источника в базе данных
target_type : ИНТ
к чему применяется операция.
целевая таблица или категория: пользователь, банк, поставщик и т. д.
target_id : ИНТ
идентификатор цели в базе данных
сумма : десятичная дробь (подписано 19,2)
значение цены положительное или отрицательное к суммированному
account_balance : десятичное число (19,2 подписано)
итоговый баланс
extra_value_a : десятичный (19,2 со знаком) [это был самый универсальный вариант без использования хранения строк]
Вы можете хранить дополнительное число: процентный процент, скидка, скидка и т. д.
created_at : метка времени
Для source_type и target_type лучше использовать app перечисления или таблиц.
Если вам нужен конкретный баланс, вы можете просто запросить последнюю операцию, отсортированную по убыванию предела созданного_тата до 1. Вы можете выполнить запрос по источнику, цели, типу операции и т. Д.
Для повышения производительности рекомендуется сохранять текущий баланс в требуемом целевом объекте.