2.1 关系数据结构及形式化定义
2.1.1 关系
1. 域(domain)
一组具有相同数据类型的值的集合
2. 笛卡儿积
域上的一种集合运算,笛卡儿积是不同域的所有元素的所有组合
一个域允许的不同取值个数称为这个域的基数
3. 关系
- 候选码:关系中的能唯一地标识一个元组而其子集不能的某一属性组的值,若有多个,选定其中一个为主码
- 候选码的各个属性称为主属性,不包含的称为非主属性
- 所有属性都是候选码,则称为全码
关系可以有三种类型:
- 基本关系:实际存在的表,实际存储数据的逻辑表示
- 列是同质的
- 不同的列可出自同一个域
- 行、列的顺序无所谓
- 任意两个元组的候选码不能取相同的值
- 分量必须取原子值,即不可分的数据项
- 查询表:查询结果对应的表
- 视图表:基本表或其他视图表导出的表,虚表
2.1.2 关系模式
2.2 关系操作
2.2.1 基本的关系操作
- 查询操作:选择、投影、连接、除、并、差、交、笛卡儿积(加粗的为基本操作)
- 插入、删除、修改操作
特点:操作的对象和结果都是集合,又称为一次一集合(set-at-a-time)方式
2.2.2 关系数据语言的分类
- 关系代数(代数方式)
- 关系演算(逻辑方式):按照谓词变元分为元组关系演算和域关系演算
- 结构化查询语言(SQL):集查询、数据定义语言、数据操纵语言和数据控制语言于一身的关系数据语言,高度非过程化
2.3 关系的完整性
- 实体完整性:必须满足,关系的两个不变性之一
- 参照完整性:必须满足,关系的两个不变性之一
- 用户定义的完整性:应用领域需要遵循的约束条件
2.3.1 实体完整性
若属性(值一个或者一组属性)A是基本关系R的主属性,则A不能取空值(null value)。所谓空值就是不知道或者不存在或无意义的值。
关系数据库中的每个元组是可以区分的,是唯一的。
2.3.2 参照完整性
关系与关系之间是有关系的
参照关系的定义:
参照完整性规则就是定义外码与主码之间的引用规则
2.3.3 用户定义完整性
来源于应用的多样性
2.4 关系代数
2.4.1 传统的集合运算
只有模式相同的两个对象才能做传统的集合运算
- 并
- 差
- 交
- 笛卡儿积
2.4.2 专门的关系运算
引进几个记号
选择(selection)
投影(project)
连接(join)
最常用的操作,相当于在两个关系的笛卡儿积上做一个选择运算
- 等值连接:θ为“=”的连接运算
- 自然连接 :是一种特殊的等值连接,要求两个关系中进行比较的分量必须是同名的属性组,并且在结果中把重复的属性列去掉。
- 悬浮元组(dangling tuple):自然连接时被舍弃的元组
- 外连接(outer join):把悬浮元组也保存在结果关系中,而在其他属性上填空值。
- 左外连接:只保留左边关系R的悬浮元组
- 右外连接:只保留右边关系S的悬浮元组
除(divison)