关系的两个不变性:关系模型必须满足实体完整性和参照完整性这两个完整性约束条件。
2.3.1 实体完整性
若属性A是基本表R的主属性,则属性A不能取空值。即主码的各个属性都不能取空。
2.3.2 参照完整性
(1)关系间的引用:
如,不同关系间的引用:
学生(学号,姓名,性别,专业号,年龄)
专业(专业号,专业名)
学生关系中引用了专业关系的主码“专业号”,且专业号必须是确实存在的专业号。
又如,同一关系中的自我引用:
学生(学号,姓名,班长)
学号 | 姓名 | 班长 |
---|---|---|
801 | WANG | 802 |
802 | LI | |
803 | ZHAO | 802 |
“学号”是主码,“班长”是外码,它引用了本关系的“学号”,且班长必须是确实存在的学号。
(2)外码:
若F是一个基本关系R中的一个或一组属性,但不是R的码。且F与另一个基本关系S的主码相对应,则F是R的外码。此时,R称作参照关系,S称为被参照关系。
“相对应”指的是语义上相同,如,上述第二个例中 班长 和 学号 语义上都是学号。此时,参照关系和被参照关系为同一个关系。
又如上述第一个例中:
小结:“R,S可相同”,“外码与对应主码要同域但可不同名”
(3)参照完整性规则:
即要么取空值,要么取被参照关系S中主码值。
如,选修(学号,课程号,成绩)中课程号是选修关系的外码,课程关系的主码,但与此同时,学号与课程号同时组成选修关系的主码,因此既要满足实体完整性约束,也要满足参照完整性约束,课程号不能取空。
2.3.3 用户定义的完整性
如: 课程(课程号,课程名,学分),其中 “学分”属性只能取值{1,2,3,4}。