一、范式
关系模式的规范化标准,达到范式的关系才是规范化的。
1-1、目前有6种范式:
- 第一范式:1NF;(满足最低要求)
- 第二范式:2NF;(在第一范式的基础上进一步的满足一些要求)
- 第三范式:3NF;
- BC范式:BCNF;
- 第四范式:4NF;
- 第五范式:5NF;
各范式之间存在的联系:
1-2、规范化
一个第一级范式的关系模式,通过模式分解可以转换为若干个高一级范式的关系模式的集合。这个过程叫做规范化。
判断范式,第一步:求出候选码,并将主属性、非主属性分开。
1-3、第一范式
1NF——>2NF,要解决部分函数依赖。
反例:
改进方式:
1-3-1、数据冗余
示例:表中学生信息重复
1-3-2、更新异常
1、修改异常
基于数据冗余引起的修改异常。
2、插入异常
理应能插入的信息,实际却不能插入,如下所示:
实体完整性约束:
关系中,主码的值不能为空或部分为空,多个属性构成的主码,不能部分为空。
此时,若是只想在表中插入课程信息:课程号、课程名,则会破坏实体完整性。因为学生信息为空。但是一般的逻辑是:先有课程,再让学生选择课程。
3、删除异常
把不该删除的数据删除了,如下所示:
若是只想删除课程信息,却把与之相关的学生信息也删除了。
1-4、第二范式
【回顾】:
第一范式存在的问题:
部分函数依赖。
部分函数依赖,导致的结果:
数据冗余、更新异常(插入、删除、修改)
第一范式,消除部分函数依赖的问题,得到:第二范式。
1-4-1、第二范式的定义
示例:
问题的解决:规范化,即:分解。
1-4-2、关系模式的分解
将一个关系模式分解为多个关系模式,相应的,原来存储在一个二维表中的数据就要分散到多个二维表中。要使这个分解有意义,起码要求:后者不能丢失前者的信息(无论是表,还是关系,都不能丢失)
1-4-3、消除部分函数依赖
示例:
此时R1,R2,R3符合第二范式的定义。
单个属性作为候选码的时候,不存在部分函数依赖。
候选码为属性组合的时候,存在部分函数依赖。
1-4-4、第二范式存在的问题
属于2NF的关系模式R也存在问题:数据冗余、更新异常。
因为:传递函数依赖。
示例:
此时,R1存在的传递函数依赖,如下:
1、R1的数据冗余问题:
若是多个学生都属于同一个学院,则:学院信息和院长信息会重复多次。
2、R1的更新异常问题
2-1、修改异常
若是R1中要修改周八院长的信息,则需要修改多次,可能导致一部分数据修改,一部分没有修改,则会出现修改的不一致性。
2-2、插入异常
若是只想新增一个学员信息:学院、院长,但是没有学生信息,则不能插入,因为R1中学号是主键。
2-3、删除异常
若是只是删除学生信息,或是,只是删除学员信息,关联的学院或学生信息都会被删除,这是不恰当的。
第二范式,规范化(关系模式的分解),消除传递函数依赖, 得到:第三范式。
1-5、第三范式
1-5-1、第三范式的定义
1-5-2、消除传递函数依赖
示例:R1
将R1中的院长拆分出去,此时关系:学号——>院长、学院——>院长也从R1中删除了。
保留关系:学院——>院长(若是保留学号——>院长,则还是存在传递依赖。)
以上,是R1中存在单个传递函数依赖问题的解决;若是R1中存在多个传递函数依赖呢?如下所示:
此时将人数属性也放到新的分解表中:
也就是说,若是存在如下情况的传递函数依赖:
X——>Y,Y——>Z1, Y——>Z2,Y——>Z3
此时,将Y、Z1、Z2、Z3都放到新的分解表中。
分解完成后,符合第三范式的示例:
此时,所有的表中,都满足:
1、非主属性,完全依赖于,主属性;
2、非主属性,非传递依赖于,主属性。
1-5-3、第三范式存在的问题
属于第三范式的关系模式R可能存在:主属性对码的部分函数依赖、传递依赖。
不属于第三范式的关系模式R可能存在:非主属性对码的部分函数依赖、传递依赖。
示例:(前提:每个书店只有1名店长,每个店长只在一个书店)
由此可得:
先求候选码,再由此得到主属性、非主属性。
第一范式:R中每个属性A的值域只包含原子项。
第二范式:每个非主属性,都完全依赖于,候选码。
第三范式:每个非主属性,都非传递依赖于,候选码。
由此可知,改表格符合第三范式。
1、数据冗余
若是书店1有100本不同的书,则店长张三的姓名要重复100次。
有了数据冗余,就有更新异常。
2、更新异常
2-1、修改异常
修改店长张三的值,修改不彻底,导致数据的不一致性。
2-2、插入异常
此时,有2个主码,三个主属性。
若是只想插入书店的信息,没有店长和图书信息,则不能添加。
2-3、删除异常
想要删除一本书的信息,对应的这条数据整个删除后,店长和书店的信息也没有了。
出现这些问题的原因:主属性对码的部分函数依赖、传递依赖。
示例:
书店,依赖于店长,店长是候选码(店长,图书)的部分;
店长,依赖于书店,书店是候选码(书店,图书)的部分。
解决方式:第三范式,消除主属性对码的部分函数依赖、传递依赖,升级到:BC范式。
1-6、BC范式
1-6-1、BC范式的定义
一个满足BC范式的关系模式,有如下特点:
一个满足BC范式的关系模式R已消除了插入和删除异常。
1-6-2、消除主属性对码的部分函数依赖、传递依赖
1-7、多值依赖和第四范式
1-7-1、多值依赖
示例:
一门课程,对应多个任课老师;
一门课程,对应多本参考书;
1-7-2、第四范式的定义
看到多值依赖,想到第四范式;(考的极少,简单了解即可)