• 候选码可能有多个。如果有多个候选码,则它们的地位是平等的,任何一个都可以被设置为主码。在应用当中,一般是根据实际需要来将某一个候选码设置为主码。
定理2.1 在关系模式R(U)中,对任意A, B ⊆U且A ∪ B = U,如果A B,则有A U,从而A是关系模式R(U)的一个候选码。
【例2.5】 考虑如表2.16所示的学生成绩关系模式,其中U = {学号, 姓名,系别,成绩}。对于属性“学号”,容易验证:学号 {姓名,系别,成绩},而{学号}∪{姓名,系别,成绩} = U。根据定理2.1,“学号”是学生成绩关系模式的一个候选码。
• 2.4.3 函数依赖的性质(Armstrong公理系统)
Ø 1974年Armstrong首次提出了这样的一套推理规则,由此构成的系统就是著名的Armstrong公理系统。
Ø 在关系模式R(U)中,假设A, B, C, D为U的任意子集。在Armstrong公理系统中,基于函数依赖集F的推理规则可以归结为以下3条:
ü 自反律:若C ⊆ B,则B→C为F所蕴含(平凡函数依赖)。
ü 增广律:若B → C为F所蕴含,则B∪D→C∪D为F所蕴含。
ü 传递律:若B→C且C→D为F所蕴含,则B→D为F所蕴含。
Ø 基于上述的推理规则,进一步得到下列的推理规则:
ü 自合规则:B→B。
ü 合并规则:若B→C且B→D,则B→C∪D。
ü 分解规则:若B→C∪D,则B→C且B→D。
ü 符合规则:若A→B且C→D,则A∪C→B∪D。
ü 伪传递规则:由B→C,A∪C→D,有A∪B→D。
定理2.2 在关系模式R(U)中,B及B1, B2,…, Bn是U的子集,则B→B1∪B2∪…∪Bn成立的充分必要条件是B→Bi成立,其中i = 1,2,…,n。
2.5 关系模式的范式
Ø 范式一共分为六个等级,从低到高依次是第一范式(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存在的缺点:
• 数据冗余