如何处理好友请求在数据库中的接受逻辑?



我正在制作一个简单的社交应用程序,并有一个user_friend表,其中既有user_idfriend_id作为其复合键。在前端,当前用户可以查看其他人的个人资料,然后点击添加好友按钮更新user_friend表。例如,id为100的用户可以查看id为9和15的用户配置文件,并单击add按钮,然后user_friend表被更新为

user_id: 100, friend_id 9

user_id: 100, friend_id 15

处理这种请求的最佳方法是什么?我正在考虑创建一个名为request_table的新表,其中requester列具有用户id,accepter列具有朋友id,status列具有已接受和待处理。因此,当请求者单击add friend按钮时,状态被更新为accept,然后更新user_friend表以反映更改(通过在上面的示例中添加新行user_id: 9, friend_id 100)。请建议是否有更干净或更好的方法来做到这一点。

我会让它比你想象的简单得多。您当前的表看起来像:

+--------------------------------+
|   user_id    |    friend_id    |
+--------------+-=---------------+
|     100      |       15        |
+--------------+-----------------+
|     100      |        9        |
+--------------+-----------------+

添加两列…requestedaccepted:

+--------------------------------+-----------------+----------------+
|   user_id    |    friend_id    |    requested    |    accepted    |
+--------------+-=---------------+-----------------+----------------+
|     100      |       15        |        1        |         0      |
+--------------+-----------------+-----------------+----------------+
|     100      |        9        |        1        |         1      |
+--------------+-----------------+-----------------+----------------+

虽然可以假设如果表中的条目requested将始终是1—所以实际上您只需要添加accepted列。但是你得到了基本的思想/原理。

注意如果你需要更多的状态,而不仅仅是"接受";喜欢——输入"blocked";或";suspended"等等,你可以创建第三个表,并以关系方式使用它。

+-----------------------------------------------------------------+
|              user_firends (uf_id for indexing FASTER)           |
+--------------------------------+-----------------+--------------+
|      uf_id   |     user_id     |    friend_id    |    status    |
+--------------+-=---------------+-----------------+--------------+
|       1      |      100        |        9        |       1      |
+--------------+-----------------+-----------------+--------------+
|       2      |      100        |        15       |       2      |
+--------------+-----------------+-----------------+--------------+
+---------------------------------------+
|             statuses_table            |
+------------------+--------------------+
|      status_id   |        status      |
+------------------+--------------------+
|         1        |      requested     | 
+------------------+--------------------+
|         2        |       accepted     |
+------------------+--------------------+
|         3        |       rejected     |
+------------------+--------------------+
|         4        |       blocked      |
+------------------+--------------------+
  1. 许多(用户)对许多(朋友)使用users_friends"pivot"表和
  2. 多(好友)到单(状态),在
  3. 列中直接插入状态

相关内容

  • 没有找到相关文章

最新更新