# 实体完整性
每个关系表都应该有主属性,主属性不能取空值,且不能重复。
例如:
学生(学号,姓名,性别,专业号,年龄)关系中学号为主码,则学号不能取空值,且不能重复。
# 参照完整性
# 外码与参照
现实世界中的实体之间往往存在某种联系,在关系模型中实体及实体间的联系都是用关系来描述的,这样就自然存在着关系与关系间的引用。
例如:
学生(学号,姓名,性别,专业号,年龄),专业(专业号,专业名称)
这两个关系之间存在着属性的引用,即学生关系引用了专业关系中的主码“专业号”。显然,学生关系中的“专业号”必须在专业关系中能够找到。
假设存在关系 R 和 S :R(A, B, C) 、S(B, D) 。 B 是关系 “R” 的一个属性,同时 B 又是关系 “S” 的主码。称 B 是关系 “R” 的外码,关系 “R” 为参照关系,关系 “S” 为被参照关系或目标关系。
关系 “R” 和关系 “S” 不一定是不同的关系,同一关系的内部属性间也可以存在引用情况。
例如:
学生(学号,姓名,性别,专业号,年龄,班长)
班长的属性表示学生所在班级班长的学号,班长的域与学号的域相同,班长的学号需要在学生关系中能够找到。
需要指出的是,外码不一定要与相应的主码同名。不过,在实际应用中为了便于识别,当外码与相应的主码属于不同关系时,往往它们取相同的名字。
# 参照完整性规则
参照关系中外码的值必须在被参照关系中实际存在或为 null 。
学生的专业号要么为空,表示还没有分配专业;要么必须在专业表中存在。
# 用户定义的完整性
任何关系数据库系统都应该支持实体完整性和参照完整性。这是关系模型所要求的。除此之外,不同的关系数据库系统根据其应用环境的不用,往往还需要一些特殊的约束条件。关系模型应提供给定义和检验这类完整性的机制,以便用统一的系统的方法处理它们,减轻应用程序的负担。