数据库设计
在每个表都包含Id,创建时间(gmt_create),修改时间(gmt_modified)
本数据库设计没有列出索引,这个根据自己的查询情况去自己设计就好了。
用户表(user)
最开始想设计用户等级和用户最近活动时间,最后感觉没有必要,如若不需要的可以进行删减,如果后面有空再弄个论坛的数据库设计出来。
这里使用了逻辑删除(deleted)
字段: 用户Id,用户昵称,用户名(账号),用户密码,用户等级(看自己需求),
用户头像,最近活动时间(看自己需求),是否是管理员,创建时间,修改时间,是否删除。
文章表(article)
字段: 文章ID,文章标题,文章内容html,文章内容md,文章分类(分类表Id),文章简要描述,
是否允许评论, 是否置顶, 创建时间, 修改时间,是否删除。
分类表(categories)
字段: 分类Id,分类名,分类描述,包含文章数,分类图片,创建时间,修改时间,是否删除(可以添加)。
标签表(tags)
字段: 标签Id,标签名,标签描述,包含文章数量,创建时间,修改时间,是否删除(可以添加)。
文章统计表(statistics)
在文章创建的时候自动添加一个文章对应的统计数据,数据默认为0.
字段: 文章统计Id,文章Id,文章点击数,文章评论数,创建时间,修改时间
日志表(journal)
这个表可以根据自己需要进行设计,我这里设计只是为了记录文章发布,删除的动态而已。
字段: 日志ID,操作描述,操作状态(1正常,2删除,3移动),创建时间,修改时间
评论表(comment)
注意: 不是子评论的时候可以将父评论Id设置为0或者其他特殊数据。
在获取子评论的时候只需要在实体类中添加一个List Comment
@Data
@Accessors(chain = true)
public class CommentVo {
@ApiModelProperty(value = "评论Id")
private Integer id;
@ApiModelProperty(value = "父评论Id")
private Integer parentCommentId;
@ApiModelProperty(value = "用户Id")
private Integer userId;
@ApiModelProperty(value = "评论内容")
private String content;
@ApiModelProperty(value = "是否置顶")
private Boolean topping;
@ApiModelProperty(value = "评论时间")
private LocalDateTime gmtCreate;
@ApiModelProperty(value = "用户昵称")
private String nickname;
@ApiModelProperty(value = "用户头像")
private String avatar;
@ApiModelProperty(value = "是否是管理员")
private Boolean position;
@ApiModelProperty(value = "回复的评论")
private List<Comment> childrenComments;
}
字段: 评论Id,文章Id,父评论Id(用户回复功能,只能两级评论),评论内容,
是否置顶,评论时间,更新时间,是否删除。
留言表(message)
这里同样只支持两级留言。
字段: 留言Id,父留言Id,留言内容,留言者id,是否置顶,创建时间,修改时间,是否删除留言。
草稿表(draft)
用户存放文件草稿。
注意: 这个是文章保存草稿的时候需要先判断该文章是否存在草稿箱,如果存在则进行更新操作,如果不存在则插入新的草稿(这时候可以将文章Id设置为0获取其他特殊数据)。
字段: 草稿Id,文章Id,文章标题,文章内容html,文章内容md,创建时间,修改时间,是否删除
个人信息表(personal_info)
这个是用于存在个人博客页面显示的个人信息,这个数据一般只有一条数据,可以用redis中存放也可以。看自己需求放mysql还是redis中都行的。(我这里放mysql,项目这个数据使用了Redis进行了缓存处理。)
字段: 个人信息的id,名字,描述,标签描述,qq,github,gitee,csdn,小程序。
文章和标签中间表(article_tags)
这个表做为文章和标签的中间表,修改标签信息的时候不用去修改多个表。
字段: 文章和标签中间表Id,标签Id,文章Id,创建时间,修改时间
SQL文件(仅结构)
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for article
-- ----------------------------
DROP TABLE IF EXISTS `article`;
CREATE TABLE `article` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '文章ID',
`title` varchar(60) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '文章标题',
`content_html` longtext CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '文章内容html',
`content_md` longtext CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '文章内容md',
`categories` int(11) NULL DEFAULT NULL COMMENT '文章分类',
`description` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '文章简要描述',
`allow_comment` tinyint(1) NOT NULL COMMENT '是否允许评论',
`topping` tinyint(1) NOT NULL