首页 > 解决方案 > 我应该将子帖子标记为删除还是主帖子就足够了?

问题描述

我不确定这个问题是否过于主观,但如果有更适合它的论坛,请告诉我。

我有三个表ProductsVariationsColors

每个表都有该字段visibility,如果设置为1帖子可见,如果设置为0隐藏。Products是父表,它与子表有关系,Variations并且是Colors分开的。您可以从任何表格中删除帖子,但如果您从表格中删除帖子,则来自或的Products任何相关帖子也将被视为已删除,无论其字段是否设置为或。VariationsColorsvisibility10

如果产品被删除,最好扫描所有表并将所有内容标记为已删除,还是仅在父表中标记帖子就足够了?

我可以看到取消删除父帖子并使子表的历史完整无缺的好处,但您也可以争辩说它们是间接删除的,应该这样标记,可能会在查询时间上增加一些微秒,最后避免错误,如果加入或检查代码中某处缺少可见性字段。对于这两种方法,您还能想到任何其他论点吗?

标签: mysqlsqldatabase

解决方案


如果visibility列确定是否删除了帖子,我认为您只能在父表中拥有它,Products而在子表VariationsColors. 如果与其他两个表之间存在关系,Products您始终可以使用JOIN并知道标记为已删除的内容。

例如,如果您有以下查询:

SELECT * FROM `Products` p 
LEFT JOIN `Variations` v ON p.product_id = v.product_id
LEFT JOIN `Colors` c ON p.product_id = c.product_id
WHERE p.visibility = 1;

您将仅获取可见产品的数据,如果您想从子表中获取已删除的数据,您可以执行以下操作:

SELECT v.* FROM `Variations` v 
LEFT JOIN `Products` p ON v.product_id = p.product_id
WHERE p.visibility = 0;

最后一个查询将为您Variations提供标记为已删除的记录。

结论

使用语句时,您始终可以通过一对多关系中的父字段确定子字段的状态,JOIN因此只需更新父表中的字段,我认为相同的字段在子表中是多余的。


推荐阅读