2016-11-10 256 views
2

我已经看过this后删除不错,但我担心的电子商务网站的最佳解决方案软删除或硬的电子商务

我们的情景:

产品表

ProductID Name Price 

OrderDetails表

OrderID ProductID 

OrderDetails表已经FK的ProductID referrenced到的ProductID产品表

一旦产品已被删除,你打算怎么显示的历史订单报告?

选项:

软删除的缺点 - 它会影响数据库的存储性能

硬删除缺点 - 需要额外的连接查询的同时服用报告

任何帮助将是巨大的。

+0

软删除将是更好的方法。换句话说,您可以拥有一个单独的表来保存历史数据并从原始表中将其删除。 – Viki888

+0

@ viki888感谢它,但目前我们正在计划使用软删除与IsDeleted和DeletedDate字段。未来如果需要我们将移动到硬删除和存档在不同的表中的数据。 – Lishna

回答

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声明。与硬删除相比,您仍处于更安全的位置。