下面是一个设计合理的 文章收藏表 (article_favorites
) 的 MySQL 表结构,可以用于存储用户收藏文章的记录。
表结构设计
表名:article_favorites
CREATE TABLE `article_favorites` (
`id` INT AUTO_INCREMENT PRIMARY KEY COMMENT '自增ID',
`user_id` INT NOT NULL COMMENT '用户ID',
`article_id` INT NOT NULL COMMENT '文章ID',
`favorite_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '收藏时间',
`status` TINYINT DEFAULT 1 COMMENT '收藏状态: 1=已收藏, 0=已取消',
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '记录创建时间',
`update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '记录更新时间',
UNIQUE KEY `unique_user_article` (`user_id`, `article_id`) COMMENT '唯一索引: 防止重复收藏'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='文章收藏表';
字段说明
字段名 | 类型 | 描述 |
---|---|---|
id | INT | 自增主键,唯一标识每条记录。 |
user_id | INT | 用户ID,表示收藏的用户。 |
article_id | INT | 文章ID,表示被收藏的文章。 |
favorite_time | DATETIME | 收藏时间,记录用户点击收藏的具体时间。 |
status | TINYINT | 收藏状态:1 表示已收藏,0 表示已取消收藏。 |
create_time | DATETIME | 记录创建时间,用于记录初次操作的时间戳。 |
update_time | DATETIME | 记录更新时间,每次状态变化会自动更新。 |
unique_user_article | 索引 | 唯一索引,防止同一个用户收藏同一篇文章多次。 |
关键点
-
收藏状态 (
status
):1
表示已收藏。0
表示取消收藏。
用这个字段可以避免直接删除记录,方便后续做数据统计或恢复操作。
-
唯一索引:
UNIQUE KEY \
unique_user_article` (`user_id`, `article_id`)` 确保每个用户对每篇文章只能收藏一次。
-
自动更新时间 (
update_time
):ON UPDATE CURRENT_TIMESTAMP
用于记录每次更新的时间,无需手动设置。
-
收藏时间 (
favorite_time
):- 独立字段记录用户收藏的具体时间,与
create_time
相区分,方便统计分析。
- 独立字段记录用户收藏的具体时间,与
-
引擎和字符集:
- 使用
InnoDB
引擎支持事务。 - 使用
utf8mb4
字符集,兼容特殊字符(如表情符号)。
- 使用
示例操作
1. 插入收藏记录
INSERT INTO `article_favorites` (`user_id`, `article_id`, `favorite_time`)
VALUES (1, 123, NOW())
ON DUPLICATE KEY UPDATE `status` = 1, `favorite_time` = NOW();
2. 取消收藏
UPDATE `article_favorites`
SET `status` = 0, `update_time` = NOW()
WHERE `user_id` = 1 AND `article_id` = 123;
3. 查询用户已收藏的文章
SELECT a.*
FROM `skd_article` a
INNER JOIN `article_favorites` af ON a.id = af.article_id
WHERE af.user_id = 1 AND af.status = 1;
测试数据
添加收藏
INSERT INTO `article_favorites` (`user_id`, `article_id`) VALUES
(1, 101),
(1, 102),
(2, 103);
查询收藏记录
SELECT * FROM `article_favorites`;
适用场景
- 文章收藏功能:用户收藏文章并可以随时查看或取消收藏。
- 数据统计:统计每篇文章的收藏数量、用户收藏的文章列表等。