我正在制作一个简单的社交应用程序,并有一个user_friend
表,其中既有user_id
和friend_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 |
+--------------+-----------------+
添加两列…requested
和accepted
:
+--------------------------------+-----------------+----------------+
| 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 |
+------------------+--------------------+
- 许多(用户)对许多(朋友)使用
users_friends
"pivot"表和 - 多(好友)到单(状态),在 列中直接插入状态