我已阅读this帖子,但我担心电子商务网站的最佳解决方案
我们的情景:
产品表
ProductID Name Price
OrderDetails表
OrderID ProductID
OrderDetails表有FK
ProductID引用于Product表的ProductID
一旦产品被删除,您将如何显示历史订单报告?
选项:
软删除不利 - 它会影响数据库存储性能
硬删除劣势 - 在报告时需要额外的连接查询
任何帮助都会很棒。
答案 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
语句添加一些约束。你仍然处于比硬删除更安全的位置。