朋友表最好的方法

时间:2012-02-07 12:03:57

标签: mysql database database-design

+-----------------------------------+
| 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表,通过它我可以在我的网站上实现友谊选项。不管是不是朋友,都需要拥有它。

现在我想知道为此目的的最佳方法,如果有一些我缺少的东西。我想查询每个用户的朋友,用户应该能够从他们的朋友列表中添加或删除对方。

1 个答案:

答案 0 :(得分:2)

由于每个人都可能与另一个人成为朋友,因此您需要实现NxM(多对多)关系。在关系数据库管理系统中,在另一个表中转换为“联结”,就像你一样。

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

在你的例子中,也许你可能想要添加一个专栏来了解谁将这个友谊问到了谁。

编辑:我可能会删除fId列并创建列(外键)personA和personB的组合主键。这样,db就可以避免对同一个人有多个请求,并且还避免了personA向personB和personB询问友谊而不是仅接受它的情况,向personA询问友谊,从而产生两条记录!

edit2:您可以使用状态字段存储友情请求“所有者”:

0: pending, A asked to B
1: pending, B asked to A
2: friends

edit3:你不需要一个到期时间(列request_date)吗?如果在3个月内没有回答友谊请求,则请求到期并被删除。