Лучший способ представить финансовый баланс в базе данных

Мы разрабатываем базу данных, которая будет содержать данные о продажах и их комиссионных для персонала (дистрибьюторов, продавцов, менеджеров, клиентов и т. Д.).

Мы планируем использовать разные таблицы транзакций и балансов, потому что нам нужно очень быстро знать текущий баланс, чтобы утверждать продажи. так что вычислять это каждый раз, когда это не жизнеспособно.

Альтернативно, кто-то предложил использовать представления - материализованные представления были упомянуты -

Какой лучший способ сохранить баланс клиента?

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

Лучше использовать триггеры, поскольку они обслуживают все обновления транзакций, даже ручные.

Использовать код приложения проще, потому что его легче кодировать, понимать и отлаживать.

После настройки строка вашего клиента всегда будет иметь правильный баланс.

Если он когда-либо не синхронизируется, вы можете выполнить массовое обновление, чтобы исправить значения, используя простой запрос на обновление, который суммирует баланс для каждого клиента.

Другие вопросы по тегам