blob: d97701cc4a2f799c69ca72c237f2305015afce33 [file] [log] [blame]
wuchimedese5722e32025-04-13 17:38:50 +08001CREATE DATABASE IF NOT EXISTS g8backend;
2USE g8backend;
3
wuchimedes079c1632025-04-02 22:01:20 +08004CREATE TABLE IF NOT EXISTS `users` (
5 user_id INT AUTO_INCREMENT PRIMARY KEY,
6 user_name VARCHAR(255) NOT NULL,
7 password VARCHAR(255) NOT NULL,
wuchimedesa0649c62025-04-05 15:53:39 +08008 email VARCHAR(255) NOT NULL UNIQUE,
9 passkey VARCHAR(255) NOT NULL UNIQUE
wuchimedes079c1632025-04-02 22:01:20 +080010);
11
12CREATE TABLE IF NOT EXISTS `torrents` (
13 torrent_id INT AUTO_INCREMENT PRIMARY KEY,
14 user_id INT NOT NULL,
15 torrent_name VARCHAR(255) NOT NULL,
wuchimedes223bfab2025-04-04 17:16:05 +080016 info_hash BINARY(20) NOT NULL,
wuchimedes079c1632025-04-02 22:01:20 +080017 file_size FLOAT NOT NULL,
wuchimedes079c1632025-04-02 22:01:20 +080018 FOREIGN KEY (user_id) REFERENCES users(user_id)
19);
20
21CREATE TABLE IF NOT EXISTS `peers` (
wuchimedesa0649c62025-04-05 15:53:39 +080022 passkey VARCHAR(255) NOT NULL,
wuchimedes223bfab2025-04-04 17:16:05 +080023 info_hash BINARY(20) NOT NULL,
24 peer_id VARCHAR(20) NOT NULL,
wuchimedes079c1632025-04-02 22:01:20 +080025 ip_address VARCHAR(128) NOT NULL,
26 port INT NOT NULL,
27 uploaded FLOAT NOT NULL,
28 downloaded FLOAT NOT NULL,
wuchimedes223bfab2025-04-04 17:16:05 +080029 last_seen TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
wuchimedesa0649c62025-04-05 15:53:39 +080030 FOREIGN KEY (passkey) REFERENCES users(passkey),
31 PRIMARY KEY (passkey, info_hash, peer_id)
wuchimedes079c1632025-04-02 22:01:20 +080032);
wuchimedese5722e32025-04-13 17:38:50 +080033
34CREATE TABLE IF NOT EXISTS `posts` (
35 post_id INT AUTO_INCREMENT PRIMARY KEY,
36 user_id INT NOT NULL,
夜雨声烦f4b8b6f2025-04-24 00:58:36 +080037 hot_score DOUBLE DEFAULT 0.0,
38 view_count INT DEFAULT 0,
wuchimedese5722e32025-04-13 17:38:50 +080039 post_title VARCHAR(255) NOT NULL,
40 post_content TEXT NOT NULL,
41 post_type ENUM('resource', 'discussion') NOT NULL,
42 created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
43 FOREIGN KEY (user_id) REFERENCES users(user_id)
44);
45
wuchimedes03f93582025-04-21 15:32:59 +080046CREATE TABLE IF NOT EXISTS `tags`(
47 tag_id INT AUTO_INCREMENT PRIMARY KEY,
48 tag_name VARCHAR(255) NOT NULL UNIQUE,
49 parent_id INT DEFAULT NULL,
50 FOREIGN KEY (parent_id) REFERENCES tags(tag_id)
51);
52
53CREATE TABLE IF NOT EXISTS `post_tag` (
54 post_id INT NOT NULL,
55 tag_id INT NOT NULL,
56 FOREIGN KEY (post_id) REFERENCES posts(post_id),
57 FOREIGN KEY (tag_id) REFERENCES tags(tag_id),
58 PRIMARY KEY (post_id, tag_id)
59);
60
夜雨声烦7e6eb382025-04-22 01:18:00 +080061-- 关注关系表
62CREATE TABLE IF NOT EXISTS `user_follows` (
63 follower_id INT NOT NULL,
64 followed_id INT NOT NULL,
65 created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
66 FOREIGN KEY (follower_id) REFERENCES users(user_id),
67 FOREIGN KEY (followed_id) REFERENCES users(user_id),
68 PRIMARY KEY (follower_id, followed_id)
69);
70
71-- 私信表
72CREATE TABLE IF NOT EXISTS `private_messages` (
73 message_id INT AUTO_INCREMENT PRIMARY KEY,
74 sender_id INT NOT NULL,
75 receiver_id INT NOT NULL,
76 content TEXT NOT NULL,
77 sent_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
78 is_read BOOLEAN DEFAULT false,
79 FOREIGN KEY (sender_id) REFERENCES users(user_id),
80 FOREIGN KEY (receiver_id) REFERENCES users(user_id)
夜雨声烦4527a722025-04-23 17:04:25 +080081);
82
83CREATE TABLE IF NOT EXISTS `comments` (
84 comment_id INT AUTO_INCREMENT PRIMARY KEY, -- 评论ID
85 post_id INT NOT NULL, -- 所属帖子ID
86 user_id INT NOT NULL, -- 评论用户ID
87 parent_comment_id INT DEFAULT NULL, -- 父评论ID, 如果是顶级评论则为NULL
88 content TEXT NOT NULL, -- 评论内容
89 created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, -- 评论时间
90 FOREIGN KEY (post_id) REFERENCES posts(post_id), -- 关联帖子
91 FOREIGN KEY (user_id) REFERENCES users(user_id), -- 关联用户
92 FOREIGN KEY (parent_comment_id) REFERENCES comments(comment_id) -- 关联父评论
93);
夜雨声烦02063592025-04-23 18:10:00 +080094
夜雨声烦f4b8b6f2025-04-24 00:58:36 +080095CREATE TABLE IF NOT EXISTS post_likes (
96 user_id INT NOT NULL,
97 post_id INT NOT NULL,
夜雨声烦02063592025-04-23 18:10:00 +080098 created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
99 PRIMARY KEY (user_id, post_id),
100 CONSTRAINT fk_post FOREIGN KEY (post_id) REFERENCES posts(post_id),
101 CONSTRAINT fk_user FOREIGN KEY (user_id) REFERENCES users(user_id)
102);
夜雨声烦f4b8b6f2025-04-24 00:58:36 +0800103
104CREATE TABLE IF NOT EXISTS post_views (
105 view_id INT AUTO_INCREMENT PRIMARY KEY,
106 user_id INT NOT NULL,
107 post_id INT NOT NULL,
108 view_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
109 FOREIGN KEY (user_id) REFERENCES users(user_id),
110 FOREIGN KEY (post_id) REFERENCES posts(post_id)
111);