评论系统是互联网社区网站的重要组成部分,对增强用户参与度、提高网站活跃度等方面都具有重要价值。
一个简易的评论系统(在线社区平台)通常包含以下功能
基于前面的需求分析,一个简易的评论系统,一般会包含三个实体:
仅列出与评论相关的关键字段
t_user
字段名 | 数据类型 | 描述 |
---|---|---|
user_id | BIGINT | 用户ID,主键 |
username | VARCHAR | 用户名 |
password | VARCHAR | 用户密码 |
VARCHAR | 用户邮箱 | |
created_time | DATETIME | 创建时间 |
updated_time | DATETIME | 更新时间 |
deleted_time | DATETIME | 删除时间 |
t_post
字段名 | 数据类型 | 描述 |
---|---|---|
post_id | BIGINT | 帖子ID,主键 |
user_id | BIGINT | 发帖用户ID,外键,引用User表的user_id |
title | VARCHAR | 帖子标题 |
content | TEXT | 帖子内容 |
post_time | DATETIME | 发帖时间 |
comment_count | INT | 评论总数 |
root_comment_count | INT | 根评论总数 |
status | ENUM | 帖子状态,如'NORMAL','PINNED'(置顶),'HIDDEN'(隐藏),'FILTERED'(过滤)等 |
created_time | DATETIME | 创建时间 |
updated_time | DATETIME | 更新时间 |
deleted_time | DATETIME | 删除时间 |
comment_count
和root_comment_count
用于记录评论总数和根评论总数,避免每次都需要count(*)
t_comment
字段名 | 数据类型 | 描述 |
---|---|---|
comment_id | BIGINT | 评论ID,主键 |
user_id | BIGINT | 评论用户ID,外键,引用User表的user_id |
post_id | BIGINT | 所评论的帖子ID,外键,引用Post表的post_id |
parent_comment_id | BIGINT | 父评论ID,如果是一级评论,此字段为NULL |
reply_to_comment_id | BIGINT | 被回复的评论ID,如果是一级评论,此字段为NULL |
reply_to_user_id | BIGINT | 被回复的用户ID,如果是一级评论,此字段为NULL |
content | TEXT | 评论内容 |
comment_time | DATETIME | 评论时间 |
status | ENUM | 评论状态,如'NORMAL','HIDDEN'(隐藏),'FILTERED'(过滤)等 |
created_time | DATETIME | 创建时间 |
updated_time | DATETIME | 更新时间 |
deleted_time | DATETIME | 删除时间 |
reply_to_comment_id
和reply_to_user_id
只有当当前评论是对二级评论的回复是时为非NULL
,因为我们的评论系统是二级嵌套结构,因此被回复的评论和当前评论在组织形式上是同级的,而非父子结构。当单表存储的数据量级过大时,会影响查询性能,可以进行一定的分表。
评论通常不会脱离帖子本身存在,因此评论表可以根据post_id
哈希值将数据分布到多个表中。
将读操作和写操作分发到不同的数据库服务器上。例如,可以设置一台数据库服务器专门处理写操作,其他服务器处理读操作。这样可以提高系统的并发处理能力。