数据库 元组演算表达式

元组关系演算

  • 在元组关系演算系统中,称 {t|Φ(t)} 为元组演算表达式。其中 t 是元组变量, Φ(t) 为元组关系演算公式,简称公式
    它由原子公式和运算符组成。

原子公式有三类:

(1) R(t)

  • R 是关系名, t 是元组变量。 R(t) 表示 t 是 R 中的元组。于是,关系 R 可表示为: {t|R(t)}

(2) t[i] θ u[j]

  • t 和 u 是元组变量, θ 是算术比较运算符。 t[i] θ u[j] 表示断言 “ 元组 t 的第 i 个分量与元组 u 的第 j 个分量满足比较关系 θ ” 。例如, t[2] < u[3] 表示元组 t 的第 2 个分量小于元组 u 的第 3 个分量。

(3) t[i] θ c 或 c θ t[i]

  • 这里 c 是常量,该公式表示 “t 的第 i 个分量与常量 C 满足比较关系 θ” 。例如: t[4]=3 表示元组 t 的第 4 个分量等于 3 。
  • 在关系演算中定义了 “ 自由元组变量 ” 和 “ 约束元组变量 ” 的概念。这些概念和谓词演算中的概念完全一样。若公式中的一个元组变量前有 “ 全称量词 ” 或 “ 存在量词 ” ,则称该变量为约束元组变量,否则称自由元组变量。

公式可以递归定义如下:

  1. 每个原子公式是公式。

  2. 如果 Φ 1 和 Φ 2 是公式,则 Φ 1 ∧ Φ 2 、 Φ 1 ∨ Φ 2 、 ﹁ Φ1 也是公式。分别表示:
    ① 如果 Φ 1 和 Φ 2 同时为真。则 Φ 1 ∧ Φ 2 才为真,否则为假;
    ② 如果 Φ 1 和 Φ 2 中一个或同时为真,则 Φ 1 ∨ Φ 2 为真,仅 Φ 1 和 Φ 2 同时为假时, Φ 1 ∨ Φ 2 才为假;
    ③ 如果 Φ 1 真,则 ﹁ Φ 1 为假。

  3. 若 Φ 是公式,则 ∃ t(Φ) 也是公式。其中符号 ∃ 是存在量词符号, ∃ t(Φ) 表示:
    若有一个 t 使 Φ 为真,则 ∃ t(Φ) 为真,否则 ∃ t(Φ) 为假。

  4. 若 Φ 是公式,则 ∀ t( Φ ) 也是公式。其中符号 ∀ 是全称量词符号, ∀ t( Φ ) 表示:
    如果对所有 t ,都使 Φ 为真,则 ∀ t( Φ ) 必为真,否则 ∀ t( Φ ) 为假。

  5. 在元组演算公式中,各种运算符的优先次序为:
    ① 算术比较运算符最高;
    ② 量词次之,且 ∃ 的优先级高于 ∀ 的优先级;
    ③ 逻辑运算符最低,且 ﹁ 的优先级高于 ∧ 的优先级, ∧ 的优先级高于 ∨ 的优先级;
    ④ 加括号时,括号中运算符优先,同一括号内的运算符之优先级遵循 ①②③ 各项。

  6. 有限次地使用上述五条规则得到的公式是元组关系演算公式,其他公式不是元组关系演算公式。
    一个元组演算表达式 {t|Φ(t)} 表示了使 Φ(t) 为真的元组集合。
    关系代数的运算均可以用关系演算表达式来表示 ( 反之亦然 ) 。下面用关系演算表达式来表示五种基本运算:
    (1) 并

    R ∪ S = { t | R(t) ∨ S(t) }

    (2) 差

    R - S = { t | R(t) ∧ ﹁ S(t) }

    (3) 笛卡尔积

    R × S = { t (n+m) | ( ∃ u(n) )( ∃ v(n+m) )(R(u) ∧ S(v) ∧ t[1]=u[1] ∧ … ∧ t[n]=u[n] ∧ t[n+1]=v[1] ∧ … ∧ t[n+m]=v[m])}
    注: t (n+m) 表示 t 有目数 (n+m)

    (4) 投影

    π i1,i2,……,ik( R ) = {t(k) | ( ∃u )( R(u) ∧ t[1] = u[ i1 ] ∧ …… ∧ t[k] = u[ ik ] )}

    (5) 选择

    σ F ®={ t | R(t) ∧ F }
    注: F 是公式。 F 用 t[i] 代替运算对象 i 得到的等价公式。

例子

图2.4

  • 下面用关系演算来对图2.4 学生-课程数据库进行查询。
    【例2.35】 查询信息系 (IS 系 ) 全体学生:
    SIS ={Student(t) ∧ t[5]=‘IS’}
    【例2.36】 查询年龄小于 20 岁的学生。
    S20 ={Student(t) ∧ t[4]<20}
    【例2.37】 查询学生的姓名和所在系。
    S1={ t(2) | ( ∃u )( Student(u) ∧ t[1]=u[2] ∧ t[2]=u[5] ) }

关于元组关系演算的例子可以去看:CSDN:数据库 通过例子快速了解元组演算表达式的计算

  • 上面定义的关系演算允许出现无限关系。例如 { t | ﹁ R(t)} 表示所有不属于 R 的元组 ( 元组的目数等于 R 的目数 ) 。要求出这些可能的元组是做不到的,所以必须排除这类无意义的表达式。把不产生无限关系的表达式称为安全表达式,所采取的措施称为安全限制。安全限制通常是定义一个有限的符号集 dom(Φ) , dom(Φ) 一定包括出现在 Φ 以及中间结果和最后结果的关系中的所有符号 ( 实际上是各列中值的汇集 ) 。 dom(Φ) 不必是最小集。

  • 当满足下列条件时,元组演算表达式 {t|Φ(t)} 是安全的:
    ( 1 )如果 t 使 Φ(t) 为真,则 t 的每个分量是 dom(Φ) 中的元素。
    ( 2 )对于 Φ 中每一个形如 ( ∃ t)(W(u)) 的子表达式,若 u 使 W(u) 为真,则 u 的每个分量是 dom(Φ) 中的元素。
    ( 3 )对于 Φ 中每一个形如 ( ∀ t)(W(u)) 的子表达式,若 u 使 W(u) 为假,则 u 的每个分量必属于 dom(Φ) 。换言之,若 u 某一分量不属于 dom(Φ) ,则 W(u) 为真。

全文摘自《数据库系统概论》2.5.2 元组关系演算;
为了更好的对例题进行解释,所以几乎原汁原味的复制全文;
本文在原文的基础上进行了一部分的格式修改,以便阅读;

资料参考

  • 12
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MoMing丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值