Как можно использовать данные о транзакции после удаления продукта? - PullRequest
0 голосов
/ 25 января 2019

введите описание изображения здесь

У меня проблема с данными транзакций в отчетах о проданных продуктах. Ограничения, которые возникают, если продукт вошел в транзакцию / заказ, но рассматриваемый продукт был удален.

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

Спасибо.

Ответы [ 2 ]

0 голосов
/ 26 января 2019

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

Вы можете пометить его различными способами: «available_for_purchase», «инвентарь = 0», «no_longer_produced» и т. Д.

0 голосов
/ 25 января 2019

Возможно, лучший способ справиться с этой возможностью - добавить ограничения к задействованным таблицам, которые сделают невозможным удаление строки продукта, если существует существующий заказ, использующий этот продукт.Вот как могут выглядеть определения таблиц для Products и Order_Items:

CREATE TABLE Order_Items (
    order_item_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    order_id INT NOT NULL,
    product_id INT NOT NULL,
    ...
    FOREIGN KEY fk_prod (product_id) REFERENCES Products (product_id)
)

CREATE TABLE Products (
    product_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    product_name VARCHAR(255) NOT NULL,
    ...
)

С таким дизайном, если кто-то попытается удалить запись продукта из таблицы Products, пока она существуетВ случае более или более записей позиций заказа, относящихся к этому продукту, попытка удаления будет неудачной.

...