1.表之间的关系
1.1. 一对一
一张表的一条记录一定只能与另外一张表的一条记录进行对应; 反之亦然.
- 举例:用户表: 姓名,性别,年龄,籍贯,职业,爱好,收入
- 解决方案:
- 将常用的和不常用的信息分离存储,
- 分成两张表:
表一:姓名,性别,年龄,籍贯 表二:姓名,职业,爱好,收入
1.2. 一对多
一对多:一张表中有一条记录可以对应另外一张表中的多条记录; 但是返回过, 另外一张表的一条记录只能对应第一张表的一条记录. 这种关系就是一对多或者多对一.
- 举例:学生表与班级表的关系: 以上关系: 一个班级表可以在员工信息表中找到多条关于学生详细信息的记录;但是一个学生依附于某个班级,因而只能找到一个班级: 是一种典型的一对多的关系.
1.3. 多对多
一张表中(A)的一条记录能够对应另外一张表(B)中的多条记录; 同时B表中的一条记录也能对应A表中的多条记录
- 举例:客户表和商品信息表;中间表是订单信息表,在订单信息表中的客户id连接了客户表,商品id连接了商品信息表;
- 通过订单行为,客户表与商品信息表产生了关系:一个客户可以购买多个订单,某个商品可以被不同客户购买。
2. 范式Normal Format
- 对象:每个数据表
- 解决:一种数据的存储与优化的问题: 保存数据的存储之后, 凡是能够通过关系寻找出来的数据,坚决不再重复存储:
- 目的:减少表中数据的冗余,
- 规范:
- 1.第一范式:每个字段的不可分割性;如,datetime :2020-01-01 21:30:45 可以分割为两个字段,日期2020-01-01 和时间21:30:45
- 2.第二范式:主键要有唯一性,不能重复,只能依靠复合主键判断唯一性。解决方法:1.将复合主键及各自所下属的字段独立造表,并建立唯一索引,3.原表重建唯一逻辑索引
- 3、第三范式:主键与其他字段都要有关联性,不能是递推关系,解决方式:找到起中间关联作用的字段,并拆分表格
- 范式与效率的博弈: 虽然遵循了理想的范式,但是在实际应用中,不得不关联多表查询, 而关联多表会降低查询效率。