Кодирование корзины. Когда пользователь проверяет, должен ли я копировать каждый элемент данных о продукте в таблицу «Заказать продукт», чтобы сохранить его состояние? - PullRequest
1 голос
/ 16 сентября 2010

Должен ли я клонировать весь продукт вместе со всеми связанными данными в другую таблицу для потомков, эффективно регистрируя текущее состояние продукта, как это было, когда пользователь купил его?

Плюсы:

  • Продукт (как его увидел пользователь при покупке) хранится для потомков и никогда не менялся. Если данные о товаре меняются со временем, информация об исходном заказе не изменится.

Минусы:

  • Много дополнительной сложности:
    • В базе данных требуется еще несколько таблиц.
    • Аналогичная схема для отслеживания.
  • Больше места на диске.

У кого-нибудь есть умное решение этой головоломки?

Ответы [ 2 ]

2 голосов
/ 16 сентября 2010

Я бы предложил клонировать атрибуты товара, которые имеют отношение к заказу. Например, цена за единицу. Большинство атрибутов товара не являются частью заказа. Какие атрибуты имеют отношение к заказу, зависит от того, как предприятие ведет бизнес.

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

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

Тогда вы бы никогда не обновили измерение продукта. Вместо этого при изменении атрибута продукта вы добавляете новую строку в измерение продукта для хранения новых значений. В новой строке будет тот же ключ продукта, но другой номер версии.

0 голосов
/ 16 сентября 2010

Я бы предложил добавить «номер версии» к данным продукта и сохранить старые версии.Таким образом, вы сохраняете данные продукта, не добавляете больше таблиц и имеете возможность отбирать старые продукты и заказов позже, если вы используете слишком много места.

...