数据库原理与应用_第1页
数据库原理与应用_第2页
数据库原理与应用_第3页
数据库原理与应用_第4页
数据库原理与应用_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、青岛理工大学琴岛学院教师课题纸课题数据库原理与应用总课时数64累计课时第 19-20 课时授课时间 2015年 10 月5日第6 周星期一34节教学目的通过学习熟练掌握表的各种查询教学重点连接查询、嵌套查询教学难点嵌套查询课型理论教具多媒体课后小结连接查询、简单嵌套查询在查询中所占比例最大,掌握程度较好板书设计第三章3.3 3.4教学进程回顾注释一、复习提问 二、单表查询 三、连接查询 四、嵌套查询 五、总结 SelectFromWhereDistinct复 习1、什么是索引?如何创建索引?2、什么是聚集索引?3、查询语句的一般格式?4、查询语句中的*和all有何区别?5、Like有何作用?有

2、哪些通配符?各有什么作用?3.3.1 ORDER BY 子句 ORDER BY子句:可以按一个或多个属性列排序 升序:ASC;降序:DESC;缺省值为升序。当排序列含空值时ASC:排序列为空值的元组最先显示DESC:排序列为空值的元组最后显示 例24 查询选修了3号课程的学生的学号及其成绩,查询结果按分数降序排列。 SELECT Sno,Grade FROM SCWHERE Cno= 3 ORDER BY Grade DESC;例25查询全体学生情况,查询结果按所在系的系号升序排列,同一系中的学生按年龄降序排列。 SELECT * FROM Student ORDER BY Sdept,Sag

3、e DESC; 3.3.2 GROUP BY 子句 GROUP BY子句分组: 细化聚集函数的作用对象1) 未对查询结果分组,聚集函数将作用于整个查询结果2) 对查询结果分组后,聚集函数将分别作用于每个组 3) 作用对象是查询的中间结果表4) 按指定的一列或多列值分组,值相等的为一组 例31 求各个课程号及相应的选课人数。 SELECT Cno,COUNT(Sno) 选课人数 FROM SC GROUP BY Cno; 例32 查询选修了3门以上课程的学生学号。 SELECT Sno FROM SC GROUP BY Sno HAVING COUNT(*) 3; 注意事项:HAVING短语与W

4、HERE子句的区别:作用对象不同1) WHERE子句作用于基表或视图,从中选择满足条件的元组2) HAVING短语作用于组,从中选择满足条件的组。例题: select sno, count(*) as num,sum(score),max(score), min(score) from sc group by sno having avg(score)=603.3.3聚集函数 COUNT函数-COUNT函数返回列中的记录个数。函数格式: COUNT ( ALL | DISTINCT 列名 | *)说明:(1)COUNT函数默认使用ALL参数,它将重复计算相同的值,但不包含值为NULL的行。(2

5、)使用DISTINCT时,相同的值只计数一次,且不包含NULL值。COUNT函数(3)在COUNT函数中只引用一个列名时,将返回该列中行记录的个数,但不包含值为NULL的行。(4)在COUNT函数中可以使用 * 做参数,它表示返回表中的所有行数,包括含有NULL值的行。集合函数 例28 计算1号课程的学生平均成绩。 SELECT AVG(Grade) FROM SC WHERE Cno= 1 ; 例30查询学生200215012选修课程的总学分数。 SELECT SUM(Ccredit) FROM SC, Course WHER Sno=200215012 AND SC.Cno=Course.

6、Cno; 注意:1) Where子句中不能使用聚集函数2) 聚集函数除count(*)外,都不处理空值3.4 连接查询Transact-SQL提供了连接操作符JOIN,用于从两张或多张数据表的连接中获取数据。两张表之间的连接可以有以下几种不同的方式:1) 内连接 INNER JOIN2) 外连接 LEFT OUTER JOIN RIGHT OUTER JOIN FULL OUTER JOIN3) 自连接 INNER JOIN4) 交叉连接 CROSS JOIN一、内连接(等值与非等值连接查询)JOIN和ON关键字建立连接的命令格式:SELECT select_list FROM table1

7、INNER JOIN table2 ON table1.column1 table2. Column2)等值连接:连接运算符为=例33 查询每个学生及其选修课程的情况SELECT Student.*,SC.*FROM Student,SCWHERE Student.Sno = SC.Sno;自然连接:例34对例33用自然连接完成。 SELECT Student.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade FROM Student,SC WHERE Student.Sno = SC.Sno;二、自身连接 自身连接:一个表与其自己进行连接需要给表起别名以示区别由于所有属

8、性名都是同名属性,因此必须使用别名前缀例35查询每一门课的间接先修课(即先修课的先修课) SELECT FIRST.Cno,SECOND.Cpno FROM Course FIRST,Course SECOND WHERE FIRST.Cpno = SECOND.Cno;练习:自身连接 查询books表中至少有两本相同书名的所有图书的信息,包括编号、书名和作者。三、 外连接外连接与内连接的区别,内连接操作只输出满足连接条件的元组,外连接操作以指定表为连接主体,将主体表中不满足连接条件的元组一并输出。例 36 改写例33 SELECT Student.Sno,Sname,Ssex, Sage,S

9、dept,Cno,Grade FROM Student LEFT JOIN SC ON (Student.Sno=SC.Sno); 左外连接列出左边关系(如本例Student)中所有的元组 右外连接列出右边关系中所有的元组 全外连接 全外连接返回两个表的所有元组。Use 成绩管理select * from tablea a right join tableb b on a . c = b . cselect * from tablea a full join tableb b on a . c = b. c小结:本次课必须掌握两个知识点,自连接的实现方法和聚集函数的应用。 作业:查询选修了课程

10、名为“信息系统”的学生学号和姓名。(引领思路,让学生用所学知识举一反三) 答案:SELECT Sno,Sname 最后在Student关系中 FROM Student 取出Sno和Sname WHERE Sno IN (SELECT Sno 然后在SC关系中找出选 FROM SC 修了3号课程的学生学号 WHERE Cno IN (SELECT Cno 首先在Course关系中找出 FROM Course “信息系统”的课程号,为3号 WHERE Cname= 信息系统 ) )青岛理工大学琴岛学院教师课题纸课题数据库原理与应用总课时数64累计课时第21、22 课时授课时间 2015年 10 月

11、9 日第6周星期五12 节教学目的通过学习掌握表的嵌套查询教学重点嵌套查询教学难点Exists嵌套查询课型理论教具多媒体课后小结深刻理解了嵌套查询的使用方法,能够写出简单的Exists嵌套查询 板书设计第三章3.5 教学进程回顾注释一、习题讲解 二、嵌套查询 三、集合查询 Group byOrder by内连接外连接复 习1、什么是相关子查询?2、什么是不相关子查询?3、左外连接和右外连接有何区别? 3.5 嵌套查询当能确切知道内层查询返回单值时,可用比较运算符(,=,=,!=或)。一、与ANY或ALL谓词配合使用例:假设一个学生(无重名)只可能在一个系学习,并且必须属于一个系,则在例39可以

12、用 = 代替IN : SELECT Sno,Sname,Sdept FROM Student WHERE Sdept = (SELECT Sdept FROM Student WHERE Sname= 刘晨);)例41找出每个学生超过他选修课程平均成绩的课程号。 SELECT Sno, Cno FROM SC x WHERE Grade =(SELECT AVG(Grade) FROM SC y WHERE y.Sno=x.Sno)可能的执行过程: 1. 从外层查询中取出SC的一个元组x,将元组x的Sno值(200215121)传送给内层查询。 SELECT AVG(Grade) FROM S

13、C y WHERE y.Sno=200215121;2. 执行内层查询,得到值88(近似值),用该值代替内层查询,得到外层查询: SELECT Sno, Cno FROM SC x WHERE Grade =88; 3. 执行这个查询,得到 (200215121,1) (200215121,3) 4.外层查询取出下一个元组重复做上述1至3步骤,直到外层的SC元组全部处理完毕。结果为: (200215121,1) (200215121,3) (200215122,2)子查询一定要跟在比较符之后 错误的例子: SELECT Sno,Sname,Sdept FROM Student WHERE (

14、SELECT Sdept FROM Student WHERE Sname= 刘晨 ) = Sdept二、带有ANY(SOME)或ALL谓词的子查询 ALL|ANY|SOME ALL :列值必须和内部查询结果集的每一个值进行比较,只有每一次的比较结果都为真时,比较结果才为真。 ANY、SOME :列值和内部查询结果集的值进行比较,只要有一次为真,比较结果就为真。例42 查询其他系中比计算机科学某一学生年龄小的学生姓名和年龄 SELECT Sname,Sage FROM Student WHERE Sage ANY (SELECT Sage FROM Student WHERE Sdept= C

15、S ) AND Sdept CS 执行过程: 1.RDBMS执行此查询时,首先处理子查询,找出CS系中所有学生的年龄,构成一个集合(20,19) 2. 处理父查询,找所有不是CS系且年龄小于 20 或 19的学生带有ANY(SOME)或ALL谓词的子查询(续)用聚集函数实现例42 SELECT Sname,Sage FROM Student WHERE Sage (SELECT MAX(Sage) FROM Student WHERE Sdept= CS ) AND Sdept CS ; 例43 查询其他系中比计算机科学系所有学生年龄 都小的学生姓名及年龄。方法一:用ALL谓词 SELECT

16、Sname,Sage FROM Student WHERE Sage ALL (SELECT Sage FROM Student WHERE Sdept= CS ) AND Sdept CS 带有ANY(SOME)或ALL谓词的子查询 (续) 方法二:用聚集函数 SELECT Sname,Sage FROM Student WHERE Sage ( SELECT MIN(Sage) FROM Student WHERE Sdept= CS ) AND Sdept CS 三、带有EXISTS谓词的子查询1. EXISTS谓词存在量词$ 检查内层查询(子查询)是否有结果返回。若内层查询结果非空,则

17、外层的WHERE子句返回真值若内层查询结果为空,则外层的WHERE子句返回假值由EXISTS引出的子查询,其目标列表达式通常都用* 2. NOT EXISTS谓词若内层查询结果非空,则外层的WHERE子句返回假值若内层查询结果为空,则外层的WHERE子句返回真值例:例39查询与“刘晨”在同一个系学习的学生。 可以用带EXISTS谓词的子查询替换: SELECT Sno,Sname,Sdept FROM Student S1 WHERE EXISTS ( SELECT * FROM Student S2 WHERE S2.Sdept = S1.Sdept AND S2.Sname = 刘晨) 例

18、44查询所有选修了1号课程的学生姓名。思路分析:本查询涉及Student和SC关系在Student中依次取每个元组的Sno值,用此值去检查SC关系若SC中存在这样的元组,其Sno值等于此Student.Sno值,并且其Cno= 1,则取此Student.Sname送入结果关系用嵌套查询 SELECT Sname FROM Student WHERE EXISTS ( SELECT * FROM SC WHERE Student.Sno = Sno AND Cno= 1 )用连接运算SELECT SnameFROM Student, SCWHERE Student.Sno=SC.Sno AND

19、SC.Cno= 1;例45 查询没有选修1号课程的学生姓名。 SELECT Sname FROM Student WHERE NOT EXISTS (SELECT * FROM SC WHERE Sno = Student.Sno AND Cno=1);注意事项:不同形式的查询间的替换一些带EXISTS或NOT EXISTS谓词的子查询不能被其他形式的子查,比较运算符、ANY和ALL谓词的子查询都能用带EXISTS谓词的子查询等价替换。小结:运用之前的连接方法应用于对于嵌套查询的实现中,多做题目练习。 青岛理工大学琴岛学院教师课题纸课题数据库原理与应用总课时数64累计课时第23、24 课时授课

20、时间 2015年 10 月12 日第7周星期一34节教学目的视图的各种操作教学重点视图操作教学难点视图操作使用的命令课型理论教具多媒体课后小结深刻理解视图的作用,并能熟练进行视图操作。板书设计第三章3.6教学进程回顾注释一、视图概念 二、视图创建 三、视图修改 复习提问:1.嵌套查询的实现方法有几种?并举例2.创建表的语句实现?3.6 视 图 3.6.1 视图的创建与撤消3.6.2 视图的更新3.6.3 视图的查询定义:虚表,是从一个或几个基本表(或视图)导出的表, 只存放视图的定义,不存放视图对应的数据,基表中的数据发生变化,从视图中查询出的数据也随之改变。 一、建立视图语句格式 CREAT

21、E VIEW ( ,) AS WITH CHECK OPTION;1) 组成视图的属性列名:全部省略或全部指定2) 子查询不允许含有ORDER BY子句、DISTINCT短语3) RDBMS执行CREATE VIEW语句时只是把视图定义存入数据字典,并不执行其中的SELECT语句。4) 在对视图查询时,按视图的定义从基本表中将数据查出。 例1 建立信息系学生的视图。 CREATE VIEW IS_Student AS SELECT Sno,Sname,Sage FROM Student WHERE Sdept= IS; 例2建立信息系学生的视图,并要求进行修改和插入操作时仍需保证该视图只有信息

22、系的学生 。 CREATE VIEW IS_Student AS SELECT Sno,Sname,Sage FROM Student WHERE Sdept= IS WITH CHECK OPTION;对IS_Student视图的更新操作:1) 修改操作:自动加上Sdept= IS的条件2) 删除操作:自动加上Sdept= IS的条件3) 插入操作:自动检查Sdept属性值是否为IS 4) 如果不是,则拒绝该插入操作5) 如果没有提供Sdept属性值,则自动定义Sdept为IS基于多个基表的视图例3 建立信息系选修了1号课程的学生视图。 CREATE VIEW IS_S1(Sno,Sname

23、,Grade) AS SELECT Student.Sno,Sname,Grade FROM Student,SC WHERE Sdept= IS AND Student.Sno=SC.Sno AND SC.Cno= 1; 例4 建立信息系选修了1号课程且成绩在90分以上的学生的视图。 CREATE VIEW IS_S2 AS SELECT Sno,Sname,Grade FROM IS_S1 WHERE Grade=90;带表达式的视图例5 定义一个反映学生出生年份的视图。 CREATE VIEW BT_S(Sno,Sname,Sbirth) AS SELECT Sno,Sname,2000

24、-Sage FROM Student;分组视图例6 将学生的学号及他的平均成绩定义为一个视图 CREAT VIEW S_G(Sno,Gavg) AS SELECT Sno,AVG(Grade) FROM SC GROUP BY Sno;不指定属性列例7将Student表中所有女生记录定义为一个视图 CREATE VIEW F_Student(F_Sno,name, sex,age,dept) AS SELECT * FROM Student WHERE Ssex=女二、删除视图 语句的格式:DROP VIEW CASCADE ;1) 该语句从数据字典中删除指定的视图定义2) 如果该视图上还导出

25、了其他视图,使用CASCADE级联删除语句,把该视图和由它导出的所有视图一起删除 3) 删除基表时,由该基表导出的所有视图定义都必须显式地使用DROP VIEW语句删除 例8 删除视图BT_S: DROP VIEW BT_S; 删除视图IS_S1:DROP VIEW IS_S1;拒绝执行级联删除:DROP VIEW IS_S1 CASCADE; 3.6.2 查询视图 1. 用户角度:查询视图与查询基本表相同2. RDBMS实现视图查询的方法3. 视图消解法(View Resolution)1) 进行有效性检查2) 转换成等价的对基本表的查询3) 执行修正后的查询例9 在信息系学生的视图中找出年

26、龄小于20岁的学生。 SELECT Sno,Sage FROM IS_Student WHERE Sage=90;S_G视图的子查询定义: CREATE VIEW S_G (Sno,Gavg) AS SELECT Sno,AVG(Grade) FROM SCGROUP BY Sno;查询转换 错误:SELECT Sno,AVG(Grade) FROM SCWHERE AVG(Grade)=90GROUP BY Sno;正确:SELECT Sno,AVG(Grade) FROM SCGROUP BY SnoHAVING AVG(Grade)=90; 例12 将信息系学生视图IS_Student中

27、学号200215122的学生姓名改为“刘辰”。 UPDATE IS_Student SET Sname= 刘辰WHERE Sno= 200215122 ;转换后的语句:UPDATE Student SET Sname= 刘辰WHERE Sno= 200215122 AND Sdept= IS 例13 向信息系学生视图IS_S中插入一个新的学生记录:200215129,赵新,20岁INSERT INTO IS_Student VALUES(95029,赵新,20);转换为对基本表的更新:INSERT INTO Student(Sno,Sname,Sage,Sdept)VALUES(2002151

28、29 ,赵新,20,IS ); 例14删除信息系学生视图IS_Student中学号为 200215129的记录 DELETE FROM IS_StudentWHERE Sno= 200215129 ;转换为对基本表的更新:DELETE FROM StudentWHERE Sno= 200215129 AND Sdept= IS;允许对行列子集视图进行更新小结:视图的作用:1. 视图能够简化用户的操作2. 视图使用户能以多种角度看待同一数据 3. 视图对重构数据库提供了一定程度的逻辑独立性 4. 视图能够对机密数据提供安全保护5. 适当的利用视图可以更清晰的表达查询青岛理工大学琴岛学院教师课题纸

29、课题数据库原理与应用总课时数64累计课时第25、26 课时授课时间 2015年 10 月16 日第7周星期五12 节教学目的查询算法解析教学重点嵌套查询中出现的算法解析教学难点查询中出现的算法复杂度课型理论教具多媒体课后小结比较深刻的理解查询优化算法的过程以及复杂度。 板书设计第三章3.7教学进程回顾注释一、优化算法必要性 二、算法准则 三、算法过程 四、算法步骤 复习提问:视图的功能?如何创建视图?3.7 查询优化 3.7.1 查询优化的必要性例3. 查询选修了“011”号课程的学生姓名。SELECT student.st_name FROM student,scoreWHERE stude

30、nt.st_no=score.st_no AND score.sub_no=011该查询可用以下3种等价的关系代数表达式来完成:st_name( student. st_no = score. st_no score. sub_no = 011 (studentscore)st_name( score. sub_no = 011 (student score)st_name(student score. sub_no = 011 (score)3.7.2 查询优化的一般准则 (1) 选择运算应尽早执行。(2) 把投影运算和选择运算同时进行。 (3) 把投影操作与它前面或后面的一个双 目运算结合

31、起来(4) 在执行连接运算之前,可对需要连接的关系进行适当地预处理,如建索引或排序。(5) 把笛卡尔积和其后的选择运算合并成为连接运算,以避免扫描笛卡尔积的中间结果。3.7.3 优化算法(代数优化)(1) 连接、笛卡尔积交换律E1 E2E2 E1 E1 E2E2 E1 E1E2E2E1(2) 连接、笛卡尔积的结合律(E1 E2) E3E1 (E2 E3)(E1 E2) E3E1 (E2 E3) (E1E2) E3 E1 (E2E3) (3) 投影的串接 A1,A2, . ,An ( B1,B2, . ,Bm (E) A1,A2, . ,An (E)(4) 选择的串接F1(F2(E)F1F2 (

32、E)选择的串接律说明选择条件可以合并,这样一次就可检查全部条件。 (5) 选择和投影的交换假设:选择条件F只涉及属性A1,AnF ( A1,A2, . ,An (E) A1,A2, . ,An (F (E)假设:F中有不属于A1,An的属性B1,Bm A1,A2, . ,An (F (E) A1,A2, . ,An (F ( A1,A2, . ,An, B1,B2, . ,Bm (E) (6) 选择对笛卡尔积的分配律假设:F中涉及的属性都是E1中的属性 F (E1E2)F (E1)E2假设:F=F1F2,并且F1只涉及E1中的属性,F2只涉及E2中的属性,则由上面的等价变换规则1,4,6可推出

33、: F (E1E2) F1(E1)F2 (E2)假设: F=F1F2,并且 F1只涉及E1中的属性,F2只涉及E1和E2两者的属性,则可得到下列式子: F (E1E2)F2(F1(E1)E2) (7) 选择对并的分配律假设E=E1E2,E1,E2有相同的属性名,则: F(E1E2)F (E1)F (E2)(8) 选择对集合差运算的分配律假设E1与E2有相同的属性名,则: F (E1E2)F (E1)F (E2) (9) 选择对自然连接的分配律F (E1 E2)F (E1) F (E2)(10) 投影对笛卡尔积的分配假设E1和E2是两个关系表达式,A1,An是E1的属性,B1,Bm是E2的属性。

34、则: A1,A2, ,An,B1,B2, ,Bm(E1E2) A1,A2, ,An(E1) B1,B2, ,Bm (E2) (11) 投影对并的分配律假设E1和E2有相同的属性名。则: A1,A2, ,An (E1E2) A1,A2, ,An (E1) A1,A2, ,An (E2) 关系表达式的优化算法如下:输入:一个代数表达式的语法树。输出:计算该表达式的一个优化序列。方法:依次执行以下步骤。(1)分解选择运算:使用规则(4)把形如 F1F2Fn (E)的子表达式转换成F1 (F2(Fn(E) (2)通过交换选择运算,将其尽可能移到叶端:对每个选择操作,使用规则(4) (9)尽可能把选择操

35、作移到树的叶端。(3)通过交换投影运算,将其尽可能移到叶端:对每个投影操作,使用规则(3)、(10)、(11)和(5)中的一般形式尽可能把投影操作移向叶端。(4)合并串接的选择和投影,以便能同时执行或在一次扫描中完成: 使用规则(5)把选择和投影的串接合并成单个选择、单个投影或一个选择后跟一个投影,使多个选择或投影能同时执行,或在一次扫描中全部完成。3.6.4 优化的一般步骤1把查询转换成某种内部表示 2代数优化:把语法树转换成标准(优化)形式 3物理优化:选择低层的存取路径 4 生成查询计划将图3-4 语法树优化成图3-5。1) 根据一定的等价变换规则把语法树转换成标准(优化)形式2) 利用

36、“选择的串接定律”把合并后的选择条件拆开;3) 对每一个选择,尽可能使其靠近叶端,主要利用“选择与其他运算的交换律” 4) 对每一个投影,尽可能使其靠近叶端,主要利用“投影的串接定律”、“投影与笛卡儿积、并、投影的交换律”5) 合并相邻的选择和投影,一般变换成一个选择后跟一个投影的形式,使得多个选择和投影能在一次扫描中完成;6) 把语法树的内结点分组; 7) 生成程序小结:1-2: 连接、笛卡尔积的交换律、结合律3: 合并或分解投影运算4: 合并或分解选择运算5-9: 选择运算与其他运算交换5,10,11: 投影运算与其他运算交换 青岛理工大学琴岛学院教师课题纸课题数据库原理与应用总课时数64

37、累计课时第27、28 课时授课时间 2015年 10 月19 日第8周星期一34 节教学目的理解规范化设计的作用,理解并掌握函数依赖的概念教学重点掌握函数依赖教学难点规范化设计的作用和函数依赖概念课型理论教具多媒体课后小结函数依赖的概念时学习范式的基础,所以这一部分讲解速度放慢,便于学生理解,从学生掌握情况来看,还是比较理想的板书设计第四章4.1 4.2 教学进程回顾注释一、复习提问二、新课讲解4.1 关系模式的设计问题 4.2 函数依赖 关系关系模式关系数据库关系数据库的模式关系模式的形式化定义概念回顾 :1. 关系2. 关系模式3. 关系数据库4. 关系数据库的模式5. 关系模式的形式化定

38、义关系模式由五部分组成,即它是一个五元组: R(U, D, DOM, F)R: 关系名U: 组成该关系的属性名集合D: 属性组U中属性所来自的域DOM: 属性向域的映象集合F: 属性间数据的依赖关系集合 关系模式的简化表示 关系模式R(U, D, DOM, F) 简化为一个三元组: R(U, F)当且仅当U上的一个关系r满足F时,r称为关系模式 R(U, F)的一个关系4.1关系模式的设计问题关系数据库逻辑设计 针对具体问题,如何构造一个适合于它的数据模式 数据库逻辑设计的工具 关系数据库的规范化理论 例1建立一个描述学校教务的数据库:学生的学号(Sno)、所在系(Sdept)系主任姓名(Mn

39、ame)、课程名(Cname)成绩(Grade)单一 的关系模式 : Student U Sno, Sdept, Mname, Cname, Grade U Sno, Sdept, Mname, Cname, Grade U Sno, Sdept, Mname, Cname, Grade 属性组U上的一组函数依赖F: F Sno Sdept, Sdept Mname, (Sno, Cname) Grade 关系模式中存在的问题 数据冗余太大浪费大量的存储空间 例:每一个系主任信息重复出现 更新异常 数据冗余 ,更新数据时,维护数据完整性代价大。例:系主任信息修改 插入异常该插的数据插不进去 例

40、:插入一个新系信息。 删除异常不该删除的数据不得不删例:某系学生全部毕业关系模式Student中存在的问题:1. 数据冗余太大2. 更新异常(Update Anomalies)3. 插入异常(Insertion Anomalies)4. 删除异常(Deletion Anomalies)结论:Student关系模式不是一个好的模式。“好”的模式:不会发生插入异常、删除异常、更新异常,数据冗余应尽可能少原因:由存在于模式中的某些数据依赖引起的解决方法:通过分解关系模式来消除其中不合适的数据依赖4.1.2 关系模式的非形式化设计准则 关系模式的设计应尽可能只包含有直接联系的属性。关系模式的设计应尽可

41、能使得相应关系中不出现插入异常、删除和修改等操作异常现象。关系模式的设计应尽可能使得相应关系中避免放置经常为空值的属性。关系模式的设计应尽可能使得关系的等值连接在主键和外键的属性上进行,并且保证以后不会生成额外的元组。4.2 函数依赖数据依赖一个关系内部属性与属性之间的约束关系现实世界属性间相互联系的抽象数据内在的性质语义的体现 什么是数据依赖(续) 数据依赖的类型函数依赖(Functional Dependency,简记为FD)多值依赖(Multivalued Dependency,简记为MVD)其他4.2.1 函数依赖 函数依赖平凡函数依赖与非平凡函数依赖完全函数依赖与部分函数依赖传递函数

42、依赖 一、函数依赖 定义4.1 设R(U)是一个属性集U上的关系模式,X和Y是U的子集。若对于R(U)的任意一个可能的关系r,r中不可能存在两个元组在X上的属性值相等, 而在Y上的属性值不等, 则称 “X函数确定Y” 或 “Y函数依赖于X”,记作XY。 说明 1. 所有关系实例均要满足2. 语义范畴的概念3. 数据库设计者可以对现实世界作强制的规定二、平凡函数依赖与非平凡函数依赖在关系模式R(U)中,对于U的子集X和Y,如果XY,但Y X,则称XY是非平凡的函数依赖若XY,但Y X, 则称XY是平凡的函数依赖例:在关系SC(Sno, Cno, Grade)中, 非平凡函数依赖: (Sno, C

43、no) Grade 平凡函数依赖: (Sno, Cno) Sno (Sno, Cno) Cno若XY,则X称为这个函数依赖的决定属性组,也称为决定因素(Determinant) 。若XY,YX,则记作XY。若Y不函数依赖于X,则记作XY。三、完全函数依赖与部分函数依赖定义4.2 在R(U) 中,如果XY , 并且对于X 的任何一个真子集X , 都有X 决定Y, 则称Y 对X完全函数依赖 ,记作X F Y 。 若XY ,但Y 不完全函数依赖于X , 则称Y 对X部分函数依赖 ,记作X P Y 。 例1 中(Sno,Cno)Grade 是完全函数依赖 , (Sno,Cno)Sdept 是部分函数依赖 因为Sno Sdept 成立,且Sno 是(Sno ,Cno )的真子集 四、传递函数依赖定义4.3 在R(U) 中,如果XY ,(Y X) ,YX YZ , 则称Z 对X传递函数依赖 。 记为:X Z 注: 如果YX , 即XY ,则Z直接依赖于X 。 例: 在关系Std(S

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论