1 / 71

UNIT two 完整性与视图

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

hedy
Download Presentation

UNIT two 完整性与视图

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. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. UNIT two完整性与视图 武汉大学计算机学院

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

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

  4. 一.完整性控制的实现原理 二.完整性约束条件分类 三. 主键和实体完整性 四. 外键和参照完整性 五. 非过程性约束的实现 六. 过程性约束与触发器 七. 视图的定义、查询与更新 八. 视图的作用 内容提纲

  5. 完整性控制的 实现原理

  6. 完整性控制的实现原理 • 完整性控制定义 数据的完整性是为了防止数据库中存在不符合语义的数据,防止错误信息的输入和输出,即所谓垃圾进垃圾出所造成的无效操作和错误结果。 完整性约束条件 ---- 加在数据库数据之上的语义约束条件。 完整性控制---- DBMS中检查数据是否满足完整性条件的机制。

  7. 完整性规则 定义 完整性 约束 登记 DD 完整性规则 检查 用户发出 更新操作 请求 操作数据 DB DBMS的完整性子系统 完整性控制的实现原理 • 完整性控制子系统(过程性约束)

  8. 完整性控制的实现原理 • 完整性控制的功能 • 定义功能 -- 提供定义完整性约束条件的机制 • 检查功能 -- 在一定的时机,检查用户操作请求是否违背完整性约束条件 • 保证数据完整性功能 -- 如果发现用户操作请求使数据违背了完整性约束,则采取一定的动作来保证数据的完整性。

  9. 完整性控制的实现原理 • 完整性约束的检测时机 • 立即执行约束 -- 在一条语句执行完后立即检查 • 延迟执行约束 -- 完整性检查延迟到整个事务执行结束后再进行,检查正确方可提交。 当用户操作违背约束时,使用不同的检查时机是否影响处理方法? • 对于立即执行约束,系统将拒绝操作 • 对于延迟执行约束,系统将拒绝整个事务

  10. 完整性约束 条件分类

  11. 完整性约束条件分类 • 完整性约束条件的对象粒度 • 关系约束 -- 是若干元组间、关系集合上以及关系之间的联系的约束。 • 元组约束 -- 是元组中各个字段间的联系的约束。 • 列约束 -- 列的类型、取值范围、精度、排序等约束。

  12. 完整性约束条件分类 • 完整性约束条件的对象状态 • 静态约束 -- 指数据库每一确定状态时的数据对象所应满足的约束条件,它是反映数据库状态合理性的约束。 • 动态约束 -- 指数据库从一种状态转变为另一种状态时,新、旧值之间所应满足的约束条件,它是反映数据库状态变迁的约束。

  13. 对象状态 动态列级约束 动态元组约束 动态关系约束 动态 静态列级约束 静态元组约束 静态关系约束 静态 对象粒度 列 元组 关系 完整性约束条件分类 • 完整性约束条件分类

  14. 完整性约束条件分类 • 完整性约束条件分类

  15. 主键和 实体完整性

  16. 主键和实体完整性 • 超键 ——超键是能唯一区分任意两行数据的列或多个列 例,在表students中,通过哪些列可以区别不同的学生? sid lname fname students telephone (lname,fname) (lname,fname,telephone) 包含超键的多个列都是超键 (sid,fname) 武汉大学计算机学院

  17. 主键和实体完整性 • 键(候选键) ——给定一个表T,标题Head(T)=A1…An。表T的一个键,有时也称为候选键,是具有以下两个特征的一组属性的集合K=Ai1…Aik: • 如果u,v是T中两个不同的元组,则u[K]≠v[K]; • 没有K的真子集H具有特征1)。 • 表在某一时刻的内容无法告诉我们表中的键是什么 • 每个表都至少有一个键 武汉大学计算机学院

  18. 主键和实体完整性 • 主键 ——主键是被数据库设计者选择出来作为表T的行的唯一性标识符的候选键 • 键是客观的概念,主键是主观的概念 例 下表中的键和主键是什么? 如果学校不允许重名, 则键为sid,(lname,fname). 可以任选一个作主键 如果学校允许重名呢? 武汉大学计算机学院

  19. 主键和实体完整性 • 实体完整性规则 ——表T中的任意行在主键列的取值都不允许为空 下面的理解中,哪个是正确的? 规则4.1 实体完整性规则 若属性A是基本关系R的主属性,则属性A不能取空值。 规则4.1 实体完整性规则 若属性A是基本关系R的主键属性,则属性A不能取空值。 规则4.1 实体完整性规则 任何主键属性都不能为空。 规则4.1 实体完整性规则 主键不能为空。 ? √ √ ╳ 武汉大学计算机学院

  20. 主键和实体完整性 • 什么操作可能破坏实体完整性规则? 假定关系R的主键为K,对R的操作有:检索和更新两大类。 • 检索操作不可能破坏实体完整性规则 • 更新操作: • 插入元组 • 删除元组 • 修改元组 (可能,当插入元组的主键属性为空时) (不可能) (可能,当修改元组的主键属性为空时) (修改元组 = 删除元组 + 插入元组) 武汉大学计算机学院

  21. 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)为主键 ?  主键的选择可能决定系统的功能   武汉大学计算机学院

  22. 主键和实体完整性 • 创建表时定义主键,DBMS自动支持实体完整性 定义表语句的基本语法 CREATE TABLE 〈表名〉 ( (<列名><数据类型>[NOT NULL│NULL] [UNIQUE] [, <列名><数据类型>[NOT NULL│NULL] [UNIQUE]]… [, PRIMARY KEY (<列名>[,<列名>] …)] [, FOREIGN KEY (<列名>[,<列名>] …)REFERENCES <被参照表名>] ); 武汉大学计算机学院

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

  24. 外键和 参照完整性

  25. KS KR F 被参照的关系 参照关系 外键 R S 外键和参照完整性 • 外键 设F是基本关系R的一个或一组属性,但不是R的键。如果F与基本关系S的键KS相对应,则称F是R的外键(Foreign Key),并称R为参照关系(Referencing Relation),S为被参照关系(Referenced Relation)。关系R和S不一定是不同的关系。 武汉大学计算机学院

  26. 外键和参照完整性 • 参照完整性规则 若属性(或属性组)F是基本关系R的外键,它与基本关系S的键KS相对应(关系R和S不一定是不同的关系),则对于R中每个元组在F上的值必须为: (1)或者取空值(F的每个属性值均为空值); (2)或者等于S中某个元组的主键值。 武汉大学计算机学院

  27. 外键和参照完整性 • 实例 例1两个关系间 学生(学号,姓名,性别,专业号,年龄) 专业(专业号,专业名) 例2两个以上的关系间 学生(学号,姓名,性别,专业号,年龄) 课程(课程号,课程名,学分) 选修(学号,课程号,成绩) 例3同一关系 学生2(学号,姓名,性别,专业号,年龄,班长) 武汉大学计算机学院

  28. KS KR F 被参照的关系 参照关系 外键 R S 外键和参照完整性 • 什么操作可能破坏参照完整性 武汉大学计算机学院

  29. 外键和参照完整性 • 什么操作可能破坏参照完整性 • 对被参照表的删除和更新操作 • 对参照表的插入和更新操作 武汉大学计算机学院

  30. 外键和参照完整性 • 创建表时定义外键,DBMS自动支持参照完整性 定义表语句的基本语法 CREATE TABLE 〈表名〉 ( (<列名><数据类型>[NOT NULL│NULL] [UNIQUE] [, <列名><数据类型>[NOT NULL│NULL] [UNIQUE]]… [, PRIMARY KEY (<列名>[,<列名>] …)] [, FOREIGN KEY (<列名>[,<列名>] …)REFERENCES <被参照表名>] ); 武汉大学计算机学院

  31. 外键和参照完整性 • 实现参照完整性要考虑的几个问题: • 外键能否接受空值的问题 • 在被参照关系中删除元组的问题 -- 级联删除、受限删除、置空值删除 • 在参照关系中插入元组的问题 -- 受限插入、递归插入 • 修改关系中主键的问题 -- 不允许修改主键、允许修改主键

  32. 外键和参照完整性 • 参照完整性被破坏时可选择的策略 DBMS在实现参照完整性时,除了要提供定义主键、外键的机制外,还需要提供不同的策略供用户选择。根据应用环境的要求,选择策略(Full SQL-99): • NO ACTION • CASCADE • SET NULL • SET DEFAULT • RESTRICT

  33. 外键和参照完整性 • 参照完整性约束被破坏时,系统支持的触发动作: • 在子表中用INSERT或UPDATE操作插入与父表中键值不匹配的外键值时 --- RESTRICT: 拒绝对子表进行的操作 • 在父表中用DELETE或UPDATE操作删除父表与子表有匹配行的键值时 --- CASCADE:删除父表中的行,且删除子表中匹配的行 --- SET DEFAULT:删除父表中的行,且自动设置子表中的外键值为缺省值 --- SET NULL:删除父表中的行,且自动设置子表中的外键值为NULL --- NO ACTION:拒绝对父表进行的操作。是默认的动作 武汉大学计算机学院

  34. 外键和参照完整性 • 定义参照完整性约束时,分别对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值 武汉大学计算机学院

  35. 外键和参照完整性 • 定义表语句的语法扩充 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] ] ); 不同的实现对该版本的支持有区别 武汉大学计算机学院

  36. 非过程性约束 的实现

  37. 非过程性约束的实现 • 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} …});

  38. 非过程性约束的实现 • 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] ] }

  39. 非过程性约束的实现 • 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#) );

  40. 非过程性约束的实现 • 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.%’) );

  41. 非过程性约束的实现 • Alter Table语句 Alter Table 语句允许DBA改变原先在Create Table 语句中定义的表的结构,加入或改变列、加入或删除各种约束等。 约束的名字的用处:如果表约束被命了名,表所有者可以用这个名字DROP该约束。

  42. 非过程性约束的实现 • 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];

  43. 非过程性约束的实现 • 用CREATE TABLE及ALTER TABLE实现非过程性约束 • NOT NULL • UNIQUE • CHECK • PRIMARY KEY • FOREIGN KEY

  44. 过程性约束与 触发器

  45. 过程性约束与触发器 • 触发器 触发器(Trigger)就是一类靠事件驱动的特殊过程,一旦由某个用户定义,任何触发该触发器的事件发生时,均由服务器自动激活相应的触发器。 触发器包含三个要素: • 触发事件(条件) • 触发时机 • 触发动作

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

  47. { } 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

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

  49. 过程性约束与触发器 • 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}

  50. 过程性约束与触发器 • 在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 ;

More Related