多对多关系关系数据库

时间:2014-04-12 13:48:29

标签: mysql database

我知道技术上mysql并不支持多对多。我们应该创建一个桥表。但就我而言,我仍然对此感到困惑。

当许多用户可以拥有很多朋友时,2个表(或更多)的表情如何?把它想象成社交网络应用程序。

user
=====
id
name

friend
=====
id
name

我很困惑,也不知道如何链接它们,因为在朋友表中,id也可以是用户'标识。

2 个答案:

答案 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都指向表用户(即它们是外键约束)。

如果关系是对称的,我认为上述方法仍然有效,你可以随时插入(或删除)两条记录,或者你总是需要检查两列。