关系的完整性
关系模型的完整性规则是对关系的某种约束条件。也就是说关系的值随着时间变化时因该满足一些约束条件。这些约束条件实际上是现实世界的要求。任何关系在任何时刻都要满足这些语义约束。
关系模型中有三类完整性约束:实体完整性,参照完整性和用户定义的完整性 。其中实体完整性和参照完整性是关系模型必须满足的完整性约束条件,被称为关系的两个不变性,应该由关系系统自动支持。用户定义的完整性是应用领域需要遵循的约束条件,体现了具体领域中的语义约束。
实体完整性
实体完整性规则:若属性(指一个或一组属性)A是基本关系R的主属性,则A不能取空值(null value)。所谓空值就是“不知道”或“不存在”或“无意义”的值。实体完整性规则说明如下:
- 实体完整性规则是针对基本关系而言的。一个基本表通常对应现实世界的一个实体集。
- 现实世界中的实体是可区分的,即他们具有某种唯一性标识。
- 相应的,关系模型中以主码作为唯一性标识。
- 主码中的属性即主属性不能取空值。如果主属性取空值,就说明存在某个不可标识的主体,即存在不可区分的实体,这与第2点相矛盾,因此这个规则称为实体完整性。
设F是基本关系R的一个或一组属性,但不是关系R的码,Ks是基本关系S的主码。如果F与Ks相对应,则称F是R的外码,并称基本关系R为参照关系,基本关系S为被参照关系或目标关系。关系R和S不一定是不同的关系。
- 参照完整性
若属性(属性组)F是基本关系R的外码,它与基本关系S的主码Ks相对应(基本关系R与S不一定是不同的关系),则对于R中的每个元组在F上的值必须:- 或者取空值(F的每个属性值均为空值)
- 或者等于S中某个元组的主码值。
- 用户定义的完整性
任何关系数据库系统都应该支持实体完整性和参照完整性。这是关系模型所要求的。除此之外,不同的关系数据库系统根据其应用环境的不同,往往还需要一些特殊的约束条件。用户定义的完整性就是针对某一具体关系数据库的约束条件,它反应某一具体应用所涉及的数据必须满足的语义要求。 关系模型应提供定义和检验这类完整性的机制,以便用统一的系统的方法处理它们,而不需要由应用程序承担这一功能