# 接口文档 ### 数据库设计 用户表 (users) 用于存储用户信息,支持登录、注册、找回密码等功能,并包含用户状态。 Sql ``` CREATE TABLE users ( user_id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(50) NOT NULL UNIQUE, email VARCHAR(100) NOT NULL UNIQUE, password_hash VARCHAR(255) NOT NULL, -- 建议使用安全哈希算法存储密码 status ENUM('admin', 'normal', 'blocked', 'deactivated', 'pending') DEFAULT 'pending', created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, is_active BOOLEAN DEFAULT TRUE, activation_token VARCHAR(255), -- 用于激活账户或重置密码 reset_password_token VARCHAR(255), -- 密码重置令牌 reset_password_expires TIMESTAMP -- 密码重置令牌有效期 ); ``` 管理员表 (administrators) 用于标识哪些用户是管理员。这里假设如果用户的状态为admin,则不需要再额外记录到administrators表中,简化了数据库结构。 Sql ``` -- 如果需要单独维护管理员列表,可以保留此表;否则可以根据用户状态判断是否为管理员。 CREATE TABLE administrators ( admin_id INT AUTO_INCREMENT PRIMARY KEY, user_id INT NOT NULL UNIQUE, FOREIGN KEY (user_id) REFERENCES users(user_id) ON DELETE CASCADE ); ``` 文章表 (posts) 用于存储用户发布的文章。注意:只有状态为normal和admin的用户才能发布文章。 Sql ``` CREATE TABLE posts ( post_id INT AUTO_INCREMENT PRIMARY KEY, user_id INT NOT NULL, title VARCHAR(255) NOT NULL, content TEXT NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, FOREIGN KEY (user_id) REFERENCES users(user_id) ON DELETE CASCADE ); ``` 点赞点踩表 (reactions) 记录用户对文章的点赞和点踩操作。只有状态为normal和admin的用户才能进行这些互动。 Sql ``` CREATE TABLE reactions ( reaction_id INT AUTO_INCREMENT PRIMARY KEY, post_id INT NOT NULL, user_id INT NOT NULL, type ENUM('like', 'dislike') NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (post_id) REFERENCES posts(post_id) ON DELETE CASCADE, FOREIGN KEY (user_id) REFERENCES users(user_id) ON DELETE CASCADE, UNIQUE (post_id, user_id) -- 每个用户对每篇文章只能有一个反应 ); ``` 公告表 (announcements) 用于发布站内公告。只有状态为admin的用户可以发布或编辑公告。 Sql ```sql CREATE TABLE announcements ( announcement_id INT AUTO_INCREMENT PRIMARY KEY, admin_id INT NOT NULL, title VARCHAR(255) NOT NULL, content TEXT NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, is_published BOOLEAN DEFAULT FALSE, FOREIGN KEY (admin_id) REFERENCES users(user_id) ON DELETE CASCADE -- 直接引用用户表中的user_id ); ``` 应用逻辑注意事项 权限控制:在应用程序逻辑中,确保根据用户的 status 字段来控制不同操作的权限。例如,只有 admin 用户可以发布或编辑公告,而 blocked 或 deactivated 用户不能执行任何操作。 状态转换:定义清晰的状态转换规则。例如,从 pending 转换为 normal 需要管理员审批;blocked 用户不能自行恢复状态,需由管理员处理等。 ALTER TABLE reactions ADD CONSTRAINT unique_user_post_reaction UNIQUE (post_id, user_id); ### 新增评论表 CREATE TABLE comments ( comment_id INT AUTO_INCREMENT PRIMARY KEY, post_id INT NOT NULL, user_id INT NOT NULL, content TEXT NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, is_deleted BOOLEAN DEFAULT FALSE, -- 标记评论是否被删除,默认不删除 FOREIGN KEY (post_id) REFERENCES posts(post_id) ON DELETE CASCADE, FOREIGN KEY (user_id) REFERENCES users(user_id) ON DELETE CASCADE );