第8章 视图与索引资料.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第8章 视图与索引 主讲人:骆炎民 Email:lym@hqu.edu.cn 主要内容 8.1 虚拟视图 8.2 视图更新 8.3 sql中的索引 8.4 索引的选择 8.5 物化视图 表和虚拟视图 表(基本关系/基本表) 以物理组织的方式实际存储在数据库中 表是持久的,除非对它们显式地调用SQL更新语句进行更改,否则它将无限期地存在且保持不变 虚拟视图 不以物理的形式存在 通过类似查询的表达方式定义 可以将视图当作物理存在进行查询 在某些情况下,视图也可以更新 1.视图定义 CREATE VIEW 视图名 AS 视图定义; 视图定义是一个SQL查询 例8.1 假设视图ParamountMovies是关系Movies的一部分,由Paramount Studios制作的所有电影的片名和年份组成 视图定义如下 课本示例8.2 建立一个包含电影名和制片人姓名的视图MovieProd 该查询定义的视图涉及两个关系 视图定义如下 2. 视图查询 视图可以像一个被真正存储的表一样来查询。 在对视图的查询中,FROM子句后面接的是视图名,查询的处理过程实际上是由DBMS从定义该虚拟视图的关系(基本表)中选择出所需要的元组。 例8.3 找出Paramount l979年制作的电影 课本示例8.4 查询中可以同时使用视图和基本表 3.属性重命名 有时人们不想用来自视图定义中的查询的属性名,而更愿意选用自己定义的属性名——属性重命名。 主要内容 8.1 虚拟视图 8.2 视图更新 8.3 sql中的索引 8.4 索引的选择 8.5 物化视图 视图更新 多数视图是不可更新的 对于一些充分简单的视图(可更新视图),可以把对视图的更新转变成一个等价的对基本表的更新,更新操作最终作用在基本表上。 此外,“替换”触发器可以将视图上的更新转变为基本表上的更新。 1.视图删除 DROP VIEW ParamountMovies ; 注意,这条语句删除了视图的定义,因此不再能对该视图进行查询或修改操作。但是,删除视图并不会影响基本关系Movies中的任何元组。 DROP TABLE Movies ; 使得表Movies从此消失,也使得视图ParamountMovies不可用,因为使用该视图的查询会间接地引用一个不存在的关系Movies。 2. 可更新视图 若一个视图是从单个的基表导出的,并且只是去掉了基表的某些行和列,且保留了基表的主码,这样的视图被称为行列子集视图。 SQL92中对可更新视图的支持非常有限,主要就是上述的行列子集视图。 而各主流 DBMS对可更新视图的支持各不相同 SQL92中对可更新视图的要求 视图定义的SELECT语句的FROM子句中不能出现多个表,也不能有 JOIN、EXCEPT、UNION、INTERSECT 视图定义的 SELECT子句中不能有DISTINCT SELECT子句中的各列必须来自于基表(视图)的列,不能是表达式 视图所基于的基表(或视图)必须是可更新的 SELECT子句的子查询的FROM子句不能有视图所基于的基表(或视图) SELECT语句中不能含有GROUP BY, HAVING子句 可更新视图的三个技术要点 假设该视图是由从单个关系R选出的一些属性组成。要判定其可更新有三个重要的技术要点: WHER子句在子查询中不能使用关系R。 FROM语句只能包含一个关系R SELECT语句中的属性列表必须包括足够多的属性,以保证对该视图进行元组插入时,能够用NULL或者适当的默认值来填充所有其他不属于该视图的属性。 (1) 对可更新视图插入元组 视图ParamountMovies满足SQL的可更新条件 因为视图只包含了基本表Movies部分元组的部分分量 示例8.5-视图插入 那么可以往视图ParamountMovies中插入一个元组: 对视图ParamountMovies的插入操作就好像对关系Movies执行如下的插入: 注意:title和year属性必须被指定在插入操作中,因为这里不能给关系Movies的其他属性提供值,其他属性的值为NULL (title, year)是主键,不能为NULL,所以必须出现 示例8.5-不合理现象 不合理的现象产生了: 被插入的元组由于其属性studioName的值为NULL,不满足视图ParamountMovies的选择条件,因此,被插入的元组不会反映到视图中。 例如:例8.3的查询不会检索出元组(‘Star Trek’, 1979) 示例8.5-解决方法 首先向定义视图的SELECT语句中加入studioName属性 然后向视图中插入元组 (2) 从可更新视图删除元组 如同视图的插入一样,删除操作最终也是传递到基

文档评论(0)

yaocen + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档