我已经读了这篇文章,但我关心的是电子商务网站的最佳解决方案
我们的场景:
产品表
ProductID Name Price
一张表
OrderID ProductID
OrderDetails表有FK
ProductID引用到Product表的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
当你说
影响db存储性能
是的,在性能方面有一个开销,这完全取决于3个表的大小。
如果在后面的阶段您想要提高查询的性能,您可以根据自己的考虑从ArchivedProduct
表中删除一些先前"删除"的产品(例如,在…之前插入的所有产品),或者在第二个SELECT
语句中添加一些约束。你仍然处于比硬删除更安全的位置。