在用户发表评论的论坛表上使用的最佳约束是什么?
假设一些用户将在稍后阶段被删除。如果我删除了已发表评论的用户,表格中的用户条目会发生什么?
希望有人能解释一下。
这个问题有两个部分:
如何最好地实现这一点?您可以“软删除”用户行。这具有以下优点:
软删除可以通过在 users 表中添加另一列来实现dateDeleted
——如果它是 Null,则不会删除用户。我相信 SO 使用这种机制来删除帖子。
做restrict cascade no action
什么?MySQL文档说
RESTRICT:拒绝对父表的删除或更新操作。指定 RESTRICT(或 NO ACTION)与省略 ON DELETE 或 ON UPDATE 子句相同。
NO ACTION:来自标准 SQL 的关键字。在 MySQL 中,相当于 RESTRICT。如果引用的表中有相关的外键值,InnoDB 拒绝对父表的删除或更新操作。一些数据库系统有延迟检查,NO ACTION 是延迟检查。在 MySQL 中,立即检查外键约束,因此 NO ACTION 与 RESTRICT 相同。
换句话说,如果你使用它,如果这样做会破坏参照完整性,你将无法删除行。