我们应用程序中的用户参与论坛并创建各种实体。在模式中,您将来自这些表的引用标记回用户表作为外键引用。我们无法从数据库中删除此用户条目,因为它有几个可以删除的外键约束。
一种寻址方法是将其他表中的用户字段设置为可为空,以便您可以在删除用户条目之前将这些值标记为可为空。从其他表中删除信息根本不是一种选择,因为它会导致不一致(例如,删除属于该用户的论坛帖子会导致问题)。
另一种选择是仅将用户条目标记为可移动,并且不将其作为用户查询的一部分提供。这在理论上意味着任何用户都不能从系统中删除,如果有人想使用与删除的用户相似的登录 ID,这可能会成为一个问题。
想知道其他人是如何解决这个问题的吗?
最佳答案
我们通常只是软删除用户。换句话说,在用户表中有一列表明他们不再活跃,并修改所有查询,以便它们仅适用于活跃用户。
这有两个好处:
- 它不会与其他表一起使用外键约束;和
- 它会保留所有数据,以防您需要在某个时候恢复它。
除非您的用户数量达到数十亿或营业额非常高,否则留住老用户不会对大多数数据库造成压力。
这可用于制定与 SO 类似的方案。当用户“消失”时,由其撰写的问题和答案仍然有作者信息,但显示为灰色。
如果您将用户信息设为 NULL(或者即使您有一个 Unknown
用户来分配帖子,如果您不想允许 NULL),您将不会获得此信息。
关于mysql - 您如何处理用户的删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3582920/