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

时间:2015-01-13 18:03:14

标签: mysql database-design

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

我通过创建用户表来尝试它,其中包含user_id字段和兼容性表,该表存储了每个用户组合的计算兼容性分数。

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)

我还担心,对于每个新用户,表格大小将呈指数级增长,但这可能是不可避免的。

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

1 个答案:

答案 0 :(得分:0)

这似乎是一种可以接受的方式!

  1. 您正在使用联结表来建模多对多关系(好)。
  2. 您正在使用外键(希望是复合键)以确保user_oneuser_two之间的唯一性(好)。
  3. <user_one, user_two, compatibility_score>上定义索引应该允许使用仅索引计划(好)进行相当快速的检索。
  4. 我确实认为这样做的方法略胜一筹,但我无法想到它可能是什么。

    祝你好运。