二,关系数据库
2.1,关系数据结构及其形式化定义
2.1.1关系
- 域:是一组具有相同数据类型的值的集合
- 笛卡尔积:给定几组域,D1,D2…Dn,笛卡尔积定义为D1×D2×…×Dn
- 关系:笛卡尔积在域上的子集称为关系,表示为R(D1,D2,…,Dn)
- n=1时称为单元关系
- n=2时称为二元关系
- 候选码:若关系中的某一属性组的值能唯一的标识一个元组,而其子集不能,则称该属性为候选码。
- 主码:若一个关系中有多个候选码,则选定其中一个为主码
- 主属性:候选码的诸多属性称为主属性
- 非主属性:不包含任何候选码中的属性称为非主属性或非码属性
关系可以有三种类型:
- 基本关系(基本表或者基表)
- 查询表
- 视图表
基本关系有以下6种性质:
- 列是同质的:即每一列的分量是同一类型的数据,来自同一个域
- 不同的列可出自同一个域,称其中的每一列为一个属性,不同的属性要给予不同的属性名
- 列的顺序无所谓
- 任意两个元组的候选码不能取相同的值
- 分量必须取原子值,即每一个分量都必须是不可分的数据项
最基本的一条就是,关系的每一个分量必须是一个不可分的数据项
2.1.2关系模式
- 关系的描述称为关系模式
- 它可以形式的表示为R(U,D,DOM,F)
- R为关系名,U为组成该关系属性名的集合,D为U中属性所来自的域,DOM为属性向域的映像集合,F为属性间数据的依赖关系集合。
2.2关系操作
2.2.1基本的关系操作
- 选择、投影、并、差、笛卡尔积
2.2.2关系数据语言的分类
- 关系代数(例如ISBL):用对关系的运算来表达查询要求
- 关系演算:用谓词来表示查询要求
- 可按谓词变元的基本对象是元组变量还是域变量分为:
- 元组关系演算(例如ALPHA、QUEL)
- 域关系演算(例如QBE)
- 结构化的查询语言(例如SQL)
2.3关系的完整性
关系模式中有三类完整性约束:
- 实体完整性
- 参照完整性
- 用户自定义的完整性
2.3.1实体完整性
实体完整性:若属性(指一个或一组)A是基本关系R的主属性,则A不能取空值。所谓空值就不知道或不存在或无意义的值
2.3.2参照完整性
设F是基本关系R的一个或者一组属性,但不是关系R的码,Ks是基本关系S的主码。如果F与Ks对应,则成F是R的外码,并称R为参照关系,基本关系S为被参照关系或目标关系。
参照完整性:若属性(或属性组)F是基本关系R的外码,它与基本关系S的主码Ks相对应(基本关系R和S不一定是不同的关系),则对于R中每个元组在F上应满足:
- 或者取空值(F的每个属性均为空值)
- 或者等于S中某个元组的主码值
- 空值
- 非空值
2.3.3用户自定义的完整性
2.4关系代数
2.4.1传统的集合运算
- 并
- 差:R-S表示属于R不属于S
- 交
- 笛卡尔积:表中的每一行为一个元组,把几个表的每一个元组进行组合形成一个新的元组组成的表
例如:
关系R
A B C
1 2 3
4 5 6
关系S
A B
1 2
3 4
则R×S为:
R.A R.B R.C S.A S.B
1 2 3 1 2
1 2 3 3 4
4 5 6 1 2
4 5 6 3 4
R中k1个元组,m列
S中k2个元组,n列
R×S中(m+n)列,k1×k2个元组
2.4.2专门的关系运算
象集:
关系R
属性 属性列
x1 Z1
x1 Z2
x1 Z3
x2 Z1
x2 Z2
x3 Z3
属性取值x1,x2,x3
则象集:Zx1={Z1,Z2,Z3},Zx2={Z1,Z2},Zx3={Z1}
-
选择
- σF(表名),F(下标)为选择的条件,它是一个逻辑表达式
- 例如在关系R中选出年龄大于18的,σage>18®
- 等价与select *from R where age>18
-
投影:从关系中选出若干属性列组合新的关系
- ∏A(R),A为选出来的列名
- 例如从关系R中选出age、sex等字段
- 等价于select age,sex from R
-
连接:从两个关系的笛卡尔积中选择符合要求的元组
-
R▷◁S
A∅B
从R和S的笛卡尔积中选出满足 A∅B的元组
-
等值连接(特殊的一般连接):∅为=
-
自然连接(特殊的等值连接):首先找表中同名属性,然后进行等值连接,合并两个同名的属性为一个
- 悬浮元组:在R和S自然连接时,选择的是相等且同名的属性,会导致关系R中某些元组可能在S中不存在公共属性上相等的元组,从而造成R中的这些元组被舍弃,同样S的元祖也被舍弃,这些被舍弃的元祖称为悬浮元组。
- 外连接:如果把悬浮元祖也保存在结果关系中,而在其他属性上填空值(NULL),那么这种连接叫做外连接。
- 左外连接:如果只保留左边关系R的悬浮元祖叫做左外连接。
- 右外连接:如果只保留右边关系R的悬浮元祖叫做右外连接。
-
-
除运算
- R÷S
- 首先找两个表的同名属性
- 前表求象集(非同名列的),后表求投影(同名列的)
- 象集是否包含投影(投影是否是象集的子集)