数据完整性(1)_1

上传人:F****n 文档编号:88541447 上传时间:2019-04-30 格式:PPT 页数:61 大小:234.50KB
返回 下载 相关 举报
数据完整性(1)_1_第1页
第1页 / 共61页
数据完整性(1)_1_第2页
第2页 / 共61页
数据完整性(1)_1_第3页
第3页 / 共61页
数据完整性(1)_1_第4页
第4页 / 共61页
数据完整性(1)_1_第5页
第5页 / 共61页
点击查看更多>>
资源描述

《数据完整性(1)_1》由会员分享,可在线阅读,更多相关《数据完整性(1)_1(61页珍藏版)》请在金锄头文库上搜索。

1、1,第9章 数据完整性,2,本章内容,9.1 数据完整性 9.2 约束 9.3 规则 9.4 默认值,3,9.1 数据完整性,数据完整性是指数据库中存储数据的一致性和正确性,确保各个文件或表中的数据值的关系一致,确保数据库中的数据可以成功和正确地更新 。 数据库设计的一项重要内容是确定如何加强数据的完整性。,4,9.1 数据完整性,关系数据完整性 关系数据完整性包括一下内容: (1) 实体完整性 实体完整性就是把表中每一条记录看作一个实体,要求所有行都具有唯一标识,即主键,且主键的值非空,又称为行完整性 。 (2) 域完整性 域完整性是关于数据列取值有效性的限制 。域完整性通常用有效性检查来实

2、现,也可以通过限制数据类型、格式或者可能的取值范围来实现 。 例如,对于teaching数据库中s_c表中,GRADE字段的取值只能是从0到100的整数值,而不能为其他数值 。,5,9.1 数据完整性,(3) 参照完整性 参照完整性是对外键取值有效性的限制,以确保数据在另一个参照表的取值范围内 。参照完整性要求外键的取值只能取参照表中的有效值或空值 。如果在参考表中某一记录的主键被依赖表中的外部键参考,那么这一记录既不能删除,也不能修改其主键值,以确保关键字的一致性 。 (4) 用户定义完整性 用户定义完整性允许特定的不属于上述类别规则的完整性定义,前面的3个完整性类型都支持用户定义完整性。

3、实现用户定义完整性,可以有两种方法,即声明数据完整性和过程数据完整性。,6,9.1 数据完整性,声明数据完整性 声明数据完整性是通过在对象定义中定义的标准来实现数据完整性,是由系统本身的自动强制来实现的,它包括使用各种约束、缺省的规则。 过程数据完整性 过程数据完整性是通过在脚本语言中定义的完整性标准来实现的,当执行这些脚本时,就可以强制完整性的实现 。 过程数据完整性的方式包括使用触发器和存储过程等。,7,9.1 数据完整性,SQL Server 2005中的数据完整性 各类数据完整性和对应实现完整性的SQL Server组件如表9.1所示 。,8,9.1 数据完整性,(1) 空值 数据表中

4、的列可以接受空值,也可以拒绝空值。在数据库中,NULL是一个特殊值,表示未知值的概念。 NULL不同于空字符或0。空字符是一个有效的字符,0是一个有效的数字。NULL只是表示此值未知这一概念。NULL也不同于零长度字符串(空串)。 如果列定义中包含NOT NULL子句,则不能为该列输入NULL值。如果列定义中仅包含NULL关键字,则接受NULL值,9,9.1 数据完整性,(2) 约束 约束定义关于列中允许值的规则,是强制实施完整性的标准机制。使用约束优先于使用DML触发器、规则和默认值 。 约束类型 SQL Server 2005有下列约束类型 : NOT NULL约束 :非空约束,指定列不接

5、受NULL值 . CHECK约束 :检查约束,通过限制可输入到列中的值来强制实施域完整性 。 UNIQUE约束:唯一约束,强制实施列取值集合中值的唯一性。主键强制实施唯一性,但主键不允许NULL作为一个唯一值。,10,9.1 数据完整性,d. PRIMARY KEY约束:主键约束,标识具有唯一标识表中行的值的列或列集 。 e. FOREIGN KEY约束:外键约束,标识并强制实施表之间的关系 。 列约束和表约束 列约束指定为列定义的一部分,并且只应用于该列。表约束的声明与列定义无关,可以应用于表中多个列 。当一个约束中必须包含多个列时,应使用表约束。,11,9.1 数据完整性,(3) 规则 规

6、则用于执行一些与CHECK约束相同的功能。使用CHECK约束是限制列值的首选标准方法。CHECK约束还比规则更简明。一个列只能应用一个规则,但可以应用多个CHECK约束。CHECK约束被指定为CREATE TABLE语句的一部分,而规则是作为单独的对象创建,然后绑定到列上。,12,9.1 数据完整性,(4) 默认值 如果插入行时没有为列指定值,默认值则指定列中默认取值。默认值可以是计算结果为常量的任何值,例如常量、内置函数或数学表达式。 若要应用默认值,可以通过在CREATE TABLE中使用DEFAULT关键字来创建默认值定义。这将为每一列分配一个常量表达式作为默认值,也可以作为单独的对象创

7、建,然后绑定到列上。,13,9.2 约束,约束是通过限制字段中数据、记录中数据和表之间的数据来保证数据完整性 。 约束独立于表结构,创建约束有两种方法 : 创建表时在CREATE TABLE命令中声明; 在不改变表结构的基础上,通过修改表结构命令ALTER TABLE添加或删除 。 当表被删除时,表所带的所有约束定义也随之被删除。,14,9.2 约束,表9.2 所有可用的约束类型,15,9.2 约束,主键约束 在数据表中经常有一列或多列的组合,其值能唯一地标识表中的每一行。这样的一列或多列称为表的主键 。 通过它可强制表的实体完整性,以确保数据表中数据的唯一性 。 当创建或更改表时,可通过定义

8、PRIMARY KEY (主键)约束来创建主键。,16,9.2 约束,对于主键约束,需满足以下规则。 一个表只能包含一个PRIMARY KEY约束。 由PRIMARY KEY约束生成的索引不会使表中的非聚集索引超过249个,聚集索引超过1个。 如果没有为PRIMARY KEY约束指定CLUSTERED或NONCLUSTERED,并且没有为UNIQUE约束指定聚集索引,则将对该PRIMARY KEY约束使用CLUSTERED。 在PRIMARY KEY约束中定义的所有列都必须定义为NOT NULL。如果没有指定为空性,则加入PRIMARY KEY约束的所有列的为空性都将设置为NOT NULL。,

9、17,9.2 约束,(1) 创建表时声明主键约束 如果表的主键由单列组成,则该主键约束可以定义为该列的列约束。如果主键由两个以上的列组成,则该主键约束必须定义为表约束 。 定义列级主键约束 语法格式如下: CONSTRAINT constraint_name PRIMARY KEY CLUSTERED | NONCLUSTERED ,18,9.2 约束,CONSTRAINT:可选关键字,表示PRIMARY KEY、NOT NULL、UNIQUE、FOREIGN KEY或CHECK约束定义的开始 。 constraint_name:约束的名称。约束名称必须在表所属的架构中唯一。 PRIMARY

10、KEY:是通过唯一索引对给定的一列或多列强制实体完整性的约束。每个表只能创建一个 PRIMARY KEY 约束 。 CLUSTERED | NONCLUSTERED:指示为PRIMARY KEY约束创建聚集索引还是非聚集索引。PRIMARY KEY约束默认为CLUSTERED。,19,9.2 约束,定义表级主键约束 语法格式如下。 CONSTRAINT constraint_name PRIMARY KEY CLUSTERED | NONCLUSTERED ( column_name ,.n ) 其中,column_name ,.n 指定组成主键的列名,n最大值为16。,20,9.2 约束,(

11、2) 修改表时创建主键约束 语法格式如下。 ALTER TABLE table_name ADD CONSTRAINT Constraint_name PRIMARY KEY CLUSTERED | NONCLUSTERED ( column_name ,n ),21,9.2 约束,例如:假设在teaching数据库中的s_c表中没有设置主键约束,以下示例通过ALTER TABLE命令添加主键约束 。 USE teaching GO ALTER TABLE s_c ADD CONSTRAINT PK_sc PRIMARY KEY (SNO, CNO) GO 通过ALTER TABLE命令也可以

12、删除不使用的主键约束,命令格式如下。 ALTER TABLE table_name DROP CONSTRAINT constraint_name,22,9.2 约束,外键约束 通过将用于保存表中主键值的一列或多列添加到另一个表中,可创建两个表之间的链接。这个列就成为第二个表的外键。 外键用于建立和加强两个表数据之间的链接的一列或多列。 当创建或更改表时,可以通过定义FOREIGN KEY约束来创建外键。,23,9.2 约束,对于外键约束,需要满足以下规则。 如果在FOREIGN KEY约束的列中输入非NULL值,则此值必须在被引用列中存在;否则,将返回违反外键约束的错误信息。 FOREIGN

13、 KEY约束仅能引用位于同一服务器上的同一数据库中的表。跨数据库的参照完整性必须通过触发器实现。 FOREIGN KEY约束可引用同一表中的其他列,此行为称为自引用。 列级FOREIGN KEY约束的REFERENCES子句只能列出一个引用列。此列的数据类型必须与定义约束的列的数据类型相同。 表级FOREIGN KEY约束的REFERENCES子句中引用列的数目必须与约束列列表中的列数相同。每个引用列的数据类型也必须与列表中相应列的数据类型相同。 FOREIGN KEY约束只能引用所参照的表的PRIMARY KEY或UNIQUE约束中的列或所引用的表上UNIQUE INDEX中的列。,24,9

14、.2 约束,(1) 创建表时声明外键约束 语法格式如下。 CONSTRAINT constraint_name FOREIGN KEY REFERENCES schema_name . referenced_table_name ( ref_column ) ON DELETE NO ACTION | CASCADE | SET NULL | SET DEFAULT ON UPDATE NO ACTION | CASCADE | SET NULL | SET DEFAULT ,25,9.2 约束,FOREIGN KEY REFERENCES:为列中的数据提供参照完整性的约束。FOREIGN K

15、EY 约束要求列中的每个值在所引参照的表中对应的被引用列中都存在。 schema_name . referenced_table_name:是FOREIGN KEY约束参照的表的名称,以及该表所属架构的名称。 ( ref_column ,. n ):是FOREIGN KEY约束所引用的表中的一列或多列 。 ON DELETE NO ACTION | CASCADE | SET NULL | SET DEFAULT :指定如果已创建表中的行具有引用关系,并且被引用行已从父表中删除,则对这些行采取的操作。默认值为NO ACTION。,26,9.2 约束,NO ACTION:数据库引擎将引发错误,并

16、回滚对父表中相应行的删除操作。 CASCADE:如果从父表中删除一行,则将从引用表中删除相应行。 SET NULL:如果父表中对应的行被删除,则组成外键的所有值都将设置为NULL。若要执行此约束,外键列必须可为空值。 SET DEFAULT:如果父表中对应的行被删除,则组成外键的所有值都将设置为默认值。若要执行此约束,所有外键列都必须有默认定义。如果某列为空值,并且未设置显式的默认值,则将使用NULL作为该列的隐式默认值。,27,9.2 约束,ON UPDATE NO ACTION | CASCADE | SET NULL | SET DEFAULT :指定在发生更改的表中,如果行有引用关系且引用的行在父表中被更新,则对这些行采取什么操作。默认值为NO ACTION 。,28,9.2 约束,外键约束不仅可以与一张表上的主键约束建立联系,也可以与另一张表上的UNIQUE约束建立联系。当一行新的数据被加入到表格中,或表格中已经存在的外键上的数据进行

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号