资源描述
数据库原理及应用,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第8章 数据库完整性及,SQL Server,的完整性控制,8.1 完整性约束条件及完整性控制,8.2,SQL Server,的数据完整性及其实现,8.3 案例6:活期储蓄管理系统,数据库的完整性控制,9/30/2024,数据库的完整性是指数据的,正确性、有效性,和,相容性,,防止错误数据进入数据库,保证数据库中数据的质量。正确性是指数据的合法性;有效性是指数据是否属于所定义的有效范围;相容性是指描述同一现实的数据应该相同。数据库是否具备完整性涉及到数据库系统中的数据是否正确、可信和一致,保持数据库的完整性是非常重要的。,9/30/2024,8.1 完整性约束条件及完整性控制,为了保证数据库的完整性,,DBMS,必须提供一种功能来保证数据库中的数据是正确的,避免由于不符合语义的错误数据的输入和输出。检查数据库中数据是否满足规定的条件称为“完整性检查”。数据库中数据应满足的条件称为“完整性约束条件”,有时也称为完整性规则。,完整性控制,DBMS,中执行完整性检查的子系统称为“完整性子系统”。它的主要功能有:,定义完整性功能,即提供定义完整性约束条件的机制。,检查完整性功能,即检查用户发出的操作请求,看其是否违背了完整性约束条件。,控制完整性功能,即监视数据操作的整个过程,如果发现有违背了完整性约束条件的情况,则采取一定的动作来保证数据的完整性。,9/30/2024,完整性规则,完整性子系统是根据“完整性规则集”工作的。完整性规则集是由,DBA,或应用程序员事先向完整性子系统提出的有关数据约束的一组规则。,每个完整性规则有三个部分组成:,(1)什么时候使用规则进行检查(称为规则的“触发条件”);,(2)要检查什么样的错误(称为“约束条件”);,(3)若检查出错误,应该怎样处理(称为“,ELSE”,子句)。,9/30/2024,RDBMS,中的完整性规则,在,RDBMS,中,完整性规则分为三类:,域完整性规则,域完整性规则是使基本表的列输入有效。域完整性主要由用户定义的完整性组成。,控制域完整性有效的方法有:限制数据类型、格式、可能的取值范围、修改列值时必须满足的条件等。,实体完整性规则,实体完整性规则用来约束现实世界中的实体是可区分的,即它们具有惟一性标识。这一规则在关系模型中的体现是基本表所有主属性都不能取空值(,NULL)。,参照完整性规则,参照完整性规则用来约束具有参照关系的两个表中,主码和外码的数据要保持一致。,9/30/2024,8.2,SQL Server,的数据完整性及其实现,SQL Server,具有较健全的数据完整性控制机制,它使用,约束、默认、规则,和,触发器,4种方法定义和实施数据库完整性功能。,8.2.1,SQL Server,中的几种约束,SQL Server,的数据完整性种类,SQL Server 2000,中的数据完整性包括域完整性、实体完整性和参照完整性3种。,域完整性,域完整性为列级和元组级完整性。它为列或列组指定一个有效的数据集,并确定该列是否允许为空值(,NULL)。,实体完整性,实体完整性为表级完整性,它要求表中所有的元组都应该有一个惟一标识,即主关键字。,参照完整性,参照完整性是表级完整性,它维护从表中的外码与主表中主码的相容关系。,9/30/2024,SQL Server,数据完整性方式,SQL Server,使用声明数据完整性和过程数据完整性两种,方式实现数据完整性。,声明数据完整性,声明数据完整性通过在对象定义中定义、系统本身自动强制来实现。声明数据完整性包括各种约束、默认和规则。,过程数据完整性,过程数据完整性通过使用脚本语言(,Transact-SQL),定义,系统在执行这些语言时强制实现数据完整性。过程数据完整性包括触发器和存储过程等。,SQL Server,实现数据完整性的具体方法,SQL Server,实现数据完整性的主要方法有4种:约束、默认、规则和触发器。,约束,约束通过限制列中的数据、行中的数据和表之间数据来保证数据完整性。,9/30/2024,表8-1,SQL Server 2000,约束的5种类型和其完整性功能,完整性类型,约束类型,完整性功能描述,域完整性,DEFAULT(,默认),插入数据时,如果没有明确提供列值,则用默认值作为该列的值,CHECK(,检查),指定某个列或列组可以接受值的范围,或指定数据应满足的条件,实体完整性,PRIMARY KEY(,主码),指定主码,确保主码不重复,不允许主码为空值,UNIQUE(,惟一值),指出数据应具有惟一值,防止出现冗余,参照完整性,FOREIGN KEY(,外码),定义外码、被参照表和其主码,9/30/2024,使用,CREATE,语句创建约束的语法形式如下:,CREATE TABLE(,,n,,,n),其中,的格式和内容为:,CONSTRAINT,PRIMARY KEYCLUSTERED|NONCLUSTERED,|UNIQUECLUSTERED|NONCLUSTERED,|FOREIGN KEYREFERENCES(),|,DEFAULT|,CHECK,9/30/2024,的格式和内容为:,CONSTRAINT,PRIMARY KEYCLUSTERED|NONCLUSTERED(),|,UNIQUECLUSTERED|NONCLUSTERED(),|,FOREIGN KEY(),REFERENCES(,被参照表)(),|,CHECK(),9/30/2024,触发器,触发器是一种功能强、开销高的数据完整性方法。触发器具有,INSERT、UPDATE,和,DELETE,三种类型。一个表可以具有多个触发器。,触发器的用途是维护行级数据的完整性。与,CHECK,约束相比,触发器能强制实现更加复杂的数据完整性,能执行操作或级联操作,能实现多行数据间的完整性约束,能按定义动态的、实时的维护相关的数据。,默认和规则,默认(,DEFAULT),和规则(,RULE),都是数据库对象。当它们被创建后,可以绑定到一列或几列上,并可以反复使用。当使用,INSERT,语句向表中插人数据时,如果有绑定,DEFAULT,的列,系统就会将,DEFAUTLT,指定的数据插入;如果有绑定,RULE,的列,则所插入的数据必须符合,RULE,的要求。,9/30/2024,8.2.2 默认,默认是一种数据库对象,可以绑定到一列或多列上,也可以绑定到用户自定义的数据类型上,其作用类似于,DEFAULT,约束,能为,INSERT,语句中没有指定数据的列提供事先定义的默认值。默认值可以是常量、内置函数或数学表达式。,默认对象在功能上与默认约束是一样的,但在使用上有所区别。默认约束在,CREATE TABLE,或,ALTER TABLE,语句中定义后,被嵌入到定义的表的结构中。也就是说,在删除表的时候默认约束也将随之被删除。而默认对象需要用,CREATE DEFAULT,语句进行定义,作为一种单独存储的数据库对象,它是独立于表的,删除表并不能删除默认对象,需要使用,DROP DEFAULT,语句删除默认对象。,9/30/2024,创建默认,使用,T-SQL,语句,CREATE DEFAULT,语句可以创建默认对象。,语法如下:,CREATE DEFAULT default,AS constant_expression,其中,,default,为默认对象的名称;,constant_expression,为常量表达式。常量表达式中可以包括常量、内置函数或数学表达式,但不能包括任何列名或其它数据库对象。,【例8-1】,在数据库,MyDb,中创建默认对象,borrow_time,,其值为当前系统日期。,CREATE DEFAULT borrow_time AS,getdate,(),9/30/2024,绑定默认,默认对象创建后,并不能直接使用,必须绑定到指定表的某一列或者用户定义的数据类型上。执行系统存储过程,sp_,bindefault,可以将默认绑定到列或者用户定义的数据类型上。,系统存储过程,sp_,bindefault,的语法为:,sp_,bindefault,default,object_name,【,例8-2】,将【例8-1】中创建的默认对象,borrow_time,绑定到数据库,MyDB,中,borrowinf,表的借期列上,使用如下代码:,EXEC sp_,bindefault,borrow_time,borrowinf,.,借期,注意:,若该表创建时已有默认约束,应先删除,再绑定。,9/30/2024,查看默认,在企业管理器中,展开【数据库】的【默认】目录,可以看到数据库中所有的默认对象,如图8-1所示。,图8-1查看数据库,MyDb,中的默认对象,9/30/2024,使用系统存储过程,sp_help,可以查看默认对象的名称、拥有者等基本信息。使用系统存储过程,sp_,helptext,可以查看默认对象的定义。,解除默认和删除默认,使用,DROP DEFAULT,语句可以删除当前数据库中的默认对象。,但在删除之前,应该先使用系统存储过程,sp_,unbindefault,来解除该默认对象在列或用户自定义数据类型上的绑定。,调用系统存储过程,sp_,unbindefault,,,解除默认的语法为:,sp_,unbindefault,object_name,futurnonly,_flag,解除默认对象的绑定后,默认对象并没有消失,仍然在数据库中。,9/30/2024,【例8-3】,解除绑定在,borrowinf,表的借期列上的默认对象。,执行如下代码:,USE,MyDb,EXEC sp_,unbindefault,borrowinf,.,借期,删除默认对象语句,DROP DEFAULT,的语法是:,DROP DEFAULT object_name,【,例8-4】,删除绑定在表,borrowinf,的“借期”列上的默认对象。可使用如下代码:,EXEC sp_,unbindefault,borrowinf,.,借期,DROP DEFAULT borrow_time,9/30/2024,8.2.3 规则,规则也是一种数据库对象,与默认的使用方法类似,规则可以绑定到表的一列或多列上,也可以绑定到用户定义的数据类型上。它的作用与,CHECK,约束的部分功能相同,为,INSERT,和,UPDATE,语句限制输入数据的取值范围。,规则与,CHECK,约束的不同之处在于:,CHECK,约束是在使用,CREATE TABLE,语句建表时指定的,而规则是作为独立于表的数据库对象,通过与指定表或数据类型绑定来实现完整性约束。,在一列上只能使用一个规则,但可以使用多个,CHECK,约束。,规则可以应用于多个列,还可以应用于用户自定义的数据类型,而,CHECK,约束只能应用于它定义的列。,9/30/2024,创建规则,使用,T-SQL,语句,CREATE RULE,可以创建规则,语法如下:,CREATE RULE rule,AS condition_expression,其中,,rule:,为规则的名称;,condition_expression:,为一个条件表达式,用来指定满 足规则的条件。,【例8-5】,在,MyDb,数据库上定义规则,使用了该规则的列被限制为必须大于0。,CREATE RULE range_rule,AS,value0,9/30/2024,绑定和解除规则,规则创建后,需要将其绑定到表的列上或用户自定义数据类型上。当向绑定了规则的列或列的数据类型为绑定规则的用户自定义数据类型的列插入或更新数据时,新的数据必须符合规则。,使用系统存储过程,sp_,bindrule,可以将规则绑定到列或用户自定义数据类型上。语法如下:,sp_,bindrule,rule,object_name,futureonly,_flag,其中,,rule:,为规则的名称。,object_na
展开阅读全文