第二章关系数据库-第二节、第三节:关系操作和关系完整性
一:关系操作
(1)基本的关系操作
关系模型常用关系操作如下。
关系操作的特点是集合操作方式,也即操作的对象和结果都是集合。也称为一次一集合(set-at-a-time)的方式
- 非关系数据模型的数据操作方式称为一次一记录(record-at-a-time)
(2)关系数据语言的分类
关系数据语言可分为三类,如下
下面是SQL的了解性内容,可不看(下一章将会重点介绍)
特别地,SQL语言是一种高度非过程化的语言,用户不必请求数据库管理员为其建立特殊的存取路径,存取路径的选择由关系数据库管理系统的优化机制来完成。例如,在一个存储有几百万条记录的关系中查找符合条件的某一个或某一些记录,从原理上讲可以有多种查找方法。例如,可以顺序扫描这个关系,也可以通过某一一种索引来查找。不同的查找路径(或者称为存取路径)的效率是不同的,有的完成某一个 查询可能很快,有的可能极慢。关系数据库管理系统中研究和开发了查询优化方法,系统可以自动选择较优的存取路径,提高查询效率
二:关系完整性约束
关系完整性规则是对关系的某种约束条件,这些约束条件实际上是现实世界的要求,例如性别只能有男、女两种取值
关系模型中有如下三类完整性约束
- 实体完整性(entity integrity)
- 参照完整性(referential integrity)
- 用户自定义完整性(user-defined integrity)
其中实体完整性和参照完整性是关系模型必须满足的完整性约束条件,被称为关系的两个不变性
(1)实体完整性
实体完整性:若属性A是基本关系的主属性,则属性A不能取空值
- 例如“选修(学号,课程号,成绩)”关系中,若(学号,课程号)为主码,则学号和课程号都不能取空值
(2)参照完整性
A:参照关系
(注意在关系表示中,下划线表示主码)
【例1】如下两个关系中,学生关系引用了专业关系的主码“专业号”,也就是说,学生关系中的某个属性的取值需要参照专业关系的属性取值
【例2】如下三个关系中,选修关系引用了学生关系的主码“学号”和课程关系的主码“课程号”,也就是说,选修关系中某些属性的取值需要参照其他关系的属性取值
【例3】还有,同一关系内部也可能存在引用关系。比如在学生(学号,姓名,性别,专业号,年龄,班长)关系中,“学号”属性是主码,“班长”属性表示该学生所在班级的班长的学号,它引用了本关系“学号”属性,即“班长”必须是确实存在的学生的学号
B:外码
外码:设是基本关系的一个或一组属性,但不是关系的码【例如这里是学生关系的专业号】,是基本关系的主码【例如这里是专业关系的主码】。若和相对应,则称是的外码(foreign key)【则称专业号是学生关系的外码】,并称基本关系为参照关系(referencing relation)【这里学生关系就是参照关系】,基本关系S为被参照关系(referenced relation)【这里专业关系就是被参照关系】。关系和不一定是不同的关系
- 注意:外码并不一定要与相应的主码同名,如上面第三个例子中,学生关系的主码为学号,外码为班长。不过,在实际应用中为了便于识别,当外码与相应的主码属于不同关系时,往往给它们取相同的名字。
上面三个例子的参照关系表示如下
C:参照完整性规则
参照完整性:若属性或属性组是基本关系的外码,它与基本的主码相对应(关系和不一定是不同的关系),则对于中每个元组在上的值必须
- 要么取空值(此时的每个属性值均为空值)
- 要么等于中某个元组的主码值
因此对于【例1】,学生关系中每个元组的专业号只能取下面两类值
- 空值:表示该学生尚未分配专业
- 非空值(且该值必须是专业关系中某个元组的专业号值):表示该学生不能分配到一个不存在的专业中
而对于【例2】,按照道理来说“学号”和“课程号”也可以取两类值,但是“学号”和“课程号”它作为的是选修关系的主码,所以如果取空值的话将会违背实体完整性规则
对于【例3】,和是同一个关系,“班长”可以取两类值
- 空值:该班还没有选出班长
- 非空值:班长必须是班里的同学
(3)用户自定义完整性
用户自定义完整性1针对某一具体关系数据库的约束条件,反映某一具体应用所涉及的数据必须满足的语义要求,例如某个属性必须取唯一值,某个非主属性不能取空值等等
#考研##数据库#数据库系统概论王珊第五版笔记