数据完整性测试
一、概述
数据的完整性,是指存储在数据库中的数据的正确性和可靠性,它是衡量数据中数据质量的一种标准。数据完整性可以分为四类。
1、实体完整性,实体完整性的目的是确保数据库中所有实体的唯一性,也就是不应出现完全相同的数据记录。
2、区域完整性,匹配完整性要求数据表中的数据位于某一个特定的允许范围内。
3、参考完整性,是用来维护相关数据表之间数据一致性的手段,通过实现参考完整性,可以避免因一个数据表的记录改变而造成另一个数据表内的数据变成无效值。
4、用户自定义完整性,用户自定义由用户根据实际应用中的需要自行定义。
二、利用约束维护数据完整性
第一种:字段级约束,只能作用于一个字段。
第二种:数据级的约束;分为:
1、主键约束,使用数据表中的一列数据或多列数据来唯一标识一行数据。在数据表中不能存在主键相同的两行数据,主键不能为NULL。
2、外键约束,主要用来实现数据的区域完整性和引用完整性。如果确定了数据表中某一个字段将作为该数据表与其他数据表关联时使用的外键,则该字段的聚会范围将决定于关联数据表中该字段的取值范围。外键可以与另一张表上的主键约束建立联系,也可以与另一张表上的唯一约束建立联系。当一行新的数据被加入到表中,或对表中已经存在的外键上的数据进行修改时,新的数据必须存在于另一张表的主键上,或者为NULL。
3、唯一约束,主要用来确保非主键字段中的唯一性。唯一约束可以用来同时约束一个或多个非主键字段中数据的唯一性,而主键约束只允许一个字段数据的唯一性或多个字段组合在一起的唯一性;使用唯一约束的字段中允许出现NULL值,而在使用主键约束时,字段中不允许出现NULL值。
4、检查(CHECK)约束,检查约束通过检查输入数据字段值来维护数据的完整性,以确保只有符合条件的数据才能够进入数据表。它通常是通过一个逻辑表达式的结果是否为真来判断是否符合条件。与外键约束不同,外键约束是从另一张表上获得合理的数据,而检查约束则是通过对一个表达式的结果进行判断来对数据进行检查。
三、利用规则维护数据完整性
规则限制了可以存储在表中或用户定义数据类型的值,它可以使用多种方式 来完成对数据值的检验,可以使用函数返回验证信息,也可以使用关键字BETWEEN, LIKE, IN完成对输入数据的检查。
规则是数据库对象之一,它的作用与CHECK约束的部分功能相同,在向表的某列插入或更新数据时,用它来限制输入的新值的取值范围,但规则作为单独的数据库对象来实现,在一列上只能使用一个规则却可以使用多个CHECK,另外,规则可以应用于多个示例,还可以应用于用户自定义的数据类型,而CHECK只能应用于它定义的列。
规则是实现区域完整性的方法之一,当数据库中的数据被插入或更新时,需要检查这个新值是否遵循规则,如果违反了规则,则操作失败。
1、DEFAULT对象(数据库对象),可以实现数据完整性,绑定到列或用户自定义数据类型时,如果插入时没有明确提供值,默认值便指定一个值,并将其插入到对象所绑定的列中。
2、RULES对象(数据库对象),可以用它来实现数据完整性,当绑定到列或用户自定义数据类型时,规则将指定可以插入到列中的可接受的值。
四、使用触发器和存储过程实现数据完整性
触发器是一种特殊的存储过程,它不能被显示地调用,而是在向表中插入、更新或删除数据时被自动激活。所以,触发器可以用来对表实施复杂的完整性约束,当触发器所的数据发生改变时,触发器会自动被激活,从而防止对数据的不正确修改。
触发器与数据表紧密相连,可以看作是数据表定义的一部分,能学它们都是以一组SQL语句的形式存在。触发器基于一个表创建,介是可以针对多个表进行操作。触发器可以实现所有的约束功能。触发器可以引用其他表中的列。
触发器可以评估数据修改前后的表状态,并根据其差异采取对策,这也是约束无法实现的。
触发器为系统自动触发,而存储过程则需要强制激活。
五、总结
1、使用约束的系统开销最低,其次为使用默认值和规则,开销最高的是脆性器和存储过程;
2、功能最强的是触发器和存储过程,其次是默认值和规则,最后是使用约束;