关系型数据库介绍
关系模型
关系数据结构
域: 一组具有相同数据类型的值的集合。
比如整数、性别。
笛卡尔积: 一组域中,所有域的所有取值的任意组合的一个空间。
笛卡尔积可以看作关系的“域”。
例如D1域有2个值,D2域有2个值,D3域有3个值,则笛卡尔积为2X2X3=12
关系: 笛卡尔积的子集叫做域上的关系,表示为:R(D1, D2,…,Dn)
R:关系名 n:关系的目(度)
元组: 关系中每一个元素(d1,d2…dn)称为一个元组,用t表示。(一行)
属性: 关系中不同列可以对应相同的域,每个列都是一个属性。(一列)
码: 就是键
分量必须去原子值:(也就是每格都要是不能再拆分的状态)
关系模式: 关系模式是型,关系是值。(表的结构)
关系模式可以形式化的表示为:R(U,D,DOM,F)
R关系名,U属性名集合,D域,DOM属性向域的映像集合,F属性间数据的依赖
简记为:R(U)或R(A1,A2,A3)
关系完整性约束
- 实体完整性
- 参照完整性
- 用户定义的完整性
前二者是关系模型必须满足的约束条件,也被称为关系的不变性。(系统支持)
第三者是应用领域中的语义约束。(用户支持)
实体完整性 关系的主属性不能取空值(主键不能为空)
参照完整性 关系与关系之间的引用(外键是其他表的主键)
参照完整性规则:
若属性F是基本关系R的外码,他与基本关系S的主码Ks相对应,
则对于R中每个元组在F上的值必须为:
- 或者取空值
- 或者等于S中某个元组的主码值
用户定义完整性 针对具体关系数据库的约束条件(属性的取值范围)
关系代数
关系代数是一种抽象的查询语言,它用对关系的运算来表达查询。
- 运算对象是关系
- 运算结果也是关系
- 运算符有两类:集合运算符、关系运算符
一些符号:
R:关系模式R(A1,A2..An)的一个关系
t∈R:t是R的一个元组
A:属性组
t[Ai]:t中相应于属性Ai的一个分量
-A:除去A中属性后剩余的属性组(补集)
tr ^ ts:元组的连接(首尾相接)
Zx:一个属性为x的集合里,z元素的集合
传统集合操作
集合运算符 | ∪ | − | ∩ | × |
---|---|---|---|---|
含义 | 并 | 差 | 交 | 笛卡尔积 |
并运算: 目数相同相应属性取自同一个域,元组叠加。
差运算: 目数相同相应属性取自同一个域,元组相减。
交运算: 目数相同相应属性取自同一个域,保留相同元组。
笛卡尔积: 二者属性叠加,二者元组随机排列不重复。
关系特有操作
关系运算符 | σ | π | ⋈ | ÷ |
---|---|---|---|---|
含义 | 选择 | 投影 | 链接 | 除 |
选择: 从关系R中选取表达式F值为真的元组。
投影: 从关系R中选取部分属性。
等值链接: 选取两个关系的笛卡尔积中满足条件的元组。
自然链接: 选取两个关系的笛卡尔积中重复属性相同的元组。
外链接: 选取两个关系的自然连接,不丢弃属性和元组,空位填NULL。
左外链接: 类似外连接,不丢弃左操作数属性和元组,空位填NULL。
右外链接: 类似外连接,不丢弃右操作数属性和元组,空位填NULL。
除: R中与S不同属性的值,像集覆盖S中于R同属性者,组成关系。
关系演算
关系演算是以数理逻辑中的谓词演算为基础,按照谓词变元不同,可分为:
- 元组关系演算:
以元组变量为谓词变元的基本对象,元组关系演算语言ALPHA - 域关系演算:
以域变量作为谓词变元的基本对象,域关系演算语言QBE
元组关系演算 ALPHA
语句格式:GET 工作空间名(表达式1)[:条件][DOWN|UP 表达式2]
**表达式1:**指定语句的操作对象关系名|关系名.属性名|元组变量.属性名|集函数[, ...]
**条件:**结果元组应该满足的条件逻辑表达式
**表达式2:**指定排序方式关系名.属性名|元组变量.属性名[, ...]
1 | #例1:查询所有选修课程号码: |
元组变量的含义: 表示可以在某一关系变化范围内变化。
元组变量的用途: 简化关系名,使用量词时必须用元组变量。
定义元组变量:RANGE 关系名 变量名
域关系演算 QBE
QBE操作框架:
关系名 | 属性名 | 属性名 | 属性名 |
---|---|---|---|
操作命令 | 元组属性值/查询条件/操作命令 | 同左 | 同左 |