blob: c603a3959c418bc3a89bf1f60b0fbf7f7614b4a9 [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,
37 post_title VARCHAR(255) NOT NULL,
38 post_content TEXT NOT NULL,
39 post_type ENUM('resource', 'discussion') NOT NULL,
40 created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
41 FOREIGN KEY (user_id) REFERENCES users(user_id)
42);
43
wuchimedes03f93582025-04-21 15:32:59 +080044CREATE TABLE IF NOT EXISTS `tags`(
45 tag_id INT AUTO_INCREMENT PRIMARY KEY,
46 tag_name VARCHAR(255) NOT NULL UNIQUE,
47 parent_id INT DEFAULT NULL,
48 FOREIGN KEY (parent_id) REFERENCES tags(tag_id)
49);
50
51CREATE TABLE IF NOT EXISTS `post_tag` (
52 post_id INT NOT NULL,
53 tag_id INT NOT NULL,
54 FOREIGN KEY (post_id) REFERENCES posts(post_id),
55 FOREIGN KEY (tag_id) REFERENCES tags(tag_id),
56 PRIMARY KEY (post_id, tag_id)
57);
58
wuchimedese5722e32025-04-13 17:38:50 +080059CREATE TABLE IF NOT EXISTS `post_likes` (
60 user_id INT NOT NULL,
61 post_id INT NOT NULL,
62 FOREIGN KEY (user_id) REFERENCES users(user_id),
63 FOREIGN KEY (post_id) REFERENCES posts(post_id),
64 PRIMARY KEY (user_id, post_id)
65);
夜雨声烦7e6eb382025-04-22 01:18:00 +080066
67-- 关注关系表
68CREATE TABLE IF NOT EXISTS `user_follows` (
69 follower_id INT NOT NULL,
70 followed_id INT NOT NULL,
71 created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
72 FOREIGN KEY (follower_id) REFERENCES users(user_id),
73 FOREIGN KEY (followed_id) REFERENCES users(user_id),
74 PRIMARY KEY (follower_id, followed_id)
75);
76
77-- 私信表
78CREATE TABLE IF NOT EXISTS `private_messages` (
79 message_id INT AUTO_INCREMENT PRIMARY KEY,
80 sender_id INT NOT NULL,
81 receiver_id INT NOT NULL,
82 content TEXT NOT NULL,
83 sent_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
84 is_read BOOLEAN DEFAULT false,
85 FOREIGN KEY (sender_id) REFERENCES users(user_id),
86 FOREIGN KEY (receiver_id) REFERENCES users(user_id)
2230107180edc652025-04-24 22:24:51 +080087);
88