Лучший способ представить финансовый баланс в базе данных
Мы разрабатываем базу данных, которая будет содержать данные о продажах и их комиссионных для персонала (дистрибьюторов, продавцов, менеджеров, клиентов и т. Д.).
Мы планируем использовать разные таблицы транзакций и балансов, потому что нам нужно очень быстро знать текущий баланс, чтобы утверждать продажи. так что вычислять это каждый раз, когда это не жизнеспособно.
Альтернативно, кто-то предложил использовать представления - материализованные представления были упомянуты -
Какой лучший способ сохранить баланс клиента?
1 ответ
Техника, которую вы ищете, называется денормализация. По сути, именно здесь вы храните значения, которые можно рассчитать на основе нормализованных данных, но чье значение постоянно сохраняется и сохраняется правильным путем пересчета его при каждом изменении нормализованных данных.
Это очень распространено, и это хорошая идея для вашей ситуации.
Вот упрощенный пример того, что вам нужно:
create table customer (
id int,
name varchar(20),
balance decimal(10,2)
)
create table transaction (
id int,
dt datetime,
customer_id int,
amount decimal(10,2)
)
Вы можете поддерживать баланс в актуальном состоянии, используя триггер или код приложения.
В обоих случаях при вставке строки в transaction
, вам нужно:
update customer set balance = balance + amount; -- the amount of the transaction
и аналогичная логика при обновлении или удалении transaction
Лучше использовать триггеры, поскольку они обслуживают все обновления транзакций, даже ручные.
Использовать код приложения проще, потому что его легче кодировать, понимать и отлаживать.
После настройки строка вашего клиента всегда будет иметь правильный баланс.
Если он когда-либо не синхронизируется, вы можете выполнить массовое обновление, чтобы исправить значения, используя простой запрос на обновление, который суммирует баланс для каждого клиента.