用一个实例讲解关系数据理论中的规范化问题

时间:2022-07-08 05:31:22

用一个实例讲解关系数据理论中的规范化问题

摘 要:规范化问题是关系数据理论的重点和难点,仅从理论上作出解释,很难使学生理解,本文提出通过一个完整的实例,采用逐步深入的方法解决关系模式中存在的问题,使学生加深对规范化理论的理解。

关键词:数据依赖;规范化;范式

中图分类号:G64

文献标识码:B

文章编号:1672,5913f2008)O1-0051-03

1 问题的提出

我们建立一个描述学校教务的数据库,该数据库涉及的对象包括学生的学号(sno)、学生姓名(sname)、所在系(sdept)、系主任姓名(Mname)、教师姓名(Tname)、课程号(cno)、成绩(Grade)。假设用一个单一的关系模式来表示,则该关系模式的属性集合为:

U={Sno,Sname,Sdept,Mname,Tname,Cno,Grade}

从这个关系模式中,我们可以看出存在以下问题:

(1)数据冗余太大

比如:Sdept,Mname等列中数据项重复出现,这将浪费大量的存储空间。

(2)更新异常(update Anomalies)

由于数据冗余,当更新数据库中的数据时必然造成麻烦,例如,张一改

换了系,从计算机系调到自动化系,则需从整个关系中逐一找到其对应的元组进行修改,若漏改一处则造成数据矛盾。

(3)插入异常(InsertionAnomalies)

在StudentI表中,主码是由学号和课程号组合而成的,两者取值都不允许是空值。这样,若有一新学生来报道,会由于他没有选修任何一门课程而无法将其信息插入表中,这样就形成了插入异常。如果一个系新成立,尚无学生,就无法把这个系及其系主任的信息存入数据库,这样也形成了插入异常。

(4)删除异常(Deletion Anomalies)

在Studentl表中,若删除张三,则整个元组不复存在,连同自动化系主任吴总这一信息也会一并删掉,这样会引起信息丢失。

关系数据库规范化理论是用来研究如何将一个“不好”的关系模型转化为一个“好”的关系模型。其基本思想是通过合理的分解关系模式来消除其中不合适的数据依赖。以解决数据冗余、更新异常、插入异常、删除异常问题。

2 函数依赖

函数依赖是数据依赖的重要组成部分,1NF,2NF,3NF,BCNF就是在函数依赖范畴内实现分离。函数依赖的定义:设R(u)是属性集u上的关系模式。x,Y是的u子集。若对于R(u)的任意一个可能的关系r,r中不可能存在两个元组在x上的属性值相等,而在Y上的属性值不等,则称x函数确定Y或Y函数依赖于X,记作X->Y。

在R(u)中,如果x可以推导出Y,并且对于x的任何一个真子集x’,都有x’不可以推导出Y,则称Y对x的完全函数依赖。本例可以看出的完全函数依赖为:(学号,课程名)――成绩。

在R(u)中,如果x可以推导出Y,但Y不完全函数依赖于x,则称Y对x部分函数依赖。本例可以看出的完全函数依赖为:学号――姓名,系。

在R(U)中,如果x可以推导出Y,Y不属于X,Y可以推导出Z,则称x对z的传递函数依。本例可以看出的传递函数依赖:学号――系――系主任。

3 规范化

规范化的基本思想是逐步消除数据依赖中不合适的部分,是模式中的各关系模式达到某种程度的分离,就是实现概念的单一化,关系模式的规范化过程是通过对关系模式的分解来实现的,把底一级的关系模式分解为若干个高一级的关系模式。关系数据库规范化理论认为,一个关系数据库中的每一个关系都必须满足一定的约束条件,称为范式。范式分为六个等级,一级比一级要求严格,一个较低范式的关系,可以通过关系的无损分解转换为若干较高级范式关系的集合,这一过程就叫做关系规范化。

3. 1 1NF

在一个关系中,各字段均是不可再分的基本数据项,且不存在重复字段,则称该关系满足第一范式。第一范式的关系是从关系的基本性质而来的,任何关系都必须遵守。我们从表1中就可以看出第一范式不是一个好的关系,其原因就是关系模式存在数据冗余、更新异常、插入异常、删除异常等问题。寻求解决这些问题的方法,这就是规范化的目的。

3.2 2NF

若R∈1NF,且每一个非主属性都完全依赖于码,则R∈2NF。

将1NF转化为2NF,其实质是采用投影分解法,将一个1NF的关系无损分解为几个2NF的关系。分解方式为:将部分函数依赖(学号――姓名,系)单独提取出来,把表分解为Student2和SGrade,分别如表2、表3。

分析Student2,其中仍然存在以下问题:

(1)数据冗余大。计算机,王总各重复了两次。

(2)更新异常。若计算机更换主任,则必须重复修改计算机每个学生对应的主任的名字,若漏改一处则造成数据矛盾。

(3)插入异常。如果新开设一个系,会因为没有招生而不能插入相应的信息。

(4)删除异常。若删除张三,则整个元组不复存在,连同自动化系方面的信息一并删掉,这样会引起信息丢失。

存在以上问题的原因就是学生信息表中存在传递函数依赖:学号――系――主任。

3.3 3NF

关系模式R中若不存在这样的码x,属性组Y及非主属性z使得x->Y,Y->z成立,则称R∈3NF。

要想使Student2满足第三范式,就是消去掉表中的传递函数依赖,方法仍是对表的无损分解。分解方式为:将传递函数依赖单独提取出来,把表分解为Student3和Sdeptxx,分别表4、表5。

分析Student3,仍然存在数据冗余问题。计算机重复了两次。

分析SGrade,虽然满足3NF,但仍然存在以下问题:(1)数据冗余大。赵一任C001这一信息重复了两次。(2)更新异常。若赵一所带的英语课程更换教师,则必须重复修改其所带班级每个学生对应的任课教师的名字,若漏改一处则造成数据矛盾。(3)插入异常。如果新来了一个英语老师,会因为没有学生选课而不能插入相应的信息。(4)删除异常。若删除S002号的C003成绩,则整个元组不复存在,连同周一是C003的任课教师的信息一并删掉,这样会引起信息丢失。存在以上问题的原因就是学生成绩表SGrade中存在作为非主码的“任课教师”是决定因素。

4 结论

我们通过一个实例来很好地说明了INF到2NF,2NF到3NF的规范化过程,可以根据规范化理论把3NF分解到BCNF,4NF等更高的关系模式。从理论上讲范式越高,规范化的程度就越高,关系模式就越好,但是,关系数据库一定的冗余是必要的,因为表关联时用的就是冗余列:另外,提高范式级别同时对数据库访问时间效率有时会有影响的,因为,表之间的关联是要花费时间的,所以我们在进行关系模式分解的时候,要根据实际应用情况而定,以满足一般程序设计的要求为标准,权衡考虑数据冗余、更新异常、插入异常、删除异常问题。

上一篇:报刊引证报告(1) 下一篇:“基于多核的并行编程”课程建设概况