mysql - 友谊表的最佳主键

标签 mysql primary-key

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

相关文章:

mysql - 用户 'root' @'localhost' 的访问被拒绝(使用密码 : YES) when authentication_string is correct

mysql - 将两列合并为新列并在同一个 mysql 查询中使用该列

Hibernate/JPA 2/PostgreSQL - 实体 UUID 作为主键

sql - 在 SQL 中将数据从一个数据库导出到另一个数据库时忽略重复的主键

mysql - 如何在mysql中查找行中的相对比率

mysql - 为什么我的 SQL UPDATE 语句不能在循环中运行?

mysql 表中多个外键指向同一个主键

sql-server - 带有 UUID 主键的 ActiveRecord 迁移

php - 如何将2个查询数据包含到单个结果中?

mysql - 外键引用同一张表中的主键 Mysql