2012-02-07 45 views
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表格,我可以通过它在我的网站上实现友谊选项。作为朋友或不是它需要拥有的一切。朋友桌子的最佳方法

现在我想知道为此目的的最佳方法,如果有什么,我失踪。我想查询每个用户的朋友,并且用户应该能够从他们的朋友列表中添加或删除对方。

+0

我没有看到您的解决方案有任何问题,它看起来不错。 – Niklas 2012-02-07 12:07:59

+0

@Niklas:谢谢 – BehnUm 2012-02-12 19:38:09

回答

2

由于每个人都可能与另一个人成为朋友,因此您需要实现NxM(多对多)关系。在一个关系数据库管理系统中,在另一个表中翻译,就像你做的那样,制作“连接”。

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

在你例子,也许你可能要添加一列知道是谁问的友谊,还有谁。

编辑:我可能会删除fId列并创建列(外键)personA和personB的组合主键。通过这种方式,数据库将避免为同一个人提供多个请求,并且避免个人A向个人B和个人B请求友谊而不是仅仅接受它的情况,向个人A请求友谊,产生两个记录!

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

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

EDIT3:不,你需要到期时间(列REQUEST_DATE)?如果友谊请求在3个月内未得到回答,则该请求过期并被删除。