首页 理论教育数据库技术与应用教程:关系模式规范化的必要性

数据库技术与应用教程:关系模式规范化的必要性

【摘要】:关系模式设计的好坏将直接影响到数据库设计的成败。将关系模式规范化,使之达到较高的范式,这是设计好关系模式的主要途径。表2-1中的数据按分解后的关系模式组织,得到表2-2。

关系数据库的设计主要是关系模式的设计。关系模式设计的好坏将直接影响到数据库设计的成败。将关系模式规范化,使之达到较高的范式,这是设计好关系模式的主要途径。

1.关系模式应满足的基本要求

好的关系模式除了能满足用户对信息存储和查询的基本要求外,还应当使它的数据库满足如下要求。

(1)元组的每个分量必须是不可分的数据项

关系数据库特别强调关系中的属性不能是组合属性,必须是基本项,并把这一要求规定为鉴别表格是否为“关系”的标准。如果表格结构的数据项都是基本项,则该表格为关系,它服从关系模式的第一范式,以后可以在此基础上进一步规范化。否则,如果表格结构中含有组合项,必须先使之转换为基本数据项。因为关系的一切数学理论都是基于关系服从1 NF的基础上的。

换一种角度讲,假如关系中允许组合项,例如允许“成绩”项中含有“数据结构、数据库、操作系统”3个基本项,会使关系结构变为多层次的混合结构。它将大大增加关系操作的表达、优化及执行的复杂度,使有些问题变得非常难处理,所以关系数据库中必须遵守这一规定。

(2)数据库中的数据冗余应尽可能少

数据冗余大是指重复的数据多。“数据冗余”是数据库最忌讳的毛病,数据冗余会使数据库中的数据量剧增,系统负担加重,并浪费大量的存储空间。数据冗余还可能造成数据的不完整,增加数据维护的代价。数据冗余还会造成数据查询和统计的困难,并导致错误的结果。

尽管关系数据是根据外码建立关系之间的连接运算的,外码数据是关系数据库不可消除的“数据冗余”,但在设计数据库时,应千方百计将数据冗余控制在最小的范围内,不必要的数据冗余应坚决消除。

(3)关系数据库不能因为数据更新操作而引起数据不一致问题

如果数据模式设计得不好,就可能造成不必要的数据冗余,一个信息就会多次在多个地方重复存储。对于“数据冗余大”的关系数据库,当执行数据修改时,这些冗余数据就可能出现有些被修改,而有些没有修改,从而造成数据不一致问题。数据不一致问题影响了数据的完整性,使得数据库中数据的可信度降低。

(4)数据库中的数据不能在执行数据插入时产生插入异常现象

所谓“插入异常”是指希望插入的信息由于不能满足数据完整性的某种要求,而不能正常地被插入数据库的问题。出现数据插入异常问题的主要原因是数据库设计时没有按“一事一地”的原则进行,多种信息混合放在一个表中,就可能造成因一种信息被捆绑在其他信息上,而产生信息之间相互依附存储的问题,这是使得信息不能独立插入的关键所在。

(5)数据库中的数据不能在执行删除操作时产生删除异常问题

“删除异常”是指在删除某种信息的同时把其他信息也删除了。“删除异常”也是数据库结构不合理产生的毛病。和“插入异常”一样,如果关系中多种信息捆绑在一起,当被删除信息中含有关系的主属性时,由于关系要满足实体完整性,整个元组将全部从数据库中被删除,即出现“删除异常”。

(6)数据库设计应考虑查询要求,数据组织应合理

在数据库设计时,不仅要考虑数据自身的结构完整性,还要考虑数据的使用要求。为了使数据查询和数据处理高效简洁,特别是对那些查询实时性要求高、操作频度大的数据,有必要通过视图、索引和适当增加数据冗余的方法,来增加数据库的方便性和可用性。

2.关系规范化可能出现的问题

如果一个关系没有经过规范化,可能会导致上述谈到的数据冗余大,数据更新造成不一致、数据插入异常和删除异常问题。下面的例子说明了上述问题。

例如,要求设计一个教学管理数据库,希望从该数据库中得到学生学号、学生姓名、年龄、性别、系别、系主任姓名、学生学习的课程和该课程的成绩信息。若将此信息要求设计为一个关系,则关系模式为

教学(学号,姓名,年龄,性别,系名,系主任,课程名,成绩);

可以推出此关系模式的码为(学号,课程名)。

仅从关系模式上看,上述教学关系已经包括了系统需要的全部信息。但是,我们如果按此关系模式建立关系,就会发现其中的问题所在。下面我们通过具体实例,对该数据模式进行分析,找出不足之处。(www.chuimin.cn)

表2—1 不规范关系的实例——教学关系

从表2-1中的数据情况可以看出,该关系存在着如下问题。

(1)数据冗余大

每一个系名和系主任的名字存储的次数等于该系的学生人数乘以每个学生选修的课程门数,系名和系主任数据重复量太大。

(2)插入异常

一个新系没有招生时,系名和系主任名无法插入数据库中,因为在这个关系模式中,主码是学号或课程名,而这时因没有学生而使得学号无值,所以没有主属性值,关系数据库无法操作,因此引起插入异常。

(3)删除异常

当一个系的学生都毕业了而又没招新生时,删除了全部学生记录,随之也删除了系名和系主任名。这个系依然存在,而在数据库中却无法找到该系的信息,即出现了删除异常。

(4)更新异常

若某系换系主任,数据库中该系的学生记录应全部修改。如有不慎,某些记录漏改了,则造成数据的不一致错误,即出现了更新异常。

由上述4条可知,教学关系尽管看起来很简单,但存在的问题比较多,它不是一个合理的关系模式。

3.模式分解是关系规范化的主要方法

对于有问题的关系模式,可以通过模式分解的方法使之规范化。

例如,上述的关系模式“教学”,可以按“一事一地”的原则分解成“学生”“教学系”和“选课”3个关系,其关系模式为

学生(学号,姓名,年龄,性别,系名称);

教学系(系名,系主任);

选课(学号,课程名,成绩)。

表2-1中的数据按分解后的关系模式组织,得到表2-2。对照表2-1和表2-2会发现,分解后的关系模式克服了“教学”关系中的4个不足之处,这样更加合理和实用。

表2—2 教学关系分解后形成的3个关系