表示 mySQL 中两个用户之间的兼容性

Representing compatibility between two users in mySQL

我目前正在构建一个基于共同兴趣比较用户的网站,但我不确定表示每个用户之间关系的最佳方式是什么。

我已经通过创建一个用户 table 来尝试它,它具有 user_id 字段和一个兼容性 table,它存储为每个用户组合计算的兼容性分数。

COMPATIBILITY TABLE
---------------------------------------------
user_one             | FOREIGN_KEY(user_id)
user_two             | FOREIGN_KEY(user_id)
compatibility_score  | 0.5

(请注意,对于任何两个用户,兼容性分数始终相同,因此 user_one 和 user_two 可以有效互换)

然后,如果我想获得 ID 为“11”的用户的前 10 个最兼容用户的列表,我可以 运行:

SELECT * FROM `compatibility` WHERE `user_two_id` = 11 OR `user_one_id` = 11 ORDER BY `score` ASC LIMIT 10

但是我必须对结果做一些额外的工作以确定 user_one 或 user_two 是用户输出。 (即,不是当前用户 #11)

我还担心每个新用户的 table 大小都会呈指数增长,但这也许是不可避免的。

这是存储这种关系最有效和高效的方式吗?我应该调整我的设计还是完全采用不同的方法?我对此很陌生,我什至不确定我应该用谷歌搜索什么样的东西来解决这个问题,所以如果有人能指出我正确的方向,那将是一个巨大的帮助。

这似乎是一种接受table的方法!

  1. 您正在使用联结 table 来模拟多对多关系(良好)。
  2. 您正在使用外键(希望是复合键)来确保 user_oneuser_two 之间的唯一性(好)。
  3. <user_one, user_two, compatibility_score> 上定义索引应该允许使用仅索引计划进行相当快的检索(好)。

我确实认为有更好的方法,但我想不出它可能是什么。

祝你好运。