【问题标题】:Avoiding redundancy in database tables sql mysql避免数据库表 sql mysql 中的冗余
【发布时间】:2020-05-19 01:41:27
【问题描述】:

我有一个问题。

我正在开发一个在线商城网站。

我有一个订单表。我已将 product_id 作为一个属性,以便了解订购的产品。

在客户的购买历史页面中,我需要展示客户购买的所有订单,包括订单表中未包含的产品标题和产品图片。为了得到它们,我们可以选择并加入订单表和产品表。

但是如果店主在一定时间后从产品表中删除了产品,我还想在购买历史页面中显示产品的标题或图片。我该怎么办?

如果解决方案是在订单表中将它们作为属性重复.. 不认为是冗余

【问题讨论】:

  • 永远不要删除产品,只需将它们标记为“不再出售”。
  • 不要让他们删除一个产品只标记为删除,这样就不会再显示了
  • 这不是在数据库中长期保留大量产品吗?

标签: mysql sql database


【解决方案1】:

这里的解决方案是虚拟删除。

在 products 表中,添加一个 IsDeleted 或者可能是 Active 具有默认值的列。如果店主“删除”了产品,则将标志翻转为相反的值。这样可以保留产品上的数据,而不会阻止店主修剪产品,并且还可以轻松恢复产品。

需要调整查询以考虑标志,但这是为数据完整性付出的小代价。

【讨论】:

  • 这不是在数据库中长期保留大量产品吗?
  • 不,实际上。它永远所有的产品保存在数据库中。什么是“巨大的数字”?我曾经在一家经营了几十年的财富 500 强零售商工作,产品表只有几百万行。
  • 附带好处:在客户的历史记录页面上,您可以利用该标志显示“不再可用”标记,从而避免他们尝试查找无法重新订购的东西的麻烦。 :)
  • 很高兴能帮上忙。做得好,在构建阶段思考数据模型。
  • 如果您不介意的话,我还有一个问题……正如我所说,我需要制作包含客户订单详细信息的购买历史记录。 (如:订单号、已付款、产品名称、产品图片等。)如果客户下了订单,这些详细信息保存在购买历史记录中,然后店主出于某种原因更改(更新)了产品名称 => 那么此更新将出现在购买历史中.. 真的不能发生这种情况吗?
猜你喜欢
  • 1970-01-01
  • 2015-11-23
  • 2017-08-10
  • 1970-01-01
  • 2018-05-30
  • 2011-06-16
  • 1970-01-01
  • 2015-08-12
  • 1970-01-01
相关资源
最近更新 更多