资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第4章 数据完整性的设计与实现,本章学习目标,掌握数据完整性的分类;,掌握如何创建主键约束;,掌握设置惟一性约束的方法;,掌握设置默认约束的方法;,掌握设置检查约束的方法;,掌握设置外键约束的方法。,4.1 概 述,数据的完整性主要涉及以下几个方面:,(1)实体完整性。,(2)域完整性。,(3)参照完整性。,(4)用户定义的完整性。,本章主要介绍前三种数据完整性的设计与实现方法。,完整性的概念,之所以要引入数据完整性是为了在数据的添加、删除、修改等操作中不出现数据的破坏或多个表数据不一致,数据完整性是指存储在数据库中的数据正确无误并且相关数据具有一致性,完整性的类型,实体完整性,实体,:表中的记录,一个实体就是指表中的一条记录。,实体完整性,:在表中不能存在完全相同的记录,且每条记录都要具有一个非空且不重复的主键值。,实现实体完整性的方法:,设置主键、惟一索引、惟一约束、指定IDENTITY属性,完整性的类型,域完整性,域完整性,:向表中添加的数据必须与数据类型、格式及有效的数据长度相匹配。,实现实体完整性的方法:,CHECK约束、外键约束、默认约束、非空定义、规则以及在建表时设置的数据类型,约束的类型,约束:,SQL Server提供的自动强制数据完整性的一种方法。它通过定义列的取值规则来维护数据的完整性。,常用约束,:,NOT NULL,CHECK、UNIQUE、PRIMARY KEY、FOREIGN KEY、DEFAULT,约束的类型,主键约束:,在表中定义一个主键来惟一标识表中的每行记录,特点,:,每个表中只能有一个主键,主键可是一列,也可是多列;主键不能为空;主键值不能重复;,约束的类型,UNIQUE约束:,它主要用来限制表的非主键列中的值不能重复。,特点,:,一个表中可以定义多个惟一约束,约束的类型,NOT NULL约束:,它用来设定某列值不能为空。,特点,:如果设定某列为NOT NULL,则在添加记录时,则此列必须插入数据。,约束的类型,CHECK约束:,它使用逻辑表达式来限制表中的列可以接受哪些数据值。,例如,:成绩值应该在0-100之间,则可以为成绩字段创建CHECK约束,使取值在正常范围内。,约束的类型,DEFAULT约束:,它为表中某列建立一个默认值,当为表中添加记录时,如果没有提供输入值,则自动以默认值赋给该列。,特点,:默认值可以为常量、函数或表达式。使用默认值可以提高数据输入的速度。,约束的类型,FOREIGN KEY约束,外键:,是指一个表中的一列或列组合,它虽不是该表的主键,但是另一个表的主键。,特点,:实现两表之间相关数据的一致性。,返回,约束的创建,创建约束的时间:,在建表的同时进行创建,也可在已存在的表上创建。,如何创建:,在企业管理器中创建,或在查询分析器中用SQL命令创建,4.2 实体完整性的设计与实现,实体完整性要求数据表中的每一行在表中是惟一的实体。采用以下三种方式,即主键约束、IDENTITY属性和惟一性约束。,4.2.1 主键约束,通过定义主键,能够惟一地确定表中的每一条记录。定义为主键的列不允许为空,且image和text类型的列不能被指定为主键。可以将数据表中的一列或多列的组合定义为主键。,1通过企业管理器管理主键约束,例4-1,在“图书基本信息表”中为“图书编码”字段设置主键约束。,2使用Transact-SQL语句设置主键约束,CONSTRAINT constraint_name,PRIMARY KEY CLUSTERED|NONCLUSTERED,(column_name,n),2使用Transact-SQL语句设置主键约束,其中各参数的说明如下:,constraint_name:,用于指定约束的名称,约束的名称在数据库中应该是惟一的。如果不指定,则系统会自动生成一个约束名。,2使用Transact-SQL语句设置主键约束,CLUSTERED|NONCLUSTERED:,用于指定索引的类型,即聚簇索引或者非聚簇索引,,CLUSTERED,为默认值。,column_name:,用于指定主键的列名。主键最多由16个列组成。,2使用Transact-SQL语句设置主键约束,例4-2,重新创建“读者基本信息表”,并为其中的“读者编号”字段设置主键约束。,create table memberinfo(memberid char(12)not null primary key,memname char(10)null,memphone char(11)null),或者已建好表后,使用:,Alter table memberinfo add constraint xx primary key(memberid,memname),4.2.2 IDENTITY属性,可以使用IDENTITY属性来实现实体完整性。方法是在数据表中创建一个标识列,该标识列中的数据由系统自动生成。,1通过企业管理器管理,IDENTITY,属性,例4-3,使用企业管理器创建一个新的数据表,TEMP1,,包含4个字段:图书编码、书名、作者、出版社,并将图书编号字段设置成一个标识列,列中的数据从1开始,每次增加1。,2使用Transact-SQL语句设置IDENTITY属性,使用,Transact-SQL,语句设置,IDENTITY,属性的语法形式如下:,IDENTITY(,种子,递增量),其中,“种子”是初始值;“递增量”是每次增加的数值。,说明:,必须同时指定种子和递增量,或者二者都不指定。如果二者都未指定,则默认为(1,1)。,2使用Transact-SQL语句设置IDENTITY属性,例4-4,使用,Transact-SQL,语句创建一个新的数据表,TEMP2,,包含4个字段:图书编码、书名、作者、出版社,并将图书编码字段设置成一个标识列,列中的数据从3开始,每次增加2。,create table temp2(,图书编号,int not null identity(3,2),书名,char(50),作者,char(20),出版社,char(50),4.2.3 惟一性约束,惟一性约束可以指定一个或多个字段列的组合值具有惟一性,即不会出现重复的值。在一个数据表中可以为多个字段或字段的组合设置惟一性约束。,1通过企业管理器管理惟一性约束,例4-5,使用企业管理器在“图书基本信息表”中为“书名”和“作者”两个字段的组合字段设置惟一性约束。,在表设计器中,右击选择属性,选择,索引,/,键,选项卡。选择,新建,命令。系统分配的名称出现在,索引名,框中。在,列名,下展开列的列表,选择要将约束附加到的列。若要将约束附加到多个列,在后续行中选择其它的列。选择,创建,UNIQUE,复选框。选择,约束,选项。,2使用Transact-SQL语句设置惟一性约束,使用Transact-SQL语句设置惟一性约束的语法形式如下:,CONSTRAINT constraint_name,UNIQUE CLUSTERED|NONCLUSTERED,(column_name,n),2使用Transact-SQL语句设置惟一性约束,各参数说明如下:,constraint_name:惟一性约束的名称。,UNIQUE:指定通过惟一索引为给定的一列或多列提供实体完整性约束。,CLUSTERED:指定创建聚集索引。,NONCLUSTERED:指定创建非聚集索引。,2使用Transact-SQL语句设置惟一性约束,例4-6,使用,Transact-SQL,语句创建一个新的数据表“图书基本信息表2”,并为“书名”和“作者”两个字段的组合字段设置惟一性约束。,create table temp4(,图书编号,int not null,书名,char(50)not null,作者,char(20)not null constraint yy unique(,书名,作者,),出版社,char(50),4.3 域完整性的设计与实现,域完整性是用来保证在数据表中输入有效的数据值。域完整性可以通过定义字段的数据类型、设置字段非空、检查约束、默认约束和规则来实现。,4.3.1 默认约束,默认约束完成的功能是对于设置了默认约束的字段,如果在录入记录时没有提供输入值,则系统会自动为该字段填入默认值。,默认值可以是常量、函数或者空值。,1使用企业管理器管理默认约束,例4-7,在“图书基本信息表”中为“类别”字段设置默认约束“计算机”。,2使用Transact-SQL语句设置默认约束,可以使用,DEFAULT,关键字来指定某个字段的默认值。,例4-8,创建“图书基本信息表3”,并为“类别”字段设置默认约束“计算机”。,create table 图书基本信息表3(,图书编号,int not null,书名,char(50)not null,作者,char(20)not null constraint tt unique(,书名,作者,),出版社,char(50),类别,char(20)default,计算机,),4.3.2 检查约束,设置检查约束的目的是对输入的数据值进行检查,满足条件的数据可以保存在数据表中,对于不满足条件的数据则拒绝接受。在某一个数据表中,对于每一个字段可以设置多个检查约束。,1使用企业管理器管理检查约束,例4-9,使用企业管理器在“图书基本信息表”中为“定价”字段设置检查约束,要求输入的数据必须大于0。,在表设计器中,右击选择check约束,2使用Transact-SQL语句设置检查约束,使用Transact-SQL语句设置检查约束的语法形式如下:,CONSTRAINT constraint_name,CHECK NOT FOR REPLICATION,(logical_expression),2使用Transact-SQL语句设置检查约束,其中,参数NOT FOR REPLICATION用于指定在把从其他表中复制的数据插入到表中时检查约束对其不发生作用。logical_expression用于指定逻辑表达式,返回值为TRUE或者FALSE。,2使用Transact-SQL语句设置检查约束,例4-10,创建“图书基本信息表4”,并为“定价”字段设置检查约束,条件为此字段不能输入小于0的数据。,create table 图书基本信息表4(,图书编号,int not null,书名,char(50),作者,char(20),定价,real check(,定价,0),出版社,char(50),类别,char(20)default,计算机,),4.3.3 规则,规则是对存储在数据表中的数据值的规定和限制。规则的功能与CHECK约束的功能相似,但规则是作为一个独立的数据库对象存储在数据库中的,使用规则的好处是可以只创建一次,然后可以绑定到多个字段上。对于数据表中的一个字段列,只能应用一个规则。,1使用企业管理器管理规则,例4-11,使用企业管理器创建一个新的规则“,RULE_,大于0”,要求数据必须大于0。并将之绑定在“图书基本信息表”中的“定价”字段上。,在数据库中创建规则,规则文本的写法:,id0,2使用Transact-SQL语句设置规则,例4-12,使用,Transact-SQL,语句创建一个新的规则“,RL_,大于等于0”,要求输入的数据必须满足“大于或等于0”的条件。并将之绑定在“图书基本信息表2”中的“定价”字段上。,CREATE RULE id_chk AS id=0,GO,Exec sp_bindrule id_chk,图书基本信息表2.定价,GO,2使用Transact-SQL语句设置规则,A.范围规则,下例创建一个规则,用以限制插入该规则所绑定的列中的整数范围。,CREATE RULE range_rule AS range=$1000 AND range$20000,B.列表规则,下例创建一个规则,用以将输入到该规则所绑定的列中的实际值限制为只能是该规则中列出的值。,CREATE RULE list_rule AS list IN(1389,0736,0877),C.模式规则,下例创建一个遵循这种模式的规则:任意两个字符的后面跟一个连字符和任意多个字符(或没有字符),并以 0 到 9 之间的整数结尾。,CREATE RULE pattern_rule AS value LIKE _ _-%0-9,2使用Transact-SQL语句设置规则,例4-13,使用,Transact-SQL,语句取消对规则“,RL_,大于等于0”在“定价”字段上的绑定,并删除此规则。,exec sp_unbindrule 图书基本信息表2.,定价,Drop rule id_chk,4.4 参照完整性的设计与实现,设置参照完整性是为了保证数据表之间的数据保持一致,通过在两个数据表之间的主键和外键之间或惟一键和外键之间建立外键约束来实现。,1使用企业管理器管理外键约束,例4-14,使用企业管理器创建一个外键约束,使得“图书借阅信息表”中的“图书编码”字段的值必须来源于“图书基本信息表”中的“图书编码”字段的值。,在表设计器中,在工具栏中找到“管理关系”点击进入。(如下页图),管理关系,2使用Transact-SQL语句设置外键约束,使用Transact-SQL语句设置外键约束的语法形式如下:,CONSTRAINT constraint_name,FOREIGN KEY (column_name,n),REFERENCES ref_table (ref_column,n),2使用Transact-SQL语句设置外键约束,其中各参数的说明如下:,REFERENCES:用于指定要建立关联的表的信息。,ref_table:用于指定要建立关联的表的名称。,ref_column:用于指定要建立关联的表中相关列的名称。,2使用Transact-SQL语句设置外键约束,例4-15,使用,Transact-SQL,语句创建一个外键约束,使得“图书借阅信息表”中的“读者编号”字段的值必须来源于“读者基本信息表”中的“读者编号”字段的值。,ALTER TABLE,图书借阅信息表,ADD CONSTRAINT fk_读者编号 FOREIGN KEY(读者编号),REFERENCES 读者基本信息表(读者编号),查看约束的定义,一、使用企业管理器查看约束信息 1在表设计器的窗口中可以查看主键、空值、默认值约束信息2在右键/属性中可以查看外键约束、CHECK约束。,二、使用系统存储过程查看约束信息EXEC sp_help EXEC sp_helptext name,4.5 本章小结,在SQL Server 2000中,可以通过对数据表中的数据设置完整性约束,来保证在数据表中输入可靠的和有效的数据。添加、修改或删除各种约束的方法一般是通过企业管理器或通过Transact-SQL语句来实现。,4.5 本章小结,数据的完整性主要包括实体完整性、域完整性、参照完整性及用户定义的完整性。,主键约束是最重要和最常用的一种约束。通过定义主键,能够惟一地确定表中的每一条记录。,4.5 本章小结,IDENTITY属性约束是在数据表中创建一个标识列,该标识列中的数据由系统自动生成,并且不会重复,因此可以用该标识列来保证数据表中不会出现完全一样的两条记录。,4.5 本章小结,惟一性约束可以指定一个或多个字段列的组合值具有惟一性,即不会出现重复的值。在一个数据表中可以为多个字段或字段的组合设置惟一性约束。,4.5 本章小结,默认约束完成的功能是对于设置了默认约束的字段,如果在录入记录时没有提供输入值,则系统会自动为该字段填入默认值。默认值可以是常量、函数或者空值。,4.5 本章小结,设置检查约束的目的是对输入的数据值进行检查,满足条件的数据可以保存在数据表中,对于不满足条件的数据则拒绝接受。在某一个数据表中,对于每一个字段可以设置多个检查约束。,4.5 本章小结,规则是对存储在数据表中的数据值的规定和限制。规则的功能与CHECK约束的功能相似,但规则是作为一个独立的数据库对象存储在数据库中的,使用规则的好处是可以只创建一次,然后可以绑定到多个字段上。对于数据表中的一个字段列,只能应用一个规则。,4.5 本章小结,参照完整性是在两个数据表之间设置的约束,为了保证数据表之间的数据一致,设置了参照完整性之后,不能在从表中插入主表中不存在的数据值,如果从表中有对应的数据值,则不能修改主表中的对应值,除非设置成级联修改,如果从表中有对应的数据值,则不能删除主表中的对应值,除非设置成级联删除。,4.6 思考与练习,1数据完整性约束包括哪几个方面?各自完成的功能是什么?,2在BOOKS数据库中,使用企业管理器和使用Transact-SQL语句分别创建一个新的数据表,名称为“图书借阅信息表2”。,4.6 思考与练习,3按照第2题中提供的数据表的要求创建一个新的数据表“图书借阅信息表3”,其中的“图书状态”字段的默认约束为“借阅”。,4按照第2题中提供的数据表的要求创建一个新的数据表“图书借阅信息表4”,设置其中的“图书状态”字段的检查约束,使得此字段的取值只能为“借阅”或“续借”。,4.6 思考与练习,5上机练习设置参照完整性的方法,并实现以下两个参照完整性:,(1)“图书借阅信息表”中的“图书编码”字段的值来自于“图书基本信息表”中的“图书编码”字段的值。,(2)“图书借阅信息表”中的“读者编号”字段的值来自于“读者基本信息表”中的“读者编号”字段的值。,4.6 思考与练习,6上机练习创建一个新的关系图“关系图2”,要求在其中显示出“图书基本信息表”、“读者基本信息表”和“图书借阅信息表”这三个数据表之间的约束关系。,
展开阅读全文