个人博客数据库设计(无E-R图 粗略版)

数据库设计

在每个表都包含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 COMMENT '是否置顶',
  `gmt_create` datetime(0) NOT NULL COMMENT '创建时间',
  `gmt_modified` datetime(0) NOT NULL COMMENT '修改时间',
  `deleted` tinyint(1) NOT NULL COMMENT '是否删除',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 17 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Table structure for article_tags
-- ----------------------------
DROP TABLE IF EXISTS `article_tags`;
CREATE TABLE `article_tags`  (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '文章和标签中间表Id',
  `tags_id` int(11) NOT NULL COMMENT '标签Id',
  `article_id` int(11) NOT NULL COMMENT '文章Id',
  `gmt_create` datetime(0) NOT NULL COMMENT '创建时间',
  `gmt_modified` datetime(0) NOT NULL COMMENT '修改时间',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 25 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Table structure for categories
-- ----------------------------
DROP TABLE IF EXISTS `categories`;
CREATE TABLE `categories`  (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '分类Id',
  `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '分类名',
  `description` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '分类描述',
  `article_amount` int(11) NULL DEFAULT NULL COMMENT '包含文章数',
  `image` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '分类图片',
  `gmt_create` datetime(0) NOT NULL COMMENT '创建时间',
  `gmt_modified` datetime(0) NOT NULL COMMENT '修改时间',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 9 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Table structure for comment
-- ----------------------------
DROP TABLE IF EXISTS `comment`;
CREATE TABLE `comment`  (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '评论Id',
  `article_id` int(11) NOT NULL COMMENT '文章Id',
  `parent_comment_id` int(11) NULL DEFAULT NULL COMMENT '父评论Id',
  `content` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '评论内容',
  `user_id` int(11) NULL DEFAULT NULL COMMENT '用户id',
  `topping` tinyint(1) NOT NULL COMMENT '是否置顶',
  `gmt_create` datetime(0) NOT NULL COMMENT '评论时间',
  `gmt_modified` datetime(0) NOT NULL COMMENT '更新时间',
  `deleted` tinyint(1) NOT NULL COMMENT '是否删除',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 14 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Table structure for draft
-- ----------------------------
DROP TABLE IF EXISTS `draft`;
CREATE TABLE `draft`  (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '草稿Id',
  `article_id` int(11) NULL DEFAULT NULL 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 NULL COMMENT '文章内容html',
  `content_md` longtext CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '文章内容md',
  `gmt_create` datetime(0) NOT NULL COMMENT '创建时间',
  `gmt_modified` datetime(0) NOT NULL COMMENT '修改时间',
  `deleted` tinyint(1) NOT NULL COMMENT '是否删除',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 5 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Table structure for journal
-- ----------------------------
DROP TABLE IF EXISTS `journal`;
CREATE TABLE `journal`  (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '日志ID',
  `operation` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '操作描述',
  `state` tinyint(1) NOT NULL COMMENT '操作状态(1正常,2删除,3移动)',
  `gmt_create` datetime(6) NOT NULL COMMENT '创建时间',
  `gmt_modified` datetime(6) NOT NULL COMMENT '修改时间',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 13 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Table structure for message
-- ----------------------------
DROP TABLE IF EXISTS `message`;
CREATE TABLE `message`  (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '留言Id',
  `parent_message_id` int(11) NULL DEFAULT NULL COMMENT '父留言Id',
  `content` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '留言内容',
  `user_id` int(11) NOT NULL COMMENT '留言者id',
  `topping` tinyint(1) NOT NULL COMMENT '置顶',
  `gmt_create` datetime(0) NOT NULL COMMENT '创建时间',
  `gmt_modified` datetime(0) NOT NULL COMMENT '修改时间',
  `deleted` tinyint(1) NOT NULL COMMENT '是否删除留言',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 14 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Table structure for personal_info
-- ----------------------------
DROP TABLE IF EXISTS `personal_info`;
CREATE TABLE `personal_info`  (
  `id` int(11) NOT NULL COMMENT '个人信息的id',
  `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '名字',
  `description` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '描述',
  `tags` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '标签描述',
  `qq` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 'qq',
  `github` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 'github',
  `gitee` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 'gitee',
  `csdn` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 'csdn',
  `applets` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '小程序',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Table structure for statistics
-- ----------------------------
DROP TABLE IF EXISTS `statistics`;
CREATE TABLE `statistics`  (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '文章统计Id',
  `article_id` int(11) NOT NULL COMMENT '文章Id',
  `hits` int(11) NULL DEFAULT NULL COMMENT '文章点击数',
  `comment_amount` int(11) NULL DEFAULT NULL COMMENT '文章评论数',
  `gmt_create` datetime(0) NOT NULL COMMENT '创建时间',
  `gmt_modified` datetime(0) NOT NULL COMMENT '修改时间',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 17 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Table structure for tags
-- ----------------------------
DROP TABLE IF EXISTS `tags`;
CREATE TABLE `tags`  (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '标签Id',
  `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '标签名',
  `description` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '标签描述',
  `article_amount` int(11) NULL DEFAULT NULL COMMENT '包含文章数量',
  `gmt_create` datetime(0) NOT NULL COMMENT '创建时间',
  `gmt_modified` datetime(0) NOT NULL COMMENT '修改时间',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 6 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user`  (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户Id',
  `nickname` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '用户昵称',
  `username` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '用户名',
  `password` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '用户密码',
  `grade` tinyint(4) NULL DEFAULT NULL COMMENT '用户等级',
  `avatar` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '用户头像',
  `activated_time` datetime(6) NULL DEFAULT NULL COMMENT '最近活动时间',
  `position` tinyint(1) NOT NULL COMMENT '是否是管理员',
  `gmt_create` datetime(6) NOT NULL COMMENT '创建时间',
  `gmt_modified` datetime(6) NOT NULL COMMENT '修改时间',
  `deleted` tinyint(1) NOT NULL COMMENT '是否删除',
  PRIMARY KEY (`id`) USING BTREE,
  UNIQUE INDEX `username`(`username`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 14 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

SET FOREIGN_KEY_CHECKS = 1;

个人博客地址

猜你喜欢

转载自blog.csdn.net/d875708765/article/details/108418291