数据完整性.ppt
《数据完整性.ppt》由会员分享,可在线阅读,更多相关《数据完整性.ppt(61页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、3/7/20231第第9章章 数据完整性数据完整性13/7/20232本章内容本章内容n9.1 数据完整性数据完整性n9.2 约束约束n9.3 规则规则n9.4 默认值默认值23/7/202339.1 数据完整性数据完整性数据完整性是指数据库中存储数据的一致性和正确性,数据完整性是指数据库中存储数据的一致性和正确性,确保各个文件或表中的数据值的关系一致,确保数据库中的确保各个文件或表中的数据值的关系一致,确保数据库中的数据可以成功和正确地更新数据可以成功和正确地更新。数据库设计的一项重要内容是确定如何加强数据的完整数据库设计的一项重要内容是确定如何加强数据的完整性。性。33/7/202349.
2、1 数据完整性数据完整性n 关系数据完整性关系数据完整性关系数据完整性包括一下内容:关系数据完整性包括一下内容:(1)实体完整性实体完整性实体完整性就是把表中每一条记录看作一个实体,要求实体完整性就是把表中每一条记录看作一个实体,要求所有行都具有唯一标识,即主键,且主键的值非空,又称为所有行都具有唯一标识,即主键,且主键的值非空,又称为行完整性行完整性。(2)域完整性域完整性域完整性是关于数据列取值有效性的限制域完整性是关于数据列取值有效性的限制。域完整性通。域完整性通常用有效性检查来实现,也可以通过限制数据类型、格式或常用有效性检查来实现,也可以通过限制数据类型、格式或者可能的取值范围来实现
3、者可能的取值范围来实现。例如,对于例如,对于teaching数据库中数据库中s_c表中,表中,GRADE字段的取字段的取值只能是从值只能是从0到到100的整数值,而不能为其他数值的整数值,而不能为其他数值。43/7/202359.1 数据完整性数据完整性(3)参照完整性参照完整性参照完整性是对外键取值有效性的限制,以确保数据在参照完整性是对外键取值有效性的限制,以确保数据在另一个参照表的取值范围内另一个参照表的取值范围内。参照完整性要求外键的取值只。参照完整性要求外键的取值只能取参照表中的有效值或空值能取参照表中的有效值或空值。如果在参考表中某一记录的。如果在参考表中某一记录的主键被依赖表中的
4、外部键参考,那么这一记录既不能删除,主键被依赖表中的外部键参考,那么这一记录既不能删除,也不能修改其主键值,以确保关键字的一致性也不能修改其主键值,以确保关键字的一致性。(4)用户定义完整性用户定义完整性用户定义完整性允许特定的不属于上述类别规则的完整用户定义完整性允许特定的不属于上述类别规则的完整性定义,前面的性定义,前面的3个完整性类型都支持用户定义完整性。个完整性类型都支持用户定义完整性。实现用户定义完整性,可以有两种方法,即声明数据完实现用户定义完整性,可以有两种方法,即声明数据完整性和过程数据完整性。整性和过程数据完整性。53/7/202369.1 数据完整性数据完整性声明数据完整性
5、声明数据完整性声明数据完整性是通过在对象定义中定义的标准来实现声明数据完整性是通过在对象定义中定义的标准来实现数据完整性,是由系统本身的自动强制来实现的,它包括使数据完整性,是由系统本身的自动强制来实现的,它包括使用各种约束、缺省的规则。用各种约束、缺省的规则。过程数据完整性过程数据完整性 过程数据完整性是通过在脚本语言中定义的完整性标准过程数据完整性是通过在脚本语言中定义的完整性标准来实现的,当执行这些脚本时,就可以强制完整性的实现来实现的,当执行这些脚本时,就可以强制完整性的实现。过程数据完整性的方式包括使用触发器和存储过程等。过程数据完整性的方式包括使用触发器和存储过程等。63/7/20
6、2379.1 数据完整性数据完整性n SQL Server 2005中的数据完整性中的数据完整性 各类数据完整性和对应实现完整性的各类数据完整性和对应实现完整性的SQL Server组件如表组件如表9.1所示所示。数据完整性数据完整性 对应的对应的SQL Server组件组件 实体完整性实体完整性 PRIMARY KEY(主键主键)约束、约束、UNIQUE(唯唯一一)约束约束UNIQUE INDEX(唯一索引唯一索引)、IDENTITY COLUMN(标识列标识列)域完整性域完整性 DEFAULT(默认值默认值)、CHECK(检查检查)约束、约束、RULE(规则规则)FOREIGN KEY(外
7、键外键)约束、约束、DATA TYPE(数据类型数据类型)参照完整性参照完整性 FOREIGN KEY(外键外键)约束、约束、CHECK(检检查查)约束约束TRIGGER(触发器触发器)、STORED PROCEDURE(存储过程存储过程)用户定义完整性用户定义完整性 RULE(规则规则)、TRIGGER(触发器触发器)、STORED PROCEDURE(存储过程存储过程)73/7/202389.1 数据完整性数据完整性(1)空值空值数据表中的列可以接受空值,也可以拒绝空值。在数据数据表中的列可以接受空值,也可以拒绝空值。在数据库中,库中,NULL是一个特殊值,表示未知值的概念。是一个特殊值,
8、表示未知值的概念。NULL不同于空字符或不同于空字符或0。空字符是一个有效的字符,。空字符是一个有效的字符,0是是一个有效的数字。一个有效的数字。NULL只是表示此值未知这一概念。只是表示此值未知这一概念。NULL也不同于零长度字符串也不同于零长度字符串(空串空串)。如果列定义中包含如果列定义中包含NOT NULL子句,则不能为该列输入子句,则不能为该列输入NULL值。如果列定义中仅包含值。如果列定义中仅包含NULL关键字,则接受关键字,则接受NULL值值 83/7/202399.1 数据完整性数据完整性(2)约束约束约束定义关于列中允许值的规则,是强制实施完整性的约束定义关于列中允许值的规则
9、,是强制实施完整性的标准机制。使用约束优先于使用标准机制。使用约束优先于使用DML触发器触发器、规则规则和和默认值默认值。约束类型约束类型SQL Server 2005有下列约束类型有下列约束类型:a.NOT NULL约束约束:非空约束,指定列不接受:非空约束,指定列不接受NULL值值.b.CHECK约束约束:检查约束,通过限制可输入到列中的:检查约束,通过限制可输入到列中的值来强制实施域完整性值来强制实施域完整性。c.UNIQUE约束:唯一约束,强制实施列取值集合中值约束:唯一约束,强制实施列取值集合中值的唯一性。主键强制实施唯一性,但主键不允许的唯一性。主键强制实施唯一性,但主键不允许NU
10、LL作为作为一个唯一值。一个唯一值。93/7/2023109.1 数据完整性数据完整性d.PRIMARY KEY约束:主键约束,标识具有唯一标识约束:主键约束,标识具有唯一标识表中行的值的列或列集表中行的值的列或列集。e.FOREIGN KEY约束:外键约束,标识并强制实施表约束:外键约束,标识并强制实施表之间的关系之间的关系。列约束和表约束列约束和表约束 列约束指定为列定义的一部分,并且只应用于该列。表列约束指定为列定义的一部分,并且只应用于该列。表约束的声明与列定义无关,可以应用于表中多个列约束的声明与列定义无关,可以应用于表中多个列。当一个。当一个约束中必须包含多个列时,应使用表约束。约
11、束中必须包含多个列时,应使用表约束。103/7/2023119.1 数据完整性数据完整性(3)规则规则规则用于执行一些与规则用于执行一些与CHECK约束相同的功能。使用约束相同的功能。使用CHECK约束是限制列值的首选标准方法。约束是限制列值的首选标准方法。CHECK约束还比约束还比规则更简明。一个列只能应用一个规则,但可以应用多个规则更简明。一个列只能应用一个规则,但可以应用多个CHECK约束。约束。CHECK约束被指定为约束被指定为CREATE TABLE语句语句的一部分,而规则是作为单独的对象创建,然后绑定到列上。的一部分,而规则是作为单独的对象创建,然后绑定到列上。113/7/2023
12、129.1 数据完整性数据完整性(4)默认值默认值如果插入行时没有为列指定值,默认值则指定列中默认如果插入行时没有为列指定值,默认值则指定列中默认取值。默认值可以是计算结果为常量的任何值,例如常量、取值。默认值可以是计算结果为常量的任何值,例如常量、内置函数或数学表达式。内置函数或数学表达式。若要应用默认值,可以通过在若要应用默认值,可以通过在CREATE TABLE中使用中使用DEFAULT关键字来创建默认值定义。这将为每一列分配一关键字来创建默认值定义。这将为每一列分配一个常量表达式作为默认值,也可以作为单独的对象创建,然个常量表达式作为默认值,也可以作为单独的对象创建,然后绑定到列上。后
13、绑定到列上。123/7/2023139.2 约束约束约束是通过限制字段中数据、记录中数据和表之间的数约束是通过限制字段中数据、记录中数据和表之间的数据来保证数据完整性据来保证数据完整性。约束独立于表结构,创建约束有两种方法约束独立于表结构,创建约束有两种方法:创建表时在创建表时在CREATE TABLE命令中声明;命令中声明;在不改变表结构的基础上,通过修改表结构命令在不改变表结构的基础上,通过修改表结构命令ALTER TABLE添加或删除添加或删除。当表被删除时,表所带的所有约束定义也随之被删除。当表被删除时,表所带的所有约束定义也随之被删除。133/7/2023149.2 约束约束表表9.
14、2 所有可用的约束类型所有可用的约束类型完整性类型完整性类型 约束类型约束类型 域完整性域完整性 DEFAULT(默认值默认值)、CHECK(检检查查)约束约束 实体完整性实体完整性 PRIMARY KEY(主键主键)约束、约束、UNIQUE(唯一唯一)约束约束 参照完整性参照完整性 FOREIGN KEY(外键外键)约束约束 143/7/2023159.2 约束约束n 主键约束主键约束在数据表中经常有一列或多列的组合,其值能唯一地标在数据表中经常有一列或多列的组合,其值能唯一地标识表中的每一行。这样的一列或多列称为表的主键识表中的每一行。这样的一列或多列称为表的主键。通过它可强制表的实体完整
15、性,以确保数据表中数据的通过它可强制表的实体完整性,以确保数据表中数据的唯一性唯一性。当创建或更改表时,可通过定义当创建或更改表时,可通过定义PRIMARY KEY(主键主键)约束来创建主键。约束来创建主键。153/7/2023169.2 约束约束对于主键约束,需满足以下规则。对于主键约束,需满足以下规则。一个表只能包含一个一个表只能包含一个PRIMARY KEY约束。约束。由由PRIMARY KEY约束生成的索引不会使表中的非约束生成的索引不会使表中的非聚集索引超过聚集索引超过249个,聚集索引超过个,聚集索引超过1个。个。如果没有为如果没有为PRIMARY KEY约束指定约束指定CLUST
16、ERED或或NONCLUSTERED,并且没有为,并且没有为UNIQUE约束指定约束指定聚集索引,则将对该聚集索引,则将对该PRIMARY KEY约束使用约束使用CLUSTERED。在在PRIMARY KEY约束中定义的所有列都必须定义约束中定义的所有列都必须定义为为NOT NULL。如果没有指定为空性,则加入。如果没有指定为空性,则加入PRIMARY KEY约束的所有列的为空性都将设置为约束的所有列的为空性都将设置为NOT NULL。163/7/2023179.2 约束约束(1)创建表时声明主键约束创建表时声明主键约束 如果表的主键由单列组成,则该主键约束可以定义为该如果表的主键由单列组成,
17、则该主键约束可以定义为该列的列约束。如果主键由两个以上的列组成,则该主键约束列的列约束。如果主键由两个以上的列组成,则该主键约束必须定义为表约束必须定义为表约束。定义列级主键约束定义列级主键约束语法格式如下:语法格式如下:CONSTRAINT constraint_name PRIMARY KEY CLUSTERED|NONCLUSTERED 173/7/2023189.2 约束约束 CONSTRAINT:可选关键字,表示:可选关键字,表示PRIMARY KEY、NOT NULL、UNIQUE、FOREIGN KEY或或CHECK约束定约束定义的开始义的开始。constraint_name:约
18、束的名称。约束名称必须在表所属:约束的名称。约束名称必须在表所属的架构中唯一。的架构中唯一。PRIMARY KEY:是通过唯一索引对给定的一列或多列:是通过唯一索引对给定的一列或多列强制实体完整性的约束。每个表只能创建一个强制实体完整性的约束。每个表只能创建一个 PRIMARY KEY 约束约束。CLUSTERED|NONCLUSTERED:指示为:指示为PRIMARY KEY约束创建聚集索引还是非聚集索引。约束创建聚集索引还是非聚集索引。PRIMARY KEY约约束默认为束默认为CLUSTERED。183/7/2023199.2 约束约束定义表级主键约束定义表级主键约束语法格式如下。语法格式
19、如下。CONSTRAINT constraint_name PRIMARY KEY CLUSTERED|NONCLUSTERED (column_name ,.n )其中,其中,column_name ,.n 指定组成主键的列名,指定组成主键的列名,n最最大值为大值为16。193/7/2023209.2 约束约束(2)修改表时创建主键约束修改表时创建主键约束 语法格式如下。语法格式如下。ALTER TABLE table_nameADD CONSTRAINT Constraint_name PRIMARY KEY CLUSTERED|NONCLUSTERED (column_name,n)20
20、3/7/2023219.2 约束约束例如:假设在例如:假设在teaching数据库中的数据库中的s_c表中没有设置主键表中没有设置主键约束,以下示例通过约束,以下示例通过ALTER TABLE命令添加主键约束命令添加主键约束。USE teachingGOALTER TABLE s_cADD CONSTRAINT PK_sc PRIMARY KEY(SNO,CNO)GO通过通过ALTER TABLE命令也可以删除不使用的主键约束,命令也可以删除不使用的主键约束,命令格式如下。命令格式如下。ALTER TABLE table_name DROP CONSTRAINT constraint_name
21、213/7/2023229.2 约束约束n 外键约束外键约束通过将用于保存表中主键值的一列或多列添加到另一个通过将用于保存表中主键值的一列或多列添加到另一个表中,可创建两个表之间的链接。这个列就成为第二个表的表中,可创建两个表之间的链接。这个列就成为第二个表的外键。外键。外键用于建立和加强两个表数据之间的链接的一列或多外键用于建立和加强两个表数据之间的链接的一列或多列。列。当创建或更改表时,可以通过定义当创建或更改表时,可以通过定义FOREIGN KEY约束约束来创建外键。来创建外键。223/7/2023239.2 约束约束对于外键约束,需要满足以下规则。对于外键约束,需要满足以下规则。如果在
22、如果在FOREIGN KEY约束的列中输入非约束的列中输入非NULL值,则此值必值,则此值必须在被引用列中存在;否则,将返回违反外键约束的错误信息。须在被引用列中存在;否则,将返回违反外键约束的错误信息。FOREIGN KEY约束仅能引用位于同一服务器上的同一数据库约束仅能引用位于同一服务器上的同一数据库中的表。跨数据库的参照完整性必须通过触发器实现。中的表。跨数据库的参照完整性必须通过触发器实现。FOREIGN KEY约束可引用同一表中的其他列,此行为称为自约束可引用同一表中的其他列,此行为称为自引用。引用。列级列级FOREIGN KEY约束的约束的REFERENCES子句只能列出一个子句只
23、能列出一个引用列。此列的数据类型必须与定义约束的列的数据类型相同。引用列。此列的数据类型必须与定义约束的列的数据类型相同。表级表级FOREIGN KEY约束的约束的REFERENCES子句中引用列的数子句中引用列的数目必须与约束列列表中的列数相同。每个引用列的数据类型也必目必须与约束列列表中的列数相同。每个引用列的数据类型也必须与列表中相应列的数据类型相同。须与列表中相应列的数据类型相同。FOREIGN KEY约束只能引用所参照的表的约束只能引用所参照的表的PRIMARY KEY或或UNIQUE约束中的列或所引用的表上约束中的列或所引用的表上UNIQUE INDEX中的列。中的列。233/7/
24、2023249.2 约束约束(1)创建表时声明外键约束创建表时声明外键约束 语法格式如下。语法格式如下。CONSTRAINT constraint_name FOREIGN KEYREFERENCES 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 243/7/2023259.2 约束约束 FOREIGN KEY REFERENCES:为列中的数据提供参:为
25、列中的数据提供参照完整性的约束。照完整性的约束。FOREIGN KEY 约束要求列中的每个值在约束要求列中的每个值在所引参照的表中对应的被引用列中都存在。所引参照的表中对应的被引用列中都存在。schema_name.referenced_table_name:是:是FOREIGN KEY约束参照的表的名称,以及该表所属架构的约束参照的表的名称,以及该表所属架构的名称。名称。(ref_column ,.n ):是:是FOREIGN KEY约束所引用约束所引用的表中的一列或多列的表中的一列或多列。ON DELETE NO ACTION|CASCADE|SET NULL|SET DEFAULT:指定
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据 完整性
限制150内