前言
回忆一下我们之前了解过的,SQL语言控制的数据库是建立在哪个数据模型上的?
——答案很显然,是“关系模型”。SQL是访问关系数据库的计算机标准语言,而关系数据库正是建立在各系模型上的。
关系数据表
关系模型本质就是若干个二维数据表,每个表的每一行称为记录(Record)代表的是我们平常说的数据;每一列称为字段(Column)储存了每一条记录含有相同类型相同意义的数据值。
这就建立了一个数据表:
意义1 | 意义2 |
记录1的第一个值 | 记录1的第二个值 |
记录2的第一个值 | 记录2的第二个值 |
…… |
可能这样说还是没那么好理解,其实我们代入一个具体的范例就好理解了:
学生姓名 | 学生成绩 |
张三 | 99 |
李四 | 97 |
在这样一个学生成绩表中,我们建立了学生姓名和学生成绩这两个数据的关系。
而前面这个这个仅仅只是关系数据表,若要称为数据库,表与表之间也需要有关系
关系数据库
比如我们再建立一个表,储存的是每位同学的学号信息和姓名的对应关系:
学生姓名 | 学生学号 |
张三 | 2022120101 |
李四 | 2022120102 |
…… | |
显然,这第二张表的每个记录都可以对应一个第一张表的记录,可以理解成一个学生有一个学号和一个分数。 |
这就是关系数据库中两个表“一对一”的关系
思考:那么一对多、多对一怎么理解呢?可以试着举举例子。
这里我也可以给出一个例子。还是基于上面提到的学生学号表,我们可以再加一列班级:
学生姓名 | 学生学号 | 班级 |
张三 | 2022120101 | 高三1班 |
李四 | 2022120102 | 高三1班 |
王五 | 2022120103 | 高三2班 |
…… |
再来一个班级表:
班级 | 班主任 |
高三1班 | M先生 |
高三2班 | L女士 |
…… |
我们发现张三和李四都是来自高三1班,所以学生表的多条记录对应班级表的一条记录,这种关系就是“多对一”。反之,班级表的一条记录对应学生表的多条记录,这种关系就是“一对多”。
总结
一张表中,每条记录中值的排列按照列名以一定关系排列,我们可以通过一条记录的值定位到这条记录(或者筛选出一些符合条件的记录),并可能查找到这条记录别的值
一个关系数据库中,我们可以建立表与表的关系,通过连接、子查询等操作,对庞大的数据进行管理,让他们井井有条地为我们服务