关系模型中有三类完整性约束:
- 实体完整性
- 参照完整性
- 用户定义的完整性
其中实体完整性、参照完整性是关系模型必须满足的完整约束条件,称为关系的两个不变性,应该由关系系统自动支持。
实体完整性
实体完整性规则:是指若属性A是基本关系R的主属性,则属性A不能取空值。
空值就是“不知道”或“不存在”
1 | 比如在研究生(导员,专业,名字)中研究生不会重名,也就是名字是主码,不能取空值 |
实体完整性规则的说明:
- 实体完整性规则是针对基本关系而言的。一个基本表通常对应现实世界的一个实体集
- 现实世界中的实体是可去分的,即它们具有某种唯一性标识
- 关系模型中以主码作为唯一标识。这里有一个小技巧就是当我们不知道用什么来当主码的话,就采用编号
- 主码中的属性即主属性不能取空值
其实就一句话表里面的的主码不能为空值,任意两个元组或者任意两个记录当中的主码,是不能相通的。
参照完整性
- 关系间的引用:在关系模型中实体及实体间的联系都是用关系来描述的,存在着关系与关系间的引用。
比如左边单个实体的专业号必须得在专业中确实存在。要注意的是这在多对多和内部也适用。 - 外码:设F是基本有关系R的一个或一组属性,但不是关系R的码。如果F与基本关系S的主码$K_S$相对应,则称F是基本关系的外码。用上图专业码照样可以解释。
- 基本关系R被称为参照关系
- 基本关系S被称为被参照关系
- R和S有可能是同一个表
- 外码并不一定要与相应的主码同名
外码 F 不是关系 R 的主码,但 F 必须是关系 S 的主码。这正是外码的定义要求!
- 参照完整性规则:若属性(或属性组)F是基本关系R的外码,它与基本关系S的主码$K_S$相对应(基本关系R和基本关系S不一定是不同的关系),则对于R中每个元组在F上的值必须为:
- 或者取空值(F的每个属性值均为空值)
- 或者等于S中某个元组的主码值
举例如图:
用户定义的完整性
前两个是数据库定义上的,比如主码不能为空,数据之间要有关系。而这个是根据我们现实当中的需求来定义的。
比如课表(课程号,课程名,学分)中,课程号必须取唯一值,学分只能取1,2,3,4。这些不是由程序设计的,而是我们人为设计。
说些什么吧!