我已经阅读了许多有关mysql Facebook友谊表的解决方案,并决定在一个非常简单的表中使用两个字段user_a和user_b。然后,我将使用带有UNION的查询来获取所有用户朋友的列表(因为它们可能在user_a或user_b中)。我现在的问题是...拥有自动递增的唯一ID或复合ID更好吗?
表格1)
user_a,user_b
表2)
unique_id,user_a,user_b
最佳答案
我的评论:
两种方法都可以。我更喜欢compound key
而不是surrogate key
来节省空间并避免其他索引
但是您可能需要代理密钥-某些DAL无法与复合密钥一起使用
更新:
您可能会认为友谊是一条两条路。仅仅因为UserA与UserB成为朋友并不意味着UserB与UserA成为朋友。如果您同时跟踪双方,这将使查询更加轻松。在这种情况下,您可以:
Friend
-------
UserID
FriendUserID
因此,您仅在UserID列上进行匹配以获取用户的朋友列表。如果两个用户互为好友,则在表中放置两行。如果一个用户与另一个用户解除好友关系,则删除该行。
关于mysql - 友谊表的最佳主键,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2772795/