21/7/24 读书笔记

目录

  • 21/7/24 读书笔记
  • 数据库系统概论 关系代数
  • 集合运算
  • 关系运算

数据库系统概论 关系代数

关系代数是一种语言,其利用对于关系的运算来表示查询。在关系代数中,运算对象和运算结果都是关系,形式上都表现为二维表。

关系代数中的运算符可以按集合运算和关系运算分为两类:

  • 集合运算:交\(\bigcap\)、并\(\bigcup\)、差\(-\)、笛卡儿积\(\times\)
  • 关系运算:选择\(\sigma\)、投影\(\prod\)、连接\(\Join\)、除\(\div\)

其中并、差、笛卡儿积、选择、投影构成五个基本运算,而交、连接、除可以基于这五种基本运算给出。

集合运算

集合运算将关系视作元组的集合,而元组是否相同,取决于其各个属性值是否均一致。

交、并、差是非常直观的,在此不再赘述。

笛卡儿积是广义的笛卡儿积,其元素是元组。假设有n目关系R和m目关系S,对于每个元组\(t_r\in R\)和每个\(t_s\in S\),我们得到\((t_r,t_s)\in T\),\(T\)就是我们得到的笛卡儿积。我们这里将\((t_r, t_s)\)称为元组的连接concatenation),记为\(\mathop{t_rt_s}\limits^{\frown}\),也称串接。最终的\(T\)是一个(n+m)目关系。

关系运算

首先介绍象集的概念:对于一个关系模式\(R(X, Z)\),其中\(X\)和\(Z\)是两个属性组,各自包含多种属性。我们认为当某个元组\(t\)满足\(t[X]=x\)时,其对应的\(t[Z]\)构成x在R上的象集。形式化地表述为:

\[Z_x=\{t[Z]|t\in R,t[x] =x\} \]

这里的\(t[X]\)表示\(t\)这个元组在\(X\)对应属性组上的取值。

接下来定义关系运算:

  • 选择(selection):\(\sigma_F(R)=\{t|t\in R\and F(t)=True\}\),其中\(F\)是测试条件,当\(t\)这个元组满足测试条件时,\(F(t)=True\)。
  • 通常来说,测试条件\(F\)可以表示为\(X\theta Y\),其中X和Y可以是属性组或常量或简单函数,\(\theta\)是条件运算符,包括比较运算符和逻辑运算符。
  • 投影(projection):\(\prod_{A}R=\{t[A]|t\in R\}\),R是关系,A是R中的属性列。投影操作使得原本的多目关系投影到更为低维的空间形成少目关系,因此如果投影后有重复行应该删去(其表示在低维空间内重合的数据点)。
  • 连接(join):\(R\underset{A\theta B}{\Join} S=\{\mathop{t_rt_s}\limits^{\frown}|t_r\in R\and t_s\in S\and t_r[A]\ \theta\ t_r[B]\}\),R与S是关系,\(\theta\)是条件运算符,其描述了元组\(t_r\)与\(t_s\)在属性组A和B上应该满足的关系。连接后的结果应该是S与R的笛卡儿积的子集。当\(\theta\)是"="时,称为等值连接。自然连接是一种特殊的等值连接,其要求A与B必须是同名的属性组,同时在结果中去除重复的属性列(因为自然地考量下理论上重复的属性列对应的记录的属性值也是完全一致的),比如R(学号、姓名、成绩)和S(学号、姓名、性别)在(学号)上进行自然连接,由于(姓名)是重复属性列,而且自然地学号一致的记录在R与S中对应的姓名也应该是一致的,因此最终结果中只有一个姓名属性列。
  • 除(division):\(R\div S=\{t_r[X]|t_r\in R\and\prod_Y(S\subseteq Y_x)\}\),其中\(Y_x\)是\(x\)在\(R\)中的象集,\(R\)表示为\(R(X,Y)\)。除法基于象集进行定义,其描述了R关系的一个维度X在S关系的一个维度Y的映射下的取值范围。