代码之家  ›  专栏  ›  技术社区  ›  Iván Sánchez

数据库设计:如何防止引用完整性冲突?[已关闭]

  •  0
  • Iván Sánchez  · 技术社区  · 7 年前

    好吧,也许这不是这个问题的最佳标题,但事实就是这样。

    我正在做一个已经有电子商务的项目。数据库的一部分看起来像这样。一切都很好。

    enter image description here

    问题来自于参考资料,如果用户购买了产品,购物车就会关闭,但如果产品被删除或价格发生变化,订单就会完全损坏。

    我读过这篇文章-> Database Design for Real-World E-Commerce Systems 但我看不出解决办法。

    我的意思是,我需要的是存储订单的所有详细信息以及它在购买时拥有的数据。

    3 回复  |  直到 7 年前
        1
  •  1
  •   Matt Hartman    7 年前

    有不同的方法来解决这个问题。一种方法是建立价格历史记录表,而不是周期性变化的价格列。当您创建订单时,您会为给定的价格和产品创建订单。当您需要更改产品的价格时,您不需要更改价格列的值,而是在价格历史记录表中输入一条新记录,以便未来的订单可以接受新的价格。另一种方法是将产品价格信息与订单解耦。您没有从产品表中获取价格,而是在订单表中有一个单价列,并且价格的当前值保存在那里。

        2
  •  0
  •   LeBehr    7 年前

    表中每个字段的每个实例都应该与该表的实例具有1:1的关系。 问题是价格与产品的比例是1:1,这是好的。但它也应该与购物车有1:1的关系。而且,由于价格可以随着时间的推移而变化,它不会。

        3
  •  0
  •   DanMan    7 年前

    如果产品在推车中更换,您有几个选择:

    1. 您更新购物车并通知用户原因。
    2. 您将需要的所有信息放入购物车,并在结账时使用这些信息,而不是实时产品数据。

    至少 结账结束后,查看购物车是否仍然有效。解决方案2意味着人们可能会购买一些过时的产品。