SQL 关系完整性

关系模型中有三类完整性约束:实体完整性、参照完整性、用户定义的完整性。

实体完整性参照完整性是关系模型必须满足的完整性约束条件,被称为关系的两个不变性。用户定义的完整性是因具体领域划定的约束条件。

一、实体完整性

每个关系表都应该有主属性,主属性不能取空值,且不能重复。

例如:

学生(学号,姓名,性别,专业号,年龄)关系中学号为主码,则学号不能取空值,且不能重复。

二、参照完整性

1.外码与参照

现实世界中的实体之间往往存在某种联系,在关系模型中实体及实体间的联系都是用关系来描述的,这样就自然存在着关系与关系间的引用。

例如:

学生(学号,姓名,性别,专业号,年龄),专业(专业号,专业名称)

这两个关系之间存在着属性的引用,即学生关系引用了专业关系中的主码“专业号”。显然,学生关系中的“专业号”必须在专业关系中能够找到。

假设存在关系 R 和 S :R(A, B, C) 、S(B, D) 。 B 是关系 “R” 的一个属性,同时 B 又是关系 “S” 的主码。称 B 是关系 “R” 的外码,关系 “R” 为参照关系,关系 “S” 为被参照关系目标关系

关系 “R” 和关系 “S” 不一定是不同的关系,同一关系的内部属性间也可以存在引用情况。

例如:

学生(学号,姓名,性别,专业号,年龄,班长)

班长的属性表示学生所在班级班长的学号,班长的域与学号的域相同,班长的学号需要在学生关系中能够找到。

需要指出的是,外码不一定要与相应的主码同名。不过,在实际应用中为了便于识别,当外码与相应的主码属于不同关系时,往往它们取相同的名字。

2.参照完整性规则

参照关系中外码的值必须在被参照关系中实际存在或为 null

学生的专业号要么为空,表示还没有分配专业;要么必须在专业表中存在。

三、用户定义的完整性

任何关系数据库系统都应该支持实体完整性和参照完整性。这是关系模型所要求的。除此之外,不同的关系数据库系统根据其应用环境的不用,往往还需要一些特殊的约束条件。关系模型应提供给定义和检验这类完整性的机制,以便用统一的系统的方法处理它们,减轻应用程序的负担。

参考

  • 数据库系统概论