软删除或硬的电子商务
问题描述:
我已经看过this后删除不错,但我担心的电子商务网站的最佳解决方案软删除或硬的电子商务
我们的情景:
产品表
ProductID Name Price
OrderDetails表
OrderID ProductID
个
OrderDetails表已经FK
的ProductID referrenced到的ProductID产品表
一旦产品已被删除,你打算怎么显示的历史订单报告?
选项:
软删除的缺点 - 它会影响数据库的存储性能
硬删除缺点 - 需要额外的连接查询的同时服用报告
任何帮助将是巨大的。
答
我肯定会去软删除。特别是如果在电子商务环境中。
如何存储在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
声明。与硬删除相比,您仍处于更安全的位置。
软删除将是更好的方法。换句话说,您可以拥有一个单独的表来保存历史数据并从原始表中将其删除。 – Viki888
@ viki888感谢它,但目前我们正在计划使用软删除与IsDeleted和DeletedDate字段。未来如果需要我们将移动到硬删除和存档在不同的表中的数据。 – Lishna