我已经阅读了许多关于 mysql Facebook 友谊表的解决方案,并决定使用一个相当简单的表,其中包含两个字段 user_a 和 user_b。然后,我将使用带有 UNION 的查询来获取所有用户 friend 的列表(因为他们可能位于 user_a 或 user_b 中)。我现在的问题是……使用自动递增的唯一 id 还是复合 id 更好?
表1)
用户_a、用户_b
表2)
unique_id、user_a、user_b
最佳答案
我的评论:
- 这两种方法都可以。我想要
compound key
超过surrogate key
节省空间并避免额外的索引 - 不过,您可能需要代理键 - 某些 DAL 不适用于复合键
更新:
你可能认为友谊是一条双向路。仅仅因为用户 A 与用户 B 成为好友并不意味着用户 B 也与用户 A 成为好友。如果你跟踪双方,它会让你的查询更容易。在这种情况下,您可以:
Friend
-------
UserID
FriendUserID
因此,您只需匹配 UserID 列即可获取用户的好友列表。如果两个用户互相加好友,则可以在表中放入两行。如果一名用户与另一名用户解除好友关系,您将删除该行。
关于mysql - 友谊表的最佳主键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2772795/