欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

项目总结之项目中怎样根据关系建立表

程序员文章站 2024-02-01 08:20:04
...

在做完一个springboot的个人博客项目,想总结下从数据库建表到完成的对自己有点价值的点,包括碰到的问题及解决过程和方法,希望读者也能找到自己想要的。这篇博客主要是讲解建表的过程。

我在这个项目中建表的方式可能与平常的习惯不太一样(可能来自于学JPA后的后遗症吧,不过JPA不需要自己建表,Mybatis需要自己建表,转技术时就得会建表)。

先建立实体类

实体类有博客类,评论类,类别类,标签类,用户类。
主要以博客类为主体,
对应关系:

  • 博客与评论是一对多
  • 博客与类别是多对一
  • 博客与标签是多对多
  • 博客与用户是多对一即多个博客对应一个用户,一个用户下有多个博客
  • 还有一个关系是评论中有子评论和父评论,父评论与子评论是一对多的

根据这些关系建立实体类(自行忽略getset及构造方法,这里主要看字段):
博客类:

package com.yuer.entity;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class Blog implements Serializable {

	
	private static final long serialVersionUID = 1L;
	
	private Long id;
	private String title; // 博客标题
	private String firstPicture; // 首图
	private String content; // 内容
	private String flag;
	private Integer viewCounts; // 游览次数
	private Boolean isAppreciate; // 是否开启赞赏
	private Boolean isOpenCopyright; // 是否开启装载声明
	private Boolean isComment; // 是否开启评论
	private Boolean isPublished; // 是否发布
	private Boolean isRecommend; // 是否推荐

	private Date createTime; // 创建时间
	private Date updateTime; // 更新时间

	private User user;
	private List<Tag> tags = new ArrayList<>();
	private Type type;
	private List<Comment> comments = new ArrayList<>();

	private String tagIds;

	// 描述
	private String description;

	// 为方便展示,忽略getset及空构造

}

评论类:

package com.yuer.entity;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;


public class Comment implements Serializable {
	
	
	
	private static final long serialVersionUID = 1L;
	private Long id;
	private String nickName; // 昵称
	private String headPicture; // 头像
	private String email; // 邮箱
	private String content; // 评论内容
	

	private Date createTime; // 创建时间
	
	private Blog blog;
	
	private Comment parent;
	
	private List<Comment> comments = new ArrayList<Comment>();
	
	// 是否是博主产生的评论
	private boolean adminComment;
	
	
	
	
	

}

类别类:

package com.yuer.entity;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;


public class Type implements Serializable {
	
	private static final long serialVersionUID = 1L;
	private Long id;
	private String typeName; // 类别名
	
	private List<Blog> blogs = new ArrayList<Blog>();
	
	private Integer blogNum = 0;
	
	
	
	
	

}

标签类:

package com.yuer.entity;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;


public class Tag implements Serializable {

	
	private static final long serialVersionUID = 1L;
	private Long id;
	private String tagName; // 标签名
	
	private List<Blog> blogs = new ArrayList<>();
	
	private Integer blogNum = 0;
	
	
	
	
	
}

用户类:

package com.yuer.entity;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;


public class User implements Serializable {

	
	private static final long serialVersionUID = 1L;
	private Long id;
	private String userName; // 用户名
	private String nickName; // 昵称
	private String password; // 密码
	private String email; // 邮箱
	private Integer type; // 留待以后扩展,默认为0,管理员
	private String headImage; // 头像
	
	private Date createTime; // 创建时间
	private Date updateTime; // 更新时间
	
	private List<Blog> blogs = new ArrayList<>();
	
	
	
	
	
	
	
	
}

看完这些类中的字段,你应该会发现,一对多,如博客下有多个评论,则博客类中会有个list集合放置comment,而评论类中会直接声明一个博客类的对象。如果是多对一,如多个博客属于一个用户,则博客类中会声明一个用户类的对象,而用户类中有个博客类的list集合。如果是多对多,如一个博客有多个标签,,一个标签有多个博客,则两个类中分别由对方的list集合。
总结:哪方属于多,哪方只需要声明对方的一个对象。哪方属于一,则哪方会声明对方的list集合。

数据库中建表

建表时对应实体类建,不过对于这些关系而言,则是外键的引用,有个特殊的表还得另外建,对于多对多关系的表,得单独建一个表处理多对多的关系。
看如下数据库表设计:

项目总结之项目中怎样根据关系建立表
除了博客和标签的关系需要另建一个表来维护以外,其他关系,如一对多,则多的那一端(那个表)会声明一的那个表的id的一个字段,如下图:
博客表:
项目总结之项目中怎样根据关系建立表(这里另插一句话,建表时id字段尽量使用自增,还有对于存储很多内容的字段如博客的正文需要声明成longtext,而用来存储boolean值的可以声明为bit,这个类型只存储0或1)
这张图中对于类别和用户就分别声明了一个字段进行外键关联,方便查数据。

接下来看看其他表吧:
评论表:
项目总结之项目中怎样根据关系建立表类别表:
项目总结之项目中怎样根据关系建立表
标签表:
项目总结之项目中怎样根据关系建立表
用户表:
项目总结之项目中怎样根据关系建立表
多对多关系维护表:
项目总结之项目中怎样根据关系建立表这个可能不太好理解,通过我已经添加的数据进行理解:
项目总结之项目中怎样根据关系建立表

总结

根据这些图片和实体类进行理解,对于这种简单的关系建表自然就再也不是问题了,博主特此记录一下。

相关标签: 项目总结