RecommendByHot_scores
Change-Id: Icfef76f6ce21a60288c61d60ad1cd2d70045f953
diff --git a/src/main/resources/schema.sql b/src/main/resources/schema.sql
index d97701c..e5ddbb4 100644
--- a/src/main/resources/schema.sql
+++ b/src/main/resources/schema.sql
@@ -1,111 +1,122 @@
-CREATE DATABASE IF NOT EXISTS g8backend;
-USE g8backend;
-
+-- 用户表(保持不变)
CREATE TABLE IF NOT EXISTS `users` (
- user_id INT AUTO_INCREMENT PRIMARY KEY,
- user_name VARCHAR(255) NOT NULL,
- password VARCHAR(255) NOT NULL,
- email VARCHAR(255) NOT NULL UNIQUE,
- passkey VARCHAR(255) NOT NULL UNIQUE
+ `user_id` INT AUTO_INCREMENT PRIMARY KEY,
+ `user_name` VARCHAR(255) NOT NULL,
+ `password` VARCHAR(255) NOT NULL,
+ `email` VARCHAR(255) NOT NULL UNIQUE,
+ `passkey` VARCHAR(255) NOT NULL UNIQUE
);
+-- 种子表(保持不变)
CREATE TABLE IF NOT EXISTS `torrents` (
- torrent_id INT AUTO_INCREMENT PRIMARY KEY,
- user_id INT NOT NULL,
- torrent_name VARCHAR(255) NOT NULL,
- info_hash BINARY(20) NOT NULL,
- file_size FLOAT NOT NULL,
- FOREIGN KEY (user_id) REFERENCES users(user_id)
+ `torrent_id` INT AUTO_INCREMENT PRIMARY KEY,
+ `user_id` INT NOT NULL,
+ `torrent_name` VARCHAR(255) NOT NULL,
+ `info_hash` BINARY(20) NOT NULL,
+ `file_size` FLOAT NOT NULL,
+ FOREIGN KEY (`user_id`) REFERENCES `users`(`user_id`)
);
+-- Peer表(保持不变)
CREATE TABLE IF NOT EXISTS `peers` (
- passkey VARCHAR(255) NOT NULL,
- info_hash BINARY(20) NOT NULL,
- peer_id VARCHAR(20) NOT NULL,
- ip_address VARCHAR(128) NOT NULL,
- port INT NOT NULL,
- uploaded FLOAT NOT NULL,
- downloaded FLOAT NOT NULL,
- last_seen TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
- FOREIGN KEY (passkey) REFERENCES users(passkey),
- PRIMARY KEY (passkey, info_hash, peer_id)
+ `passkey` VARCHAR(255) NOT NULL,
+ `info_hash` BINARY(20) NOT NULL,
+ `peer_id` VARCHAR(20) NOT NULL,
+ `ip_address` VARCHAR(128) NOT NULL,
+ `port` INT NOT NULL,
+ `uploaded` FLOAT NOT NULL,
+ `downloaded` FLOAT NOT NULL,
+ `last_seen` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+ FOREIGN KEY (`passkey`) REFERENCES `users`(`passkey`),
+ PRIMARY KEY (`passkey`, `info_hash`, `peer_id`)
);
+-- 帖子表(新增 hot_score 和 last_calculated 字段)
CREATE TABLE IF NOT EXISTS `posts` (
- post_id INT AUTO_INCREMENT PRIMARY KEY,
- user_id INT NOT NULL,
- hot_score DOUBLE DEFAULT 0.0,
- view_count INT DEFAULT 0,
- post_title VARCHAR(255) NOT NULL,
- post_content TEXT NOT NULL,
- post_type ENUM('resource', 'discussion') NOT NULL,
- created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
- FOREIGN KEY (user_id) REFERENCES users(user_id)
+ `post_id` INT AUTO_INCREMENT PRIMARY KEY,
+ `user_id` INT NOT NULL,
+ `hot_score` DOUBLE DEFAULT 5.0 COMMENT '热度评分',
+ `view_count` INT DEFAULT 0 COMMENT '浏览数',
+ `post_title` VARCHAR(255) NOT NULL,
+ `post_content` TEXT NOT NULL,
+ `post_type` ENUM('resource', 'discussion') NOT NULL,
+ `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ `last_calculated` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后热度计算时间',
+ FOREIGN KEY (`user_id`) REFERENCES `users`(`user_id`),
+ INDEX `idx_hot_score` (`hot_score`), -- 新增热度索引
+ INDEX `idx_post_type` (`post_type`) -- 新增类型索引
);
+-- 标签表(保持不变)
CREATE TABLE IF NOT EXISTS `tags`(
- tag_id INT AUTO_INCREMENT PRIMARY KEY,
- tag_name VARCHAR(255) NOT NULL UNIQUE,
- parent_id INT DEFAULT NULL,
- FOREIGN KEY (parent_id) REFERENCES tags(tag_id)
+ `tag_id` INT AUTO_INCREMENT PRIMARY KEY,
+ `tag_name` VARCHAR(255) NOT NULL UNIQUE,
+ `parent_id` INT DEFAULT NULL,
+ FOREIGN KEY (`parent_id`) REFERENCES `tags`(`tag_id`)
);
+-- 帖子标签关联表(保持不变)
CREATE TABLE IF NOT EXISTS `post_tag` (
- post_id INT NOT NULL,
- tag_id INT NOT NULL,
- FOREIGN KEY (post_id) REFERENCES posts(post_id),
- FOREIGN KEY (tag_id) REFERENCES tags(tag_id),
- PRIMARY KEY (post_id, tag_id)
+ `post_id` INT NOT NULL,
+ `tag_id` INT NOT NULL,
+ FOREIGN KEY (`post_id`) REFERENCES `posts`(`post_id`),
+ FOREIGN KEY (`tag_id`) REFERENCES `tags`(`tag_id`),
+ PRIMARY KEY (`post_id`, `tag_id`)
);
--- 关注关系表
+-- 用户关注表(保持不变)
CREATE TABLE IF NOT EXISTS `user_follows` (
- follower_id INT NOT NULL,
- followed_id INT NOT NULL,
- created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
- FOREIGN KEY (follower_id) REFERENCES users(user_id),
- FOREIGN KEY (followed_id) REFERENCES users(user_id),
- PRIMARY KEY (follower_id, followed_id)
+ `follower_id` INT NOT NULL,
+ `followed_id` INT NOT NULL,
+ `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
+ FOREIGN KEY (`follower_id`) REFERENCES `users`(`user_id`),
+ FOREIGN KEY (`followed_id`) REFERENCES `users`(`user_id`),
+ PRIMARY KEY (`follower_id`, `followed_id`)
);
--- 私信表
+-- 私信表(保持不变)
CREATE TABLE IF NOT EXISTS `private_messages` (
- message_id INT AUTO_INCREMENT PRIMARY KEY,
- sender_id INT NOT NULL,
- receiver_id INT NOT NULL,
- content TEXT NOT NULL,
- sent_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
- is_read BOOLEAN DEFAULT false,
- FOREIGN KEY (sender_id) REFERENCES users(user_id),
- FOREIGN KEY (receiver_id) REFERENCES users(user_id)
+ `message_id` INT AUTO_INCREMENT PRIMARY KEY,
+ `sender_id` INT NOT NULL,
+ `receiver_id` INT NOT NULL,
+ `content` TEXT NOT NULL,
+ `sent_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
+ `is_read` BOOLEAN DEFAULT false,
+ FOREIGN KEY (`sender_id`) REFERENCES `users`(`user_id`),
+ FOREIGN KEY (`receiver_id`) REFERENCES `users`(`user_id`)
);
+-- 评论表(保持不变)
CREATE TABLE IF NOT EXISTS `comments` (
- comment_id INT AUTO_INCREMENT PRIMARY KEY, -- 评论ID
- post_id INT NOT NULL, -- 所属帖子ID
- user_id INT NOT NULL, -- 评论用户ID
- parent_comment_id INT DEFAULT NULL, -- 父评论ID, 如果是顶级评论则为NULL
- content TEXT NOT NULL, -- 评论内容
- created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, -- 评论时间
- FOREIGN KEY (post_id) REFERENCES posts(post_id), -- 关联帖子
- FOREIGN KEY (user_id) REFERENCES users(user_id), -- 关联用户
- FOREIGN KEY (parent_comment_id) REFERENCES comments(comment_id) -- 关联父评论
+ `comment_id` INT AUTO_INCREMENT PRIMARY KEY,
+ `post_id` INT NOT NULL,
+ `user_id` INT NOT NULL,
+ `parent_comment_id` INT DEFAULT NULL,
+ `content` TEXT NOT NULL,
+ `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
+ FOREIGN KEY (`post_id`) REFERENCES `posts`(`post_id`),
+ FOREIGN KEY (`user_id`) REFERENCES `users`(`user_id`),
+ FOREIGN KEY (`parent_comment_id`) REFERENCES `comments`(`comment_id`),
+ INDEX `idx_post_id` (`post_id`) -- 新增评论帖子索引
);
-CREATE TABLE IF NOT EXISTS post_likes (
- user_id INT NOT NULL,
- post_id INT NOT NULL,
- created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
- PRIMARY KEY (user_id, post_id),
- CONSTRAINT fk_post FOREIGN KEY (post_id) REFERENCES posts(post_id),
- CONSTRAINT fk_user FOREIGN KEY (user_id) REFERENCES users(user_id)
+-- 帖子点赞表(保持不变)
+CREATE TABLE IF NOT EXISTS `post_likes` (
+ `user_id` INT NOT NULL,
+ `post_id` INT NOT NULL,
+ `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
+ PRIMARY KEY (`user_id`, `post_id`),
+ FOREIGN KEY (`post_id`) REFERENCES `posts`(`post_id`),
+ FOREIGN KEY (`user_id`) REFERENCES `users`(`user_id`)
);
-CREATE TABLE IF NOT EXISTS post_views (
- view_id INT AUTO_INCREMENT PRIMARY KEY,
- user_id INT NOT NULL,
- post_id INT NOT NULL,
- view_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
- FOREIGN KEY (user_id) REFERENCES users(user_id),
- FOREIGN KEY (post_id) REFERENCES posts(post_id)
-);
+-- 帖子浏览记录表(新增复合索引)
+CREATE TABLE IF NOT EXISTS `post_views` (
+ `view_id` INT AUTO_INCREMENT PRIMARY KEY,
+ `user_id` INT NOT NULL,
+ `post_id` INT NOT NULL,
+ `view_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
+ FOREIGN KEY (`user_id`) REFERENCES `users`(`user_id`),
+ FOREIGN KEY (`post_id`) REFERENCES `posts`(`post_id`),
+ INDEX `idx_user_view_time` (`user_id`, `view_time` DESC) -- 新增用户浏览时间索引
+);
\ No newline at end of file