2011-10-06 66 views
0

我目前正在一个社交网站上工作。 (是的,我知道,这里有一大堆,我不是想让Facebook全部结束)设计一个与用户之间的关系表的好方法是什么?

我想知道如果有人能告诉我,我的思维方式如何,或者如果它是它实际上完成了。

我想让用户能够拥有朋友。而且,对于这一点,我想我应该有一个用户表像这样: USER

  • 的uId
  • 的userName
  • 电子邮件
  • 等。

这大概应该是一个1:N的关系,所以我认为表格“联系人”应该包含用户和他们的朋友列表,如下所示:联系人

  • UID(从USER)
  • FriendId(来自USER表)
  • 友谊类型ENUM [活动,不活动,待定]

难道是进行排序UID该表中的一个有效的解决方案,以便查询结果看起来类似于此:
uID | friendId
1 | 2
1 | 6
1 | 97
75 | 1
75 | 34

还是有这个任何不同的解决方案?

+0

你能解释一下你的意思是“这将是这个排序表中的有效的解决方案......”。更具体地说,你为什么要排序数据呢?你是否在查询表并返回大量行,并使用不同的uID? – csjohn

+0

我想知道这是否会成为选择与给定uId相关联的朋友的有效方式,或者如果随着表越来越大,它将成为db上的一大负担?而且,如果是这样,是否有更好的方法来进行查询? –

+0

这取决于你的需要,如果你想获得与特定用户有关的记录没关系,但作为排序点,如果记录在表中增加,则需要时间对记录进行排序。 – punit

回答

1

如果您只是想要选择一组特定的用户,那么查询将很简单,您不必担心性能问题。

例如:如果你正在寻找返回的UID 8朋友的ID的,你可以这样做:

Select FriendId FROM TABLE where UID=8; 

在你的情况下,由于UID列不是唯一的,确保有此列上的索引允许快速查找(优化性能)。

您可能还想考虑一下您需要的关于用户朋友的其他数据。例如它可能没有必要只是抢FriendIds,你可能想名字等,所以您的查询可能会看起来更像:

Select FriendId, Users.name FROM Friends JOIN Users ON Users.uid=Friends.FriendId WHERE Friends.UID=8; 

同样,有适当的索引列是优化查找关键,尤其是当你的桌子大小变大。

此外,由于添加的朋友的行为很可能相较于查找查询的数量很少见你,一定要选择一个数据库引擎,提供最快的查找速度。在这种情况下,MyISam可能是您最好的选择。 MyISam对插入使用表级锁定(即较慢的插入),但查找速度很快。

祝你好运!

0

我认为最好的方法无疑是建立一个像你所建议的表格。这可以让你更好地管理朋友,在这张桌子上为朋友做查询......这将是最好的解决方案。

相关问题