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

时间:2010-07-16 06:58:51

标签: mysql database database-design social-networking

假设您有一个表格架构,例如:friends(friendship_id, uid1, uid2, are_friends)

当一个朋友与另一个人取消联系时,最好从数据库删除该行(并重置自动递增)?或者你应该简单地将are_friends状态更改为'N'<​​/ strong>?

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

编辑:我主要关注的是显示有关朋友状态的一些信息,还会显示谁是谁的朋友。这样在添加时我可以通知朋友的请求,但还没有让他们成为朋友。

我最初有are_friends作为一个有ENUM的大ENUM选项。但在removed blocked我有(uid1, uid2)和{{1}}这样的选项,我不确定这是否真的是有用的数据。关于拥有更多与更少数据的优点的任何进一步想法?

此外,自我发布以来我已经提出的另一个问题是如何避免重复友谊。你应该将{{1}}作为主键吗?

5 个答案:

答案 0 :(得分:7)

如果用户与其他用户重新建立联系,是否有与您要恢复的friend记录相关联的数据?

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

如果您不想跟踪他们的历史记录,并且稍后重新发送消息,则不需要用户输入任何额外数据,请将其删除。您将拥有更小的表格,更简单的查询,并且您可能会忘记where-clause并向他们显示已删除的用户朋友的可能性降低。

答案 1 :(得分:2)

典型的N:M关系:

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

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

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

我会说删除它。确认什么是默认状态的不必要的数据实际上并不是很重要,特别是即使是一个小型网站的数量也可能会增加。如果你要在那里存储额外的有用数据,可能只是改变,但除此之外没有什么意义。

答案 4 :(得分:0)

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