数据库系统和应用12.ppt
文本预览下载声明
第十二章 数据库完整性; 数据库的完整性(Integrity):
数据库的完整性是指保证数据库中数据的正确性(Correctness)、准确性(Accuracy)和有效性(Validity),防止不合语义的数据进入数据库。 ;例如:学生的年龄必须是整数,取值范围为14-29;
学生的性别只能是男或女;
学生的学号一定是唯一的;
学生所在的系必须是学校开设的系;; 为维护数据库的完整性,DBMS必须提供一种机制来检查数据库的完整性,看其是否满足语义规定的条件。
DBMS中检查数据是否满足完整性条件的机制称为完整性检查。 ; 现代数据库技术采用对数据完整性的语义约束和检查来保护数据库的完整性,其实现方式有两种:一种是通过定义和使用完整性约束规则(系统定义),另一种是通过触发器(Trigger)和存储过程(Stored Procedure)(用户自定义)等过程来实现。 ; 完整性子系统:负责处理数据库的完整性语义约束的定义和检查,防止因错误的更新操作产生的不一致性。用户可以使用完整性保护机制,对某些数据规定一些语义约束。
当进行数据操作时,DBMS就由某个完整性语义约束的触发条件激发相应的检查程序,进行完整性语义约束检查。
若发现错误的更新操作,立即采取措施处理,或是拒绝执行该更新操作,或是发出警告信息,或者纠正已产生的错误。 ; DBMS的完整性子系统是负责数据库的完整性控制的。它具有3个功能:
完整性约束条件定义机制
完整性检查机制
违约反应 ; 完整性约束条件:数据模型的组成部分,约束数据库中数据的语义。
DBMS应提供定义数据库完整性约束条件的机制,并把它们作为模式的一部分存入数据库中。
一般由SQL的DDL语句来实现。; 检查用户发出的操作请求是否违背了完整性约束条件的方法; 如果发现用户的操作请求使数据违背了完整性约束条件,则采取一定的动作,如拒绝用户执行该操作,来保证数据的完整性。;12.1 完整性规则; 一个完整性约束条件可以看作是一个谓词(Predicate),所有正确的保持完整性的数据库状态都应当满足这个谓词。
例如,SCORE.GRADE≥0。
规则的触发条件规定何时使用该规则做检查。
“ELSE子句”规定当完整性约束条件不满足时须做的操作。; 完整性约束条件作用的对象可以是关系、元组和列三种。
属性(列)约束:列的类型、取值范围、精度、排序等约束;
元组约束:元组中各个属性列间的联系的约束;
关系约束:若干元组间、关系集合上以及关系之间的联系的约束; ; 在关系数据库中,数据的完整性规则一般有以下类型。
域完整性规则:定义属性的取值范围;
关系完整性规则:定义更新操作对数据库中的值的影响和限制;
实体完整性约束:定义在一个关系中,主属性不能取空值
参照完整性约束:定义在一个或多个关系中,属性值间的联系、影响和约束。; 这些规则是用DDL描述的,一旦一条完整性规则输入给系统,系统就开始执行这条规则。这种方法的主要优点是由系统处理违反规则的情况,而不是由用户处理。其次,规则集中存放在数据字典中,当需要修改时,可以很方便地修改。 ; 定义域约束规定某个属性的值必须符合某种数据类型并且取自某个数据定义域。域完整性约束施加于单个数据上。
0≤人的年龄≤150
仓库库存量≥0
0≤一个月的工作天数≤31
长途电话号码格式为999-9999999; 对关系的完整性进行约束的主要目的是维持用户规定的函数依赖。例如,如果用户定义了下列函数依赖:NAME→ADDRESS。 ; 主码(主关键字)是实体完整性约束(Entity Constraint)。; 外码(外部关键字)是参照完整性约束(Referential Constraint)的一个典型例子。 ; 数据库的完整性约束可以分为两种类型。
静态约束(Static Constraint)
动态约束(Dynamic Constraint); 静态约束:是对数据库状态的约束,即是指数据库每一确定状态时的数据对象所应满足的约束条件,反映数据库状态合理性的约束,这是最重要的一类完整性约束。
例如,在一个人事管理数据库的任何一个状态都必须满足条件 “0≤人的年龄≤150”。 ; 动态约束:是指数据库从一种状态转变为另一种状态时,新、旧值之间所应满足的约束条件,反映数据库状态变迁的约束。
例如,一个人的年龄只会增加,不会减少,更新年龄数据时必须满足此约束。;
显示全部