• 针对集合进行,即操作的对象是元组的集合,操作后所得到的结果也是元组的集合。
• 非关系模型(网状模型和层次模型)的操作对象是一个元组。
• 2.1.3 关系的完整性约束
关系是关系模型的数据结构。关系需要满足一些基本要求——关系的完整性约束。
完整性约束包括:实体完整性约束、参照完整性约束、用户定义的完整性约束。
1.实体完整性
Ø 每一个关系中的主码属性的值不能为空(NULL),能够唯一标识对应的元组。
原因:主码设置的目的是用于区分关系中的元组,以将各个元组区别开来。如果主码中的属性值可以为空,那么在关系中将存在一些不确定的元组,这些元组将不知道是否能够与别的元组有区别(因为空值被系统理解为“不知道”或“无意义”的值),这在关系模型中是不允许的。各个元组在主码上的取值不允许相等,否则就不满足实体完整性约束。
Ø 实体完整性是关系模型必须满足的完整性约束条件。
【例2.1】考虑如表2.3所示的学生关系student(学号, 姓名, 性别, 专业号)和表2.4所示的课程关系course(课程号, 课程名, 学分)。假设学生关系的主码为“学号”,课程关系的主码为“课程号”,那么学生关系的“学号”以及课程关系的“课程号”的取值就不能为空,而且取值不能重复(能唯一标识每一行),否则就不满足实体完整性。
2. 参照完整性
Ø 参照完整性与外码密切相关,这里先介绍外码的概念。
Ø 对于关系R和S,假设F是关系R的一个属性或一组属性,但F不是R的码,K是关系S的主码,且F与K相对应(或相同),则F称为R的外码(Foreign key),R和S分别称为参照关系(Referencing relation)和被参照关系(Referenced relation),如图2.1所示。
• F与K是相同的属性或属性集,它们的取值范围相同。
• 关系模型的参照完整性约束:外码F中的每个属性值等于主码K的某一个属性值或F的每个属性值均为空值。
• 如果要在关系R中插入一个元组,则该元组在属性F上的取值等于关系S中某一个元组在主码K上的取值或全置为空值,否则不能插入该元组。当关系S为空时,不能向关系R中插入元组;当要删除关系S中的一些元组时,必须先删除关系R中与这些元组相关联的元组。
• 参照完整性也是关系模式必须满足的完整性约束条件。
【例子】选课关系SC(学生编号, 课程编号, 成绩),如表2.5所示。可见属性组{学生编号,课程编号}为该关系的主码。
属性“学生编号”是选课关系的外码,它与关系“student(学号, 姓名, 性别, 专业号)”的主码“学号”相对应,选课关系为参照关系,学生关系为被参照关系,“课程编号”同理。