unit two n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
UNIT two 完整性与视图 PowerPoint Presentation
Download Presentation
UNIT two 完整性与视图

Loading in 2 Seconds...

play fullscreen
1 / 71

UNIT two 完整性与视图 - PowerPoint PPT Presentation


  • 100 Views
  • Uploaded on

UNIT two 完整性与视图. 武汉大学计算机学院. 思考几个问题. 应用环境中存在很多规则,而这些规则反映为属性的取值域、属性之间的取值约束,这是数据库必须遵从的,否则,数据库中的数据会出现不一致或错误。你如何保证数据之间的约束关系的?你考虑过完整性约束的检测对系统性能的影响吗?你知道 DBMS 能提供什么帮助吗? 视图是一个虚表,应用环境中你会用到很多视图,它确实给你带来很多好处,但你真的觉得操作起来视图能与基本表一样吗?. 本 讲 主 要 目 标. 学完本讲后,你应该能够了解: DBMS 的完整性控制的基本原理; 完整性机制的实施会极大地影响系统性能;

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'UNIT two 完整性与视图' - hedy


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
unit two

UNIT two完整性与视图

武汉大学计算机学院

slide2
思考几个问题
  • 应用环境中存在很多规则,而这些规则反映为属性的取值域、属性之间的取值约束,这是数据库必须遵从的,否则,数据库中的数据会出现不一致或错误。你如何保证数据之间的约束关系的?你考虑过完整性约束的检测对系统性能的影响吗?你知道DBMS能提供什么帮助吗?
  • 视图是一个虚表,应用环境中你会用到很多视图,它确实给你带来很多好处,但你真的觉得操作起来视图能与基本表一样吗?
slide3
本 讲 主 要 目 标

学完本讲后,你应该能够了解:

  • DBMS的完整性控制的基本原理;
  • 完整性机制的实施会极大地影响系统性能;
  • 实现完整性约束的方法有非过程性的方法和过程性的方法,利用CREATE TABLE语句的列约束和表约束实现有限的非过程性地约束;利用触发器过程性地实现动态的约束;
  • 实体完整性和参照完整性的内容和使用;
  • 视图是虚表,一旦视图定义,可以像使用基本表一样操作视图,但并非所有的视图都是可更新的。
slide4
一.完整性控制的实现原理

二.完整性约束条件分类

三. 主键和实体完整性

四. 外键和参照完整性

五. 非过程性约束的实现

六. 过程性约束与触发器

七. 视图的定义、查询与更新

八. 视图的作用

内容提纲

slide5
完整性控制的

实现原理

slide6
完整性控制的实现原理
  • 完整性控制定义

数据的完整性是为了防止数据库中存在不符合语义的数据,防止错误信息的输入和输出,即所谓垃圾进垃圾出所造成的无效操作和错误结果。

完整性约束条件 ---- 加在数据库数据之上的语义约束条件。

完整性控制---- DBMS中检查数据是否满足完整性条件的机制。

slide7

完整性规则

定义

完整性

约束

登记

DD

完整性规则

检查

用户发出

更新操作

请求

操作数据

DB

DBMS的完整性子系统

完整性控制的实现原理
  • 完整性控制子系统(过程性约束)
slide8
完整性控制的实现原理
  • 完整性控制的功能
      • 定义功能

-- 提供定义完整性约束条件的机制

      • 检查功能

-- 在一定的时机,检查用户操作请求是否违背完整性约束条件

      • 保证数据完整性功能

-- 如果发现用户操作请求使数据违背了完整性约束,则采取一定的动作来保证数据的完整性。

slide9
完整性控制的实现原理
  • 完整性约束的检测时机
      • 立即执行约束

-- 在一条语句执行完后立即检查

      • 延迟执行约束

-- 完整性检查延迟到整个事务执行结束后再进行,检查正确方可提交。

当用户操作违背约束时,使用不同的检查时机是否影响处理方法?

  • 对于立即执行约束,系统将拒绝操作
  • 对于延迟执行约束,系统将拒绝整个事务
slide10
完整性约束

条件分类

slide11
完整性约束条件分类
  • 完整性约束条件的对象粒度
    • 关系约束

-- 是若干元组间、关系集合上以及关系之间的联系的约束。

    • 元组约束

-- 是元组中各个字段间的联系的约束。

    • 列约束

-- 列的类型、取值范围、精度、排序等约束。

slide12
完整性约束条件分类
  • 完整性约束条件的对象状态
    • 静态约束

-- 指数据库每一确定状态时的数据对象所应满足的约束条件,它是反映数据库状态合理性的约束。

    • 动态约束

-- 指数据库从一种状态转变为另一种状态时,新、旧值之间所应满足的约束条件,它是反映数据库状态变迁的约束。

slide13

对象状态

动态列级约束

动态元组约束

动态关系约束

动态

静态列级约束

静态元组约束

静态关系约束

静态

对象粒度

元组

关系

完整性约束条件分类
  • 完整性约束条件分类
slide14
完整性约束条件分类
  • 完整性约束条件分类
slide15
主键和

实体完整性

slide16
主键和实体完整性
  • 超键

——超键是能唯一区分任意两行数据的列或多个列

例,在表students中,通过哪些列可以区别不同的学生?

sid

lname

fname

students

telephone

(lname,fname)

(lname,fname,telephone)

包含超键的多个列都是超键

(sid,fname)

武汉大学计算机学院

slide17
主键和实体完整性
  • 键(候选键)

——给定一个表T,标题Head(T)=A1…An。表T的一个键,有时也称为候选键,是具有以下两个特征的一组属性的集合K=Ai1…Aik:

      • 如果u,v是T中两个不同的元组,则u[K]≠v[K];
      • 没有K的真子集H具有特征1)。
      • 表在某一时刻的内容无法告诉我们表中的键是什么
      • 每个表都至少有一个键

武汉大学计算机学院

slide18
主键和实体完整性
  • 主键

——主键是被数据库设计者选择出来作为表T的行的唯一性标识符的候选键

      • 键是客观的概念,主键是主观的概念

例 下表中的键和主键是什么?

如果学校不允许重名,

则键为sid,(lname,fname).

可以任选一个作主键

如果学校允许重名呢?

武汉大学计算机学院

slide19
主键和实体完整性
  • 实体完整性规则

——表T中的任意行在主键列的取值都不允许为空

下面的理解中,哪个是正确的?

规则4.1 实体完整性规则 若属性A是基本关系R的主属性,则属性A不能取空值。

规则4.1 实体完整性规则 若属性A是基本关系R的主键属性,则属性A不能取空值。

规则4.1 实体完整性规则 任何主键属性都不能为空。

规则4.1 实体完整性规则 主键不能为空。

武汉大学计算机学院

slide20
主键和实体完整性
  • 什么操作可能破坏实体完整性规则?

假定关系R的主键为K,对R的操作有:检索和更新两大类。

      • 检索操作不可能破坏实体完整性规则
      • 更新操作:
        • 插入元组
        • 删除元组
        • 修改元组

(可能,当插入元组的主键属性为空时)

(不可能)

(可能,当修改元组的主键属性为空时)

(修改元组 = 删除元组 + 插入元组)

武汉大学计算机学院

slide21

enrollment

enrollment

sid

cno

major

first

sid

cno

major

time

1

101

No

Y

1

101

No

1

1

108

Yes

Y

1

108

Yes

1

2

105

No

Y

2

105

No

1

3

101

Yes

Y

3

101

Yes

1

3

108

No

Y

3

108

No

1

5

102

No

Y

5

102

No

1

5

105

No

Y

5

105

No

1

主键和实体完整性
  • 如何选择有效的主键?

enrollment

sid 为主键?

cno 为主键?

(sid,cno)为主键 ?

(sid,cno,major)为主键?

(sid,cno,first)为主键 ?

(sid,cno,time)为主键 ?

主键的选择可能决定系统的功能

武汉大学计算机学院

slide22
主键和实体完整性
  • 创建表时定义主键,DBMS自动支持实体完整性

定义表语句的基本语法

CREATE TABLE 〈表名〉

(<列名><数据类型>[NOT NULL│NULL] [UNIQUE]

[, <列名><数据类型>[NOT NULL│NULL] [UNIQUE]]…

[, PRIMARY KEY (<列名>[,<列名>] …)]

[, FOREIGN KEY (<列名>[,<列名>] …)REFERENCES

<被参照表名>]

);

武汉大学计算机学院

slide23
主键和实体完整性
  • 标准化
    • SQL-86
      • “数据库语言SQL”
    • SQL-89
      • “具有完整性增强的数据库语言SQL”,增加了对完整性约束的支持
    • SQL-92
      • “数据库语言SQL”,是SQL-89的超集,增加了许多新特性,如新的数据类型,更丰富的数据操作,更强的完整性、安全性支持等。
    • SQL-99
      • 正在讨论中的新的标准,将增加对面向对象模型的支持

武汉大学计算机学院

slide24
外键和

参照完整性

slide25

KS

KR

F

被参照的关系

参照关系

外键

R

S

外键和参照完整性
  • 外键

设F是基本关系R的一个或一组属性,但不是R的键。如果F与基本关系S的键KS相对应,则称F是R的外键(Foreign Key),并称R为参照关系(Referencing Relation),S为被参照关系(Referenced Relation)。关系R和S不一定是不同的关系。

武汉大学计算机学院

slide26
外键和参照完整性
  • 参照完整性规则

若属性(或属性组)F是基本关系R的外键,它与基本关系S的键KS相对应(关系R和S不一定是不同的关系),则对于R中每个元组在F上的值必须为:

(1)或者取空值(F的每个属性值均为空值);

(2)或者等于S中某个元组的主键值。

武汉大学计算机学院

slide27
外键和参照完整性
  • 实例

例1两个关系间

学生(学号,姓名,性别,专业号,年龄)

专业(专业号,专业名)

例2两个以上的关系间

学生(学号,姓名,性别,专业号,年龄)

课程(课程号,课程名,学分)

选修(学号,课程号,成绩)

例3同一关系

学生2(学号,姓名,性别,专业号,年龄,班长)

武汉大学计算机学院

slide28

KS

KR

F

被参照的关系

参照关系

外键

R

S

外键和参照完整性
  • 什么操作可能破坏参照完整性

武汉大学计算机学院

slide29
外键和参照完整性
  • 什么操作可能破坏参照完整性
      • 对被参照表的删除和更新操作
      • 对参照表的插入和更新操作

武汉大学计算机学院

slide30
外键和参照完整性
  • 创建表时定义外键,DBMS自动支持参照完整性

定义表语句的基本语法

CREATE TABLE 〈表名〉

(<列名><数据类型>[NOT NULL│NULL] [UNIQUE]

[, <列名><数据类型>[NOT NULL│NULL] [UNIQUE]]…

[, PRIMARY KEY (<列名>[,<列名>] …)]

[, FOREIGN KEY (<列名>[,<列名>] …)REFERENCES

<被参照表名>]

);

武汉大学计算机学院

slide31
外键和参照完整性
  • 实现参照完整性要考虑的几个问题:
  • 外键能否接受空值的问题
  • 在被参照关系中删除元组的问题

-- 级联删除、受限删除、置空值删除

  • 在参照关系中插入元组的问题

-- 受限插入、递归插入

  • 修改关系中主键的问题

-- 不允许修改主键、允许修改主键

slide32
外键和参照完整性
  • 参照完整性被破坏时可选择的策略

DBMS在实现参照完整性时,除了要提供定义主键、外键的机制外,还需要提供不同的策略供用户选择。根据应用环境的要求,选择策略(Full SQL-99):

      • NO ACTION
      • CASCADE
      • SET NULL
      • SET DEFAULT
      • RESTRICT
slide33
外键和参照完整性
  • 参照完整性约束被破坏时,系统支持的触发动作:
    • 在子表中用INSERT或UPDATE操作插入与父表中键值不匹配的外键值时

--- RESTRICT: 拒绝对子表进行的操作

    • 在父表中用DELETE或UPDATE操作删除父表与子表有匹配行的键值时

--- CASCADE:删除父表中的行,且删除子表中匹配的行

--- SET DEFAULT:删除父表中的行,且自动设置子表中的外键值为缺省值

--- SET NULL:删除父表中的行,且自动设置子表中的外键值为NULL

--- NO ACTION:拒绝对父表进行的操作。是默认的动作

武汉大学计算机学院

slide34
外键和参照完整性
  • 定义参照完整性约束时,分别对DELETE和UPDATE指定约束违背时的自动触发动作:

FOREIGN KEY (<列名>[,<列名>] …)REFERENCES <被参照表名>

[ON DELETE [CASCADE | SET DEFAULT | SET NULL | NO ACTION] ]

[ON UPDATE [CASCADE | SET DEFAULT | SET NULL |NO ACTION] ]

使用SET DEFAULT选项的前提是:在创建子表时对外键属性指定了DEFAULT值

武汉大学计算机学院

slide35
外键和参照完整性
  • 定义表语句的语法扩充

CREATE TABLE 〈表名〉

(<列名><数据类型>[NOT NULL│NULL] [UNIQUE] [DEFAULT 缺省值]

[, <列名><数据类型>[NOT NULL│NULL] [UNIQUE]] [DEFAULT 缺省值] …

[, PRIMARY KEY (<列名>[,<列名>] …)]

FOREIGN KEY (<列名>[,<列名>] …)REFERENCES <被参照表名>

[ON DELETE [CASCADE | SET DEFAULT | SET NULL | NO ACTION] ]

[ON UPDATE [CASCADE | SET DEFAULT | SET NULL |NO ACTION] ]

);

不同的实现对该版本的支持有区别

武汉大学计算机学院

slide37
非过程性约束的实现
  • Create Table语句中的完整性约束

基本Create Table语句的语法:

Create Table [schema.] tablename

( {columnname datatype [DEFAULT {default_constant | null}] [col_constr{col_constr …}] | table_constr}

{,{columnname datatype [DEFAULT {default_constant| null}] [col_constr{col_constr …}] | table_constr}

…});

slide38
非过程性约束的实现
  • Create Table语句中的列约束

约束单个列的 col_constr 形式如下:

{NOT NULL |

[CONSTRAINT constrainname]

UNIQUE

| PRIMARY KEY(< columnname >[,< columnname >] …)

| CHECK ( search_cond )

| FOREIGN KEY(< columnname >[,< columnname >] …) REFERENCES <tablename>

[ON DELETE [CASCADE | SET DEFAULT | SET NULL | NO ACTION] ]

[ON UPDATE [CASCADE | SET DEFAULT | SET NULL |NO ACTION] ]

}

slide39
非过程性约束的实现
  • Create Table语句中的列约束

约束单个列的 col_constr 实例如下:

--创建表:学生(学号,姓名,性别,专业,年龄)

其中,性别只能取’F’和’M’这两个值

CREATE TABLE S

( S# CHAR(8) NOT NULL UNIQUE,

SN CHAR(8) UNIQUE,

SE CHAR(1) CONSTRAINT S_SE CHECK(SE IN (‘F’, ‘M’)),

SA SMALLINT,

SD CHAR(4),

PRIMARY KEY(S#)

);

slide40
非过程性约束的实现
  • Create Table语句中的表约束

约束表的CHECK ( search_cond )实例如下:

--创建表:学生(学号,姓名,性别,专业,年龄)

其中,如果性别为男,姓名不能以Ms.开头

CREATE TABLE S

( S# CHAR(8) NOT NULL UNIQUE,

SN CHAR(8) UNIQUE,

SE CHAR(1) CONSTRAINT SSE CHECK(SE IN (‘F’, ‘M’)),

SA SMALLINT,

SD CHAR(4),

PRIMARY KEY(S#),

CHECK (SE = ‘F’ OR SN NOT LIKE ‘Ms.%’)

);

slide41
非过程性约束的实现
  • Alter Table语句

Alter Table 语句允许DBA改变原先在Create Table 语句中定义的表的结构,加入或改变列、加入或删除各种约束等。

约束的名字的用处:如果表约束被命了名,表所有者可以用这个名字DROP该约束。

slide42
非过程性约束的实现
  • Alter Table语句

ORACLE Alter Table

ALTER TABLE tblname

[ADD ({colname datatype [DEFAULT {default_const|NULL}]

[col_constr {col_constr...}]

| table_constr} -- choice of colname-def. or table_constr

{, ...})] -- zero or more added colname-defs. or table_constrs.

[DROP {COLUMN columnname | (columnname {, columnname…})}]

[MODIFY (columnname data-type [DEFAULT {default_const|NULL}] [[NOT] NULL]

{, . . .})] -- zero or more added colname-defs.

[DROP CONSTRAINT constr_name]

[DROP PRIMARY KEY]

[disk storage and other clauses (not covered, or deferred)]

[any clause above can be repeated, in any order]

[ENABLE and DISABLE clauses for constraints];

slide43
非过程性约束的实现
  • 用CREATE TABLE及ALTER TABLE实现非过程性约束
    • NOT NULL
    • UNIQUE
    • CHECK
    • PRIMARY KEY
    • FOREIGN KEY
slide45
过程性约束与触发器
  • 触发器

触发器(Trigger)就是一类靠事件驱动的特殊过程,一旦由某个用户定义,任何触发该触发器的事件发生时,均由服务器自动激活相应的触发器。

触发器包含三个要素:

      • 触发事件(条件)
      • 触发时机
      • 触发动作
slide46
过程性约束与触发器
  • 触发器
  • 触发器的定义
    • 指明什么条件下触发器被执行
    • 指明触发器执行的动作是什么
  • 触发器的作用
    • 示警
    • 满足特定条件时自动执行某项任务
  • 触发器事件
    • Insert、delete、update
slide47

{

}

create trigger trigger-name

insert

delete

update

{

}

[of column-name]

old row as identifier

new row as identifier

{

}

referencing

each row

{

}

for

each statement

when(search-condition)

{

}

begin atomic

triggered-SQL-statement

end

过程性约束与触发器

begin

after

  • 定义触发器的语句(Full SQL-99的Create Trigger语法)

on table-name

slide48
过程性约束与触发器
  • 用触发器实现过程性约束
    • 在定义触发器动作时,各DBMS产品用自己特定的过程性语言,不可能给出一个Create Trigger的”基本SQL”版本
    • 不同产品的Create Trigger形式中,非动作部分很相似;
    • 大部分DBMS,如SYSBASE、ORACLE和INFORMAX都提供包含常驻内存的变量、循环控制和if-then-else逻辑的过程语言的扩展.如SYSBASE、ORACLE和INFORMAX的T-SQL 、PL/SQL和SPL;DB2 UDB的过程扩展性少一些
slide49
过程性约束与触发器
  • ORACLE的Create Trigger语法

CREATE [OR REPLACE] TRIGGERtrigger_name {BEFORE | AFTER | INSTEAD OF}

{INSERT | DELETE | UPDATE [OF columnname{,columnname…}]}

ON tablename [REFERENCING corr_name_def {, corr_name_def…}]

[FOR EACH ROW | FOR EACH STATEMENT]

[WHEN (search_condition)]

| BEGIN ATOMIC statement; {statement; …} END ;

定义行的相关名字的corr_name_def 如下:

{OLD old_row_corr_name

| NEW new_row_corr_name}

slide50
过程性约束与触发器
  • 在ORACLE中,用触发器实现完整性约束

例,使用触发器来检查,在学生表中,新的学生行中,性别必须是’F’或’M’

create triggersse after insert on s

referencing new as x

for each row when x .se not in (‘F’, ‘M’)

begin

raise_application_error(-20003, ‘invalid discount attempted on insert’);

end ;

slide51
过程性约束与触发器

EMP(ENO, ENAME, SAL, JOB)

职工工资增幅不得超过10%

create triggerRAISE_LIMIT

after update ofSALonEMP

referencing new row asnrow old row asorow

for each row

when(nrow.SAL > 1.1 * orow.SAL)

begin atomic

signal SQLSTATE ‘7500’ (“Salary increase 10%)

end;

slide52
过程性约束与触发器

当帐户透支时,将帐户余额设为0,并建一笔贷款,其金额为透支额

create triggeroverdraft-trigger after update onaccount

referencing new row asnrow for each row

whennrow.balance < 0

begin atomic

insert intoborrower

(select customer-name, account-number

fromdepositor

wherenrow.account-number = depositor.account-number);

insert intoloan values(nrow.account-number,

nrow.branch-name, – nrow.balance);

updateaccount set balance = 0

where account.account-number = nrow.account-number

end

slide53
过程性约束与触发器
  • 非过程性约束与过程性约束的优缺点
    • Create Table语句中的非过程性约束的种类是有限的(CHECK约束,UNIQUE约束,PRIMARY KEY约束,FOREIGN KEY约束),因而能力是有限的,但容易理解;
    • 非过程性约束直接为系统所知;
    • 非过程性约束难以给出约束不满足时的相应动作;
    • 过程性约束的作用更大
      • 给出约束不满足时的相应动作
      • 保证事务的一致性(可以使一个更新操作在另一个执行之后自动发生)
slide54
视图的定义、

查询与更新

slide55
视图的定义、查询与更新
  • 视图的定义
    • 语法

视图可以从一张表、几张表或其他视图中创建。

CREATE VIEW 〈视图名〉[(〈列名〉[,〈列名〉] …)]

AS SELECT语句 [WITH CHECK OPTION];

若视图名后的列名表与SELECT保留字后的列名表相同,则视图名后的列名表可以省略。

若使用WITH CHECK OPTION,则对视图进行UPDATE和INSERT操作时,保证更新行满足视图定义中的WHERE子句指定的条件。

slide56
视图的定义、查询与更新
  • 视图的定义
    • 实例一

建立信息系学生的视图。

CREATE VIEW IS_S

AS

SELECT S# , SN ,SA

FROM S

WHERE SD = ‘IS’;

slide57
视图的定义、查询与更新
  • 视图的定义
    • 实例二

建立信息系学生的视图。并要求进行修改和插入操作时进入视图的只有信息系的学生信息。

CREATE VIEW IS_S

AS

SELECT S# , SN ,SA

FROM S

WHERE SD = ‘IS’

WITH CHECT OPTION;

slide58
视图的定义、查询与更新
  • 视图的定义
    • 实例三

将学生的学号及他的平均成绩定义为一个视图

CREATE VIEW S_G(S# , Gavg)

AS

SELECT S# ,AVG(G)

FROM SC

GROUP BY S# ;

slide59
视图的定义、查询与更新
  • 视图的删除

DROP VIEW 〈视图名〉;

● 视图是虚表,用DROP VIEW 语句删除视图时,只将数据字典中的视图的定义删除,对产生视图数据的基本表中的数据没有影响。

● 删除视图会产生级联删除。

slide60
视图的定义、查询与更新
  • 视图的查询

l视图定义后,用户可以象对基本表一样对视图进行查询。

l行列子集视图 ---- 若一个视图是从单个基本表导出的,并且只是去掉了基本表的某些行和列,但保留了键,则称这类视图为行列子集视图。

l视图消解(View Resolution)---- 执行对视图的查询时,从DD中取出视图的定义,将定义中的子查询和用户的查询结合起来,转换成等价的对基本表的查询的过程。

l目前关系数据库系统对视图消解的支持

slide61
视图的定义、查询与更新

实例:在信息系学生的视图中找出年龄小于20岁的学生。

SELECT S# , SA

FROM IS_S

WHERE SA < 20;

视图 IS_S 的定义为:

CREATE VIEW IS_S

AS

SELECT S# , SN ,SA

FROM S

WHERE SD = ‘IS’

WITH CHECT OPTION;

  • 视图的查询

本例转换后的查询语句为:

SELECT S# , SA

FROM S

WHERE SD = ‘IS’

AND SA < 20 ;

slide62
视图的定义、查询与更新

有些情况下,这种转换不能直接进行:

例11.在S_G视图中查询平均成绩在90分以上的学生学号和平均成绩。

SELECT *

FROM S_G

WHERE Gavg >= 90;

S_G视图定义为:

CREATE VIEW S_G(S# ,Gavg)

AS

SELECT S# ,AVG(G)

FROM SC

GROUP BY S# ;

简单转换为:

SELECT S# ,AVG(G)

FROM SC

WHERE AVG(G) >= 90

GROUP BY S# ;

  • 视图的查询

正确的转换应该是:

SELECT S# ,AVG(G)

FROM SC

GROUP BY S#

HAVING AVG(G) >= 90;

slide63
视图的定义、查询与更新
  • 视图的更新

l视图定义后,用户可以象对基本表一样对视图进行更新。

l不可更新的视图 (理论上不可更新的视图)---- 当有些视图的更新不能唯一地有意义地转换成对基本表的更新时,该视图是不可更新的

l一般地,行列子集视图是理论上可更新的

l不允许更新的视图 (各关系数据库系统对视图更新的支持程度不同 )

slide64
视图的定义、查询与更新
  • 视图的更新

实例:将信息系学生视图IS_S中学号为‘95002’的学生姓名改为‘刘辰’。

UPDATE IS_S

SET SN = ‘刘辰’

WHERE S# = ‘95002’;

转换后的更新语句为:

UPDATE S

SET SN = ‘刘辰’

WHERE S# = ‘95002’

AND SD = ‘IS’;

有些更新不能有意义地转换成对基本表S的更新:

例13. 将视图S_G中学号‘95001’的学生的平均成绩改为90分。

UPDATE S_G

SET Gavg = 90

WHERE S# = ‘95001’;

slide65
视图的定义、查询与更新
  • X/Open对可更新视图的子查询语句的限制
  • 子查询的FROM子句只包括一个表,而且如果该表为视图,则一定是可更新的视图;
  • 不出现GROUP BY和HAVING子句;
  • 没有使用DISTINCT关键字;
  • WHERE子句中,没有子查询直接或间接地通过视图引用FROM子句;
  • 所有由子查询得到的列名都是简单的(即没有类似于avg(x)或算术表达式),在不同的结果列中也没有列名重复出现。
slide67
视图的作用
  • 简化用户的操作
  • 使用户从多种角度看待同一数据
  • 视图对重构数据库提供了一定程度的逻辑独立性
  • 能够对机密数据提供安全保护
slide69
本 讲 主 要 目 标

学完本讲后,你应该能够了解:

  • DBMS的完整性控制的基本原理;
  • 完整性机制的实施会极大地影响系统性能;
  • 实现完整性约束的方法有非过程性的方法和过程性的方法,利用CREATE TABLE语句的列约束和表约束实现有限的非过程性地约束;利用触发器过程性地实现动态的约束;
  • 实体完整性和参照完整性的内容和使用;
  • 视图是虚表,一旦视图定义,可以象使用基本表一样操作视图,但并非所有的视图都是可更新的。
slide70
问 题 讨 论
  • 为什么完整性机制的实施会极大地影响系统性能?你将在数据库应用系统中实现所有的约束吗?
  • 视图的更新是否会破坏

完整性约束?

slide71
练 习
  • 7.1
  • 7.2
  • 7.6
  • 7.9