Как я должен сохранять данные заказа в течение долгого времени, не привязывая их к базовым данным о цене продукта, которые могут быть изменены? - PullRequest
0 голосов
/ 17 ноября 2009

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

Например, кто-то заказывает что-то, что состоит из 5 вещей стоимостью 1 доллар каждая, всего на 5 долларов. Однако в какой-то момент в будущем стоимость отдельных вещей изменится до 0,50 доллара. Теперь, когда я поднимаю старый заказ, его общая стоимость составляет $ 2,50 вместо $ 5.

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

Другая мысль состоит в том, чтобы сериализовать весь заказ и работать с этим. Однако, это затрудняет обновление системы и изменение чего-либо. Старые заказы больше не будут отображаться должным образом и могут даже привести к сбою системы.

Это довольно общая проблема, и я ищу точку зрения наилучшей практики.

Ответы [ 3 ]

6 голосов
/ 17 ноября 2009

НИКОГДА не основывайте итоги вашего заказа на текущей цене продукта. Типичная структура данных для онлайн-каталогов и т. Д. Состоит в том, чтобы иметь таблицу заказов и таблицу позиций. Таблица заказов содержит всю необходимую информацию для заказов (общая сумма заказа, идентификатор пользователя, дата / время и т. Д.), В то время как таблица позиций содержит идентификатор продукта, цену товара на момент его размещения в корзине, а также налоговая информация и т. д. и идентификатор заказа.

По сути, отношение «один ко многим» между таблицей заказов и позициями. Позиции становятся отображением цены товара и т. Д. Во время заказа.

1 голос
/ 17 ноября 2009

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

0 голосов
/ 17 ноября 2009

Дани верна. В целях аудита вы создаете записи со значениями, которые не изменяются со временем, вместо того, чтобы связываться со значениями, которые могут изменяться со временем.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...