适用于朋友,共同朋友,朋友朋友等的SQL表

Ale*_*der 3 sql

我想知道将来最简单的方法是什么,使查询既有效又不复杂.

我应该保存双向关系吗?

from_id = 1,to_id = 2 from_id = 2,to_id = 1

或者只创建一个唯一的行

from_id = 1,to_id = 2

有什么想法吗?

Nis*_*ant 7

我建议双向关系.它的灵活ANS而这只是额外的工作,insert荷兰国际集团和delete荷兰国际集团的记录.

我看到的好处是:

  • 为了得到一个人的所有朋友,所有你需要做的是where from_id=userid不是where from_id=userid or to_id=userid以后是昂贵的.
  • 您可以在正向和反向关系中保留额外的元数据.假设你有一个案例userA is friend of userB while userB does not approves the relationship.要做到这一点,你可以有一个额外的isApproved,并将其设置truefrom_id=userA, to_id=userB假的from_id=userB, to_id=userA-这将允许进一步便宜sortselect.

    单排效果会有点棘手.

  • http://explainextended.com/2009/03/07/selecting-friends/包含对此主题的深入讨论.结论就像你说的那样 - 每个关系两行更容易查询,只需维持一个小的惩罚. (2认同)