浅谈数据库中的完整性约束

2013-04-29 16:05王希锋
科海故事博览·科教论坛 2013年9期

王希锋

摘要:数据完整性是指数据的正确性、完备性和一致性,是衡量数据库质量好坏的标准。本文从以下三个方面分析了数据的完整性。即实体完整性、参照完整性和用户自定义完整性。

关键词:实体完整性 用户定义完整性 参照完整性

数据库完整性(Database Integrity)是指数据库中数据的正确性和相容性。数据库完整性由各种各样的完整性约束来保证,因此可以说数据库完整性设计就是数据库完整性约束的设计。数据库完整性约束可以通过DBMS或应用程序来实现,基于DBMS的完整性约束作为模式的一部分存入数据库中。通过DBMS实现的数据库完整性按照数据库设计步骤进行设计,而由应用软件实现的数据库完整性则纳入应用软件设计。

约束是用来确保数据的准确性和一致性。数据的完整性就是对数据的准确性和一致性的一种保证。数据完整性(Data Integrity)是指数据的精确(Accuracy)和可靠性(Reliability)。它是应防止数据库中存在不符合语义规定的数据和防止因错误信息的输入输出造成无效操作或错误信息而提出的。数据完整性分为三类:实体完整性(Entity Integrity)、参照完整性(Referential Integrity)、用户定义的完整性(User-definedIntegrity)。关系的完整性提供了一种手段,用于保证授权用户对数据库修改时不会破坏数据的一直性。实体完整性和参照完整性是关系模型必须满足的完整性约束条件,被称作是关系的两个不变性,应该由关系系统自动支持。

关系模型的完整性规则是对关系的某种约束条件。关系模型中三类完整性约束:实体完整性、参照完整性、用户定义的完整性。

实体完整性和参照完整性是关系模型必须满足的完整性约束条件,被称作是关系的两个不变性,应该由关系系统自动支持。

实体完整性规则(Entity Integrity):若属性A是基本关系R的主属性,则属性A不能取空值。

关系模型必须遵守实体完整性规则的原因:(1)实体完整性规则是针对基本关系而言的。一个基本表通常对应现实世界的一个实体集或多对多联系。(2)现实世界中的实体和实体间的联系都是可区分的,即它们具有某种唯一性标识。(3)相应地,关系模型中以候选码作为唯一性标识。(4)候选码中的属性即主属性不能取空值。所谓空值就是“不知道”或“无意义”的值。如果主属性取空值,就说明存在某个不可标识的实体,即存在不可区分的实体,这与第(2)点相矛盾,因此这个规则称为实体完整性。实体完整性规则规定基本关系的所有主属性都不能取空值,而不仅是主码整体不能取空值。

例:选修(学号,课程号,成绩)

“学号、课程号”为主码,

则学号和课程号两个属性都不能取空值

参照完整性:在关系模型中实体及实体间的联系都是用关系来描述的,因此可能存在着关系与关系间的引用。

外码:设F是基本关系R的一个或一组属性,但不是关系R的码。如果F与基本关系S的主码Ks相对应,则称F是基本关系R的外码(Foreign Key),基本关系R称为参照关系(Referencing Relation),基本关系S称为被参照关系(Referenced Relation)或目标关系(Target Relation)。

说明:关系R和S不一定是不同的关系。目标关系S的主码Ks和参照关系的外码F必须定义在同一个(或一组)域上。外码并不一定要与相应的主码同名。当外码与相应的主码属于不同关系时,往往取相同的名字,以便于识别。

参照完整性规则就是定义外码与主码之间的引用规则。

参照完整性规则:若属性(或属性组)F是基本关系R的外码,它与基本关系S的主码Ks相对应(基本关系R和S不一定是不同的关系),则对于R中每个元组在F上的值必须为:

或者取空值(F的每个属性值均为空值)

或者等于S中某个元组的主码值。

用户定义的完整性:用户定义的完整性是针对某一具体关系数据库的约束条件,反映某一具体应用所涉及的数据必须满足的语义要求。

关系模型应提供定义和检验这类完整性的机制,以便用统一的系统的方法处理它们,而不要由应用程序承担这一功能。

例:课程(课程号,课程名,学分)

“课程名”属性必须取唯一值

非主属性“课程名”也不能取空值

“学分”属性只能取值{1,2,3,4}

与表有关的约束是表中定义的一种约束。可在列定义时定义该约束,此时称为列约束,列约束有(表约束 NOT NULL)。也可以在表定义时定义约束,此时称为表约束,表约束有(PRIMARY KEY、foreign key、check、UNIQUE)。

not null(非空)约束:只用于定义列约束。(2)unique(惟一)约束:用于指明创建惟一约束的列上的取值必须惟一。(3)primary key(主键)约束:用于定义基本表的主键,起惟一标识作用,其值不能为null,也不能重复,以此来保证实体的完整性。(4)foreign key(外键)约束:定义了一个表中数据与另一个表中的数据的联系。

foreign key约束指定某一个列或一组列作为外部键,其中包含外部键的表称为子表,包含外部键所引用的主键的表称为父表。系统保证,表在外部键上的取值要么是父表中某一主键,要么取空值,以此保证两个表之间的连接,确保了实体的参照完整性。

以上通过实体完整性、参照完整性、用户自定义完整性三个方面进行分析了数据库中的完整性约束,并且通过实际的例子更容易清晰的理解和掌握完整性约束。