三种关系的实例

一对一关系实例

  • 一个人对应一张身份证,一张身份证对应一个人

一对多关系实例

  • 一个班级拥有多个学生,一个学生只能够属于某个班级

多对多实例

  • 一个学生可以选修多门课程,一个课程可以被多个学生选修
一对一关系

CoGroupFunction的一对多关系 一对多的关系模式举例_一对一


主键的设计方式

  • 一对一关系是最好理解的一种关系,在数据库建表的时候可以将人表的主键放置与身份证表里面,也可以将身份证表的主键放置于人表里面
    也就是说一对一关系的表,主键放在左表也可以,放在右表也可以

从用户表分析一对一关系

箭头所指向的表是 1 的一端,箭头所指向的表的主键,在被指向的表中即作为主键,又作为外键。

CoGroupFunction的一对多关系 一对多的关系模式举例_主键_02

一对多关系

CoGroupFunction的一对多关系 一对多的关系模式举例_主键_03


主键的设计方式

  • 方法1:班级是1端,学生是多端,结合面向对象的思想,1端是父亲,多端是儿子,所以多端具有1端的属性,也就是说多端里面应该放置1端的主键,那么学生表里面应该放置班级表里面的主键(该方法比较常用)
  • 方法2:新增一个关系表,用来表示学生与班级的属于关系,该关系表包含字段(学生号,班级号)。通过学生号与班级号的对应关系表示学生属于的班级。

在两张表所对应的java实体类中多的一端中有1的一端的java实体类的对象属性(学生类中有一个班级对象作为成员变量)。

多对多关系

CoGroupFunction的一对多关系 一对多的关系模式举例_一对一_04


主键设计方式

  • 对于多对多关系,需要转换成1对多关系,那么就需要一张中间表来转换,这张中间表里面需要存放学生表里面的主键和课程表里面的主键,此时学生与中间表是1对多关系,课程与中间表是1对多关系,学生与课程是多对多关系

从用户/角色表分析多对多关系

由三张表来体现, 两张是业务表,中间是关系表,箭头由中间表分别指向两张业务表,中间表由两张业务表的主键作为外键(联合主键),且中间表不能有其他字段,在java实体类中两张业务表分别具有对方业务表的集合属性(用户类中有一个List<角色>集合作为成员变量,角色表中有一个List<用户>集合做为成员变量)

CoGroupFunction的一对多关系 一对多的关系模式举例_一对一_05

总结

总而言之,最重要的关系就是1对多关系,根据面向对象思想在建表的时候将1端主键置于多端即可。