mysql - 我应该将子帖子标记为删除还是主帖子就足够了?

标签 mysql sql database

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

我有三个表:ProductsVariationsColors

每个表都有字段visibility,如果将其设置为1,则帖子可见,如果设置为0,则帖子隐藏。 Products 是父表,它分别与子表VariationsColors 相关。您可以从任何表中删除帖子,但如果您从 Products 表中删除帖子,则 VariationsColors 中的任何相关帖子也会被考虑已删除,无论其 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/

相关文章:

mysql - Laravel 5.0 查询使用带连接的查询构建器

mysql - 如何使用加载数据本地 infile 从迁移中加载 rails 中的 csv 文件?

mysql - 根据另一个表中的更改自动更新数据库行

java - 更新 sqlite 中的查询

mysql - 如何更新mysql中所有重复记录的列

MySQL - 如何使用列约束声明主键?

c# - 如何查看 SubSonic SimpleRepository 生成的 SQL?

mysql - 3 个表之间的 HQL 多对多

SQL Server DELETE 错误 - 子查询返回超过 1 个值

sql - 使用两个表而不是具有 2 个不同值的列的优点