2023年数据库-关系模式的设计-规范化-关系模式规范化设计的基本思想.docx
《2023年数据库-关系模式的设计-规范化-关系模式规范化设计的基本思想.docx》由会员分享,可在线阅读,更多相关《2023年数据库-关系模式的设计-规范化-关系模式规范化设计的基本思想.docx(40页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、2023年数据库-关系模式的设计-规范化:关系模式规范化设计的基本思想 关系数据库设计 书目 第1章 简介 . 1 第2章 函数依靠 . 1 2.1 函数依靠的定义 . 1 2.2 关系的键码 . 2 2.3 超键码 . 3 2.4 函数依靠规则 . 3 2.4.1 分解/合并规则 . 3 2.4.2 平凡依靠规则 . 3 2.4.3 传递规则 . 4 第3章 模式设计 . 4 3.1 问题的提出 . 4 3.2 问题的根源 . 5 3.2.1 完全依靠和部分依靠 . 5 3.2.2 传递依靠 . 6 3.3 解决的途径 . 7 3.3.1 第1范式(1NF ) . 7 3.3.2 第2范式(
2、2NF ) . 7 3.3.3 第3范式(3NF ) . 8 3.3.4 BC范式(BCNF ) . 8 3.4 分解的原则 . 9 3.5 分解的方法 . 12 3.5.1 模式分解的两个原则 . 12 3.5.2 模式分解的3种方法 . 13 3.5.3 把关系模式分解成BC 范式的方法总结 . . 14 3.6 关系模式规范化小结 . 15 第4章 多值依靠 . 16 4.1 属性独立性带来的冗余 . 16 4.2 多值依靠的定义 . 17 4.3 第4范式 . 18 4.4 分解成第4范式 . 18 第5章 总结 . 19 第1章 简介 关系数据库是由一组关系组成,所以关系数据库的设计
3、归根究竟是如何构造关系,即如何把详细的客观事物划分为几个关系,而每个关系又有哪些属性组成。在我们构造关系时,常常会发觉数据冗余和更新异样等现象,这是由于关系中个属性之间的相互依靠性和独立性造成的。 关系模型有严格的数学理论基础,并形成了关系数据库的规范化理论,这为我们设计出合理的数据库供应了有利的工具。 第2章 函数依靠 2.1 函数依靠的定义 为了便于了解函数依靠(functional dependency)的概念,先看一个详细的关系实例。 例:考虑学生关系Student ,该关系中涉及的属性包括学生的学号(Sno )、姓名(Sname )、所在系(Sdept )、系主任姓名(Mname )
4、、课程名(Cname )和成果(Grade )。学生关系Student 的实例如表1所示。 表 1 学生关系Student 实例 在这个实例中,我们可以看到属性之间存在某些内在的联系: 由于一个学号值对应一个学生,一个学生只在一个系,因而当“学号”确定之后,姓名及所在系也就唯一确定了。属性中的这种依靠关系类似于数学中的函数。因此说Sno 函数确定Sname 和Sdept ,或者说Sname 和Sdept 函数依靠于Sno ,记作Sno Sname ,Sno Sdept 。 下面给出函数依靠的严格定义:假如关系R 的两个元组在属性A 1,A 2,A n 上一样(也就是,两个元组在这些属性所对应的
5、各个重量具有相同的值),则它们在另一个属性B 上也一样。那么,我们就说在关系R 中属性B 函数依靠于属性A 1A 2A n 。这种 依靠正式记作A 1A 2A n B ,也就是说“A 1,A 2,A n 函数确定B ”。其中,A 1A 2A n 称为确定因素。 假如一组属性A 1,A 2,A n 函数确定多个属性,比如说: A 1A 2A n B 1 A 1A 2A n B 2 A 1A 2A n B m 则可以把这一组依靠关系简记为: A 1A 2A n B 1B 2B m 例:在上例中,我们可以列举关于Student 关系的以下四个函数依靠: Sno Sname Sno Sdept Sde
6、pt Mname Sno CnameGrade 由于前面的两个依靠的左边完全相同,都是Sno ,用简写的形式可以把它们汇总在一行中: Sno Sname Sdept 依据函数依靠的传递规则,从Sno Sdept 和Sdept Mname 可以导出Sno Mname 。这一点我们从感性相识上也很简单理解,一个学号对应唯一的学生,而一个学生只能有唯一的系主任。 另一方面,Sno Cname 就是错误的,它不是函数依靠,缘由自不待言,如第1元组和第2元组,它们的Sno 重量相同,但Cname 重量却不同。 2.2 关系的键码 我们已经了解了键码的概念,下面从函数依靠角度给出定义。 假如一个或多个属性
7、的集合A1,A 2,A n 满意如下条件,则称该集合为关系R 的键码(key ): (1)这些属性函数确定该关系的全部其他属性。也就是说,R 中不行能有两个不同的元组,它们在A1,A2,An 上的取值是相同的。 (2)A1,A 2,A n 的任何真子集都不能函数确定R 的全部其他属性,也就说,键码必需是最小的。 例:在学生的关系中,属性集Sno,Cname构成Student 关系的键码。 有时一个关系有多个键码。 例:在Student 关系中我们可以加上属性身份证号(Idno ),则关系中存在两个键码Sno,Cname和Idno,Cname。 2.3 超键码 包含键码的属性集称为“超键码”(s
8、uperkey ),是“键码的超集”的简称。因此,每个键码都是超键码。但是,某些超键码不是键码。 例:在学生关系中有很多超键码,不仅键码Sno,Cname本身是超键码,而且该属性集的任何超集,如Sno,Cname ,Grade,Sno,Sname ,Cname都是超键码。 2.4 函数依靠规则 假设已知某关系所满意的函数依靠集,在不知道该关系的详细元组的状况下,通常可以推断出该关系必定满意的其他某些函数依靠。 例:假如已知关系R 拥有属性A ,B 和C ,它满意如下函数依靠:A B 和B C ,则断定R 也满意依靠A C 。 下面介绍3个函数依靠规则。 2.4.1 分解/合并规则 (1)我们可
9、以把一个函数依靠A 1A 2A n B 1B 2B m 用一组函数依靠A 1A 2A n B i (i=1,2,m )来替代。这种转换成为“分解规则”(splitting rule)。 (2)我们也可以把一组函数依靠A 1A 2A n B i (i=1,2,m )用一个依靠A 1A 2A n B 1B 2B m 来替代。这种转换称为“合并规则”(combining rule)。 2.4.2 平凡依靠规则 对于函数依靠A 1A 2A n B 1B 2B m , (1)假如B 是A 的子集,则称该依靠为平凡依靠。 (2)假如B 中至少有一个属性不在A 中,则称该依靠为非平凡的。 (3)假如B 中没
10、有一个属性在A 中,则称该依靠为完全非平凡的。 平凡依靠规则: 函数依靠A 1A 2A n B 1B 2B m 等价于A 1A 2A n C 1C 2C k ,其中C 是B 的子集,但C 不在A 中出现。我们称这个规则为“平凡依靠规则”(trivial dependency rule)。 若函数依靠满意平凡依靠规则,则该依靠为完全非平凡依靠。 2.4.3 传递规则 传递规则使我们把两个函数依靠级联成一个新的函数依靠。 假如A 1A 2A n B 1B 2B m 和B 1B 2B m C 1C 2C k 在关系R 中成立,则A 1A 2A n C 1C 2C k 在R 中也成立。这个规则就称为传
11、递规则(transitive rule)。 第3章 模式设计 关系数据库设计理论主要用于知道数据库的逻辑设计,确定关系模式的划分,每个关系模式所包含的属性从而使得由一组关系模式组成的关系模式作为一个整体,既能客观描述各种实体,又能精确反映各种实体之间的联系,还能实地体现出实体内部属性之间的相互依存与制约。 3.1 问题的提出 在设计数据库模式的时,特殊是从面对对象的ODL 设计或从E-R 设计干脆向关系数据库转换时,很简单出项的问题是冗余性,即一个事实在多个元组中重复。而且,我们发觉造成这种冗余的最常见的缘由是,企图把一个对象的单指和多值特性包含在一个关系中。 例:在2.1节,当我们把学生的单
12、指信息(如所在系)和多值特性(如课程集)存储子啊一起的时候,就导致了信息的冗余。 表 2 学生关系Student 实例 当我们企图把太多的信息存放在一个关系中时,就会出现数据冗余和更新异样等问题。主要表现如下: (1)数据冗余。信息可能在多个元组中不必要的重复。如学生所在的系和系主任。 (2)修改异样。我们可能修改了一个元组的信息,但另一个元组的相同信息却没有修改。比如,计算机系的主任换了一个人,可能由于马虎,只修改了第1元组,而没有修改第2和第3元组。于是出现数据不一样。然而重新设计关系Student 从而出现这 种错误是完全可能的。 (3)删除异样。假如一组属性的值变为空,带来的副作用可能
13、是丢失一些信息。比如,假如我们从学生晓雪的课程集中删除了自动化设计,那么数据库里就没有这个学生的课程信息了。由于课程名和学号共同组成该关系的键码,而建立数据库时,键码属性不能为空,于是,关系Student 中的晓雪的元组就会消逝,同时消逝的还有与晓雪有关的其他属性信息。 (4)插入异样。刚开学,学生尚未选课,使得键码属性值缺少课程名,结果导致学生的基本状况(学号、姓名、所在系)甚至系主任姓名都不能插入。这明显不符合道理。 3.2 问题的根源 关系的键码函数确定该关系的全部其他属性,由于键码能唯一的确定一个元组,所以,也可以说关系的键码函数确定该关系的全部属性。换句话说,一个关系中的全部属性都函
14、数依靠于该关系的键码。 当我们进一步分析时,就会发觉不同的属性在关系模式中所处的地位和扮演的角色是不同的。 再深化分析,又会发觉不同的属性对键码函数依靠的性质和程度是有区分的。有的属于干脆依靠,有的属于间接依靠(通常称为传递依靠)。当键码由多个属性组成时,有的属性函数依靠于整个键码属性集,而有的属性只函数依靠于键码属性集中的一部分属性。 3.2.1 完全依靠和部分依靠 对于函数依靠W A ,假如存在V W (V 是W 的真子集)而函数依靠V A 成立,则称A 部分依靠(partial dependency)于W ,否则,若不存在这种V ,则称A 完全依靠(full dependency)于W
15、。 从上述定义中可以得出一个结论:若W 为单属性,则不存在真子集V ,所以A 必定完全依靠于W 。 例:我们结合学生关系的例子详细说明完全依靠和部分依靠对冗余或异样有没有影响。关系模式Student (Sno ,Sname ,Sdept ,Mname ,Cname ,Grade )中(Sno ,Cname )为键码,函数依靠集如下: Sno Sname ,Sdept Sdept Mname Sno Mname P Sno ,Cname Sname ,Sdept ,Mname F Sno ,Cname Grade 可以看出属性Sname ,Sdept 和Mname 都函数依靠于Sno ,而部分依
16、靠于键码,上面用P 标记。属性Grade 则完全依靠于键码,上面用F 标记。 视察表2关系Student 的实例,就会留意到: 对键码完全依靠的属性Grade 没有任何的冗余,每个学生的每门课程都有特定的成果(当然,两门课程的成果完全相同是有可能的,但这并不意味着冗余)。 对键码部分依靠的属性Sname ,Sdept 和Mname 由于只函数依靠于Sno ,因此,当一个学生选修几门课时,这些数据就会多次重复出现,造成大量数据冗余;另一方面,当对一个学生的基本状况(学号、姓名、所在系)进行更新时,又会出现前面探讨过的异样。 从这个例子可以看出,在一个关系模式中,当存在非主属性对键码的部分依靠时,
17、就会产生数据冗余和更新异样。若非主属性对键码完全函数依靠,则不会出现类似问题。 3.2.2 传递依靠 对于函数依靠X Y ,假如Y X (X 不函数依靠于Y )而函数依靠Y Z 成立,则称Z 对X 传递依靠(transitive dependency)。 说明:假如X Y ,且Y X ,则X ,Y 相互依靠,这时Z 与X 之间就不是传递依靠,而是干脆依靠了。事实上,我们以前所探讨的函数依靠大多数是干脆依靠。 例:假如学生中没有重名现象,则学号与姓名之间就属于相互依靠,即 Sno Sname Sname Sno Sno Sname 例:我们还是以学生关系为例,先看如下的函数依靠: Sno Sde
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2023 数据库 关系 模式 设计 规范化 基本 思想
限制150内