Прайс-лист истории для счетов? - PullRequest
0 голосов
/ 26 апреля 2011

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

Как решить эту проблему? Я не хочу хранить цену и наименование товара в таблице order_items.

Я прочитал, что возможное решение заключается в создании таблицы history_prices (система аудита через триггер или запрос вставки SQL вручную через php?), Является ли Аудит лучшим решением или есть какое-то другое решение?

Можете ли вы привести пример, как мне создать таблицу history_prices, чтобы при изменении цены с item_options.option_price она сохранялась в таблице history_prices?

Сейчас у меня более 200 000 строк в таблице item_options, нужно ли мне копировать цены в history_prices?

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

таблица item_options:

mysql> desc item_options;
+---------------+--------------+------+-----+---------+----------------+
| Field         | Type         | Null | Key | Default | Extra          |
+---------------+--------------+------+-----+---------+----------------+
| option_id     | int(11)      | NO   | PRI | NULL    | auto_increment |
| item_id       | int(11)      | YES  | MUL | NULL    |                |
| option_name   | varchar(100) | YES  |     | NULL    |                |
| option_price  | int(11)      | YES  |     | NULL    |                |
+---------------+--------------+------+-----+---------+----------------+

Таблица order_items:

mysql> desc order_items;
+----------------+---------+------+-----+---------+----------------+
| Field          | Type    | Null | Key | Default | Extra          |
+----------------+---------+------+-----+---------+----------------+
| order_items_id | int(11) | NO   | PRI | NULL    | auto_increment |
| order_id       | int(11) | NO   |     | NULL    |                |
| item_id        | int(11) | NO   |     | NULL    |                |
| option_id      | int(11) | NO   |     | NULL    |                |
+----------------+---------+------+-----+---------+----------------+

Ответы [ 3 ]

1 голос
/ 26 апреля 2011

Лучшее, что вы можете сделать, это создать столбец в order_items для цены. И это тоже самое простое.

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

1 голос
/ 26 апреля 2011

Проверьте следующие дизайны:

enter image description here

Дизайн 1: Хранит скользящую историю изменений элемента (Новая строка, если что-то изменяется: имя, описание, цена).

Дизайн 2: Новая строка только для изменения цены.

Кроме того, вы можете сохранить цену вместе с самим заказом.

1 голос
/ 26 апреля 2011

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

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

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

...