2 关系代数

学习笔记
作者: MingXiao

2.1 基本概念

关系模型 一般称呼
关系模式 表头
关系名 表名
关系 二维表
元组 行/记录
属性
属性名 列名
属性值 列值
分量 一条记录的一个列值

关系模式:\(R(A_1,A_2,\ldots,A_n)\),如火车票记录(乘客,车次,......)

属性:有属性名和属性域定义,有属性值赋给每一个元组

元组:给定的R的一次取值,记为\(t(a_1,a_2,\ldots,a_n),a_i\in Dom(A_i)\),\(R=\{t|a_i\in Dom(A_i)\}\)

超键:任一个属性组\((A_i,A_j,A_k,...)\)称为一个键,能在关系中唯一标识一个元组的键称为超键

候选键:不含多余属性的超键,任去一个都不能称为超键

主键:选定的一个候选键

外键:派生关系的属性组,是主关系的主键,这个属性组是派生关系的外键

2.2 关系完整性约束

实体完整性约束(主键)

  1. 主键的任意属性不能取空值
  2. 主键的取值组合不能重复

参照完整性约束(外键)

  1. 删除规则:一个实体A被另一个实体B引用,那么禁止删除A实体
  2. 插入规则:被引用的元素必须在数据库中存在

用户定义完整性约束

用户自己定义的特殊约束

如:非空约束,唯一约束

自增长约束(auto_increment)

自动生成一个唯一的值用作新数据的值,一般作为主键

检查约束(check(条件))

自己定义

默认约束(default value)

跟在表的属性定义之后

2.3 关系运算

计算优先级:从左到右,有括号先括号

2.3.1 基本关系代数

选择:从关系R中获取满足条件的元组,p是谓词逻辑
\[ \sigma_p(R)=\{t|t\in R \and p(t)\} \]

投影:从R中获取某些列组成新的关系(从k个属性中取n个属性)
\[ \Pi_{A_1,A_2,\ldots ,A_n}=\{t[A_1,A_2,\ldots, A_n]|t\in R\} \]

:两个关系取并集

R,S的属性个数相同,属性存在一一对应关系,每个属性的域相同

Union 元组不可重复;Union all 元组可以重复

操作同理

笛卡尔积:与离散数学相同
\[ R\times S = \{(t,q)|t\in R \and q\in S\} \]
\(|R\times S|=|R|\times |S|\)

重命名:将关系R重命名为关系S,同时将各个属性重命名为\(A_i\)
\[ \rho_S(A_1,A_2,\ldots, A_n)(R) \]
若是\(\rho_S(R)\),则不改变属性名

2.3.2 附加关系代数

:不是基本运算,可以用\(A-(A-B)\)得到
\[ R\cap S=R-(R-S) \]
用韦恩图看看,可以求不同运算

连接:笛卡尔积加选择加投影
\[ R\Join_pS=\{(t,q)|t\in R\and q\in S\and p\left((t,q)\right)\} \]
p是选择谓词

等值连接:某两个属性值要相等

自然连接:将同一个属性中属性值相同的做等值连接
\[ R\Join S \]

外连接:特殊的自然连接,可以处理缺省值

左外连接:\(R ⟕ S\),保留左侧的属性值,若右侧没有左侧的某个值,则用NULL缺省,若左侧不存在右侧的值,则不搬运右侧的值

右外连接:\(R⟖S\),同理

全外连接:\(R⟗S\),两边都保留,即使重复了

例:

A1 B1 A2 C2
1 A 1 D
1 B 2 E
3 C 4 F

表1外连接表2得到

A B C
1 A D
1 B D
3 C NULL

表1外连接表2得到

A B C
1 A D
1 B D
2 NULL E
4 NULL F

表1外连接表2得到

A B C
1 A D
1 B D
3 C NULL
1 A D
1 B D
2 NULL E
4 NULL F

赋值:A\(\leftarrow\)E,其中E是关系运算,A是一个关系

:\(R\div S\),留下S中没有的,R中存在的属性,只保留能完全保留S中的属性的值的其余属性值;S中存在R中没有的属性,不能除

A_R B_R
a 1
a 2
a 3
b 1
b 2
B_S
1
2
3
A_R/S
a

当R中的每一个A都有所有的B时(能整除),除和笛卡尔积为逆运算

2.3.3 扩展关系代数

广义投影:允许用算术运算和字符串函数对投影进行扩展
\[ \Pi_{F_1,F_2,\ldots ,F_n}(R)=\{t[B_1,B_2,\ldots, B_m]|t\in R\} \]
F是对B的运算

聚合:相当于EXCEL的筛选,可以用max,count,average等
\[ \mathcal{G}_{F_1(A_1),F_2(A_2),\ldots,F_n(A_n)}(R) \]
F为对属性的具体操作,A为属性

分组:先少选某些属性的值,进行分组,再聚和,相当于pandas的groupby()
\[ _{G_1,G_2,\ldots,G_n}\mathcal{G}_{F_1(A_1),F_2(A_2),\ldots,F_k(A_k)}(R) \]
G为分组用的属性,在所有G上取值相同的将分为一组

排序:字面意思
\[ \tau_{A_1,A_2,\ldots,A_n}(R) \]
A是排序的属性,若前一个属性相同,则按后一个属性排序



Comments