Как справиться с колебаниями цен в приложении к счету? - PullRequest
5 голосов
/ 12 августа 2010

В заявке на выставление счета учитывайте следующее:

У меня есть таблица продуктов, в которой также указана цена продукта. Затем у меня есть таблица счетов-фактур и invoice_lines, и в каждой строке счета-фактуры я ссылаюсь на идентификатор продукта вместе с количеством. В этом случае я не сохраняю цену товара со строкой накладной.

Теперь, через несколько месяцев, если цена продукта изменится, в любом отчете будет показан объем продаж на основе текущей цены, а не цены, по которой продукт был фактически продан.

Одно из решений, которое мне приходит в голову, заключается в том, что мы храним отдельную таблицу с именами цен, которая ссылается на каждый продукт, и всякий раз, когда цена продукта изменяется, в эту таблицу цен вносится запись. Последняя запись в этой таблице всегда считается текущей ценой для новых счетов. Каждая строка счета-фактуры указывает свою цену путем указания идентификатора цены, чтобы она позже отображалась правильно в отчетах.

Каковы наилучшие методы работы с такими ситуациями?

Ответы [ 3 ]

5 голосов
/ 12 августа 2010

Я бы всегда сохранял фактическое имя, количество и цену на момент покупки для каждой позиции заказа, эффективно отменяя нормализацию данных.Заказ является моментальным снимком и не должен быть связан с чем-то, что может измениться.Не только цены могут колебаться, но что произойдет, если вы удалите или переименуете оригинальный продукт и ваш счет будет связан с ним?

1 голос
/ 12 августа 2010

Я бы повторил ваше предложение: разбить цены на отдельные таблицы с помощью следующих столбцов:

PriceId, ProductId, Цена, Начальная дата, Конечная дата.

Таким образом, вы также можете заранее планировать будущие изменения цен. Текущие данные могут быть получены с использованием (синтаксис Sql Server):

SELECT *
FROM Products
   Inner Join Prices ON Products.ProductId = Prices.ProductId 
      And GetDate() Between StartDate and EndDate
1 голос
/ 12 августа 2010

Добавить поле цены в строку счета.

...