我不确定这个问题是否太主观,但请告诉我是否有更合适的论坛。
我有三个表:Products
、Variations
和 Colors
。
每个表都有字段visibility
,如果将其设置为1
,则帖子可见,如果设置为0
,则帖子隐藏。 Products
是父表,它分别与子表Variations
和Colors
相关。您可以从任何表中删除帖子,但如果您从 Products
表中删除帖子,则 Variations
或 Colors
中的任何相关帖子也会被考虑已删除,无论其 visibility
字段设置为 1
还是 0
。
如果产品被删除,最好扫描所有表并将所有内容标记为已删除,还是仅在父表中标记帖子就足够了?
我可以看到取消删除父帖子并完整保留子表历史记录的好处,但您也可以认为它们是间接删除的,应该如此标记,也许会在查询时间上获得一些微秒,并最终避免如果代码中某处缺少连接或可见性字段检查,则会出现错误。对于这两种方法,您还可以想到其他论据吗?
最佳答案
如果visibility
列确定帖子是否被删除,我认为您只能在父表Products
中拥有它,而子表中不需要它变体
和颜色
。如果 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
语句时,您始终可以通过一对多关系中的父字段确定子项的状态,因此只需更新父表中的字段即可,我认为相同的字段是多余的在子表中。
关于mysql - 我应该将子帖子标记为删除还是主帖子就足够了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51780535/