欢迎来到天天文库
浏览记录
ID:49311497
大小:78.50 KB
页数:32页
时间:2020-02-03
《数据库应用技术07.ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、第七章维护数据的完整性7.1数据完整性概述数据库的完整性描述为数据库内容的完整性约束集合,其中完整性约束指数据库的一个状态是否合理。数据库系统检查数据的状态和状态转换,判定它们是否合理,是否应予接受。对一个数据库操作,要判定其是否符合完整性约束,全部判定无矛盾时才可以执行。数据完整性包括实体完整性、域完整性、引用完整性、用户定义完整性。7.1.1实体完整性实体完整性(EntityIntegrity)保证一个表中的每一行必须是唯一的(元组的唯一性)。实体完整性可以通过索引、UNIQUE约束、PRIMA
2、RYKEY约束或IDENTITY属性来实现。表中经常有一个列或列的组合,其值能唯一地标识表中的每一行。这样的一列或多列称为表的主键,通过它可强制表的实体完整性。当创建或更改表时可通过定义PRIMARYKEY约束来创建主键。一个表只能有一个PRIMARYKEY约束,而且PRIMARYKEY约束中的列不能接受空值。由于PRIMARYKEY约束确保唯一数据,所以经常用来定义标识列。可使用UNIQUE约束确保在非主键列中不输入重复值。尽管UNIQUE约束和PRIMARYKEY约束都强制唯一性,但在强制非主键
3、的一列或列组合的唯一性时应使用UNIQUE约束而不是PRIMARYKEY约束,另外对于允许空值的列也使用UNIQUE约束。标识符列可用IDENTITY属性建立,使应用程序开发人员得以对表中所插入的第一行指定标识数字(IdentitySeed属性),并确定要添加到种子上的增量(IdentityIncrement属性)以决定后面的标识数字。7.1.2域完整性域完整性(FieldIntegrity)保证一个数据库不包含无意义的或不合理的值,即保证表的某一列的任何值是该列域(即合法的数据集合)的成员。强制域
4、有效性的方法有:限制类型(通过数据类型)、格式(通过CHECK约束和规则)或可能值的范围(通过CHECK约束、DEFAULT定义、NOTNULL定义和规则)CHECK约束通过限制输入到列中的值来强制域的完整性通过为列定义DEFAULT,如果该列没有输入数据时,可以强制填充,以此强制域的完整性。为列定义NOTNULL限制列不能为空值,也可以实现域的完整性。7.1.3引用完整性引用完整性(ReferenceIntegrity)定义了一个关系数据库中不同的列和不同的表之间的关系(主键与外键)。要求一列或一
5、组列中的值必须要与相关的一列或一组列中的值相匹配。从属的一列或一组列称之为外键(ForeignKey)。被引用的列或一组列称之为父键,父键必须是一个主键或唯一键。外键属于子表或明细表,父键属于父表或主表。若父键和外键属于同一表,则称之为自引用完整性。子表某行的外键必须与主表的主键相匹配,只要依赖于某主键的外键仍存在,主表中包含该主键的行就不能删除。在输入或删除记录时,引用完整性保持表之间已定义的关系,确保键值在所有表中一致。7.1.4用户定义完整性用户定义完整性使您得以定义不属于其它任何完整性分类的
6、特定业务规则。由于每个公司的数据库都有自己独特的业务规则集,所以系统必须有一种方式来实现定制的业务规则即定制的数据完整性约束。用户定义完整性可以通过用户定义数据类型、规则、存储过程和触发器来实现。7.2利用约束维护数据的完整性利用约束可以实现数据完整性,约束包括:DEFAULT约束、CHECK约束、UNIQUE约束、PROMARYKEY约束、FOREIGNKEY约束和级联引用完整性约束。7.2.1DEFAULT约束DEFAULT通过指定列的默认值,每个列中只能有一个DEFAULT约束。如果列已有默认
7、值,必须除去旧默认值后才能添加新默认值。DEFAULT约束只用于INSERTINTO语句,当在INSERT语句中没有指定一个值,DEFAULT约束在列中自动输入一个值。7.2.1DEFAULT约束实现语法:[CONSTRAINTcontraint_name]DEFAULTcontraint_expression例程7.1:在Contract表中有一列币种(MoneyType),如果在新建一个合同时,没有指定币种,则系统自动填充为人民币(RMB),为此需要建立一个DEFAULT约束如下:ALTERTA
8、BLEContractADDCONSTRAINTdef_ContractDEFAULT‘RMB’FORMoneyType7.2.2CHECK约束CHECK约束是通过限制可输入到一列或多列中的可能值来强制实现域的完整性。可用于INSERT和UPDATE语句。7.2.2CHECK约束实现语法:[CONSTRAINTcontraint_name]CHECKlogic_expression例程7.2:在单位信息表中有一个字段邮政编码(PostCode),要求输入的数据格式为六
此文档下载收益归作者所有