关系模式规范化

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

各种范式之间的关系如图1所示。
图1
各种范式之间的关系
一、第一范式(1NF)
第一范式(First Normal Form)是最基本的规范形式, 之后的每个范式必须都要满足1NF。 定义4:如果关系模式R,其所有的属性均为简单属性, 即每个属性都是不可再分的,则称R属于第一范式,简 称1NF,记作R1NF。 (在前面讨论关系的性质时,我们把满足这个条件的关 系称为规范化关系) 在关系数据库系统中只讨论规范化的关系,凡是非规 范化的关系模式必须化成规范化的关系。 在非规范化的关系中去掉组合项就能化成规范化的关 系。每个规范化的关系都属于1NF,这也是它之所以称 为“第一”的原因。
二、完全函数依赖与部分函数依赖
定义2:设关系模式R(U),U是属性全集,X和Y是U的子集, 如果X→Y,并且对于X的任何一个真子集X′,都有X′ Y, 则称Y对X完全函数依赖(Full Functional Dependency),记 作 X f Y。 如果对X的某个真子集X′,有X′→Y,则称Y对部分函 数依赖(Partial Functional Dependency),记作X Y。

而一个学生只能属于一个系,所以当CARDNO的值确定之后,SNAME、DEPT 的值也随之被唯一的确定了。 这类似于变量之间的单值函数关系。设单值函数Y=F(X),自变量X的值可 以决定一个唯一的函数值Y。在这里,我们说CARDNO函数决定(SNAME, DEPT),或者说(SNAME,DEPT)函数依赖于SNO。
其中:CARDNO表示借书证号号, SNAME表示借书学生姓名,DEPT表 示学生所在的系别,BNO表示图书编号,DATE表示借阅日期。
BORROW(CARDNO,SNAME,DEPT,BNO,DATE) 这个关系模式在使用中会出现什么问题呢? 数据冗余: 对于借书人每次借一本书,其姓名NAME及所在系DEPT 都要重复存放一次,数据的冗余度很大,浪费了存储 空间。 更新异常: 由于数据冗余,如果借书人所在系改变了,有关借书 人的所有元组中的所在系的信息都要修改,这不仅增 加了更新代价,而且存在着潜在的不一致性,有可能 出现一部分数据被修改,而另一部分数据没有被修改。 因此,系统要付出很大的代价来维护数据库的完整性。
如何按照一定的规范设计关系模式,将结构复杂的关系 分解成结构简单的关系,从而把不好的关系数据库模式 转变为好的关系数据库模式,这就是关系的规范化。 关系模式的规范化又可以根据不同的要求而分成若干级 别——产生不同级别的范式。 我们要设计的关系模式中的各属性是相互依赖、相互制约 的,这样才构成了一个结构严谨的整体。 因此在设计关模式时,必须从语义上分析这些依赖关系。 数据库模式的好坏和关系中各属性间的依赖关系有关,因 此,我们先讨论属性间的依赖关系,然后再讨论关系规范 化理论。
关系模式的规范化
规范化问题的提出 函数依赖
范式
返回目录
规范化问题的提出
一、规范化理论的主要内容
关系数据库的规范化理论最早是由关系数据库的创始人 E.F.Codd提出的,后经许多专家学者对关系数据库理论 作了深入的研究和发展,形成了一整套有关关系数据库 设计的理论。
在关系数据库系统中,关系模型包括一组关系模式,各 个关系不是完全孤立的,因此就要遵循一定的数据库的 设计规则,必须有相关的数据库设计理论依据。
如何设计一个适合的关系数据库系统(良构关系),即 数据冗余最小,没有插入、修改、删除异常等,关键是 关系数据库模式的设计。 一个关系数据库模式应该包括多少关系模式,而每一个 关系模式又应该包括哪些属性,这些工作决定了整个系 统运行的效率,也是系统成败的关键所在,所以必须在 关系数据库的规范化理论的指导下逐步完成。 关系数据库的规范化理论主要包括三个方面的内容: 函数依赖 范式(Normal Form) 模式设计 其中,函数依赖起着核心的作用,是模式分解和模式 设计的基础,范式是模式分解的标准。
从而得出结论,一个好的关系模式应具备以下四个条件: 尽可能少的数据冗余。 没有插入异常。 没有删除异常。 没有更新异常。 但要注意,一个好的关系模式并不是在任何情况下都是 最优的,比如要通过学生姓名查询某个学生所借阅的图书 号时,要通过连接操作才能实现,而连接所需要的系统开 销非常大,因此要以实际目标出发设计关系模式。
返回目录
函数依赖
一、函数依赖的定义及性质
关系模式中的各属性之间相互依赖、相互制约的联系称为 数据依赖。 数据依赖一般分为函数依赖、多值依赖和连接依赖。其中, 函数依赖是最重要的数据依赖。 函数依赖(Functional Dependency)是关系模式中属性 之间的一种逻辑依赖关系。
例 如 : 在 关 系模 式 BORROW(CARDNO,SNAME,DEPT,BNO,DATE) 中 , CARDNO 与 SNAME、DEPT之间都有一种依赖关系。由于一个CARDNO只对应一个学生,
BORROW(CARDNO,SNAME,DEPT,BNO,DATE) 插入异常: 在BORROW关系模式中,关键字是由CARDNO和BNO联合组 成。根据关系模型的实体完整性,关键字不能为空。 因此,如果一个人没有借书,就不能办理借阅手续, 即如果一个人没有借书 ,有关借书人的信息(如: NAME、DEPT)就不能存入数据库,这显然是不合理的, 被称为插入异常。 删除异常: 借阅人如果在某段时间内把所借书全部还清了,则在 删除借书信息的同时,连同借阅人姓名及所在系都被 一起从数据库中删除,出现删除异常。
由于存在以上问题,我们说,BORROW是一个不好的关系 模式。产生上述问题的原因,直观地说,是因为关系中 “包罗万象”,内容太杂了。 那么,怎样才能得到一个好的关系模式呢? 我们把BORROW分解为下面两个结构简单的关系模式: BORROW(CARDNO,BNO,DATE) READER (CARDNO,SNAME,DEPT) 分析:出现存储异常是因为关系模式中的数据键存在着 一定的依赖关系,而这些关系没有规范化。通过对关系模 式规范化,即对关系模式进行分解,可以消除其中不合适 的数据依赖,从而解决存储异常。
定义1:设关系模式R(U,F),U是属性全集,F是U上的函数 依赖集,X和Y是U的子集,如果对于R(U)的任意一个可能的 关系r,对于X的每一个具体值,Y都有唯一的具体值与之对 应,则称X函数决定Y,或Y函数依赖于X,记作X→Y。我们称 X为决定因素,Y为依赖因素。当Y不函数依赖于X时,记作: X Y。当X→Y且Y→X时,则记作:X Y。 例如:对于关系模式SCD: U={SNO,SN,AGE,DEPT,MN,CNO,SCORE}
如下列关系就不属于1NF 工资 姓名
王玲 程刚
年龄
32 40
基本工资
奖金
200 300
900 1000
应该规范化为: 姓名
王玲 程刚
年龄
32 40
基本工资
奖金 200 300
900 1000
然而,一个关系模式仅仅属于第一范式是不适用的。 例如,关系模式SCD属于第一范式,但其具有大量的数 据冗余,具有插入异常、删除异常、更新异常等弊端。 为什么会存在这种问题呢? 我们分析一下 SCD(SNO ,SN, AGE, DEPT ,MN , CNO, SCORE)中的函数依赖关系,它的关系键是(SNO,CNO) 的属性组合,所以有: (SNO,CNO) SCORE 因为SNO→SN,所以(SNO,CNO) p SN 因为SNO→AGE,所以(SNO,CNO)p AGE p 因为SNO→DEPT,所以(SNO,CNO) DEPT p 因为SNO MN,所以(SNO,CNO) MN
范式的概念最早由E.F.Codd提出。从1971年起,Codd 相继提出了关系的三级规范化形式,即第一范式 (1NF)、第二范式(2NF)、第三范式(3NF)。 1974年,Codd和Boyce共同提出了一个新的范式的概念, 即Boyce-Codd范式,简称BC范式。 1976年Fagin提出了第四范式,后来又有人定义了第五 范式。 至此在关系数据库规范中建立了一个范式系列: 1NF,2NF,3NF,BCNF,4NF,5NF,一级比一级有更严格的要 求。各个范式之间的联系可以表示为: 5NF 4NF BCNF 3NF 2NF 1NF
综上所述,函数依赖分为完全函数依赖、部分函 数依赖和传递函数依赖三类,它们是规范化理论的依 据和规范化程度的准则,下面我们将以这些概念为基 础,进行数据库的规范化设计。
返回目录


规范化的基本思想是消除关系模式中的数据冗余,消除数据依赖 中的不合适的部分,解决数据插入、删除时发生异常现象。这就 要求关系数据库设计出来的关系模式要满足一定的条件。 我们把关系数 Form)。所谓范式,就是规范化 的关系模式。由于规范化的程度不同,就产生了不同的范式。 满足最基本规范化要求的关系模式叫第一范式,在第一范式中进 一步满足一些要求为第二范式,以此类推就产生了第三范式等概 念。每种范式都规定了一些限制约束条件。
SNO表示学生学号,SN表示学生姓名,AGE表示学生年龄,DEPT表示学生所 在的系别,MN表示系主任姓名,CNO表示课程号,SCORE表示成绩
PK:(SNO,CNO) F={ ( SNO , CNO ) → SN, ( SNO , CNO ) → AGE, ( SNO , CNO ) →DEPT,(SNO,CNO)→MN,(SNO,CNO)→SCORE,SNO→SN, SNO→AGE,SNO→DEPT,SNO→MN,DEPT→MN}
p
U={SNO,SN,AGE,DEPT,MN,CNO,SCORE}
例如,在关系模式SCD中,有(SNO,CNO) → SCORE, 但 SNO SCORE , 而 且 CNO SCORE , 所 以 有 : f (SNO,CNO) SCORE 。而(SNO,CNO) → AGE, 但 SNO→AGE,所以(SNO,CNO) AGE。
f
t
可以用函数信赖图表示以上函数依赖关系,如图2所示: U={SNO,SN,AGE,DEPT,MN,CNO,SCORE}
SNO
f SCORE CNO t
P
SN
P
MN
图2
SCD中的函数依赖关系
由此可见,在SCD中,既存在完全函数依赖,又存 在部分函数依赖和传递函数依赖。 这种情况往往在数据库中是不允许的,也正是由于 关系中存在着复杂的函数依赖,才导致数据操作中 出现了种弊端。 克服这些弊端的方法是用投影运算将关系分解,去 掉过于复杂的函数依赖关系,向更高一级的范式进 行转换。
二、关系模式的存储异常问题
数据库的逻辑设计为什么要遵循一定的规范化理论? 什么是好的关系模式?某些不好的关系模式可能导致哪 些问题? 下面通过例子进行分析: 例如,现有一个图书管理数据库,其中借阅管理表的关 系模式BORROW如下: BORROW(CARDNO,SNAME,DEPT,BNO,DATE)
p
由定义2可知: 只有当决定因素是组合属性时,讨论部分函数依赖才 有意义,当决定因素是单属性时,只能是完全函数依赖。 例如,关系模式S(SNO,SN,AGE,DEPT) 决定因素为单属性SNO,有SNO→(SN,AGE,DEPT),不存 在部分函数依赖。
三、传递函数依赖
定义3:设有关系模式R(U),U是属性全集,X、Y、Z是U 的子集,若X→Y,但Y X,而Y→Z(Y X,Z Y),则称 Z对X传递函数依赖(Transitive Functional Dependency), t Z。 记作:X U={SNO,SN,AGE,DEPT,MN,CNO,SCORE} 例如,在关系模式SCD中,SNO→DEPT, 但DEPT t DEPT→MN,则有SNO MN。 SNO,而
相关文档
最新文档