【问题标题】:How can the data on the transaction still be used when the product has been deleted商品被删除后,交易中的数据如何继续使用?
【发布时间】:2019-06-19 03:44:51
【问题描述】:

enter image description here

我对已售产品报告中的交易数据有疑问。如果产品已进入交易/订单但相关产品已被删除,则会出现约束。

如何使交易报告仍然可以与之前删除的产品一起使用?

谢谢。

【问题讨论】:

    标签: mysql bigdata e-commerce pos


    【解决方案1】:

    也许处理这种可能性的最佳方法是向所涉及的表添加约束,如果存在使用该产品的现有订单,则无法删除产品行。以下是 ProductsOrder_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 表中删除产品记录,而存在一个或多个涉及该产品的订单项目记录,则删除尝试将失败。

    【讨论】:

    • 感谢@tim-biegeleisen 的回复。
    • 当所有者尝试删除仍与订单有关的产品时,可以通过给出限制来完成的一种方法。在这种情况下,如果产品已经超过1年并且不再使用该产品,从事实来看,该产品必须从数据库中删除,如果该产品被删除,那么关于该产品的交易报告呢?谢谢。
    • @luffynas 您可能需要一个触发器来执行此操作。这可能是另一个问题的好话题。
    【解决方案2】:

    如果Products 表中的一行用于两件事,即用于购买产品和报告历史交易,那么您永远无法真正删除该行。

    您可以通过多种方式对其进行标记:“available_for_purchase”、“inventory = 0”、“no_longer_produced”等。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-07-30
      • 2020-02-23
      • 1970-01-01
      • 1970-01-01
      • 2016-06-25
      • 1970-01-01
      相关资源
      最近更新 更多