从数据库中删除“朋友”的最佳做法是啥?

Posted

技术标签:

【中文标题】从数据库中删除“朋友”的最佳做法是啥?【英文标题】:What are best practices for removing "friends" from a database?从数据库中删除“朋友”的最佳做法是什么? 【发布时间】:2010-07-16 06:58:51 【问题描述】:

假设您有这样的表架构:friends(friendship_id, uid1, uid2, are_friends)

当一个朋友取消了另一个人的朋友时,最好的做法是从数据库中删除该行(并重置自动递增)?还是应该简单地将 are_friends 状态更改为“N”

我很想知道你的想法和原因。

编辑:我主要关心的是显示一些关于朋友状态的信息,以及显示谁加了谁。这样,在添加时,我可以将好友的请求通知给好友,但尚未让他们成为好友。

我最初将are_friends 用作大号ENUM,并提供更多选项。但在那个ENUM 中,我有removedblocked 之类的选项,我不确定这是否是真正有用的数据。关于拥有更多与更少数据的优点有什么进一步的想法吗?

另外,自从我发帖以来,我还有一个问题是应该如何避免重复友谊。您应该将(uid1, uid2) 设为主键吗?

【问题讨论】:

您要保留多少信息?如果你在 Facebook 工作,看起来你将不得不保留一个额外的表来维护友谊历史,当然永远不要删除它...... 【参考方案1】:

如果用户与其他用户重新成为朋友,是否有任何与 friend 记录相关的数据您可能想要恢复?

如果您想跟踪他们的历史,或保留一些与他们的关系相关联的元数据,请保留记录。

如果您不想跟踪他们的历史记录,并且以后重新加好友不需要用户输入任何额外数据,请将其删除。您将拥有更小的表格、更轻松的查询,并降低您忘记 where 子句并显示他们已删除的用户朋友的可能性。

【讨论】:

如果能够跟踪一个朋友是否接受了另一个朋友呢?这是我最关心的问题。否则我之前曾想过类似的事情:ENUM('pending', 'accepted', 'rejected' ...)【参考方案2】:

典型的 N:M 关系:

关系表中不需要friendship_idare_friends 字段。 这样,如果表中的关系存在,则用户是朋友,否则不是。

存储“不是朋友”是无用的混乱。 除非@fencliff 描述的情况

无论你做什么:除非你重置整个数据库,否则永远不要重置自动增量。

【讨论】:

我真的很好奇为什么不应该重置自动增量。请告诉我。【参考方案3】:

我建议删除该行,因为首先是不需要占用空间的数据,而且下次用户决定与同一个朋友重新加好友时,我们可以再次输入数据,如果需要的话。

【讨论】:

这也是我的直觉。【参考方案4】:

我会说删除它。确认默认状态的不必要数据并没有多大意义,尤其是即使是一个很小的站点也可能会累积这些数据的数量。如果您要在其中存储额外的有用数据,也许只是更改,否则没有意义。

【讨论】:

【参考方案5】:

我想说这首先取决于您的业务需求。如果您需要跟踪这两个人曾经是朋友并且不再是朋友的事实,那么您必须将该行保留在您的数据库中,可能还会添加一些您可能感兴趣的列(当他们成为朋友时,当他们不再是朋友时,等等)。否则,您实际上并不需要此行,因此最好将其删除。当然,在这种情况下,您也不需要 are_friends 列,因为您的数据库中存在的所有行都将对应于成为朋友的人。

【讨论】:

以上是关于从数据库中删除“朋友”的最佳做法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

使用 jquery 删除活动存储附件并重新渲染附件有帮助吗?最佳做法是啥?

关于主题名称的最佳做法是啥

在 .NET Core 2 Web Api 中验证 JWT 后获取用户数据的最佳做法是啥?

(在表格中搜索)最佳做法是啥? [关闭]

使用 Vue JS 从数组中过滤数据的最佳方法是啥?

创建链接以重置密码的最佳做法是啥? [关闭]