第6章 索引与视图 V08_A
- 格式:pdf
- 大小:410.61 KB
- 文档页数:24
第6章索引与视图
数据库导论Introduction of Data Base
张建国
哈工大计算机科学与技术学院
第6章
索引与视图
2008-3-312
本章主要内容
视图的概念
视图的查询
视图的删除
1. 索引的概念
123456010310110401031011020103101110010310110501031011060103101101Dno
Sbirthday Sname Sno Student
010******** 6.1 索引
6.1 索引(Cont.)索引的意义
更新基本表时自动修改索引
索引的数量
例如:对Student表
对主码要建立索引
若经常按姓名查询,则可按姓名建立索引
若经常按系名查询,则可按系名建立索引索引的代价
6.1 索引(Cont.)
2. 索引的分类
Clustered
只有一个聚簇索引
于需经常查询、计算、更新的属性可建立非聚会簇索引
也是一种非聚簇索引
6.1 索引(Cont.)
3. 建立索引
格式:
CREATE [UNIQUE] [CLUSTERED|NONCLUSTERED] INDEX 索引名ON 基本表名(列名1 [ASC|DESC] [,列名2 [ASC|DESC]]…);
其中:
:索引名称
ASC:升序排序(缺省值)|DESC:降序排序
6.1 索引(Cont.)
例:按学号Sno升序建立索引,索引名为Stu_sno.
例:按姓名Sname降序建立惟一索引,索引名为Stu_sname.
6.2 视图1. 视图的概念
是由一个或几个基本表
或其他视图导出来的表.
不是一个实际存在的表,
仅仅是一个定义,不存放具体
数据,所以视图是一个虚表.
6.2 视图(Cont.)
1. 定义视图
CREATE VIEW 视图名[(列名1[,列名2]……)]
AS 子查询
列名
省略视图的列名,隐含规定为子查询的结果.
某个目标列是集函数或列表达式
多表连接时选出了几个同名列作为视图的属性
需要在视图中为某个列取一个更合适的名字
子查询:一个完整的SELECT语句
(1) 定义单源表视图视图的内容来一个表.
例:由基本表Student 建立"计算机"系的视图CS_Student.CREATE VIEW CS_Student
AS
SELECT Sno,Sname,Sex,Birthday,Score
FROM Student WHERE Dname=‘计算机’
本视图中省略了列名,使用子查询结果作为视图的列名.
CS_Student 6.2 视图(Cont.)
(2) 建立多源表视图
该视图的内容来多个表.
:建立"计算机系"选修"101001"号课程的学生的视图.CREATE VIEW CS_S1(Sno,Sname,Grade)
AS
SELECT Student.Sno,Sname,Grade
FROM Student INNER JOIN SC ON Student.Sno=SC.Sno WHERE Dname=‘计算机’AND SCno=‘101001’
CS_S1 6.2 视图(Cont.)
(3) 在已有视图上定义新视图
例:建立“计算机系”选修“101001”号课程且成绩在90分以上的学生的视图.
(4) 定义带表达式的视图
在视图Stud_Year 中,Sage 是通过表达式计算得到的,所以Stud_Year 是一个表达式视图,其中的Sage 称为虚拟列. 6.2 视图(Cont.)
(5) 定义含有分组统计的视图
:建立一个学生的学号及其平均成绩的视图.
CREATE VIEW S_G(Sno,Gavg)
AS
SELECT Sno,AVG(Grade) FROM SC
GROUP BY Sno
6.2 视图(Cont.)
2. 删除视图
格式:
DROP VIEW 视图名
3. 视图的查询
:查询“计算机”系5月份出生的学生.SELECT Sno,Sname,Birthday FROM CS_Student WHERE MONTH(Birthday)=5在查询时,DBMS 将其转换成
SELECT Sno, Sname,Birthday
FROM Student
WHERE Dname=‘计算机’AND MONTH(Birthday)=56.2 视图(Cont.)
4.更新视图
:利用视图CS_Student将"计算机"系学号为“1030310101”的学生姓名改为“刘辰”. UPDATE CS_Student
SET Sname=‘刘辰’
WHERE Sno=‘1030310101’
由于平均成绩Gavg 是根据基本表SC
“1030310101”的各门课程的成绩改平均成绩,DBMS 将其转换成对基本表的修改时,此时无法实现对每门课程的修改.
6.2 视图(Cont.)
行列子集视图
由一个基本表去掉某些行和某些列(保留码)后定义的视图.视图更新的三种情况
可更新的
但某些DBMS可能不支持更新操作
不可更新的
对视图更新的一般规定
行列子集视图是可更新的.
两个以上基本表导出的视图一般不允许更新.
属性来自属性表达式或常数的视图不能进行插入和修改操作,但可进行删除操作.
属性来自集函数的视图不允许更新.
定义中有GROUP BY子句的视图不允许更新.
定义中有DISTINCT短语的视图不允许更新.
视图定义中有嵌套查询,并且其内层查询的FROM子句中涉及的表也是导出该视图的基本表,视图不允许更新.
6.2 视图(Cont.)
5. 视图的作用
简化用户的操作
同一数据在不同视图中有不同的表示.
提高逻辑独立性
不同的用户使用不同的视图,使用户只能使用允许自己使用的数据.
例:基本表Student(Sno ,Sname,Sex,Birthday,Dname)定义的视图为S1(Sno,Sname,Dname)
若对全局逻辑结构进行了修改:
Student(Sno ,Sname,Sex,Birthday,Dno )Dept (Dno ,Dname,Dtelphone)
将Student 中的Dname 改名为Dno,则可重新定义视图:CREATE VIEW S1(Sno,Sname,Dname)AS SELECT Student.Sno, Sname, Dname FROM Student INNER JOIN Dept ON Student.Dno=Dept.Dno;这样就可以使视图S1不改变.用户程序是根据视图S1编写的,于是不必修改用户程序.
6.2 视图(Cont.)
本章小结
索引的概念,定义,删除
视图、存储过程和用户自定义函数的作用
基于基本表和其他视图定义的虚表
提高了数据的逻辑独立性
增强了数据库的安全性
简化了用户的操作
为用户提供了从不同角度看待数据的方法。