mysql - 您如何处理用户的删除

标签 mysql database database-design

我们应用程序中的用户参与论坛并创建各种实体。在模式中,您将来自这些表的引用标记回用户表作为外键引用。我们无法从数据库中删除此用户条目,因为它有几个可以删除的外键约束。

一种寻址方法是将其他表中的用户字段设置为可为空,以便您可以在删除用户条目之前将这些值标记为可为空。从其他表中删除信息根本不是一种选择,因为它会导致不一致(例如,删除属于该用户的论坛帖子会导致问题)。

另一种选择是仅将用户条目标记为可移动,并且不将其作为用户查询的一部分提供。这在理论上意味着任何用户都不能从系统中删除,如果有人想使用与删除的用户相似的登录 ID,这可能会成为一个问题。

想知道其他人是如何解决这个问题的吗?

最佳答案

我们通常只是软删除用户。换句话说,在用户表中有一列表明他们不再活跃,并修改所有查询,以便它们仅适用于活跃用户。

这有两个好处:

  • 它不会与其他表一起使用外键约束;和
  • 它会保留所有数据,以防您需要在某个时候恢复它。

除非您的用户数量达到数十亿或营业额非常高,否则留住老用户不会对大多数数据库造成压力。

这可用于制定与 SO 类似的方案。当用户“消失”时,由其撰写的问题和答案仍然有作者信息,但显示为灰色。

如果您将用户信息设为 NULL(或者即使您有一个 Unknown 用户来分配帖子,如果您不想允许 NULL),您将不会获得此信息。

关于mysql - 您如何处理用户的删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3582920/

相关文章:

php - 管理外键

mysql - 获取当前更新的列名称以在触发器中使用

python - Django 查询 : How to filter objects by todays day, 时间和 30 分钟后?

mysql - 如何针对单个父表设计多个子表?

python - 避免在 Python Flask 和大多数其他语言中使用魔数(Magic Number)

mysql - 数据库设计 - 哪个最适合这个?

php - 贝叶斯算法返回 0

javascript - 如何无限期删除 PouchDB 数据库以释放空间?

MySQL 算作一列

sql - Azure、MVC Web 应用程序架构 - 如何在 SQL Azure 和 Azure 表存储之间拆分数据?