三种关系的实例
一对一关系实例
- 一个人对应一张身份证,一张身份证对应一个人
一对多关系实例
- 一个班级拥有多个学生,一个学生只能够属于某个班级
多对多实例
- 一个学生可以选修多门课程,一个课程可以被多个学生选修
一对一关系
主键的设计方式
- 一对一关系是最好理解的一种关系,在数据库建表的时候可以将
人表的主键放置与身份证表里面
,也可以将身份证表的主键放置于人表
里面
也就是说一对一关系的表,主键放在左表也可以,放在右表也可以
从用户表分析一对一关系
箭头所指向的表是 1 的一端,箭头所指向的表的主键,在被指向的表中即作为主键,又作为外键。
一对多关系
主键的设计方式
- 方法1:班级是1端,学生是多端,结合面向对象的思想,1端是父亲,多端是儿子,所以多端具有1端的属性,也就是说
多端里面应该放置1端的主键
,那么学生表里面应该放置班级表里面的主键
。(该方法比较常用) - 方法2:
新增一个关系表,用来表示学生与班级的属于关系
,该关系表包含字段(学生号,班级号)。通过学生号与班级号的对应关系表示学生属于的班级。
在两张表所对应的java实体类中多的一端中有1的一端的java实体类的对象属性(学生类中有一个班级对象作为成员变量
)。
多对多关系
主键设计方式
- 对于多对多关系,
需要转换成1对多关系
,那么就需要一张中间表
来转换,这张中间表里面需要存放学生表里面的主键和课程表里面的主键,此时学生与中间表是1对多关系,课程与中间表是1对多关系,学生与课程是多对多关系
从用户/角色表分析多对多关系
由三张表来体现, 两张是业务表,中间是关系表,箭头由中间表分别指向两张业务表,中间表由两张业务表的主键作为外键(联合主键),且中间表不能有其他字段,在java实体类中两张业务表分别具有对方业务表的集合属性(用户类中有一个List<角色>集合作为成员变量,角色表中有一个List<用户>集合做为成员变量
)
总结
总而言之,最重要的关系就是1对多关系,根据面向对象思想在建表的时候将1端主键置于多端即可。