При возникновении проблемы с удалением продукта попробуйте добавить что-то вроде «активного» (логического) поля в таблицу продуктов. Таким образом, вам не нужно физически удалять продукты, просто деактивировать их. Затем вы можете построить свой код так, чтобы неактивные продукты не отображались в каталоге, но они все еще были доступны в вашей базе данных для отображения в разделе истории заказов.
Я предполагаю, что вы пытаетесь создать что-то вроде таблицы "OrderLine" с вашей таблицей OrderHistory. Вам нужно только связать это с продуктами и таблицами заголовка заказа (Order), вам не нужно связывать его с пользователями, так как таблица заголовка заказа уже связана с пользователем. Если вы добавите некоторые дополнительные поля, такие как «количество» и «цена», в таблицу OrderLine, то вы можете создать моментальный снимок при размещении заказа и вставить цену (в момент заказа) и количество заказа в историю заказов. Таблица. Таким образом, если цена продукта изменяется с течением времени, информация в таблице OrderLine остается прежней, и у вас остается первоначальная цена.
Вы все еще могли бы создать некоторые объекты для сохранения истории продукта (цены и т. Д.), Если хотите удерживать их для отображения ценовых трендов, но с точки зрения сохранения информации о вашем фактическом заказе это не требуется.
Этот подход означает, что ваша таблица корзины покупок может использоваться в качестве хранилища «в процессе», где вы храните только текущие корзины, а после завершения заказа корзина очищается, и данные вставляются в заголовки и таблицы строк заказа. .
Это не охватывает все, но, надеюсь, даст вам некоторые идеи о подходах, которые вы могли бы принять в отношении ваших вопросов.