软删除或硬删除有利于电子商务

时间:2016-11-10 11:37:16

标签: sql sql-server sql-delete archive

我已阅读this帖子,但我担心电子商务网站的最佳解决方案

我们的情景:

产品表

ProductID Name Price

OrderDetails表

OrderID ProductID 

OrderDetails表有FK ProductID引用于Product表的ProductID

一旦产品被删除,您将如何显示历史订单报告?

选项:

软删除不利 - 它会影响数据库存储性能

硬删除劣势 - 在报告时需要额外的连接查询

任何帮助都会很棒。

1 个答案:

答案 0 :(得分:0)

我肯定会选择软删除。特别是如果在电子商务环境中。

如何将已删除的产品存储在ArchivedProduct表中,然后执行以下操作:

SELECT
*
FROM
OrderDetails RIGHT JOIN Product ON OrderDetails.ProductID = Product.ProductID
UNION ALL
SELECT
*
FROM
OrderDetails RIGHT JOIN ArchivedProduct ON OrderDetails.ProductID = ArchivedProduct.ProductID

当你说

  

它会影响数据库存储性能

是的,在性能方面存在开销,这完全取决于3个表的大小。

如果您希望在以后阶段提高查询效果,可以根据自己的考虑从ArchivedProduct表中删除以前“已删除”的产品(例如,所有产品)在......之前插入或向第二个SELECT语句添加一些约束。你仍然处于比硬删除更安全的位置。