【BUAA-数据管理技术】4-数据模型-关系代数

本文内容系2024年北航软件学院数据管理技术课程课堂笔记,内容大部分取自课程PPT,少量来源于互联网,若有侵权请联系删除。文章内容如有错漏,敬请批评指正!

04 - 数据模型-关系代数

2.3 逻辑模型

2.3.2 关系模型

4. 关系代数(操作)
  1. 由来
    数据库语言中查询是最主要的部分,查询的条件要使用关系运算表达式来表示。
    因此,关系运算是设计关系数据语言的基础。
    按表达查询的方法不同,关系运算可分为关系代数关系演算两大类。

  2. 定义

    • 关系代数(Relational Algebra):以关系为运算对象。

    • 关系代数运算三要素:运算对象——关系、运算结果——关系、运算符——四类

    • 四类关系运算符

在这里插入图片描述

  • 另一个概念:基本运算——集合并、集合差(没有交)、广义笛卡尔积、选择、投影
    • 由基本运算可以推导出其他所有运算
  1. 集合的并、交、差运算——从行的角度进行

    • 两个关系 R R R S S S进行并、交、差运算,则它们必须是相容

      • R R R S S S必须同元,即属性数目必须相同
      • 对所有 i i i R R R的第 i i i个属性的域必须和 S S S的第 i i i个属性的域相同
    • 并运算(Union)
      R ∪ S = { t   ∣   t ∈ R ∨ t ∈ S } R\cup S=\{t\,|\,t\in R \vee t\in S\} RS={ttRtS}

      • 两个n元关系,且两者对应属性数据类型相同。

      • 结果仍为n元关系,由属于 R R R或属于 S S S的元组构成。运算结果中应消除重复行。

    • 差运算(Difference)
      R − S = { t   ∣   t ∈ R ∧ t ∉ S } R-S=\{t\,|\,t\in R\wedge t\notin S\} RS={ttRt/S}

      • 结果为n元关系,由属于R且不属于S的元组构成
    • 交运算(Intersection)
      R ∩ S = { t   ∣   t ∈ R ∧ t ∈ S } R\cap S=\{t\,|\,t\in R\wedge t\in S\} RS={ttRtS}

      • 其结果仍为n元关系,由既属于R而又属于S的元组构成。

      • 可以通过差运算来重写
        R ∩ S = R − ( R − S ) R\cap S=R-(R-S) RS=R(RS)

    • 广义笛卡尔积(Extended Cartesian Product)

      • 笛卡尔积:集合运算 vs. 广义笛卡尔积:关系运算

      • 两个关系 R R R S S S,其度(degree)分别为 n n n m m m,则它们的广义笛卡尔积是所有这样的元组集合:元组的前n个分量是 R R R中的一个元组,后m个分量是 S S S中的一个元组。

      R × S = { t   ∣   t = ⟨ r , s ⟩ ∧ r ∈ R ∧ s ∈ S } R\times S=\{t\,|\,t=\left\langle r,s\right\rangle\wedge r\in R\wedge s\in S\} R×S={tt=r,srRsS}

      • R × S R\times S R×S的度为 R R R S S S的度之和, R × S R\times S R×S​的元组个数为R和S的元组个数的乘积。

        规定,当R和S之一为空集时, R × S R\times S R×S​的结果为空集

      在这里插入图片描述

  2. 专门的关系运算

    • 选择(selection):选择运算是从指定的关系中选择某些元组形成一个新的关系,被选择的元组是用满足某个逻辑条件来制定的。
      σ F ( R ) = { t   ∣   t ∈ R ∧ F ( t ) = t r u e } \sigma _F(R)=\{t\,|\,t\in R\wedge F(t)=true\} σF(R)={ttRF(t)=true}

      • 其中, R R R关系名 σ \sigma σ选择运算符 F F F​是逻辑表达式——水平方向
      • 例子:逻辑条件为 S a l a r y > 40000 Salary>40000 Salary>40000

      在这里插入图片描述

    • 投影(projection):投影运算对指定的关系进行投影操作,根据该关系分两步产生一个新关系:

      1. 选择指定的属性,形成一个可能含有重复行的表格
      2. 删除重复行,形成新的关系

      Π A ( R ) = { r . A   ∣   r ∈ R } \Pi_A(R)=\{r.A\,|\,r\in R\} ΠA(R)={r.ArR}

      • 其中, R R R关系名 Π \Pi Π投影运算符 A A A被投影的属性或属性集——垂直方向
      • 投影运算可以改变关系的属性次序
      • 投影后取消了某些属性列,就可能出现重复行,应该取消重复行。故投影之后,不但减少了属性,元组也可能减少,新关系与原关系不相容。
    • 连接(join)

      • 连接是两个表之间的运算,通常是具有一对多联系的父子关系。故连接过程一般是由参照关系的外键和被参照关系的主键来控制的,这样的属性通常被称为连接属性

      • 定义:从两个广义笛卡尔积中选取给定属性间满足 θ \theta θ操作的元组。

      R ⋈ A θ B S = { t   ∣   t = < r , s > ∧   r ∈ R ∧ s ∈ S ∧ r [ A ]    θ    s [ B ] } R\mathop{\bowtie}\limits_{A\theta B} S=\{t\,|\,t=<r,s>\wedge\ r\in R\wedge s\in S\wedge r[A]\;\theta\;s[B]\} RAθBS={tt=<r,s> rRsSr[A]θs[B]}

      • θ \theta θ为算数比较符,当 θ \theta θ等号时称为等值连接 θ \theta θ为“ < < <”时,称为小于连接; θ \theta θ为“ > > >”时,称为大于连接。此类连接被统称为**    θ    \;\theta\; θ连接**。
    • 自然连接(natural join)(最常用的连接)

      • 从2个关系的广义笛卡尔积中选取相同属性列上取值相等的元组,并去掉重复的属性列

      R ⋈ S = { t   ∣   t = < r , s > ∧   r ∈ R ∧ s ∈ S ∧ r [ B ] = s [ B ] } R\bowtie S=\{t\,|\,t=<r,s>\wedge\ r\in R\wedge s\in S\wedge r[B]=s[B]\} RS={tt=<r,s> rRsSr[B]=s[B]}

      • 等值连接:从2个关系(R、S)的笛卡尔积中选取属性(A、B)值相等的元组
      • 自然连接是特殊的等值连接,即在等值连接中取消重复属性
      • 派生运算:

      R ⋈ S = Π X ( σ r [ A i ] = s [ B j ] ( R × S ) ) R\bowtie S=\Pi_X(\sigma_{r[A_i]=s[B_j]}(R\times S)) RS=ΠX(σr[Ai]=s[Bj](R×S))

    • 外连接(outer join):为避免自然连接时因失配而发生的信息丢失,可以假定往参与连接的一方表中附加一个取值全为空值的行,它和参与连接的另一方表中的任何一个未匹配上的元组都能匹配,称之为外连接。

      • 外连接 = 自然连接 + 失配的元组
      • 外连接的形式:左外连接 R ⟕ S R⟕S RS(左边的所有元组都在,往右边的补null)、右外连接 R ⟖ S R⟖S RS、全外连接 R ⟗ S R⟗S RS
      • 左/右/全外连接 = 自然连接 + 左/右/两侧表中失配的元组(悬浮元组)
      • 全外连接 = 左外连接    ∪    \;\cup\; 右外连接
    • 除(divide)

      • 除运算常用于包含语义“至少…”的寓意的查询或运算。
      • R ( X , Y ) R(X,Y) R(X,Y) S ( Y ) S(Y) S(Y)是两个关系,则:

      R ( X , Y ) ÷ S ( Y ) = Π X ( R ) − Π X ( Π X ( R ) × Π Y ( S ) − R ) R(X,Y)\div S(Y)=\Pi_X(R)-\Pi_X(\Pi_X(R)\times \Pi_Y(S)-R) R(X,Y)÷S(Y)=ΠX(R)ΠX(ΠX(R)×ΠY(S)R)

      • 除运算定义:设有关系 R ( X , Y ) R(X,Y) R(X,Y) S ( Y ) S(Y) S(Y),其中X、Y可以是单个属性或属性集,则:

      R ÷ S = { r . X   ∣   r ∈ R   ∧ Y X ⊇ S } R\div S=\{r.X\,|\,r\in R\,\wedge Y_X \supseteq S\} R÷S={r.XrRYXS}

      书上定义:设关系 R R R除以关系 S S S的结果为关系 T T T,则 T T T包含所有在 R R R但不在 S S S中的属性及其值,且 T T T的元组与 S S S的元组的所有组合都在 R R R中。

      计算方法:先算 R R R中所有 R − S R-S RS属性的象集,再算 S S S R ∩ S R\cap S RS上的投影,看 R R R中哪个 R − S R-S RS包含了这个投影。

      • my understanding: R与S除运算的结果是:至少拥有S表中所有属性取值的 R表中其他属性取值在这里插入图片描述

      • 练习:在这里插入图片描述

        1. 查询至少选修了一门其直接先行课为5号课程的学生姓名。

        Π S n a m e ( σ C p n o = 5 ( C O U R S E ) ⋈ S C ⋈ Π S n o , S n a m e ( S T U D E N T ) ) \Pi_{Sname}(\sigma_{Cpno=5}(COURSE)\bowtie SC \bowtie \Pi_{Sno,Sname}(STUDENT)) ΠSname(σCpno=5(COURSE)SCΠSno,Sname(STUDENT))

        1. 查询选修了全部课程的学生号和姓名

        ( Π S n o , C n o ( S C ) ÷ Π C n o ( C O U R S E ) ) ⋈ Π S n o , S n a m e ( S T U D E N T ) (\Pi_{Sno,Cno}(SC)\div\Pi_{Cno}(COURSE))\bowtie\Pi_{Sno,Sname}(STUDENT) (ΠSno,Cno(SC)÷ΠCno(COURSE))ΠSno,Sname(STUDENT)

      • 思考题:查询最多选修了一门其直接先行课为5号课程的学生姓名

        方法:检索两门以上先行课为5号的(在选课表中任选S1和S2,连接起来看),然后用学生全集减去
        Π S n a m e ( S T U D E N T ) − Π S n a m e ( σ S 1 . C p n o = 5 ∧ S 2 . C p n o = 5 ( S 1 ⋈ S 1 . S n o = S 2 . S n o S 2 ) ) \Pi_{Sname}(STUDENT)-\Pi_{Sname}(\sigma_{S_1.Cpno=5\wedge S_2.Cpno=5}(S_1\mathop{\bowtie}\limits_{S_1.Sno=S_2.Sno}S_2)) ΠSname(STUDENT)ΠSname(σS1.Cpno=5S2.Cpno=5(S1S1.Sno=S2.SnoS2))

  • 14
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值