我目前正在开发一个社交网站。 (是的,我知道,他们中有很多人。我不是想让Facebook全部结束)
我想知道是否有人可以告诉我,我的思维方式是否已经取消,或者是否实际上是这样做的。
我希望用户能够有朋友。而且,为此,我认为我应该有一个像这样的用法: USER
这应该是一个1:N的关系,所以我认为一个表“contacts”应该包含一个用户及其朋友的列表,如下所示: 联系
在uId上对此表进行排序是否是一种有效的解决方案,以便查询结果与此类似:
uID | friendId
1 | 2
1 | 6
1 | 97
75 | 1
75 | 34
等
或者有什么不同的解决方案吗?
答案 0 :(得分: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使用表级锁定进行插入(即较慢的插入),但查找速度很快。
祝你好运!答案 1 :(得分:0)
我认为最好的方法是毫无疑问地创建一个像你提议的表格。这将使您能够更好地管理朋友,在此表上为朋友查询,...这将是最佳解决方案。