数据库-关系代数

数据库-关系代数

lucas Lv4

传统的集合运算

1. 并

2. 交

3. 差

4. 笛卡尔积

4.1 域

域是一组具有相同数据类型的值的集合, 例如: { 李明, 张三 , 王五} , { 男, 女 } , { 计算机 , 旅游管理 }

4.2 笛卡尔积

笛卡尔积是域上的集合运算, 允许某些域上是相同的

按域的顺序, 每个域任取一个值, 列出所有的组合, 就是笛卡尔积

姓名 性别 专业
李明 计算机
李明 旅游管理
李明 计算机
李明 旅游管理
张三 计算机
张三 旅游管理
张三 计算机
张三 旅游管理
王五 计算机
王五 旅游管理
王五 计算机
王五 旅游管理

专门的关系运算符

前置知识

关系模式

表示一张表的首行信息,是一个关系的抽象,例如: 是属性抽象

比如下图表的第一行:

image-20240708161951746

关系

一张表代表一个关系,n 目,表示 n 列,例如: , 上面的图表就是一个 5 目关系

属性

表内的首行的每个元素叫属性,一个属性对应一列,从第二行开始,下面的都是属性的具体数值

例如: 属性集合 ,这表示第 行的每列的分量集合,叫做属性组(属性列)。

表示取反,也就是除去第 i 行的其他属性组 ( 集合 ) , 其实就是集合取反

元组

表内的一行叫关系的一个元组

例如: 表示 t 元组中的 分量,也就是属性 的第

Student 表的 元组一共有 4 个 ( 不包含第一行, 也就是不包含关系模式 )

表示元组 在属性列 上各分量的集合

元组连接

成为元组连接,形成一个 列的元组,前 个分量为 中的一个 元组,也就是 列,前 个分量为 中的一个 元组,也就是 列。

其实就是把两个元组直接拼到一起

例如将李勇和刘晨这两个元组进行连接:

连接

连接还有一些其他的形式: 等值连接, 非等值连接, 自然连接……后面会说到

象集

关系 , 为属性组。当 时, 中的象集(images set)为:

下图是 , 中的象集:

元组1.png

如果你看了后面的计算,那么象集你可以直接用选择加投影来计算象集,比如图中的就是先选择 Y=2 再做 x 的投影

选择

表示在 R 中选出符合条件 的元组(也就是行)


选择 1.png

查询所在系为 的学生,则 结果如图所示

选择 2.png

查询年龄小于 20 的学生,则 结果如图所示

选择 3.png

投影

表示关系 的投影,是 中对应若干属性列组成新的关系 (A 是属性列) , 是只对应属性 A 的集合。

中查询姓名与所在系的关系, 结果如图所示

投影 1.png

连接

连接也称 连接. 他是从两个关系的笛卡尔积中选取属性间满足一定条件的元组

是条件, 分别为 上列数相等且可比的属性组, 是比较运算符.

连接运算从 的笛卡尔积 中 , 选取 关系在 属性组上的值 与 关系在 属性组上的值 满足比较关系 的元组

等值连接

的连接运算称为等值连接

非等值连接、等值连接、自然连接

自然连接是一种特殊的等值连接。它要求两个关系中进行比较的分量必须是同名的属性组,并且在结果中把重复的属性列去掉。

如图就是非等值连接,等值连接,自然连接的对比

可以看到,

  • 非等值连接是符合 的笛卡尔积元组,

  • 是符合 的等值连接,

  • 自然连接要求进行比较的属性 ( 分量 ) 必须是同名的属性组, 并且在结果中把重复的属性组列去掉

    也就是将同属性的两列合并成一列

连接1.png

连接2.png

举一个 非等值连接 的计算过程 , 如图是笛卡尔积 , 黄色的是满足

image-20240708182306952

外连接

做自然连接的时候,会有一些不满足条件的元组被舍弃,叫 悬浮元组。

  • ,外连接是保留(不舍弃)悬浮元组的连接
  • ,左外连接是保留左边关系的悬浮元组的连接
  • ,右外连接是保留右边关系的悬浮元组的连接

在下图可以看到,

没有对应的 值,所以填

同样, 也没有对应的 值,也填

外连接1.png

除运算

表示 关系 是 关系 除以 关系 的结果(商)

包含所有在 但不在 中的属性及其值, 且 的元组与 的元组的所有都在 ​ 中, 也就是 的组合都是 的子集。(所以这个有排除的意思, 更像减法)

给定关系 , 其中 为属性组, R 中的 Y 和 S 中的 Y 可以有不同的属性名, 但必须出自相同的域集 ( 也就是有相同的类型 )

除2.png

我们看这个式子,给定关系

  • 的结果是一个集合, 集合里的元素是 也就是 属性 的一个分量

  • 表示元组属于关系 , 表示 新关系 的子集 ( 集合里的元素是元组 )

  • 表示 关系 中的 属性, 应该在 中的象集里

    象集 是为了逐一比较, 不同 下的 是否包含 的投影

举例: 下图可以看到,只有 中的

  • 首先看,包含在 但是不包含在 的属性显然是属性 ,所以我们求解的答案肯定是一个 分量 的列

  • 其次,求出 的所有值对应的象集,也就是 的象集

    各象集

  • 求出 的投影

  • 然后确定包含关系,发现只有 包含 中的 所有组合

  • 答案就是

    image-20240708193141493

  • Title: 数据库-关系代数
  • Author: lucas
  • Created at : 2024-04-22 17:02:37
  • Updated at : 2024-12-02 08:24:52
  • Link: https://darkflamemasterdev.github.io/2024/04/22/数据库-关系代数/
  • License: This work is licensed under CC BY-NC-SA 4.0.
Comments