首页 百科知识 关系模式的范式

关系模式的范式

时间:2022-10-03 百科知识 版权反馈
【摘要】:在关系数据库的规范化过程中, 为不同程度的规范化要求设立的不同标准称为范式。第二范式 要求数据库表中的每个实例或行, 必须可以被唯一区分为实现实例的唯一标识。如果关系模式R是1NF, 且每个非主属性都不传递函数依赖于R的候选键, 那么称R是第三范式 的模式。如果数据库模式中每个关系模式都是3NF, 则称其为3NF的数据库模式。该关系数据库模型达到了第三范式的要求。

一、 规范化的标准

在关系数据库的规范化过程中, 为不同程度的规范化要求设立的不同标准称为范式(Normal Form)。 不同范式的关系, 存在不同程度的数据冗余等缺点, 为了克服这些缺点,需要对关系模式进行分解, 使之从低一级范式转化为高一级范式的集合, 这种分解过程称为规范化。

如图2.19所示, 各个范式之间的关系为

1NF⊃2NF⊃3NF⊃BCNF⊃4NF⊃5NF

图2.19 范式之间的关系图

将一个低一级范式的关系模式, 通过模式分解可以转换为若干个高一级范式的关系模式的集合, 这种过程就叫规范化。

二、 不同范式的标准

1. 第一范式 (1NF)

如果关系模式R的每一个关系r的属性值都是不可分的原子值, 那么称R是第一范式的模式。

不是1NF的关系称为非规范化的关系, 满足1NF的关系称为规范化的关系。 关系数据库研究的关系都是规范化的关系。

例17: 有关系模式R (学号, 姓名, 年龄, 专业, 专业主任, 课程号, 主讲教师, 成绩, 上课地址, 学分)。 若一个学生选择两门以上课程, 那么在关系中至少要有两个或两个以上元组, 以便存储不同课程成绩, 如表2.4所示。

表2.4 学生情况表

所谓第一范式 (1NF) 是指数据库表的每一列都是不可分割的基本数据项, 同一列中不能有多个值, 即实体中的某个属性不能有多个值或者不能有重复的属性。 如果出现重复的属性, 就可能需要定义一个新的实体, 新的实体由重复的属性构成, 新实体与原实体之间为一对多关系。 在第一范式 (1NF) 中, 每一行只包含一个实例的信息。 即: 第一范式就是无重复的列。

【说明】 在任何一个关系数据库中, 第一范式 (1NF) 是对关系模式的基本要求, 不满足第一范式 (1NF) 的数据库就不是关系数据库。

2. 第二范式 (2NF)

第二范式是在第一范式 (1NF) 的基础上建立起来的, 即满足第二范式 (2NF) 必须先满足第一范式 (1NF)。 第二范式 (2NF) 要求数据库表中的每个实例或行, 必须可以被唯一区分为实现实例的唯一标识。 例如学生学号是唯一的, 因此定义为主键。

第二范式 (2NF) 要求实体的属性完全依赖于主关键字。 所谓完全依赖是指不能存在仅依赖主关键字一部分的属性, 如果存在, 那么这个属性和主关键字的这一部分应该分离出来形成一个新的实体, 新实体与原实体之间是一对多的关系。 为实现区分通常需要为表加上一个列, 以存储各个实例的唯一标识。 即: 第二范式就是属性完全依赖于主键。

例18: 有关系模式R (学号, 课程号, 主讲教师, 成绩, 上课地址)。 R上有 (学号,课程号)->主讲教师, 课程号->主讲教师, 前一个是局部依赖, R不是2NF模式。

此时R的关系就会出现冗余和异常现象, 若某一门课程有100个学生选修, 那么在关系中就会出现100个元组, 因而主讲教师和地址就会重复100次。 如果把R分解成R1 (学号, 课程号, 成绩) 和R2 (课程号, 主讲教师, 上课地址) 后, (学号, 课程号)->课程名在模式R1和R2中不出现了, 那么刚才的冗余和异常现象就消失了。 R1和R2都是2NF的模式。

例19: 将SCD (学号, 姓名, 年龄, 专业, 专业主任, 课程号, 主讲教师, 成绩, 上课地址) 规范到2NF。

由学号->姓名, 学号->年龄, 学号->专业, (学号, 课程号)->成绩, 判断关系SCD至少描述了两个实体, 即:

一个描述学生实体专业, 属性有学号、 姓名、 年龄、 专业、 专业主任;

另一个描述学生与课程的关系SC (选课), 属性有学号、 课程号、 主讲教师、 成绩、 上课地址和学分, 如图2.20所示。

学生实体表

图2.20 范式之间的关系图

3. 第三范式 (3NF)

如果关系模式R是1NF, 且每个非主属性都不传递函数依赖于R的候选键, 那么称R是第三范式 (3NF) 的模式。 如果数据库模式中每个关系模式都是3NF, 则称其为3NF的数据库模式。

对例19中的关系SC (课程号, 主讲教师, 上课地址) 是2NF模式。

如果SC中有课程号->主讲教师, 主讲教师->上课地址, 那么主讲教师->上课地址就是一个传递函数依赖, SC不是3NF模式。 此时模式SC的关系中也会出现冗余和异常操作。

满足第三范式 (3NF) 必须先满足第二范式 (2NF)。 即: 第三范式 (3NF) 要求一个数据库表中不包含已在其他表中已包含的非主关键字信息。 第三范式就是属性不依赖于其他非主属性。 对例19可描述为:

学号->(姓名, 年龄)

专业->专业主任

课程号->(学分, 主讲教师, 上课地址)

(学号, 课程号)->成绩

若不满足第二范式的要求, 会产生如下问题:

(1) 数据冗余。

同一门课程由n个学生选修, “学分” 就重复n-1次; 同一个学生选修了m门课程,姓名和年龄就重复了m-1次。

(2) 更新异常。

若调整了某门课程的学分, 数据表中所有行的 “学分” 值都要更新, 否则会出现同一门课程学分不同的情况。

假设要开设一门新的课程, 暂时没有人选修。 这样, 由于还没有 “学号” 关键字, 课程名和学分也无法记录数据库。

(3) 删除异常。

假设一批学生已经完成课程的选修, 这些选修记录就应该从数据库表中删除。 但是, 与此同时, 课程名和学分信息也被删除了。 很显然, 这也会导致插入异常。

例20: 把例19关系模式R分解为第三范式的四个关系模式:

SC (学号, 课程号, 成绩)

C (课程号, 学分, 主讲教师, 上课地址)

S (学号, 姓名, 年龄)

D (专业, 专业主任)

该关系数据库模型达到了第三范式的要求。 从以上两个关系模式分解的例子可以看出,对关系规范化的分解过程体现出了 “一事一地” 的设计原则, 即一个关系反映一个实体或一个关系, 不应当把几样东西混合在一起。

第一范式:1NF是对属性的原子性约束, 要求属性具有原子性, 不可再分解;

第二范式:2NF是对记录的唯一性约束, 要求记录有唯一标识, 即实体的唯一性;

第三范式:3NF是对字段冗余性的约束, 即任何字段不能由其他字段派生出来, 它要求字段没有冗余。

根据分解原则, 所得到第三范式建立的表如图2.21所示。

对于分解后的两个关系S和D, 主键分别为学号和专业, 不存在非主属性对主键的传递函数依赖。 因此, S∈3NF, D∈3NF。

4. BCNF范式

在第三范式的基础上, 关系模式R中, 若每一个决定因素都包含码 (每一个依赖的决定因素都是候选码), 则R属于BCNF。

BCNF的关系模式必须满足下面的条件:

(1) 主属性对每一个不包含它的码, 是完全函数依赖;

图2.21 模式分解结果

(2) 非主属性对每一个码也都是完全函数依赖;

(3) 没有任何属性完全函数依赖于非码的任何一组属性。

在关系模式STC(S, T, C) 中, S表示学生, T表示教师, C表示课程。

每一教师只教一门课。 每门课由若干教师教, 某一学生选定某门课, 就确定了一个固定的教师。 某个学生选修某个教师的课就确定了所选课的名称:

(S, C)->T, (S, T)->C, T->C

BCNF规范化是指把3NF关系模式通过投影分解转换成BCNF关系模式的集合。

下面以3NF关系模式SNC为例, 来说明BCNF规范化的过程。

例21: 将SNC (学号, 姓名, 课程号, 成绩) 关系规范到BCNF。

分析SNC数据冗余的原因, 是因为在这一个关系中存在两个实体, 一个为学生实体,属性有学号、 姓名; 另一个是选课实体, 属性有学号、 课程号和成绩。

根据分解的原则, 可以将SNC分解成如下两个关系:

S1 (学号, 姓名), 描述学生实体;

S2 (学号, 课程号, 成绩), 描述学生与课程的关系。

对于S1, 有两个候选键学号和姓名;

对于S2, 主键为 (学号, 课程号)。

在这两个关系中, 无论主属性还是非主属性都不存在对键的部分依赖和传递依赖, S1为BCNF, S2为BCNF。

分解后, S1和S2的函数依赖分别如图2.22所示。

图2.22 函数依赖关系

SNC转换成BCNF后, 数据冗余度明显降低, 即:

学生的姓名只在关系S1中存储一次, 学生要改名时, 只需改动一条学生记录中相应的姓名值, 从而不会发生修改异常。

BCNF关系模式具有的性质:

•所有非主属性都完全函数依赖于每个候选码。

•所有主属性都完全函数依赖于每个不包含它的候选码。

•没有任何属性完全函数依赖于非主码的任何一组属性。

三、 关系模式规范化的步骤

规范化就是对原关系进行投影, 消除决定属性不是候选键的任何函数依赖。 具体可以分为以下几步:

(1) 对1NF关系进行投影, 消除原关系中非主属性对键的部分函数依赖, 将1NF关系转换成若干个2NF关系。

(2) 对2NF关系进行投影, 消除原关系中非主属性对键的传递函数依赖, 将2NF关系转换成若干个3NF关系。

(3) 对3NF关系进行投影, 消除原关系中非主属性对键的部分函数依赖和传递函数依赖, 即: 决定因素都包含一个候选键。 得到一组BCNF关系。

(4) 限制关系模式的属性之间不允许有非平凡且非函数依赖的多值依赖, 称为4NF关系。

规范化的基本步骤如图2.23所示。

图2.23 范式之间的关系

四、 规范化的应用

在实际应用中, 最有价值的是3NF和BCNF, 在进行关系模式的设计时, 通常分解到3NF就足够了。 规范化理论提供了一套完整的模式分解算法, 按照这套算法可以做到:

(1) 若要求分解具有无损连接性, 那么模式分解一定能够达到4NF。

(2) 若要求分解保持函数依赖, 那么模式分解一定能够达到3NF, 但不一定能够达到BCNF。

(3) 若要求分解既具有无损连接性, 又保持函数依赖, 则模式分解一定能够达到3NF,但不一定能够达到BCNF。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈