写在开头:
一直搞不清楚数据库表之间的关系,看了很多博客还是有些弥漫,没有具体的例子辅助。所以写了下面的内容,此文中的案例以学校为例,个人理解,可能会有诸多不妥之处,仅供参考。
一、两个重要概念:
什么是主键?外键?
1.主键:主键是表的一个特殊字段,可以唯一地标识表中的每条信息。比如:身份证号。一个表中可以有一个或多个主键。
作用:唯一标识、快速查找
2.外键:如果表B的一个字段(外键)依赖于表A的主键。则成表A为父表,表B为子表。
原则:外键必须依赖于数据库中已经存在的父表的主键,外键可以为空
作用:建立该表与父表的关联关系
二、表关系
包括单表、多表(一对一、一对多、多对多)
1.单表
就是一张表,所有的数据都在一张表中。
例:下面这张表,学习信息都存在一张表中。
2.多表
2.1一对一 (不常用)
A 表中的一行最多只能匹配于 B 表中的一行
应用场景:
1.单表太大,一分为二
2.由于安全原因而隔离表的一部分
例:为了收集学生的联系方式,又建了一张学生联系表,如下图。
联系表(子表)中的外键(学号),必须依赖于信息表(父表)中的主键(学号)存在。
2.2一对多
A 表中的一行可以匹配 B 表中的多行,但是 B 表中的一行只能匹配 A 表中的一行
例:学生到校后,需要分班,下面的两张表就产生了。一个班有多个学生,一个学生只能归属一个班级,
2.3多对多
多对多就是两个一对多
A 表中的一行可以匹配 B 表中的多行,反之亦然。要创建这种关系,需要定义第三个表,称为结合表,它的主键由 A 表和 B 表的外键组成。
例:办级分好之后学生就该选课了。我们需要一张课程表。一个学生可以选择多门科,一门课也可以多名同学上。此时我们通过第三张表来映射这种关系。
课程表:
学生分班表:
选课结果(第三张表):