我目前正在建立一个基于共同兴趣来比较用户的网站,但我不确定表示每个用户之间关系的最佳方式是什么。
我通过创建用户表来尝试它,其中包含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搜索什么样的东西来解决这个问题,所以如果有人能指出我正确的方向,那将是一个巨大的帮助。
答案 0 :(得分:0)
这似乎是一种可以接受的方式!
user_one
和user_two
之间的唯一性(好)。<user_one, user_two, compatibility_score>
上定义索引应该允许使用仅索引计划(好)进行相当快速的检索。我确实认为这样做的方法略胜一筹,但我无法想到它可能是什么。
祝你好运。