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