Nyx*_*yxx 9 mysql sql database facebook social-networking
为了在社交网络中存储朋友关系,最好是让另一个表有列,relationship_id, user1_id, user2_id, time_created, pending或者将确认好的朋友的user_id分解/内爆成单个长字符串并与其他用户详细信息一起存储,user_id, name, dateofbirth, address并限制为仅限5000个类似的朋友到Facebook?
有没有更好的方法?第一种方法将创建一个巨大的表!第二个有一列非常长的字符串......
在每个用户的个人资料页面上,他的所有朋友都需要从数据库中检索,以显示类似于Facebook的30个朋友,所以我认为使用单独表格的第一种方法会导致大量的数据库查询?
Mik*_*ron 13
最合适的方法是拥有会员表(显然),以及第二个朋友关系表.
你不应该永远保存在那样的字符串的外键.重点是什么?您不能加入它们,对它们进行排序,对它们进行分组,或者首先证明拥有关系数据库的任何其他东西.
如果我们假设Member表看起来像这样:
MemberID int Primary Key
Name varchar(100) Not null
--etc
Run Code Online (Sandbox Code Playgroud)
然后您的友谊表应如下所示:
Member1ID int Foreign Key -> Member.MemberID
Member2ID int Foreign Key -> Member.MemberID
Created datetime Not Null
--etc
Run Code Online (Sandbox Code Playgroud)
然后,您可以将表连接在一起以提取朋友列表
SELECT m.*
FROM Member m
RIGHT JOIN Friendship f ON f.Member2ID = m.MemberID
WHERE f.MemberID = @MemberID
Run Code Online (Sandbox Code Playgroud)
(这特别是SQL Server语法,但我认为它非常接近MySQL.这@MemberID是一个参数)
这总是比分割字符串和进行30次额外的SQL查询以提取相关数据更快.