我对已售产品报告中的交易数据有疑问。如果产品已进入交易/订单但相关产品已被删除,则会出现约束。
如何使交易报告仍然可以与之前删除的产品一起使用?
谢谢。
如果Products
表中的一行用于两件事,即用于购买产品和报告历史交易,那么您永远无法真正删除该行。
您可以通过各种方式对其进行标记:“available_for_purchase”、“inventory = 0”、“no_longer_produced”等。
处理这种可能性的最佳方法可能是向所涉及的表添加约束,如果存在使用该产品的现有订单,则无法删除产品行。这是表定义的内容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
表中删除产品记录,而存在一个或多个引用该产品的订单项目记录,则删除尝试将失败。