你如何处理用户删除

use*_*108 4 mysql database database-design

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

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

另一种选择是将User条目标记为可移除,并且不要将其作为用户查询的一部分提供.这在理论上意味着如果有人想要使用类似的loginid作为被删除的用户,则不能从系统中移除用户并且可能是一个问题.

想知道,其他人如何解决这个问题?

pax*_*blo 11

我们通常只是软删除用户.换句话说,在users表中有一列表示它们不再处于活动状态并修改所有查询,以便它们仅对活动用户起作用.

这有两个好处:

  • 它不会填充其他表的外键约束; 和
  • 它保留了在某些时候你需要恢复它的机会的所有数据.

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

这可用于制定与SO相似的方案.当用户"消失"时,他们撰写的问题和答案仍然有作者信息,但它是灰色的.

如果您将用户信息清空(或者即使您有一个Unknown用户将帖子分配给您,如果您不想允许NULL),您也不会拥有此信息.

  • 您可以在表上创建自动筛选出软删除用户的视图.当所有人都忘记将'deleted = 0'条件添加到where子句时,这将节省大量时间和麻烦. (2认同)