数据完整性
要想了解这三类完整性约束,先要了解什么是数据完整性。
数据库中的数据是从外界输入的,而数据的输入由于种种原因,会发生输入无效或错误信息。保证输入的数据符合规定,成为了数据库系统,尤其是多用户的关系数据库系统首要关注的问题。数据完整性因此而提出。
数据完整性(Data Integrity)是指数据的精确性(Accuracy) 和可靠性(Reliability)。即数据完整性是指数据库中存储的数据是有意义的或正确的,和现实世界相符。它是应防止数据库中存在不符合语义规定的数据,和防止因错误信息的输入输出造成无效操作或错误信息而提出的。
数据完整性分为三类:实体完整性(Entity Integrity)、参照完整性(Referential Integrity)、用户自定义完整性(User-definedIntegrity)。
数据库采用多种方法来保证数据完整性,包括外键、约束、规则和触发器。系统很好地处理了这几者的关系,并针对不同的具体情况用不同的方法进行,相互交叉使用,相补缺点。
关系模型允许定义三类完整性约束;实体完整性、参照完整性和用户定义的完整性。其中实体完整性和参照完整性是关系模型必须满足的完整性约束条件,体现了具体领域中的语义约束。
一、实体完整性
实体完整性要求每个数据表都必须有主键,而作为主键的所有字段,其属性必须是独一及非空值。
实体完整性要保证关系中的每个元组都是可识别的和惟一的,指关系数据库中所有的表都必须有主键,
而且表中不允许存在无主键值的记录和主键值相同的记录。因为实体必须可区分。
实际上,当在表中定义了主键时,数据库管理系统会自动保证数据的实体完整性,即保证不允许存在主键值为空的记录以及主键值重复的记录。
二、参照完整性
参照完整性也称为引用完整性。参照的完整性要求关系中不允许引用不存在的实体。与实体完整性是关系模型必须满足的完整性约束条件,目的是保证数据的一致性。
现实世界中的实体之间往往存在着某种联系,在关系模型中,实体以及实体之间的联系都是用关系来表示的,这样就自然存在着关系与关系之间的引用。
而参照完整性就是描述实体之间的联系的。参照完整性一般是指多个实体或关系之间的关联关系。
例如,若基本关系 R 的外键为 F,它与基本关系 S 的主键 K 相对应(基本关系 R 和 S 不一定是不同的关系),则对于 R 中的每个元组在 F 上的值必须为:
(1)空值,F 的每个属性值均为空值。
(2)S 中某个元组中的主键值。
即参照的关系中的属性值必须能够在被参照关系找到或者取空值,否则不符合数据库的语义。
在实际操作时如更新、删除、插入一个表中的数据,通过参照引用相互关联的另一个表中的数据,来检查对表的数据操作是否正确,不正确则拒绝操作。
三、用户定义完整性
用户定义完整性也称为域完整性或语义完整性。用户自定义完整性是针对某一具体关系数据库的约束条件,它反映某一具体应用所涉及的数据必须满足的语义要求。
实际上就是指明关系中属性的取值范围,防止属性的值与应用语义矛盾。
关系模型应提供定义和检验这类完整性的机制,以便用统一的系统方法处理它们,而不要由应用程序承担这一功能
主要包括非空约束、唯一约束、检查约束、主键约束、外键约束。