朋友表的最佳方法

3
+-----------------------------------+
| fID | personA | personB | fStatus |
|-----------------------------------|
|  1  |  u1ID   |   u2ID  |    1    |
|  2  |  u3ID   |   u4ID  |    0    |
|  3  |  u1ID   |   u3ID  |    1    |
+-----------------------------------+

Status Column Codes:
0: Pending (personA wants to be friends with personB)
1: Friends (personA with personB)

* On removal request by either side > delete the corresponding row

我希望能有一个简单的MySQL表,以实现在我的网站上添加好友功能。它只需要拥有是或否的状态。

现在我想了解最佳实践方法,是否有我未注意到的问题。我想查询每个用户的好友,并且用户应该能够将对方添加或从自己的好友列表中删除。


我认为你的解决方案没有问题,看起来很不错。 - Niklas
1个回答

2
由于每个人都可以与另一个人成为朋友,因此您需要实现NxM(多对多)关系。在关系数据库管理系统中,这将转化为另一张表格,用于创建“连接”,就像您所做的那样。

http://weblogs.asp.net/zeeshanhirani/archive/2008/08/21/many-to-many-mappings-in-entity-framework.aspx

在你的例子中,也许你想要添加一列来知道谁向谁发出了友谊请求。
编辑:我可能会删除fId列,并创建由列(外键)personA和personB组成的复合主键。这样可以避免数据库为同一人之间有多个请求,以及避免情况发生,即personA向personB请求友谊,而personB没有接受,反而向personA请求友谊,导致出现两条记录!
编辑2:您可以使用状态字段来存储友谊请求的“所有者”:
0: pending, A asked to B
1: pending, B asked to A
2: friends

编辑3:您不需要一个过期时间(请求日期列)吗?如果一份友谊请求在,比如说,3个月内没有得到回复,那么该请求就会过期并被删除。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接