Вставить новую запись при обновлении информации? - PullRequest
1 голос
/ 24 апреля 2011

Я занимаюсь разработкой системы интернет-магазинов, у меня есть таблицы items и item_options.

Каждый элемент может иметь 1 или более параметров, см. Ниже.

таблица элементов

  • item_id (PK)
  • item_name
  • item_description

Примечание: цены на товары указаны в таблицах item_options

таблица item_options

  • option_id (PK)
  • item_id (FK)
  • option_name
  • option_price

Когда клиент разместит заказ, данные будут добавлены в таблицу order_items.

таблица заказов

  • orders_id (PK)
  • customer_id (FK)
  • address_address_id (FK)
  • date_purchased
  • orders_status
  • orders_date_finished

таблица order_items

  • orders_items_id (PK)
  • orders_id (FK)
  • item_id (FK)
  • item_option_id (FK)

Существует проблема, если сотрудники изменят цену, название товара или удалят товар .. счета клиента будутпострадавших, потому чтоFK из order_items больше не будет существовать в таблице предметов.Какое решение для этого?

Как насчет этого решения: добавить активное поле в таблицы items и item_options.Когда сотрудники хотят изменить цену или название товара - просто установите текущую активную запись на 0 (items.active), а затем вставьте новую запись с новой информацией, и активным станет 1. Старые заказы по-прежнему указывают правильный идентификаторзаписи, которая не активна.Это хороший способ сделать это?

Когда новая информация была вставлена ​​в таблицу элементов, означает ли это, что я должен обновить / изменить новый идентификатор PK в таблице item_id.item_options?

Ответы [ 3 ]

2 голосов
/ 24 апреля 2011

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

Каждый новый вставленный элемент должен состоять из двух шагов:

  1. Добавить товар в таблицу предметов
  2. Используя item_id из таблицы элементов, добавьте элемент в таблицу item_options
2 голосов
/ 24 апреля 2011

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

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

0 голосов
/ 24 апреля 2011

Если вы собираетесь делать вещи так, как вы описываете, вам нужно будет добавить новые строки в таблицу item_options для обработки новых элементов.

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