如何为用户喜欢的主题设置表格?我有一个主题表和一个用户表(更实际但简化了此处的帖子)。用户生成的主题越来越多,我怎么能让用户喜欢页面?我会将主题的 id 放在用户表中还是将用户的 id 放在主题表中,或者创建一个新的喜欢表?我看到的问题是主题的数量可能(可能)非常大。我可以使用什么来创建一个允许用户 ID 和主题 ID 之间建立关系的系统?
4 回答
您可能会做的是“多对多”表结构
- 唯一的自动递增 id -
UINT (10) AUTO_INCREMENT
- 包含用户 ID 的字段 -
UINT (10)
(或与您的主user_id
字段匹配的内容) - 包含“喜欢”主题 id 的字段 -
UINT (10)
(或与您的主要topic_id
字段匹配的内容)
user_id
和字段topic_id
一起需要是唯一的。这意味着每个用户只能有一个特定喜欢的行。这确保(在数据库方面)不允许用户多次喜欢一个主题。
获得用户喜欢的主题看起来像这样 -
SELECT * FROM user_likes` WHERE `user_id`=USER_ID
让用户喜欢看起来像这样 -
SELECT * FROM user_likes WHERE
topic_id`=TOPIC_ID
正如其他人在他们的回答中所说的那样,以及在下面的评论中@trevor -
不要忘记在用户 ID 上添加索引以支持检索用户喜欢的主题,并且主题上的单独索引用于支持每个用户查询的主题 -没有这些,随着时间的推移添加更多数据,查询将变得更慢。
一种方法是创建一个新表UserLikedTopics
或类似的东西,其中有两列,一列保留 ,一列UserId
保留TopicId
. 对于用户“喜欢”的每个新主题,您将使用 UserId 和 TopicId 在表中添加一个新行。这样就很容易跟踪哪些用户喜欢哪些主题。
要获得某个用户喜欢的主题,您只需将 UserLikedTopics 与您的主题表连接起来,您就会拥有某个用户喜欢的所有主题的列表。您也可以反过来将其加入用户表中,以获取喜欢某个主题的用户列表。
您将需要一个“喜欢”表。就像是:
CREATE TABLE `users_likes` (
`user_id` INT(10) UNSIGNED NOT NULL,
`topic_id` INT(10) UNSIGNED NOT NULL,
PRIMARY KEY (`user_id`, `topic_id`),
INDEX `topic_id` (`topic_id`)
)
创建一个单独的喜欢表,因为它是一个单独的实体,
将喜欢表与用户和主题表链接起来,用户ID和主题ID作为喜欢表中的外键..
有这样的结构会很好,以后如果您甚至不想要喜欢的功能,可以将其删除而不会影响其他表...