我已经阅读了一些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
答案 0 :(得分:1)
我的评论:
compound key
超过surrogate key
以节省空间并避免使用其他索引<强>更新强>
你可能会认为友谊是双向的。仅仅因为UserA已经与UserB交往并不意味着UserB已经与UserA建立了联系。如果您跟踪双方,则可以更轻松地查询。在这种情况下,您可以:
Friend
-------
UserID
FriendUserID
因此,您只需匹配UserID列以获取用户朋友的列表。如果两个用户互相交友,则在表中放两行。如果一个用户与另一个用户不友好,则删除该行。
答案 1 :(得分:0)
虽然从设计的角度来看,复合键解决方案似乎更优雅,乍看之下耗费的空间更少,但在某些情况下,我个人会改为使用自动递增的数字ID。
如果在其他地方引用了友谊,那么从长远来看,它将节省更多空间,以便在引用表中将单个数字ID作为外键而不是复合ID。另外,如果您经常查询友谊ID,单个ID的索引(略微)会比复合索引更短更快。