- 1、本文档共65页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据库原理-数据依赖和关系模式的规范化
第10章 数据依赖和关系模式的规范化 10.1 关系模式设计中的一些数据语义问题 数据的语义不但表现为完整性约束,对数据库的状态或状态的转换施加一定的限制,而且对关系模式的设计也提出一定的要求。 属性间往往存在一定的依赖关系,而最基本的依赖关系是函数依赖。所谓函数依赖是指一个或一组属性的值可以决定其他属性的值。 一般地讲,设X,Y是关系的两个不同的属性组,如果Y函数依赖于X,或X函数决定Y,则其依赖关系可表示为X→Y。 设有一关系R,具有下列属性:学号(S#)、课程号(C#)、成绩(G)、任课教师姓名(TN)、教师所在系名(D)。这些数据具有下列语义: (1)学号是一个学生的标识,课程号是一门课程的标识,这些标识与其代表的学生和课程分别一一对应; (2)一位学生所修的每门课程都有一个成绩; (3)每门课程(注意:不是每种课程!同一种课,如数学课,可以开好多门,每门课有一个课程号)只有一位任课教师,但一位教师可以教多门课; (4)教师中没有重名,每位教师只属于一个系。 根据上述语义,可以确认下面函数依赖的集合: F={{S#,C#}→G,C#→TN,TN→D} 从图10-1可以看出,属性集{S#,C#}可以 决定其他所有属性的值,而{S#,C#}的任何子集 则不能,故{S#,C#}是这个关系的主键。这样的 关系用来查询是很方便的。 计算机系通知教师准备给学生补考,可以“查询图10-1 函数依赖计算机系所开课程的不及格学生的学号、不及 格课程号以及任课教师的姓名” .查询仅涉及R一个关 系,是一元查询,不须做连接运算,可以用下面的SQL语 句来表达: SELECT S#,C#,TN FROM R WHERE D=CS′AND G=F′; 但是这样的关系也有问题,首先数据冗余太多,如一门课程的教师名须对选这门课的所有学生重复一次;一个系名须对选该系所开课程的所有学生重复一次。除冗余外,在进行增、删、改操作时,还会发生所谓更新异常现象: (1)由于冗余,在修改时往往会导致数据的不一致。例如,改变一门课程的任课教师,或一门课改由另一个系开出,则需要修改多个元组。如果部分修改,部分不修改,则会导致数据的不一致。这叫修改异常。 (2)由于主属性不能为空值,如某系有位教师不教课,则这位教师的姓名及所属的系名就不能插入;同样,如果一位教师所开的课暂时无人选,或是列入计划而目前不开,则也无法插入。这叫插入异常。 (3)如果所有学生都退选一门课,则有关这门课的其他数据(任课教师名及所属系名)也将被删除。如果一位教师因病暂时停开他所开的课,则有关这位教师的其他信息(所属系、可开课程)都将被删去。这叫删除异常。 在上例的关系中,包含了三方面的信息:学生各门课程 的成绩,各门课程开课的教师以及各个教师所属的系。 上例中,所有这三方面的数据都集中在一个关系中,此 关系的主键为属性集{S#,C#}。 (C#,TN)和(TN,D)本来可以作为独立的关系而存 在,而今却不得不依附于其他关系。这就是说,必须对应 一个主键{S#,C#}的值,才能插入或存在一个(C#, TN)或(TN,D)的值。这是关系结构带来的限制,不是现 实世界的真实反映。 解决这个问题的途径是把关系分解,也就是进行所谓关系规范化。例如,把上例的关系分解为下列三个关系: SCG(S#,C#,G) CTN(C#,TN) TND(TN,D) 这样的分解使关系的语义单纯化,使之符合“一地一事”的原则。但是分解以后,对某些查询必须进行开销很大的连接操作,影响数据库的性能。 关系的规范化主要是对关系进行必要的分解,但如何分解,分解后是否有损于原来的信息,回答这些问题需要理论的指导,下面将讨论这些问题。 R表示一个关系的模式,U={A1,A2,…,An}是R的所有属性的集合,F是R中函数依赖的集合,r是R所取的值,即R实有元组的集合。 定义10-1 设有一关系模式R(A1,A2,…,An),X和Y为其属性的子集。设t1,t2是关系R中的任意两个元组,如果t1[X]=t2[X],则t1[Y]=t2[Y]。这时我们称Y函数依赖于X,或X函数决定Y,X称为决定子(determinant)。 一个函数依赖要能成立,不但要求关系的当前值都能满足函数依赖条件,而且还要求关系的任一可能值都能满足函数依赖条件。确认一个函数依赖,需要弄清数据的语义,而语义是现实世界的反映,不是主观的臆断。 如果Y为X的子集,显然X→Y成立,这称为平凡函数依赖(trivial functional dependency)。平
您可能关注的文档
最近下载
- 中医气功学导论期末试卷.docx
- 请你谈一下你为什么要加入中国共产党谈谈为什么加入中国共产党.pptx VIP
- 2024南方电网广西电网公司校园招聘公开引进高层次人才和急需紧缺人才笔试参考题库(共500题)答案详解版.docx
- DB37T19976—2011山东物业服务规范第1部分住宅物业.doc
- 七年级心理健康教案完整版.docx
- 赤泥综合利用项目可行性研究报告(完整案例).pdf
- 2024款比亚迪海豹06DM-i豪华型尊贵尊荣尊享旗舰_用户手册驾驶指南车主车辆说明书电子版.pdf
- 企业技术改造资金绩效评价总结报告.doc
- 《生物化学》全套教学课件(共13章完整版).pptx
- 15-彭向刚-学习领导科学提升领导力(清华)__(全国各校课件参考).ppt
文档评论(0)