数据完整性(Data Integrity)是指数据的精确性(Accuracy)和可靠性(Reliability),包括数据的正确性和相容性。它是防止数据库中存在不符合语义规定的数据和防止错误信息的输入输出造成无效操作而提出的。数据完整性分为4类:实体完整性(Entity Integrity)、域完整性(Domain Integrity)、参照完整性(Referential Integrity)和用户定义的完整性(User-defined Integrity)。本章主要以这4种类型的数据完整性为主线对数据完整性实施方法进行介绍。
1.域完整性
域是字段(列)的取值范围,域完整性是指字段值在语义上的合理性和有效性。学生成绩不能超过100分,姓名字段值不能为空(Null)等都是域完整性的例子。
域完整性主要是通过检查(Check)、数据类型(Data Type)、默认值(Default)和触发器(Trigger)等机制来保证。
2.实体完整性
实体是指一行记录,实体完整性又称为行完整性,是指任何一行数据都有区别于其他行的特征。也就是说,在一个表中,如果存在完全相同的两行,那么这张表的数据就不满足实体完整性。
保证实体完整性主要是通过主键(Primary Key)、唯一约束(Unique Key)、标识字段(Identity Column)等机制来实现。
对于实体完整性,有如下规则:
➢实体完整性规则针对基本关系。一个基本关系表通常对应一个实体集。例如,学生关系对应学生集合。
➢现实世界中的实体是可以区分的,它们具有一种唯一性质的标识。例如,学生的学号,教师的职工号等。
在关系模型中,主关键字作为唯一的标识,不允许重复且不能为空。
3.参照完整性(www.xing528.com)
参照完整性又称为引用完整性,它是指主关系表(被参照表)中的数据与从关系表(参照表)中数据的一致性。
参照完整性主要通过定义表间的主键和外键来实现。另外,存储过程、触发器等也通常用来实现数据的参照完整性。
参照完整性则是相关联的两个表之间的约束。具体地说,就是从表中每条记录外键的值必须是主表中存在的。因此,如果在两个表之间建立了关联关系,则对一个关系进行的操作要影响到另一个表中的记录。
例如,如果在学生表和选修课之间用学号建立关联,学生表是主表,选修课是从表。那么,在向选修课表中输入一条新记录时,系统要检查新记录的学号是否在主表中已存在,如果存在,则允许执行输入操作,否则拒绝输入,这就是参照完整性。
参照完整性还体现在对主表中的删除和修改操作。例如,如果删除主表中的一条记录,在默认情况下,若此记录被引用,则操作不能进行;如果修改主表中主关键字的值,而从表中相应记录的外键值也随之被修改,则此称为级联删除。
4.用户定义完整性
实体完整性和参照完整性是关系模型最基本的要求。除此外,在面向具体的应用时,用户还可以根据实际需要定义一些特殊的约束条件。这种针对具体应用的、由用户定义的特殊约束条件就是用户定义完整性。
用户定义完整性通常是由规则、触发器、表约束等机制来实现的,在后继课程中会有体现。
实际上,域完整性中有部分也是由用户来定义的,如将成绩字段的取值范围定义为0~100。但不是全部由用户定义,如有的是由数据类型等自动约定的。所以,用户定义完整性和域完整性是相交关系,但不是隶属关系。
现在DBMS产品一般都提供定义和检查这些数据完整性的机制。因此,在应用开发时用户应在DBMS中定义数据的完整性,然后由DBMS自动检查并给出响应提示信息,而不应由应用程序来保证数据的完整性。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。