一、关系操作
1.基本的关系操作
常用的关系操作:
查询(Query)操作和插入(Insert)、删除(Delete)、修改(Update)操作两大部分。
关系的查询表达能力很强,是关系操作中最主要的部分。
查询操作又可以分为:
选择(Select)、投影(Project)、连接(Join)、除(Divide)、并(Union)、差(Except)、交(Intersection)、笛卡尔积等。
其中选择、投影、并、差、笛卡尔积是5种基本操作。
其他操作是可以用基本操作来定义和导出的。就像乘法可以用加法来定义和导出一样。
关系操作的特点是集合操作方式,即操作的对象和结果都是集合。这种操作方式也称为一次一集合(set-at-a-time)的方式。相应地,非关系数据模型的数据操作方式则为一次一记录(record-at-a-time)的方式。
2.关系数据语言的分类
关系代数语言
用对关系的运算来表达查询要求
代表:ISBL
关系演算语言
用谓词来表达查询要求。
- 元组关系演算语言:谓词变元的基本对象是元组变量
代表:APLHA,QUEL - 域关系演算语言:谓词变元的基本对象是域变量
代表:QBE
具有关系代数和关系演算双重特点的语言
代表:SQL (Structured Query Language)
二、关系的完整性
关系模型中有三种完整性:实体完整性、参照完整性和用户定义的完整性。
其中,实体完整性和参照完整性是关系模型中必须满足的完整性约束条件,被称作是关系的两个不变性。
名词解释:
- 候选码:属性组(单个属性也可做一组),该属性组的值能唯一地标识一个元组,而其子集不能。
- 主属性:候选码里的诸属性。
- 非码属性:不在任何候选码中的属性。
- 主码:若有多个候选码,选定其中一个为主码(即主码是候选码中的一个)。
- 外码:一个或一组属性。不是本关系的码,且是另一个关系的主码。本关系为参照关系,另一个关系为被参照关系。
1.实体完整性(Entity Integrity)
实体完整性规则
若属性A是基本关系R的主属性,则A不能取空值
若主码由若干属性组成,则所有这些主属性都不能取空值。
空值:
“不知道”、“不存在”、“无意义”……不是0
说明:
- 实体完整性的规则是针对基本关系而言的。一个基本表通常对应显示世界的一个实体集
- 现实世界中的实体是可区分的,即它们有某种唯一性标识
- 相应的,关系模型中以主码作为唯一标识
- 主码中的属性即主属性不能取空值
2.参照完整性(Referential Integrity)
参照完整性规则
若属性或属性组F是基本关系R的外键,它与基本关系S的主键Ks相对应(基本关系R和S不一定是不同的关系),则对于R中的每个元组在F上的值必须为:
(1)空值,F的每个属性值均为空值。
(2)S中某个元组中的主键值(主码值)。
即参照的关系中的属性值必须能够在被参照关系找到或者取空值,否则不符合数据库的语义。
在实际操作时如更新、删除、插入一个表中的数据,通过参照引用相互关联的另一个表中的数据,来检查对表的数据操作是否正确,不正确则拒绝操作。
参照关系—→被参照关系(目标关系)
显然,目标关系S的主码Ks和参照关系R的外码F必须定义在同一个(或同一组)域上。
引用关系
同一关系
在参照完整性规则中,R和S可以是同一个关系。
在学生(学号,姓名,性别,年龄,专业号,班长)关系中,“学号”属性是主键,“班长”属性表示该学生所在班级的班长的学号,因此它应用的本关系“学号”属性。按照参照完整性规则,“班长”属性可以取以下两类值:
(1)空值,表示该学生所在班级尚未选出班长。
(2)非空值,该值必须是本关系中某个元组的学号值,即某个当选班长的学生的学号值。
两个关系间
如学生实体和专业实体可以用下列关系模式来表示,其中学号是学生的主键,专业号是专业的主键:
学生(学号,姓名,性别,专业号,年龄)
专业(专业号,专业名)
这两个关系之间存在着属性的引用(含有相同的属性“专业号”),学生关系引用了专业关系的主键“专业号”,专业号则是学生关系的外键。而且按照参照完整性规则,学生关系(并非专业关系)中的每个元组的“专业号”属性只能取两种值:
(1)空值,表示尚未给学生分配专业。
(2)非空值,这时该值必须是专业关系中某个元组的“专业号”值,表示该学生不可能分配到一个不存在的专业中去。就是说学生关系中的某个属性的取值需要参照专业关系的属性取值。
两个以上的关系
两个以上的关系也可以存在引用关系,学生、课程、选课(学生与课程)之间的联系可以用下列三个关系来表示:
学生(学号,姓名,性别,专业号,年龄)
专业(专业号,专业名)
选课(学号,课程号,成绩)
这里的“学号”和“课程号”属性都是选课关系的外键,但只有“学号”和“课程号”联合起来才能确定选课的关系,所以这里存在一个复合主键关系,(学号,课程号)是选课关系的主键。虽然按照参照完整性可以取两类值,但是由于实体完整性,复合主键中的每个属性均不能取空值。所以选课关系中的”学号“和”课程号”属性实际上只能取被参照关系(学生关系和专业关系)中已经存在的主键值。即选课关系中的“学号”值必须是确实存在的学生的学号,学生关系中有该学生的记录;选课关系中的“课程号”值也必须是确定存在的课程的课程号,即课程关系中有该课程的记录。
3.用户定义的完整性(User-defined Integrity)
用户自定义完整性指针对某一具体关系数据库的约束条件,它反映某一具体应用所涉及的数据必须满足的语义要求。
某个属性必须取唯一值、某个非主属性也不能取空值的
用户定义完整性可以涵盖实体完整性、域完整性、参照完整性等完整性类型。
例如某个属性必须取唯一值,某个非主属性也不能取空值,某个属性的取值范围在0-100之间等