1、主外键关联
将外键与其它表主键关联,有三种情况
1、严格模式
被外键关联的表,无法直接删除数据,需要将关联的表内数据先清空才可以删除
2、级联删除/更新
被外键关联的表删除或更新数据的同时,关联表的数据会同步删除或更新。
2、数据库设计三范式
1、原子性范式
字段本身不可再分割,必须是基本的字段。比如商品规格不是最简单的字段,还可以分割成重量、体积和密度等多个字段。
2、主键范式
每个表都必须有一个内容不重复的字段作为每条数据的唯一标识,这种唯一的标识可以做主键。
3、外键范式
表格中有与其他表格重复的非主键字段,应该去除,然后设置主外键关联。
3、表与表之间的关系
1、一对一
两张表之间每行数据都各自只与另一张的一行数据关联,例如病人信息表和病人当前病情表是一一对应。
2、一对多
一张表的一行数据可以对应另一张的多行数据(反之不行),例如销售人员表与销售记录表。每个销售人员可以有多条销售记录,但是每条销售记录只能对应一个销售人员。
3、多对多
两张表之间的每行数据都可以对应对方表的多行数据,例如学生表和课程表。每个学生可以有多个课程,而每个课程也可以有多个学生同时上课。
4、反范式设计
除了主键范式不可违反,即每张表必须有不重复的主键,其它两个范式都可以违反
1、反原子范式
举例:电商购物中的收货地址字段。地址字段其实可以根据地区大小分为:国家、省级行政区、地级行政区和县级行政区等等,但是在实际存储中,并没有分得这么详细,一般都是一个地址字段包含所有地址,所以违反了原子性。
2、反外键范式
举例:学生成绩表中的学生姓名字段。一般数据库中会有学生的信息表,里面就已经包含了学生姓名,所以再其它表中不应该出现姓名字段,如果需要,就应该使用主外键关联的方式指向学生信息表。事实上,学生成绩表内一般都会写上学生姓名,这样做虽然产生了冗余,浪费了空间,但是在查询时会非常简单快速,这就是牺牲空间换取时间。