【发布时间】:2017-10-02 11:46:01
【问题描述】:
一个用户可以有很多兴趣。 许多用户可能对一个兴趣感兴趣。 我的数据库是这样的:
Users table:
id - primary key,
name,
email,
Interests table:
id - primary key,
title
Users_To_Interests table:
id - primary key,
user_id(id from users table)
interest_id(id from interests table)
如何改进 Users_To_Interests 表以便能够有效地挑选出所有具有相同兴趣的用户? user_id 和 interest_id 列没有索引或键。如果我需要添加它们,请告诉我该怎么做。
第 1 版:例如,
user1 has interests : interest1, interest2, interest3;
user2 has interests : interest3, interest4;
user3 has interests : interest3, interest5;
user4 has interests : interest4;
If I want to get all users who have interest1, I should receive user1;
If I want to get all users who have interest2, I should receive user1;
If I want to get all users who have interest3, I should receive user1, user2, user3;
【问题讨论】:
-
您希望在
(interest_id, user_id)和(user_id, interest_id)上为您可能进行的所有查询建立索引。 -
您能详细说明一下您所说的相同兴趣是什么意思吗?您是否在寻找完全匹配、部分重叠或其他内容?
-
您可以通过删除 id 字段并将其他两个字段作为主键来改进 users_to_interests 表。除其他外,这应该会自动为它们编制索引。
-
@TimBiegeleisen,我添加了一个我想要达到的示例
-
@GordonLinoff 我没有数据库架构方面的经验。您能否通过示例给我更多扩展答案或给我一个链接,我在哪里可以找到此信息?