购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

3.1 关系模式的规范化

3.1.1 关系模式的描述方式

表结构在关系数据模型中被称为关系模式。关系模式是对关系型的描述,在关系数据操作的过程中保持稳定。关系模式不仅描述关系中包含的属性、每个属性的数据类型和数据长度,还描述属性之间的依赖关系。关系模式的组成简记为

R(U, D, DOM, F)

其中,R是关系名,U是属性集合,D是域,DOM是属性到域的映射,F是数据依赖。

例如,学生表student包含属性学号,姓名,性别,学院。其关系模式描述如下:

3.1.2 规范化理论

数据库规范化(Normalization)是由关系型数据库之父埃德加·弗兰克·科德提出的。他在论文《大型共享数据库的关系数据模型》中提到数据库规范化理论研究的是关系模式中各属性之间的依赖关系及其对关系模式性能的影响。规范化理论不仅提供了判别关系模式优劣的标准,还提出了关系模式优化设计方法,是设计关系模式的理论依据。

1. 规范化

想要规范化数据库就需要对现存表结构进行修改,把表转化,使表遵循一系列先进的范式。范式(Normal Form,NF)是指不同的数据依赖条件下关系模式的分离程度。到目前为止,规范化理论提出了六类范式:第一范式(First Normal Form,1NF)、第二范式(Second Normal Form,2NF)、第三范式(Third Normal Form,3NF)、BC范式(Boyce-Codd Normal Form,BCNF)、第四范式(Fourth Normal Form,4NF)和第五范式(Fifth Normal Form,5NF)。范式之间的规范程度层次关系是:5NF⊂4NF⊂BCNF⊂3NF⊂2NF⊂1NF。范式级别越高,在关系模式中不合适的数据依赖就越少,问题也越少。

进行规范化处理先要了解属性之间数据依赖的类型,以及优化的方法。数据依赖中最重要的是函数依赖(Functional Dependency,FD)和多值依赖(Multi-valued Dependency,MVD)。

2. 函数依赖

设关系模式R(U)中,U是属性集,X和Y是U的子集。如果在该关系模式中的任意一个可能的关系都不可能存在两行在X上的值相等而在Y上的值不等的情况,那么X为决定因素,Y为依赖因素,X的值决定着Y的值,则我们称“Y函数依赖于X”或者“X函数决定Y”,记为X→Y。

定义中“任意一个可能的关系”是指根据语义可能存在的关系模式R的一切关系,不能只根据关系模式R在某一时刻的某个或某些关系判断属性之间是否满足约束条件就判定某函数依赖是否成立。例如,不能根据当前student表中没有重名的学生就判断sname→college成立,因为有可能存在学生重名的情况,所以该关系模式中sname不能函数决定college。

(1)平凡的函数依赖。

如果Y⊆X,则对于任何一个关系模式,X→Y都是必然成立的,并没有反映新的语义。这种函数依赖称为平凡的函数依赖。

(2)非平凡的函数依赖。

如果X→Y且Y⊈X,这种函数依赖称为非平凡的函数依赖。若不特别声明,总是讨论非平凡的函数依赖。

(3)完全函数依赖。

如果X→Y且X的任何一个真子集都不能函数决定Y,则称Y完全函数依赖于X,记为 f 是full的首字母)。

例如,关系模式R中,saledate的数据类型是datetime类型,主键是(BID, CID, saledate),其中(BID, CID, saledate)→payamount,且(BID, CID, saledate)的任何一个真子集都不能函数决定payamount,故(BID, CID, saledate) payamount。

属性之间存在完全函数依赖不会带来数据冗余,也不存在由数据冗余造成的插入操作异常,删除操作异常和数据不一致等问题。在关系模式中的完全函数依赖不必进行处理。

(4)部分函数依赖。

如果X→Y且Y不完全函数依赖于X,则称Y部分函数依赖于X,记为 p 是part的首字母)。

例如,关系模式R中存在函数依赖(BID, CID, saledate)→password,且CID→password,故(BID, CID, saledate) password。如果一张校园卡消费过100次,该卡的密码就会存储100次。可见部分函数依赖会导致数据冗余,进而产生数据插入异常、删除异常和数据不一致等问题。如果关系模式中存在部分函数依赖,需要通过模式分解进行消除。

(5)传递函数依赖。

如果X→Y,Y→Z,并且Y不是X的子集,同时Y不能函数决定X,则称Z传递函数依赖于X,记为 t 是transitive的首字母)。

例如,关系模式R中存在函数依赖SID→CID,CID→password,但因CID→SID,故SID和password之间不存在传递函数依赖。又如,关系模式student中存在SID→college,college→MID,且college不能函数决定SID,即SID t →MID。如果一个学院有500名学生,则学院负责人的职工号要被存储500次,会产生大量的数据冗余。因此,如果关系模式中存在传递函数依赖也应该去掉。

3. 多值依赖

设关系模式R(U)中U是属性集,X和Y是U的子集,若一个X的给定值有一组Y值与其对应,同时这组Y值不以任何方式与U-X-Y中的属性相关,则称Y多值依赖于X,记为X→→Y。如果X∪Y=U,即U-X-Y=Ø,则称X→→Y为平凡多值依赖,否则为非平凡多值依赖。多值依赖也会造成数据冗余和数据操作异常等问题。

假设某高校的每位教师都教授一组课程,并且教师教授的课程与教师授课的系没有关系。例如,孙绍刚老师负责信息管理与信息系统系、物流管理系的教学任务,在每个系都教授数据库技术及应用和管理信息系统两门课程;张彦老师负责工商管理系、财务管理系的教学任务,在每个系都教授组织行为学、战略管理和人力资源管理三门课程,如表3-2所示。

表3-2 授课关系

授课关系的键是全码(teacher,department,course),没有非主属性,候选键唯一。授课关系(teacher, department, course)中存在非平凡多值依赖teacher→→course。

该关系模式中存在数据冗余、数据插入操作异常、删除操作异常和数据不一致等问题。例如,张彦老师增加了对市场营销系的教学任务,我们就需要插入三行对应张彦老师在财务管理系教授的三门课程。又如,孙绍刚老师如果不再教授数据库技术及应用课程,则孙绍刚老师负责的几个系的教学任务就需要删除几行。出现上述数据操作异常的原因是该关系模式的属性teacher和course之间存在一对多的关系,即一个教师对应一组课程。在其他更复杂的关系模式中,属性之间还可能存在多对多的关系,这种数据依赖被称为多值依赖。

多值依赖是现实世界中客观事物之间取值相等与否的表现,该表现是由数据的语义决定的。如果允许同一位教师在不同系教授不同课程,例如孙绍刚在信息管理与信息系统系教授数据库技术及应用,而在物流管理系教授管理信息系统,teacher和course之间的多值依赖就不成立了。 GLi9+uR6VrZpdoB+WVAWBts9eBN19gCOjGcCFn0yjHd55+KKYPtN7ltVODZe3jET

点击中间区域
呼出菜单
上一章
目录
下一章
×