我知道技术上mysql并不支持多对多。我们应该创建一个桥表。但就我而言,我仍然对此感到困惑。
当许多用户可以拥有很多朋友时,2个表(或更多)的表情如何?把它想象成社交网络应用程序。
user
=====
id
name
friend
=====
id
name
我很困惑,也不知道如何链接它们,因为在朋友表中,id也可以是用户'标识。
答案 0 :(得分:2)
制作第3张“映射”表的最佳实践。
user
=====
id
name
m2m_user_friend
=====
user_id
friend_user_id
user_id和user_friend_id都是该用户表的外键。
这允许最有效的查询,例如“给我所有朋友的人ID = 17”,而且,如果朋友关系是单向的(例如友情请求),你可以反过来做事情“告诉我那些人是/想成为id = 17“的朋友。
社交网络最有可能使用称为图形数据库的东西。关系数据库很棒 - 除非你需要扩展。虽然在某些时候可以将数据分散在10,000台具有传统数据库(如MySQL)的计算机上。
答案 1 :(得分:0)
问题在于这种关系是否必然是对称的,即如果Alice是Bob的朋友暗示Bob也是Alice的朋友。
一般情况下这不是真的,那么你需要代表你的朋友这样的表:
friends
======
user_id
friend_id
其中user_id和friend_id都指向表用户(即它们是外键约束)。
如果关系是对称的,我认为上述方法仍然有效,你可以随时插入(或删除)两条记录,或者你总是需要检查两列。