一、概念
-
关系模型源于数学,关系是由元组构成的集合,可以通过关系的运算来表达查询要求
-
关系代数是关系操作语言的一种传统的表示方式,它是一种抽象的查询语言
-
关系代数的运算可分为两大类:
- 传统的集合运算:
- 广义笛卡尔积
- 并
- 交
- 差
- 专门的关系运算:
- 选择
- 投影
- 连接
- 除
- 传统的集合运算:
二、传统的集合运算
1、符号
1)R,t ∈ R,t[Ai]
设关系模式为R(A1,A2,…,An)
- R是关系模式 R(A1,A2,…,An) 的一个关系
- t ∈ R:表示 t 是 R 的一个元组
- t[Ai]:表示元组 t 中相应于属性 Ai 的一个分量
2)A,t[A], A ‾ \overline{A} A
- 若 A = {Ai1,Ai2,…,Aik},其中 Ai1,Ai2,…,Aik 是 A1,A2,…,An 中的一部分,则 A 称为属性列或属性组
- t[A] = (t[Ai1],t[Ai2],…,t[Aik]) 表示元组 t 在属性列 A 上诸分量的集合
- A ‾ \overline{A} A 则表示 {A1,A2,…,An} 中去掉 {Ai1,Ai2,…,Aik} 后剩余的属性组
3)tr︵ts
设 R 为 n 元关系,S 为 m 元关系
- tr ∈ R,ts ∈ S,tr︵ts 称为元组的连接
- tr︵ts 是一个 n + m 列的元组。前 n 个分量为 R 中的一个 n 元组,后 m 个分量为 S 中的一个 m 元组
4)象集
- 给定一个关系 R(X,Y),X 和 Y 为属性组
- 当 t[X] = x 时,x 在 R 中的象集(Images Set)为:Yx = { t[Y] | t ∈ R,t[X] = x}
- 它表示 R 中的属性组 X 上值为 x 的诸元组,在 Y 上分量的集合
2、∪ 并(Union)
合并,去重
- R 和 S
- 具有相同的元 n (即两个关系都有 n 个属性)
- 相应的属性取自同一个域
- R ∪ S
- 仍为 n 元关系,由属于 R 或属于 S 的元组组成:R ∪ S = { t | t ∈ R v t ∈ S}
- v :表示或
3、- 差(Difference)
减掉相同的
- R 和 S
- 具有相同的元 n
- 相应的属性取自同一个域
- R - S
- 仍为 n 元关系,由属于 R 而不属于 S 的所有元组组成
4、∩ 交(Intersection)
只取相同的
-
R 和 S
- 具有相同的元 n
- 相应的属性取自同一个域
-
R ∩ S
-
仍为 n 元关系,由既属于 R 又属于 S 的元组组成
R ∩ S = { t | t ∈ R ∧ t ∈ S}
R ∩ S = R - ( R - S )
-
∧:表示与
-
5、x 笛卡尔积(Cartesian Product)
相乘
- 严格地讲应该是广义的笛卡尔积
- R:n 目关系,K1 个元组,S:m 目关系,K2 个元组
- R X S
- 列:(n + m) 列元组的集合
- 元组的前 n 列是关系 R 的一个元组
- 后 m 列是关系 S 的一个元组
- 行:K1 X K2 个元组
- R x S = { tr︵ts | tr ∈ R ∧ ts ∈ S}
- 列:(n + m) 列元组的集合
6、总结
传统运算 | 表示 | 含义 |
---|---|---|
并 ∪ | R ∪ S = { t | t ∈ R v t ∈ S} v (或),t 属于R,或者属于S | 合并,去重 |
差 - | R - S 从R中减去S,保留R中剩余的 | 去重 |
交 ∩ | R ∩ S = { t | t ∈ R ∧ t ∈ S} v (与),t 属于R,也属于S | 交集 |
积 x | R x S = { tr︵ts | tr ∈ R ∧ ts ∈ S} tr 属于 R,并且 ts 属于 S | 相乘 |
三、专门的关系运算
实例:学生课程数据库
- 学生表
- 课程表
- 成绩表
1、σ 选择(Selection)
2、Π 投影(Projection)
3、 ⋈ \bowtie ⋈ 连接(Join)
4、÷ 除(Division)
参考:https://blog.csdn.net/Imomoco/article/details/102727039
四、键、属性
- 候选键=候选码:能够唯一标识一条记录的最小属性集
- 主键=主码:某个能够唯一标识一条记录的最小属性集(是从候选码里人为挑选的一条)
- 外键(foreign key):子数据表中出现的父数据表的主键,称为子数据表的外键
- 主属性 包含在任一候选码中的属性称主属性。简单来说,主属性是候选码所有属性的并集
- 非主属性 不包含在候选码中的属性称为非主属性。 非主属性是相对于主属性来定义的
找候选键
- 把函数依赖集转化成有向图,入度为0的点一定是候选键(候选键可以有多个)
- 如果没有入度为0的点,就找可以走完全图的点,该点就是候选键