数据库完整性(Database Integrity)是数据库中数据在逻辑上的一致性、正确性和相容性。数据库完整性由各种各样的完整性约束来保证,因此可以说数据库完整性设计就是数据库完整性约束的设计。数据库完整性约束可以通过DBMS或应用程序来实现,基于DBMS的完整性约束作为模式的一部分存入数据库中。通过DBMS实现的数据库完整性按照数据库设计步骤进行设计,而由应用软件实现的数据库完整性则纳入应用软件设计。
数据库完整性对于数据库应用系统非常关键,其作用主要体现在如下几个方面:
1.数据库完整性约束能够防止合法用户使用数据库时向数据库中添加不合语义的数据
2.利用基于DBMS的完整性控制机制来实现业务规划,易于定义,容易理解,而且可以降低应用程序的复杂性,提高应用程序的运行效率,同时,基于DBMS的完整性控制机制是集中管理的,因此应用程序更容易实现数据库的完整性。
3.合理的数据库完整性设计,能够同时兼顾数据库的完整性和系统的效能,比如装载大量数据时,只要在装载之前临时使用基于DBMS的数据库完整性约束失效,从此再使其生效,就能保证既不影响数据装载的效率又能保证数据库的完整性。
4.在应用软件的功能测试中,完善的数据库完整性有助于尽早发现应用软件的错误。
数据库完整性约束可以分为6类:列级静态约束、元祖级静态约束、关系级静态约束、列级动态约束、元祖级动态约束、关系级动态约束。动态约束通常由应用软件来实现,不同DBMS支持的数据库完整性基本相同。
关系完整性用于保证数据库中的数据的正确性,系统在进行更新、插入或删除等操作时都要检查数据的完整性,核实其约束条件,即关系模型的完整性规则。在关系模型中有四类完整性约束:实体完整性、域完整性、参照完整性和用户定义的完整性,其中实体完整性和参照完整性约束条件,称为关系的两个不变性
实体完整性:实体完整性指表中行的完整性。主要用于保证操作的数据(记录)非空、唯一且不重复。即实体完整性要求每个关系(表)有且仅有一个逐渐,每个逐渐值必须唯一,而且不允许为“空”或重复
域完整性:是指数据库表中的列必须满足某种特定的数据类型或者约束。其中约束又包括取值范围、精度等范围,表中的CHECK、FOReIGN key约束和default、not null定义都属于域完整性的范涛。
参照完整性:属于表间规则。对于永久关系的关联表,在更新、插入或删除记录时,如果只改其一,就会影响数据的完整性,如删除父表的某记录后,子表的相应记录未删除,致使这些记录称为孤立记录。对于更新、插入或删除表间数据的完整性,统称为参照完整性,通常,在客观现实中的实体之间存在一定联系,在关系模型中实体机试题之间的联系都是以关系进行描述,因此,操作时就可能存在着关系与关系间的关联和引用。
用户定义完整性:是对数据表中字段属性的约束,用户定义完整性规则(User-defined-integrity)也称域完整性。包括字段的值域,字段的类型和字段的有效规则(如小数位数)等约束,是由确定关系结构时所定义的字段的属性决定的,如:百分制成绩的取值范围在0~100之间等。