关系数据库
关系数据库
1. 关系数据模型
一种被广泛使用的实现数据模型
关系数据结构
- 关系数据模型中使用的唯一数据结构:关系
- 实际上就是一张二维表
- 行:元组,表示对象
- 列:属性,表示对象的性质
- 数学定义:$R(D_1, D_2,…, D_n)$为$D_1 \times D_2 \times … \times D_n$的子集
- 关系R的元组$(d_1, d_2, …, d_n) \in R$
- 只有符合客观实际的关系才是正确的关系
- 实际上就是一张二维表
- 关系的键(用来区分不同的元组)
- 超键
- 如果关系的某一组属性的值能唯一标识每个元组
- 候选键
- 如果一个超键的任意真子集都不是超键(极小的超键)
- 主键
- 每个关系都至少有一个候选键,人为指定其中一个作为主键
- 外键
- F是关系R的属性子集。若F与关系S的主键K相对应,则F是R的外键
- R为参照关系
- S为被参照关系
- F是关系R的属性子集。若F与关系S的主键K相对应,则F是R的外键
- 超键
关系操作
- 增删查改
- 查询语言:用于表示关系操作的语言
- 关系代数
- 使用关系代数表达式明确给出查询的执行过程
- 关系演算
- 使用谓词逻辑表达式描述查询
- 元组关系演算:谓词逻辑变量是元组
- 域关系演算:谓词逻辑变量是域
- 结构化查询语言SQL
- 关系代数
关系完整性约束
关系数据库中的所有数据必须满足的约束关系
- 实体完整性
- 关系中任意元组的主键值必须唯一
- 关系中任意元组的主键中的属性值非空
- 参照完整性
- 外键必须满足以下两个条件之一
- F的值为空
- 若F的值不为空,则F的值必须在S中存在
- 外键必须满足以下两个条件之一
- 用户定义完整性
2. 关系代数
使用关系代数表达式明确给出查询的执行过程
选择操作
- 功能:从一个关系中选出满足给定条件的元组
- 语法:$\sigma_\theta(R)$
- $\sigma$:选择操作符
- $R$:关系名
- $\theta$:条件表达式
投影操作
- 功能:从一个关系中选出指定的列,并去掉重复元组
- 语法:$\sqcap_L(R)$
- $\sqcap$:投影操作符
- $R$:关系名
- $L$:投影属性列表
并操作
- 功能:计算关系R和S的并集
- 语法:$R\cup S$
差操作
- 计算关系R和S的差集
- 语法:$R - S$
- 要求:R和S必须具有相同个数的属性;R和S对应属性的值域必须相容
笛卡尔积操作
- 功能:计算两个关系的笛卡尔积
- 语法:$R \times S$
- 通常和选择操作一起使用,即连接(join)
重命名操作
- 功能:修改关系名或属性名
- 语法:
- $\rho_{B\leftarrow A}(R)$:将关系R的属性A更名为B
- $\rho_S(R)$:将关系R更名为S
- $\rho_{S(A_1, A_2,…,A_n)}(R)$:将关系R更名为S,并将R的全部属性更名为$A_1, A_2,…,A_n$
- 当把一个关系和它自身进行自连接时,需要区分同一个关系的两个副本。此时需要重命名操作
派生关系代数操作
用来简化查询编写
- 任何一项派生关系代数操作都可以用基本关系代数操作来表示
交操作
- 功能:计算关系R和S的交集
- 语法:$R\cap S$
- 要求
- R和S必须具有相同个数的属性
- R和S对应属性的值域必须相容
内连接
- R和S的内连接的结果只包含R和S中满足连接条件的元组,不满足的均不会出现在连接结果中
$\theta$连接
- 功能:将关系R和S中满足给定连接条件$\theta$的元组进行连接
- 语法:$R\Join_\theta S$
- 属性:$R\Join_\theta S = \sigma_\theta(R \times S)$
- 同名属性是会都保留的,前面加上关系名前缀
等值连接
- 连接条件$\theta$仅涉及相等比较的$\theta$连接
自然连接
- 功能:从连接结果中去掉重复的同名属性
- 语法:$R\Join S$
外连接
- 还需保留R或S中不满足连接条件的元组
左外连接
- 语法:$R$ $⟕_\theta$ $S$
- 功能:对于R中不满足给定条件$\theta$的元组,包含该元组,但是S中属性的值为空
- 左外自然连接
- 语法:$R$ $⟕$ $S$
右外连接
- 语法:$R$ $⟖_\theta$ $S$
- 功能:相反
- 右外自然连接
- 语法:$R$ $⟖$ $S$
全外连接
- 语法:$R$ $⟗_\theta$ $S$
- 全外自然连接
- 语法:$R$ $⟗$ $S$
反连接
- 功能:找出R中不满足与S的连接条件$\theta$的元组
- 语法:$R\rhd_\theta S$
- 自然反连接
- 语法:$R\rhd S$
除
- 功能:结果为使得$S\times T \subseteq R$的最大的关系T,它只包含R中的属性,但不包含S中的属性
- 语法:$R\div S$
扩展关系代数操作
基本关系代数操作的查询功能有限,所以引入扩展关系代数操作,以增强其查询能力
分组操作
- 对一个关系中的元组进行分组,分组属性值相同元组的分为一组
- 对每个组中元组的非分组属性的值进行聚集
- 计数count、求最小值min、求最大值max、求和sum、求平均值avg
$\gamma_{Sdept, Sex; count(*)->cnt}(Student)$
Sdept | Sex | cnt |
---|---|---|
Physics | M | 1 |
CS | F | 1 |
CS | M | 1 |
Math | F | 2 |
赋值操作
略略略…
This post is licensed under CC BY 4.0 by the author.