use*_*108 4 mysql database database-design
我们的应用程序中的用户参与论坛并创建各种实体.在模式中,您将这些表中的引用标记为User表作为外键引用.我们无法从数据库中删除此用户条目,因为它有几个可以删除的外键约束.
解决方法之一是将其他表中的User字段设置为可为空,以便在删除用户条目之前将这些值标记为可为空.从其他表中删除信息根本不是一种选择,因为它会导致不一致(例如,删除属于该用户的论坛帖子会导致问题).
另一种选择是将User条目标记为可移除,并且不要将其作为用户查询的一部分提供.这在理论上意味着如果有人想要使用类似的loginid作为被删除的用户,则不能从系统中移除用户并且可能是一个问题.
想知道,其他人如何解决这个问题?
pax*_*blo 11
我们通常只是软删除用户.换句话说,在users表中有一列表示它们不再处于活动状态并修改所有查询,以便它们仅对活动用户起作用.
这有两个好处:
除非您的用户数量达到数十亿或者您的营业额非常高,否则保持老用户不会对大多数数据库造成压力.
这可用于制定与SO相似的方案.当用户"消失"时,他们撰写的问题和答案仍然有作者信息,但它是灰色的.
如果您将用户信息清空(或者即使您有一个Unknown用户将帖子分配给您,如果您不想允许NULL),您也不会拥有此信息.