返回

数据库设计-Spring Boot + Vue.js个人博客实战教程(七)

后端






前言

至此,项目的基础配置已基本上完成了,后续用到其他的配置再添加,下面我们将进行数据库的设计,根据我们的功能介绍,并将每个功能用的字段进行设计,这个很重要。我们做的是个人博客,最大的数据也就是我们发布的文章,文章里面有分类、标签、评论等。

数据库设计

文章表

文章表是博客的核心表,存储了文章的基本信息。字段包括:

  • id:文章的唯一标识符,自增主键。
  • title:文章的标题,不能为空。
  • content:文章的内容,不能为空。
  • category_id:文章所属的分类ID,外键。
  • tag_ids:文章的标签ID,以逗号分隔的字符串。
  • author_id:文章的作者ID,外键。
  • create_time:文章的创建时间,自动填充。
  • update_time:文章的更新时间,自动填充。
  • status:文章的状态,包括草稿、已发布、已删除等。

分类表

分类表存储了文章的分类信息。字段包括:

  • id:分类的唯一标识符,自增主键。
  • name:分类的名称,不能为空。
  • parent_id:分类的父分类ID,外键。
  • description:分类的。

标签表

标签表存储了文章的标签信息。字段包括:

  • id:标签的唯一标识符,自增主键。
  • name:标签的名称,不能为空。
  • description:标签的。

评论表

评论表存储了文章的评论信息。字段包括:

  • id:评论的唯一标识符,自增主键。
  • content:评论的内容,不能为空。
  • article_id:评论所属的文章ID,外键。
  • author_id:评论的作者ID,外键。
  • create_time:评论的创建时间,自动填充。
  • status:评论的状态,包括已批准、未批准、已删除等。

用户表

用户表存储了博客用户的相关信息。字段包括:

  • id:用户的唯一标识符,自增主键。
  • username:用户的用户名,不能为空,唯一。
  • password:用户的密码,不能为空。
  • email:用户的邮箱,不能为空,唯一。
  • role:用户的角色,包括管理员、编辑、作者等。
  • create_time:用户的创建时间,自动填充。
  • update_time:用户的更新时间,自动填充。
  • status:用户的状态,包括已激活、已禁用、已删除等。

实体类

实体类是用来映射数据库表的Java类。每个实体类对应一个数据库表,实体类的属性对应数据库表的字段。

@Entity
@Table(name = "t_article")
public class Article {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(nullable = false)
    private String title;

    @Column(nullable = false)
    private String content;

    @Column(name = "category_id")
    private Long categoryId;

    @Column(name = "tag_ids")
    private String tagIds;

    @Column(name = "author_id")
    private Long authorId;

    @Column(name = "create_time")
    @CreationTimestamp
    private Date createTime;

    @Column(name = "update_time")
    @UpdateTimestamp
    private Date updateTime;

    @Column(nullable = false)
    private String status;

    //省略其他字段和方法
}
@Entity
@Table(name = "t_category")
public class Category {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(nullable = false)
    private String name;

    @Column(name = "parent_id")
    private Long parentId;

    @Column(nullable = false)
    private String description;

    //省略其他字段和方法
}
@Entity
@Table(name = "t_tag")
public class Tag {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(nullable = false)
    private String name;

    @Column(nullable = false)
    private String description;

    //省略其他字段和方法
}
@Entity
@Table(name = "t_comment")
public class Comment {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(nullable = false)
    private String content;

    @Column(name = "article_id")
    private Long articleId;

    @Column(name = "author_id")
    private Long authorId;

    @Column(name = "create_time")
    @CreationTimestamp
    private Date createTime;

    @Column(nullable = false)
    private String status;

    //省略其他字段和方法
}
@Entity
@Table(name = "t_user")
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(nullable = false, unique = true)
    private String username;

    @Column(nullable = false)
    private String password;

    @Column(nullable = false, unique = true)
    private String email;

    @Column(nullable = false)
    private String role;

    @Column(name = "create_time")
    @CreationTimestamp
    private Date createTime;

    @Column(name = "update_time")
    @UpdateTimestamp
    private Date updateTime;

    @Column(nullable = false)
    private String status;

    //省略其他字段和方法
}

总结

通过以上步骤,我们完成了数据库的设计和实体类的定义。接下来,我们将进行数据库表的创建和初始化。