910 likes | 1.04k Views
数据库原理与应用. 非计算机应用专业教材. 李 明 科学出版社. [ 学习目标 ]. 了解 不恰当的关系模式而导致的存储异常问题; 了解 函数依赖的概念、平凡的函数依赖、非平凡的函数依赖、完全函数依赖; 了解 BCNF ; 掌握 部分依赖、传递依赖函数依赖的概念; 掌握 键码、封闭集等概念; 掌握 关系范式的 1NF 、 2NF 、 3NF). 了解 数据库应用系统的开发的设计过程的六个阶段; 掌握 对实际简单系统的需求分析,画出数据流程图; 根据 需求分析、概念设计、逻辑设计和物理设计进行 机器实现;
E N D
数据库原理与应用 非计算机应用专业教材 李 明 科学出版社
[学习目标] • 了解不恰当的关系模式而导致的存储异常问题; • 了解函数依赖的概念、平凡的函数依赖、非平凡的函数依赖、完全函数依赖; • 了解BCNF; • 掌握部分依赖、传递依赖函数依赖的概念; • 掌握键码、封闭集等概念; • 掌握关系范式的1NF、2NF、3NF)
了解数据库应用系统的开发的设计过程的六个阶段;了解数据库应用系统的开发的设计过程的六个阶段; • 掌握对实际简单系统的需求分析,画出数据流程图; • 根据需求分析、概念设计、逻辑设计和物理设计进行 • 机器实现; • 掌握实体、联系、属性、码等概念的含义; • 熟练掌握E-R图的应用。 • 了解数据库设计方法、设计工具和了解设计原则;
第3章 关系数据库设计理论 • 3.1 规范化概述 • 3.2 函数依赖 • 3.3 关系范式 • 3.4 数据库应用系统设计概述 • 3.5 需求分析阶段 • 3.6 概念结构设计阶段 • 3.7 逻辑结构设计 • 3.8 物理设计与实施 • 3.9 数据库实施 • 3.10 数据库运行与维护 退出
3.1 规范化概述 • 在具体数据库系统实现之前,尚未录入实际数据时,组建较好的数据模型是关系到整个系统运行的效率,以致系统成败的关键。所以说,关系规范化的目的是控制冗余,避免插入和删除异常,从而增强数据库结构的稳定性和灵活性
有关指导数据库逻辑设计和关系数据库规范化理论主要包括三方面的内容:有关指导数据库逻辑设计和关系数据库规范化理论主要包括三方面的内容: • 数据依赖 • 范式 • 模式设计方法
从函数依赖入手寻找设计一个好的关系模式的方法。其具体思路是:从函数依赖入手寻找设计一个好的关系模式的方法。其具体思路是: • 1.可从已知的函数依赖集,推出全部存在的函数依赖集;求封闭集,确定键码; • 2.从函数依赖集中,再找出哪些是部分函数依赖或者传递函数依赖等; • 3.消除部分函数依赖或者传递函数依赖等变成第二或第三范式。 • 4.如有需要,可根据规则转化更高的范式
学习思路 • 存储异常问题→函数依赖→部分函数依赖→传递函数依赖→利用最小公理导出封闭集→确定候选码(键码)→分析有哪些函数依赖→消除部分函数依赖成第二范式→消除传递函数依赖成第三范式→分解范式成第n范式→建数据库
3.1.2存储异常问题 • 例3.1教师任课TDC (教师号,姓名,职称,家址,系号,系名称,系址,课程号,课程名,教学水平,学分)。 • 分析:一位教师可以讲授多门课程,同一门课程也可以有多位教师讲授。只能根据(教师号,课程号)才能确定哪位教师讲授哪门课程。该关系在使用过程中存在以下四方面的问题:
1.数据冗余太大 • 例如,每一个教师的姓名重复出现。 • 2.更新异常(Update Anomalies) • 例如,某教师更换系地址后,系统必须修改与该教师有关的每一个元组。 • 3.插入异常(Insertion Anomalies) • 如果学校新调入一个教师,暂时未主讲任何课程。关键字不允许出现空值,新教师就不能插入到此关系中去。
4.删除异常(Deletion Anomalies) • 如果某些教师不担任教学任务,就要从当前数据库中删除有关记录。那么关于这些教师的其它信息将无法记载。 • 一个关系模式之所以会产生上述问题,是由存在于模式中的某些数据依赖引起的。规范化理论正是用来改造关系模式,通过分解关系模式来消除其中不合适的数据依赖,以解决插入异常、删除异常、更新异常和数据冗余问题。
32 函数依赖 • 3.2.1 函数依赖 • 定义3.1设一个关系R(U),X和Y 为属性集U上的子集,若对于元组中X的每个值都有Y上的一个唯一的具体值与之对应.则称Y函数依赖于X,或X函数决定Y,记作别X→Y,X称作决定因素。
其实这里函数依赖和数学的函数依赖概念差不多,只不过这里不是变量而是属性列。比如人的身份证号和姓名,知道身份证号就知道姓名了,所以就可以说有函数依赖:身份证号→姓名。其实这里函数依赖和数学的函数依赖概念差不多,只不过这里不是变量而是属性列。比如人的身份证号和姓名,知道身份证号就知道姓名了,所以就可以说有函数依赖:身份证号→姓名。
属性间的三种关系, • 并不是每种关系中都存在着函数依赖。 • ●如果X、Y间是1:1关系, • 则存在相互函数依赖: X← → Y; • ●如果X、Y间是n:1关系, • 则存在函数依赖: X→Y或Y→X(n方为决定因素); • ●如果X、Y间是m:n关系, • 则不存在函数依赖。
3.2.2 非平凡的函数依赖规则和平凡的函数依赖 • 定义:如果X→Y,并且Y不是X的子集,则称X→Y是非平凡的函数依赖。我们讨论的总是非平凡的函数依赖。全体总是能够决定部分的,若Y是X的子集,则称X→Y是平凡的函数依赖。若Y中没有一个属性在X中,则称完全非平凡的函数依赖。
例3.3 指出下列函数依赖的性质 • Sno Cname Grade→Cname Grade:平凡函数依赖 • (右边的属性集是左边的属性集的子集) • Sno Cname→Cname Grade:非平凡函数依赖 • (右边属性集中至少有一个不在左边属性集里) • Sno Cname→Sname Grade:完全非平凡函数依赖 • (右边属性集没有一个在左边的属性集里)
3.2.3 完全和部分函数依赖 • 定义: 设X→Y是关系模式R的一个函数依赖,如果存在X的真子集X’,使得X’→Y 成立,则称Y部分依赖于X,记作 。 • 否则,称Y完全依赖于X,记作 。
例3.5 :从例3.1中TDC(TNO,TNAME,TITLE.ADDR.DNO,DNAME,LOC,CNO,CNAME,LEVEL,CREDIT)。通过分析函数依赖,可得出如下示意图3.1:
TNAME ADDR TITLE F DNAME DNO TNO LEVEL P CNO CREDIT LOC CNAME p p p p 图3.1 TDC 关系函数依赖示意图
3.2.4 传递函数依赖 • 函数依赖的传递定义:在同一关系模式中,如果存在非平凡的函数依赖X→Y,Y→Z,而Y X,则称Z传递依赖于X。 • 例3.7 如图3.1, • TNO→DNO • DNO→LOC TNO → LOC
3.2.7 关键字(候选码和主码) • 如果一个或多个属性的集合{A1,A2,...,An}满足以下条件,则称该集合为关系R的候选码(Key): • (1)这些属性函数决定该关系R的所有其他属性。 • (2){A1,A2,...,An}的任何真子集都不能函数决 • 定该关系R的所有其他属性,也就是说,候选码必须 • 是最小的。
3.2.8 超键码 • 包含键码(候选码)的属性集称为“超键码”(super key),是“键码的超集”的简称。因此,每个键码都是超键码,但是,某些超键码不是键码。注意,每个超键码都满足键码(候选码)的第一个条件:属性函数决定该关系R的所有其他属性。但是,超键码不必满足键码的第二个条件:键码(候选码)必须是最小的。
然而当我们进一步分析时,就会发现不同的属性在关系模式中所处的地位和扮演的角色是不同的,为了强调这种差距,我们把候选码所在的属性称为主属性,把键码以外属性的称为非主属性。然而当我们进一步分析时,就会发现不同的属性在关系模式中所处的地位和扮演的角色是不同的,为了强调这种差距,我们把候选码所在的属性称为主属性,把键码以外属性的称为非主属性。
3.2.9 逻辑蕴涵和封闭集(闭包) • 逻辑蕴涵的定义:设关系R的一个函数依赖集合为F,X,Y为R的属性U的子集,如果从F中的函数依赖能够推出X→Y,则称F逻辑蕴涵X→Y,记为F|=X→Y。 • 身份证号能确定出生年月和性别(号码中第7位和末位),这是已知的函数依赖,也就是说,身份证号逻辑蕴涵身份证能确定出生年月和性别。
闭包F+ • 关系模式R的函数依赖集F的闭包F+的定义:被F逻辑蕴涵的函数依赖的全体构成的集合称为F的闭包(closure),记为F+。也可以这样说:函数依赖集F的闭包F+ 是指被F逻辑蕴涵的函数依赖的全体构成的集合。
计算封闭集过程如下: • 假设要求解属性集{A1,A2,…,An} 封闭集。 • (1)首先,将X初始化为{A1,A2,…,An}。 • (2)然后,后复地检查某个函数依赖B1,B2,…, • Bm→C,使得所有的B1,B2,…,Bm都在属性 • 集X中,但C不在其中,于是将C加到属性集X • 中。
(3)根据需要多次重复步骤2,直到没有属性能加到X中。由于X是只增的,而任何关系的属性数目必然是有限的,因此最终再也没有属性可加到X中。(3)根据需要多次重复步骤2,直到没有属性能加到X中。由于X是只增的,而任何关系的属性数目必然是有限的,因此最终再也没有属性可加到X中。 • (4)最后得到的不能再增加的属性集X就是{A1,A2,…,An}的正确值。
如果我们知道了计算任意属性集封闭集,就可以根据给定的函数依赖集推导蕴含于依赖集的其他函数依赖(非平凡依赖)、超键码和键码(候选码)。如果我们知道了计算任意属性集封闭集,就可以根据给定的函数依赖集推导蕴含于依赖集的其他函数依赖(非平凡依赖)、超键码和键码(候选码)。
例3.14 F(A,B,C,D) • 函数依赖 AB→C,C→D,D→A • 求:蕴含于给函数依赖的所有非平凡函数依赖。
AB C,C D,D A • 首先考虑各种属性组合的封闭集。然后,依次分析各属性集的封闭集,从中找出该属性集所具有的新的函数依赖。 • 单属性:A+=A,B+=B,C+=ACD,D+=AD 新依赖:C → A(1)
AB C,C D,D A • 双属性:AB+=ABCD,AC+=ACD, AD+=AD, BC+=ABCD,BD+=ABCD,CD+=ACD • 新依赖:AB D AC D BC A • BD A CD A BC D BD C (7)
三属性:ABC+=ABCD,ABD+=ABCD,ACD+=ACD,BCD+=ABCD • 新依赖:ABC D ABD C • BCD A (3) • 四属性:ABCD+=ABCD 无新依赖 • _____键码(3) _ _ _ _超键码(4)
3.3 关系范式 • 范式是符合某一种级别的关系模式的集合。 • 满足最低要求的叫第1范式,简称为1NF。在第1范式基础上进一步满足一些要求的为第2范式,简称为2NF。其余以此类推。显然各种范式之间存在以下关系: • 4NF BCNF 3NF 2NF Lnf • 关系模式R为第n范式简记为:R∈nNF。
3.3.1 第1范式(1NF) • 定义 如果一个关系模式R <U,F>的所有属性都是不可分的基本数据项,则R∈1NF。 • SLC(Sno,Cno,Sdept,Sloc,Grade) • 其中Sloc为学生住处,假设每个系的学生住在同一个地方。SLC的码为(Sno,Cno)。
f • 函数依赖包括: • (Sno,Cno) → Grade • Sno → Sdept • (Sno,Cno) → Sdept • Sno → Sloc • (Sno,Cno) → Sloc • Sdept → Sloc(因为每个系只住一个地方) p p
3.3.2 第2范式(2NF) • 关系模式SLC出现上述问题的原因是Sdept、 Sloc对码的部分函数依赖。为了消除这些部分函数依赖,我们可以采用投影分解法,把SLC分解为两个关系模式: • SC(Sno,Cno,Grade) • SL(Sno,Sdept,Sloc) • 这两个关系模式的函数依赖如图7.4所示。
定义 若关系模式R∈1NF,并且每一个非主属性都完全函数依赖于R的码,则R ∈2NF。 • 例如2NF关系模式SL(Sno,Sdept,Sloc)中有下列函数依赖: • Sno→Sdept • Sdept→Sloc • Sno→Sloc
3.3.3 第3范式(3NF) • 关系模式SL出现上述问题的原因是Sloc传递函数依赖于Sno。为了消除该传递函数依赖,我们可以采用投影分解法,把SL分解为两个关系模式: • SD(Sno,Sdept) SD的码为Sno, • DL(Sdept,Sloc) DL的码为Sdept。
定义如果关系模式R (U)中不存在非主属性候对候选码的传递依赖,则称关系R属于第三范式:则R∈3NF。 • 例如,在关系模式STJ(S,T,J)中,S表示学生,T表示教师,J表示课程。假设每一教师只教一门课。每门课由若干教师教,某一学生选定某门课,就确定了一个固定的教师。于是,我们有函数依赖(S,J)→T,T→J。同时我们可以发现STJ(S,T,J)中(S,J)、(S,T)都是候选码,因此(S,T)→J成立。用图7.5表示如下:
3.3.4 BC范式(BCNF) • 关系模式STJ出现上述问题的原因在于主属性J依赖于T,即主属性J部分依赖于码(S,T)。解决这一问题仍然可以采用投影分解法,将STJ分解为两个关系模式: • ST(S,T), ST的码为S • TJ(T,J), TJ的码为T
BCNF定义 : • 设关系模式R(U),当R中所有属性(主属性和非主属性)都不传递函数依赖R的任何候选码,那么R∈BCNF。
BCNF的关系模式具有如下3个性质: • (1)所有非主属性都完全函数依赖于每个候选码。 • (2)所有主属性都完全函数依赖于每个不包含它的候选码。 • (3)没有任何属性完全函数依赖于非码的任何一组属性。 • 如果一个关系数据库中的所有关系模式都属于BCNF,那么在函数依赖范畴内,它已实现了模式的彻底分解,达到了最高的规范化程度,消除了插入异常和删除的异常。
关系模式的规范化 • 规范化的基本思想是逐步消除数据依赖中不合适的部分,使模式中的各关系模式达到某种程度的“分离”,即采用“一事一地”的模式设计原则,让一个关系描述一个概念、一个实体或者实体间的一种联系。若多于一个概念就把它“分离”出去。因此所谓规范化实质上是概念的单一化。 • 关系模式规范化的基本步骤如图7.7所示。
3.4 数据库应用系统设计概述 • 3.4.1数据库设计方法和数据库设计工具 • 1.数据库设计方法 • 新奥尔良方法 • 基于E-R模型的数据库设计方法 • 3NF的设计方法 • ODL方法
2.数据库设计工具 • Oracle (甲骨文) Design 2000; • SyBase PowerDesigner:它支持 PB、VB、Delphe 等语言(包括 dBase、FoxPro、VFP、SQL Server 等); • ERWin :ERwin/ERX 3.0是美国LogicWorks公司提供的数据库 • 设计工具;ERwin/ERX数据库设计工具可以用于设计生成客户机/ 服务器、Web、Intranet和数据仓库等应用程序数据库。 • Rational Rose和Microsoft公司的Visio。Rational Rose与ERwin类似,而Visio则以其方便的办公图表绘制著称; • 这些工具也被称为CASE工具