我已经阅读了许多有关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/

10-09 08:32