diff --git a/src/main/java/edu/bjtu/groupone/backend/api/CommentController.java b/src/main/java/edu/bjtu/groupone/backend/api/CommentController.java
new file mode 100644
index 0000000..d182c7e
--- /dev/null
+++ b/src/main/java/edu/bjtu/groupone/backend/api/CommentController.java
@@ -0,0 +1,58 @@
+package edu.bjtu.groupone.backend.api;
+
+import edu.bjtu.groupone.backend.domain.entity.Comment;
+import edu.bjtu.groupone.backend.domain.entity.Result;
+import edu.bjtu.groupone.backend.service.CommentService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.media.Content;
+import io.swagger.v3.oas.annotations.media.ExampleObject;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.responses.ApiResponse;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+@CrossOrigin
+@Tag(name = "评论相关接口")
+@RestController
+public class CommentController {
+
+    @Autowired
+    private CommentService commentService;
+
+    @Operation(summary = "添加评论")
+    @PostMapping("/comments")
+    public Result<String> addComment(@RequestBody Comment comment) {
+        commentService.addComment(comment);
+        return Result.success("评论添加成功");
+    }
+
+    @Operation(summary = "删除评论")
+    @DeleteMapping("/comments/{commentId}")
+    public Result<String> deleteComment(@PathVariable Long commentId) {
+        commentService.deleteComment(commentId);
+        return Result.success("评论删除成功");
+    }
+
+    @Operation(summary = "更新评论")
+    @PutMapping("/comments/{commentId}")
+    public Result<String> updateComment(@PathVariable Long commentId, @RequestBody Comment comment) {
+        comment.setCommentId(commentId);
+        commentService.updateComment(comment);
+        return Result.success("评论更新成功");
+    }
+
+    @Operation(summary = "获取评论详情")
+    @GetMapping("/comments/{commentId}")
+    public Result<Comment> getComment(@PathVariable Long commentId) {
+        return Result.success(commentService.getCommentById(commentId));
+    }
+
+    @Operation(summary = "获取帖子所有评论")
+    @GetMapping("/comments/post/{postId}")
+    public Result<List<Comment>> getCommentsByPostId(@PathVariable Long postId) {
+        return Result.success(commentService.getCommentsByPostId(postId));
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/edu/bjtu/groupone/backend/api/PostController.java b/src/main/java/edu/bjtu/groupone/backend/api/PostController.java
new file mode 100644
index 0000000..0258f2d
--- /dev/null
+++ b/src/main/java/edu/bjtu/groupone/backend/api/PostController.java
@@ -0,0 +1,58 @@
+package edu.bjtu.groupone.backend.api;
+
+import edu.bjtu.groupone.backend.domain.entity.Post;
+import edu.bjtu.groupone.backend.domain.entity.Result;
+import edu.bjtu.groupone.backend.service.PostService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.media.Content;
+import io.swagger.v3.oas.annotations.media.ExampleObject;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.responses.ApiResponse;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+@CrossOrigin
+@Tag(name = "帖子相关接口")
+@RestController
+public class PostController {
+
+    @Autowired
+    private PostService postService;
+
+    @Operation(summary = "添加帖子")
+    @PostMapping("/posts")
+    public Result<String> addPost(@RequestBody Post post) {
+        postService.addPost(post);
+        return Result.success("帖子添加成功");
+    }
+
+    @Operation(summary = "删除帖子")
+    @DeleteMapping("/posts/{postId}")
+    public Result<String> deletePost(@PathVariable Long postId) {
+        postService.deletePost(postId);
+        return Result.success("帖子删除成功");
+    }
+
+    @Operation(summary = "更新帖子")
+    @PutMapping("/posts/{postId}")
+    public Result<String> updatePost(@PathVariable Long postId, @RequestBody Post post) {
+        post.setPostId(postId);
+        postService.updatePost(post);
+        return Result.success("帖子更新成功");
+    }
+
+    @Operation(summary = "获取帖子详情")
+    @GetMapping("/posts/{postId}")
+    public Result<Post> getPost(@PathVariable Long postId) {
+        return Result.success(postService.getPostById(postId));
+    }
+
+    @Operation(summary = "获取所有帖子")
+    @GetMapping("/posts")
+    public Result<List<Post>> getAllPosts() {
+        return Result.success(postService.getAllPosts());
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/edu/bjtu/groupone/backend/api/UserController.java b/src/main/java/edu/bjtu/groupone/backend/api/UserController.java
index 46fb153..c4ebbec 100644
--- a/src/main/java/edu/bjtu/groupone/backend/api/UserController.java
+++ b/src/main/java/edu/bjtu/groupone/backend/api/UserController.java
@@ -389,4 +389,40 @@
         String newToken = JwtUtils.generateJwt(payload);
         return Result.success(newToken);
     }
+    @Operation(
+            summary = "查询用户剩余任务数量",
+            description = "根据用户ID查询剩余未完成的任务数量（包括种子、帖子、评论）",
+            responses = {
+                    @ApiResponse(
+                            responseCode = "200",
+                            description = "查询成功",
+                            content = @Content(
+                                    schema = @Schema(implementation = Result.class),
+                                    examples = @ExampleObject(
+                                            name = "查询成功示例",
+                                            value = "{\"code\":200,\"message\":\"操作成功\",\"data\":3}"
+                                    )
+                            )
+                    ),
+                    @ApiResponse(
+                            responseCode = "400",
+                            description = "用户不存在",
+                            content = @Content(
+                                    schema = @Schema(implementation = Result.class),
+                                    examples = @ExampleObject(
+                                            name = "查询失败示例",
+                                            value = "{\"code\":400,\"message\":\"用户不存在\",\"data\":null}"
+                                    )
+                            )
+                    )
+            }
+    )
+    @GetMapping("/api/tasks/remaining/{userId}")
+    public Result<Integer> getRemainingTasks(@PathVariable int userId) {
+        int remainingTasks = userService.getRemainingTasks(userId);
+        if (remainingTasks < 0) {
+            return Result.error("用户不存在");
+        }
+        return Result.success(remainingTasks);
+    }
 }
\ No newline at end of file
diff --git a/src/main/java/edu/bjtu/groupone/backend/api/WorkController.java b/src/main/java/edu/bjtu/groupone/backend/api/WorkController.java
index 1eb4bee..d15c4ce 100644
--- a/src/main/java/edu/bjtu/groupone/backend/api/WorkController.java
+++ b/src/main/java/edu/bjtu/groupone/backend/api/WorkController.java
@@ -1,16 +1,23 @@
 package edu.bjtu.groupone.backend.api;
 
 import edu.bjtu.groupone.backend.domain.dto.WorkResponse;
+import edu.bjtu.groupone.backend.domain.entity.Result;
 import edu.bjtu.groupone.backend.domain.entity.Work;
 import edu.bjtu.groupone.backend.service.WorkService;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.media.Content;
+import io.swagger.v3.oas.annotations.media.ExampleObject;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.responses.ApiResponse;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
 import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.List;
+
 @RestController
 @RequestMapping("/api/works")
 @Tag(name = "Work", description = "作品相关接口")
@@ -57,4 +64,40 @@
     public ResponseEntity<Work> getWork(@PathVariable Long id) {
         return ResponseEntity.ok(workService.getWorkById(id));
     }
+    @Operation(
+            summary = "根据作者查询所有作品",
+            description = "根据作者名称查询其所有作品",
+            responses = {
+                    @ApiResponse(
+                            responseCode = "200",
+                            description = "查询成功",
+                            content = @Content(
+                                    schema = @Schema(implementation = Result.class),
+                                    examples = @ExampleObject(
+                                            name = "查询成功示例",
+                                            value = "{\"code\":200,\"message\":\"操作成功\",\"data\":[{\"id\":101,\"title\":\"《我的世界》\",\"author\":\"张三\",\"views\":1234,\"categoryId\":1,\"description\":\"一部关于...\",\"createTime\":\"2023-06-15\"}]}"
+                                    )
+                            )
+                    ),
+                    @ApiResponse(
+                            responseCode = "400",
+                            description = "作者不存在",
+                            content = @Content(
+                                    schema = @Schema(implementation = Result.class),
+                                    examples = @ExampleObject(
+                                            name = "查询失败示例",
+                                            value = "{\"code\":400,\"message\":\"作者不存在\",\"data\":null}"
+                                    )
+                            )
+                    )
+            }
+    )
+    @GetMapping("/works/byAuthor")
+    public Result<List<WorkResponse>> getWorksByAuthor(@RequestParam String author) {
+        List<WorkResponse> works = workService.getWorksByAuthor(author);
+        if (works == null || works.isEmpty()) {
+            return Result.error("作者不存在");
+        }
+        return Result.success(works);
+    }
 }
diff --git a/src/main/java/edu/bjtu/groupone/backend/domain/entity/Comment.java b/src/main/java/edu/bjtu/groupone/backend/domain/entity/Comment.java
new file mode 100644
index 0000000..4c30e53
--- /dev/null
+++ b/src/main/java/edu/bjtu/groupone/backend/domain/entity/Comment.java
@@ -0,0 +1,16 @@
+package edu.bjtu.groupone.backend.domain.entity;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class Comment {
+    private Long commentId;
+    private Long postId;
+    private int userId;
+    private String content;
+    private String createTime;
+}
\ No newline at end of file
diff --git a/src/main/java/edu/bjtu/groupone/backend/domain/entity/Post.java b/src/main/java/edu/bjtu/groupone/backend/domain/entity/Post.java
new file mode 100644
index 0000000..56a009f
--- /dev/null
+++ b/src/main/java/edu/bjtu/groupone/backend/domain/entity/Post.java
@@ -0,0 +1,18 @@
+// Post.java
+package edu.bjtu.groupone.backend.domain.entity;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class Post {
+    private Long postId;
+    private int userId;
+    private String title;
+    private String content;
+    private String createTime;
+    private int views;
+}
\ No newline at end of file
diff --git a/src/main/java/edu/bjtu/groupone/backend/domain/entity/Task.java b/src/main/java/edu/bjtu/groupone/backend/domain/entity/Task.java
new file mode 100644
index 0000000..1470d79
--- /dev/null
+++ b/src/main/java/edu/bjtu/groupone/backend/domain/entity/Task.java
@@ -0,0 +1,15 @@
+package edu.bjtu.groupone.backend.domain.entity;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class Task {
+    private int taskId;
+    private int userId;
+    private String type; // "seed" (种子), "post", "comment"
+    private boolean completed;
+}
\ No newline at end of file
diff --git a/src/main/java/edu/bjtu/groupone/backend/mapper/CommentMapper.java b/src/main/java/edu/bjtu/groupone/backend/mapper/CommentMapper.java
new file mode 100644
index 0000000..e45ba4e
--- /dev/null
+++ b/src/main/java/edu/bjtu/groupone/backend/mapper/CommentMapper.java
@@ -0,0 +1,24 @@
+package edu.bjtu.groupone.backend.mapper;
+
+import edu.bjtu.groupone.backend.domain.entity.Comment;
+import org.apache.ibatis.annotations.*;
+
+import java.util.List;
+
+@Mapper
+public interface CommentMapper {
+    @Insert("INSERT INTO `comment` (`post_id`, `user_id`, `content`, `create_time`) VALUES (#{postId}, #{userId}, #{content}, #{createTime})")
+    void insertComment(Comment comment);
+
+    @Delete("DELETE FROM `comment` WHERE `comment_id` = #{commentId}")
+    void deleteComment(Long commentId);
+
+    @Update("UPDATE `comment` SET `post_id` = #{postId}, `user_id` = #{userId}, `content` = #{content}, `create_time` = #{createTime} WHERE `comment_id` = #{commentId}")
+    void updateComment(Comment comment);
+
+    @Select("SELECT * FROM `comment` WHERE `comment_id` = #{commentId}")
+    Comment selectCommentById(Long commentId);
+
+    @Select("SELECT * FROM `comment` WHERE `post_id` = #{postId}")
+    List<Comment> selectCommentsByPostId(Long postId);
+}
\ No newline at end of file
diff --git a/src/main/java/edu/bjtu/groupone/backend/mapper/PostMapper.java b/src/main/java/edu/bjtu/groupone/backend/mapper/PostMapper.java
new file mode 100644
index 0000000..4d1f73d
--- /dev/null
+++ b/src/main/java/edu/bjtu/groupone/backend/mapper/PostMapper.java
@@ -0,0 +1,24 @@
+package edu.bjtu.groupone.backend.mapper;
+
+import edu.bjtu.groupone.backend.domain.entity.Post;
+import org.apache.ibatis.annotations.*;
+
+import java.util.List;
+
+@Mapper
+public interface PostMapper {
+    @Insert("INSERT INTO `post` (`user_id`, `title`, `content`, `create_time`, `views`) VALUES (#{userId}, #{title}, #{content}, #{createTime}, #{views})")
+    void insertPost(Post post);
+
+    @Delete("DELETE FROM `post` WHERE `post_id` = #{postId}")
+    void deletePost(Long postId);
+
+    @Update("UPDATE `post` SET `user_id` = #{userId}, `title` = #{title}, `content` = #{content}, `create_time` = #{createTime}, `views` = #{views} WHERE `post_id` = #{postId}")
+    void updatePost(Post post);
+
+    @Select("SELECT * FROM `post` WHERE `post_id` = #{postId}")
+    Post selectPostById(Long postId);
+
+    @Select("SELECT * FROM `post`")
+    List<Post> selectAllPosts();
+}
\ No newline at end of file
diff --git a/src/main/java/edu/bjtu/groupone/backend/mapper/UserMapper.java b/src/main/java/edu/bjtu/groupone/backend/mapper/UserMapper.java
index 8049e6a..dfcedad 100644
--- a/src/main/java/edu/bjtu/groupone/backend/mapper/UserMapper.java
+++ b/src/main/java/edu/bjtu/groupone/backend/mapper/UserMapper.java
@@ -40,6 +40,9 @@
     @Select("SELECT * FROM user")
     List<User> selectAllUsers();
 
+    @Select("SELECT COUNT(*) FROM task WHERE user_id = #{userId} AND completed = false")
+    int countRemainingTasks(int userId);
+
     @Select({"SELECT * FROM user WHERE user_id = #{id}"})
     User selectById(@Param("id") Long id);
 }
diff --git a/src/main/java/edu/bjtu/groupone/backend/mapper/WorkMybatisMapper.java b/src/main/java/edu/bjtu/groupone/backend/mapper/WorkMybatisMapper.java
index 90836a8..c127c8c 100644
--- a/src/main/java/edu/bjtu/groupone/backend/mapper/WorkMybatisMapper.java
+++ b/src/main/java/edu/bjtu/groupone/backend/mapper/WorkMybatisMapper.java
@@ -34,4 +34,8 @@
     // 查询
     @Select("SELECT * FROM works WHERE id = #{id}")
     Work findById(Long id);
+    @Select("SELECT * FROM works WHERE author = #{author}")
+    List<Work> findByAuthor(String author);
+
+
 }
\ No newline at end of file
diff --git a/src/main/java/edu/bjtu/groupone/backend/service/CommentService.java b/src/main/java/edu/bjtu/groupone/backend/service/CommentService.java
new file mode 100644
index 0000000..1cbd321
--- /dev/null
+++ b/src/main/java/edu/bjtu/groupone/backend/service/CommentService.java
@@ -0,0 +1,14 @@
+package edu.bjtu.groupone.backend.service;
+
+import edu.bjtu.groupone.backend.domain.entity.Comment;
+import java.util.List;
+
+public interface CommentService {
+    void addComment(Comment comment);
+    void deleteComment(Long commentId);
+    void updateComment(Comment comment);
+    Comment getCommentById(Long commentId);
+    List<Comment> getCommentsByPostId(Long postId);
+}
+
+// CommentServiceImpl.jav
\ No newline at end of file
diff --git a/src/main/java/edu/bjtu/groupone/backend/service/PostService.java b/src/main/java/edu/bjtu/groupone/backend/service/PostService.java
new file mode 100644
index 0000000..a87d48f
--- /dev/null
+++ b/src/main/java/edu/bjtu/groupone/backend/service/PostService.java
@@ -0,0 +1,13 @@
+// PostService.java
+package edu.bjtu.groupone.backend.service;
+
+import edu.bjtu.groupone.backend.domain.entity.Post;
+import java.util.List;
+
+public interface PostService {
+    void addPost(Post post);
+    void deletePost(Long postId);
+    void updatePost(Post post);
+    Post getPostById(Long postId);
+    List<Post> getAllPosts();
+}
\ No newline at end of file
diff --git a/src/main/java/edu/bjtu/groupone/backend/service/UserService.java b/src/main/java/edu/bjtu/groupone/backend/service/UserService.java
index 77d3bba..9bcc79e 100644
--- a/src/main/java/edu/bjtu/groupone/backend/service/UserService.java
+++ b/src/main/java/edu/bjtu/groupone/backend/service/UserService.java
@@ -20,4 +20,5 @@
     void updateUser(User user);
     User getUserById(int userId);
     List<User> getAllUsers();
+    int getRemainingTasks(int userId);
 }
diff --git a/src/main/java/edu/bjtu/groupone/backend/service/WorkService.java b/src/main/java/edu/bjtu/groupone/backend/service/WorkService.java
index ec0494f..eaff2e2 100644
--- a/src/main/java/edu/bjtu/groupone/backend/service/WorkService.java
+++ b/src/main/java/edu/bjtu/groupone/backend/service/WorkService.java
@@ -13,6 +13,7 @@
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
 import java.util.List;
+import java.util.stream.Collectors;
 
 @Service
 public class WorkService {
@@ -61,4 +62,10 @@
     public Work getWorkById(Long id) {
         return workMybatisMapper.findById(id);
     }
+    public List<WorkResponse> getWorksByAuthor(String author) {
+        List<Work> works = workMybatisMapper.findByAuthor(author);
+        return works.stream()
+                .map(this::convertToResponse)
+                .collect(Collectors.toList());
+    }
 }
\ No newline at end of file
diff --git a/src/main/java/edu/bjtu/groupone/backend/service/impl/CommentServiceImpl.java b/src/main/java/edu/bjtu/groupone/backend/service/impl/CommentServiceImpl.java
new file mode 100644
index 0000000..f792a29
--- /dev/null
+++ b/src/main/java/edu/bjtu/groupone/backend/service/impl/CommentServiceImpl.java
@@ -0,0 +1,40 @@
+package edu.bjtu.groupone.backend.service.impl;
+
+import edu.bjtu.groupone.backend.mapper.CommentMapper;
+import edu.bjtu.groupone.backend.domain.entity.Comment;
+import edu.bjtu.groupone.backend.service.CommentService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service
+public class CommentServiceImpl implements CommentService {
+    @Autowired
+    private CommentMapper commentMapper;
+
+    @Override
+    public void addComment(Comment comment) {
+        commentMapper.insertComment(comment);
+    }
+
+    @Override
+    public void deleteComment(Long commentId) {
+        commentMapper.deleteComment(commentId);
+    }
+
+    @Override
+    public void updateComment(Comment comment) {
+        commentMapper.updateComment(comment);
+    }
+
+    @Override
+    public Comment getCommentById(Long commentId) {
+        return commentMapper.selectCommentById(commentId);
+    }
+
+    @Override
+    public List<Comment> getCommentsByPostId(Long postId) {
+        return commentMapper.selectCommentsByPostId(postId);
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/edu/bjtu/groupone/backend/service/impl/PostServiceImpl.java b/src/main/java/edu/bjtu/groupone/backend/service/impl/PostServiceImpl.java
new file mode 100644
index 0000000..8eb57ac
--- /dev/null
+++ b/src/main/java/edu/bjtu/groupone/backend/service/impl/PostServiceImpl.java
@@ -0,0 +1,40 @@
+package edu.bjtu.groupone.backend.service.impl;
+
+import edu.bjtu.groupone.backend.mapper.PostMapper;
+import edu.bjtu.groupone.backend.domain.entity.Post;
+import edu.bjtu.groupone.backend.service.PostService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service
+public class PostServiceImpl implements PostService {
+    @Autowired
+    private PostMapper postMapper;
+
+    @Override
+    public void addPost(Post post) {
+        postMapper.insertPost(post);
+    }
+
+    @Override
+    public void deletePost(Long postId) {
+        postMapper.deletePost(postId);
+    }
+
+    @Override
+    public void updatePost(Post post) {
+        postMapper.updatePost(post);
+    }
+
+    @Override
+    public Post getPostById(Long postId) {
+        return postMapper.selectPostById(postId);
+    }
+
+    @Override
+    public List<Post> getAllPosts() {
+        return postMapper.selectAllPosts();
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/edu/bjtu/groupone/backend/service/impl/UserServImpl.java b/src/main/java/edu/bjtu/groupone/backend/service/impl/UserServImpl.java
index 5cdc9c1..ba2f9e9 100644
--- a/src/main/java/edu/bjtu/groupone/backend/service/impl/UserServImpl.java
+++ b/src/main/java/edu/bjtu/groupone/backend/service/impl/UserServImpl.java
@@ -139,4 +139,13 @@
     public List<User> getAllUsers() {
         return userMapper.selectAllUsers();
     }
+    @Override
+    public int getRemainingTasks(int userId) {
+        User user = userMapper.selectUserById(userId);
+        if (user == null) {
+            return -1; // 表示用户不存在
+        }
+        // 假设任务表名为 task，查询未完成的任务数量
+        return userMapper.countRemainingTasks(userId);
+    }
 }
diff --git a/src/main/resources/schema.sql b/src/main/resources/schema.sql
index a36d6ea..53bd187 100644
--- a/src/main/resources/schema.sql
+++ b/src/main/resources/schema.sql
@@ -23,6 +23,37 @@
                                FOREIGN KEY (`followed_id`) REFERENCES `user`(`user_id`)
 );
 
+-- 新增任务表
+CREATE TABLE `task` (
+                        `task_id` INT AUTO_INCREMENT PRIMARY KEY,
+                        `user_id` INT NOT NULL,
+                        `type` VARCHAR(50) NOT NULL, -- "seed", "post", "comment"
+                        `completed` BOOLEAN NOT NULL DEFAULT FALSE,
+                        FOREIGN KEY (`user_id`) REFERENCES `user`(`user_id`)
+);
+
+-- 新增帖子表
+CREATE TABLE `post` (
+                        `post_id` BIGINT AUTO_INCREMENT PRIMARY KEY,
+                        `user_id` INT NOT NULL,
+                        `title` VARCHAR(255) NOT NULL,
+                        `content` TEXT NOT NULL,
+                        `create_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
+                        `views` INT DEFAULT 0,
+                        FOREIGN KEY (`user_id`) REFERENCES `user`(`user_id`)
+);
+
+-- 新增评论表
+CREATE TABLE `comment` (
+                           `comment_id` BIGINT AUTO_INCREMENT PRIMARY KEY,
+                           `post_id` BIGINT NOT NULL,
+                           `user_id` INT NOT NULL,
+                           `content` TEXT NOT NULL,
+                           `create_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
+                           FOREIGN KEY (`post_id`) REFERENCES `post`(`post_id`),
+                           FOREIGN KEY (`user_id`) REFERENCES `user`(`user_id`)
+);
+
 -- 插入语句使用反引号包裹表名和列名
 INSERT INTO `user` (
     `username`, `email`, `password`, `registration_date`, `identification_number`, `role`
