用户看待数据的多种角度性可借用视图来实现

上传人:子 文档编号:57049751 上传时间:2018-10-18 格式:PPT 页数:16 大小:57KB
返回 下载 相关 举报
用户看待数据的多种角度性可借用视图来实现_第1页
第1页 / 共16页
用户看待数据的多种角度性可借用视图来实现_第2页
第2页 / 共16页
用户看待数据的多种角度性可借用视图来实现_第3页
第3页 / 共16页
用户看待数据的多种角度性可借用视图来实现_第4页
第4页 / 共16页
用户看待数据的多种角度性可借用视图来实现_第5页
第5页 / 共16页
点击查看更多>>
资源描述

《用户看待数据的多种角度性可借用视图来实现》由会员分享,可在线阅读,更多相关《用户看待数据的多种角度性可借用视图来实现(16页珍藏版)》请在金锄头文库上搜索。

1、2018/10/18,第1页,3.5 视图,视图 用户看待数据的多种角度性可借用视图来实现,从而可以隐藏部分信息 视图是从一个或几个基本表或视图导出的表。数据库中只存放视图定义,不存放相应数据,数据仍存放在原表中, 因此视图又被称为虚表。 视图经定义后,即可和表一样使用 视图操作 定义视图、查询视图、删除视图 更新视图(有一定限制,并非所有视图都可更新),2018/10/18,第2页,3.5.1 定义视图,子查询中通常不含ORDER BY和DISTINCT短语 WITH CHECK OPTION表示对视图进行更新操作的行须满足子查询中的条件表达式 组成视图的属性列名或者全部指定或者全部省略,但

2、下列三种情况时必须指定列名 目标列是集函数或列表达式、多表连接时出现的同名列、启用新列名 属性列名可以是虚拟列(基表中没有的列),其值由表达式计算得到,CREATE VIEW (,) AS WITH CHECK OPTION;,2018/10/18,第3页,例子,CREATE VIEW IS_Student ASSELECT Sno, Sname, SageFROM StudentWHERE Sdept = IS;,CREATE VIEW IS_Student ASSELECT Sno, Sname, SageFROM StudentWHERE Sdept = ISWITH CHECK OPT

3、ION;,例 建立信息系学生的视图,省略对目标列名的指定,WITH CHECK OPTION表示对视图进行更新操作时,DBMS会自动加上条件Sdept = IS 以上为行列子集视图:从单个基表导出的,只是去掉了某些行和列,但保留了码的视图,2018/10/18,第4页,从多个基表导出的视图,CREATE VIEW IS_S1(Sno, Sname, Grade) ASSELECT Student.Sno, Sname, GradeFROM Student, SCWHERE Sdept = IS AND Student.Sno = SC.Sno AND SC.Cno = 1;,例 建立信息系选修

4、了1号课程的学生的视图,具体指定 目标列名,非行列子集视图,2018/10/18,第5页,带表达式的视图,CREATE VIEW BT_S(Sno, Sname, Sbirth) ASSELECT Sno, Sname, 2002-SageFROM Student;,CREATE VIEW S_G(Sno, Gavg) ASSELECT Sno, AVG(Grade)FROM SCGROUP BY Sno;,如:建立关于学生学号、姓名和出生年份的视图,目标列是列表达式,需指定目标列名,目标列是集函数,需指定目标列名,如:建立关于学生学号及其平均成绩的视图,虚拟列,虚拟列,非行列子集视图,非行列

5、子集视图,2018/10/18,第6页,从其它视图中导出视图,CREATE VIEW IS_S2 ASSELECT Sno, Sname, GradeFROM IS_S1WHERE Grade = 90;,如:建立信息系选修了1号课程且成绩在90分以上的学生视图,其中:,CREATE VIEW IS_S1(Sno, Sname, Grade) ASSELECT Student.Sno, Sname, GradeFROM Student, SCWHERE Sdept = IS ANDStudent.Sno = SC.Sno AND SC.Cno = 1;,2018/10/18,第7页,说明,CR

6、EATE VIEW语句的执行结果 DBMS执行CREATE VIEW语句的结果只是把视图的定义存入数据字典,并不执行其中的SELECT语句。 只有在对视图进行查询时,才执行视图定义中的SELECT语句并从基表中将数据取出。,2018/10/18,第8页,删除视图,基表(或视图)被删除后,建立在其基础上的视图也需显式地一一删除,DROP VIEW ;,DROP VIEW IS_S1;,例,DROP VIEW IS_Student;,2018/10/18,第9页,3.5.2 查询视图,视图消解过程:首先进行视图有效性检查,检查查询的表、视图等是否存在。如果存在,则结合视图定义中的子查询和用户查询,

7、将视图查询转换成为对基表的查询并执行。,SELECT Sno, Sage FROM IS_Student WHERE Sage 20;,SELECT Sno, Sage FROM Student WHERE Sdept = IS AND Sage = 90;,SELECT Sno, AVG(Grade) FROM SC GROUP BY Sno HAVING AVG(Grade) = 90;,例 查询平均成绩大于等于90的学生学号和平均成绩,视图消解,目前,多数关系数据库系统对于行列子集视图的查询 都能进行正确的转换,但对非行列子集视图的查询就 不一定能做转换了,因此这类查询应直接对基表进行。

8、,SELECT Sno, AVG(Grade) FROM SC WHERE AVG(Grade) = 90 GROUP BY Sno;,X,正确的对 应查询是,2018/10/18,第11页,3.5.3更新视图,通过视图来插入、删除和修改数据 由于有些视图的更新不能唯一地有意义地转换成相应基表的更新,因此目前关系数据库系统一般只允许对行列子集视图进行更新,UPDATE IS_Student SET Sname = 刘辰 WHERE Sno = 95002;,UPDATE Student SET Sname = 刘辰 WHERE Sno = 95002 AND Sdept = IS;,例 将视图

9、 IS_Student 中学号为95002的学生姓名改为“刘辰”,可转换为,2018/10/18,第12页,例子,DELETE FROM IS_Student WHERE Sno = 95029;,DELETE FROM Student WHERE Sno = 95029 AND Sdept = IS;,例 删除视图 IS_Student 中学号为95002的学生的信息,可转换为,2018/10/18,第13页,例子,某些基于视图的更新是无法正确转换的,如: 1、往视图 IS_S1中增加一条元组 2、删除视图S_G中“95001”对应的一条元组原因:这些视图都是非行列子集视图,对它们的更新不能

10、唯一地有意义地转换成相应基表的更新。,2018/10/18,第14页,系统对视图更新操作的一些规定,不同的数据库产品各不相同 如IBM DB2规定: 若视图是由两个以上基表导出的,则此视图不允许更新。 若视图的字段来自表达式或常数,则不允许对此视图进行插入和更新操作,但允许删除操作。 若视图的字段来自集函数,则此视图不允许更新 若视图定义中含有GROUP BY子句或DISTINCT子句,则此视图不允许更新 若视图定义中有嵌套查询,且内层查询的FROM子句中涉及的表也是导出该视图的基表,则此视图不允许更新 一个不允许更新的视图上定义的视图也不允许更新,2018/10/18,第15页,视图的作用,

11、简化用户操作 数据看起来简单、清晰。 用户可以从多角度看待同一数据 灵活共享数据库。 对数据库重构提供了一定程度的逻辑独立性 当数据库重构造(如增加表,或增加字段)时,用户和用户程序不会受影响。只是由于视图的更新是有条件的,因此视图只能在一定程度上提供数据的逻辑独立性。 能够对机密数据提供安全保护 对不同的用户定义不同的视图,实现重要数据的隐藏。,2018/10/18,第16页,练习,职工-工资数据库 职工(工号,姓名,职务,部门) 工资表(工号,月份,基本工资,岗位津贴,交通补贴)建立职工工号和每月基本工资的视图 建立每个职工的姓名和他当月总收入的视图 建立本月总收入低于1000元的职工的视图,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号