Ø 范式一共分为六个等级,从低到高依次是第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、BC范式(BCNF)、第四范式(4NF)和第五范式(5NF)。
Ø 高等级范式是在低等级范式的基础上增加一些约束条件而形成的,等级越高,范式的约束条件就越多,要求就越严格。各种范式之间的包含关系可以描述如下:
5NF ⊆ 4NF ⊆ BCNF ⊆ 3NF ⊆ 2NF ⊆ 1NF
Ø 通过模式分解,可以将一个低级别的范式转化为若干个高一级的范式,而这种转化过程称为规范化。
• 2.5.1 第一范式(1NF)
定义2.8 设R(U)是一个关系模式,U是关系R的属性集,若U中的每一个属性a的值域只包含原子项,即不可分割的数据项,则称R(U)属于第一范式,记为R(U)∈1NF。
【例子】表2.17所示。该数据表所对应的关系模式不属于第一范式,因为其中每个元组在“学生人数”属性上的属性值都不是原子项,它们都可以再分,实际上它们都是由两个原子项复合而成。为将其转化为第一范式,需要将复合项(非原子项)分解为原子项即可,结果如表2.18所示。
【例2.6】假设有一个研究生信息管理系统,该系统涉及的信息主要包括导师信息、研究生信息以及所选课程信息(supervisor, student, course)等。设计了如下的一个关系模式: SSC(学号, 姓名, 系别, 导师工号, 导师姓名, 导师职称, 课程名称, 课程成绩) 。
根据常识可以知道:
• 一位研究生只有一位导师(不含副导师),但一位导师可以指导多位研究生;
• 一位研究生可以选修多门课程,一门课程也可以被多位研究生选修;
• 一位研究生选修一门课程后有且仅有一个成绩;
• 不同的课程,课程名是不相同的,即课程名是唯一。
基于以上语义信息可以知道:
• 学号→{姓名, 系别}
• 学号→导师工号
• 导师工号→{导师姓名, 导师职称}
• {学号, 课程名称}→课程成绩
Ø根据Armstrong公理及定理2.2可以推知:
{学号, 课程名称}→{学号, 姓名, 系别, 导师工号, 导师姓名, 导师职称, 课程名称, 课程成绩}
Ø且可以进一步推知:
{学号, 课程名称} {学号, 姓名, 系别, 导师工号, 导师姓名, 导师职称, 课程名称, 课程成绩}
Ø根据定义2.7,{学号, 课程名称}是关系模式SSC的候选码,实际上是唯一的候选码,所以故只能选择它为模式的主码。
关系模式SSC存在的缺点:
• 数据冗余
关系中每个元组既包含研究生信息,也包含导师信息以及所选课程的信息。一位导师可指导多名研究生,每个研究生对应的元组都包含同一个导师的相同信息。一位导师带有多少名研究生就有多少条重复的导师信息。造成了数据冗余,如果数据量很大,就会浪费大量的存储空间,为这些数据的维护付出巨大的代价。
• 插入异常