zoukankan      html  css  js  c++  java
  • 元组关系的演算

    (转自网络)

        为了讨论方便,先允许关系的基数是无限的。然后再对这种情况下定义的演算作适当的修改,保证关系演算中的每一个公式表示的是有限关系。


        在元组关系演算系统中,称 {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 。

     

         在关系演算中定义了 “ 自由元组变量 ” 和 “ 约束元组变量 ” 的概念。这些概念和谓词演算中的概念完全一样。若公式中的一个元组变量前有 “ 全称量词 ” 或 “ 存在量词 ” ,则称该变量为约束元组变量,否则称自由元组变量。

     

        公式可以递归定义如下:

     

        (l) 每个原子公式是公式。
        (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 (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) 投影

            π t1,t2,...,tk (R)={t (k) |( ∃ u )(R(u) ∧ t[1]=u[i1] ∧ ...t[k]=u[ik] )}

        (5) 选择

            σ F (R)={t|R(t) ∧ F}

            注: F 是公式。 F 用 t[i] 代替 运 算 对 象 i 得到的等价公式。

     

         例 1 查询信息系 (IS 系 ) 全体学生:
            S IS ={Student(t) ∧ t[5]='IS'} 
         例 2 查询年龄小于 20 岁的学生。
            S 20 ={Student(t) ∧ t[4]<20}

         例 3 查询学生的姓名和所在系。
            S={t (2) |( ∃ u)(Student(u) ∧ t[1]=u[2] ∧ t[2]=u[5])}


        上面定义的关系演算允许出现无限关系。例如 {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) 为真。

     

         例 4 设有关系 R 如图 2.8(a) , S={t| ﹁ R(t)} ,若不进行安全限制,则可能是一个无限关系。所以定义

            dom(Φ)= π A (R) ∪ π B (R) ∪ π C (R)

                  ={{a1,a2},{b1,b2},{c1,c2}}


         则 S 是 dom(Φ) 中各域值中元素的笛卡儿积与 R 的差集。结果如图 2.8(b) 。注意,在做笛卡儿积时各个域中的元素不能搞混。

     

       

     

     

    附:其他类型举例:

    -----------------------------------------------------------------------------------------

     

    1 、下列等式中恒等的是:

     

    π A1,A2 ( σ F (E))≡ σ F ( π A1,A2 (E))

    σ F (E 1 × E 2 )≡ σ F (E 1 ) ×σ F (E 2 )

    σ F (E 1 -E 2 )≡ σ F (E 1 )- σ F (E 2 )

    π A1,A2,B1,B2 (EE)≡ π A1,A2 (E) π B1,B2 (E)

     

    ① 当 F 包含 A1,A2 以外的限制 时 ,不恒等

    ② 当 F 包含大于 E1( 或 E2) 个数 的限制 时 ,不恒等

    ③ 恒等

    ④ 等式不可能成立,右 边没 有相同 属 性

     

    2 、以下元 的意

     

    {t|( ∃ u)((R(u) ∨ S(u)) ∧ ( ∀ v)(T(v)→( ∃ w)((R(w) ∨ S(w)) ∧ w[1]=u[1] ∧ w[2]=v[1] ∧ w[3]=v[2])) ∧ t[1]=u[1]}

     

    据 说 是表示 R ∪ S ÷ T 的意思,但是我 实 在是看不 懂 。

     

    3 、以下元 转换为关 系代

     

    {t| ∃ u ∃ v(R(u) ∧ S(v) ∧ u[3]=v[1] ∧ u[4]=v[2] ∧ u[1]>v[3] ∧ t[1]=u[2])}

    其中 R(A,B,C,D) S(C,D,E)

     

    关 系代 数 表 达 式 为 : π B ( σ A>E (RS))

     

    4 、把下列 系代 转换为

     

    π 1,4 (RS)

    其中 R(A,B,C) S(B,D)

     

    元 组 演算表 达 式 为 : {t| ∃ u ∃ v(R(u) ∧ S(v) ∧ u[2]=v[1] ∧ t[1]=u[1] ∧ t[2]=v[2])}

     

    5 系代 演算表

     

    π 1,5,6 ( σ 1>5 (R×S)) -- 注意中 间 是乘法不是自然 连 接

    其中 R(A,B,C) S(A,B,C)

     

    {t| ∃ u ∃ v(R(u) ∧ S(v) ∧ u[1]>v[2] ∧ t[1]=u[1] ∧ t[2]=v[2] ∧ t[3]=v[3])}

     

    6 、下列 查询 效率最高的一 是:

     

    ① E1= π A,D ( σ B<'2007' ∧ R.C=S.C ∧ E='80' (R × S))

    ② E2= π A,D ( σ R.C=S.C ( σ B<'2007' (R) ×σ E='80' (S)))

    ③ E3= π A,D ( σ B<'2007' (R) σ E='80' (S))

    ④ E4= π A,D ( σ B<'2007' ∧ E='80' (RS))

     

    答案是 ③ ,很明 显 自然 连 接要 优 于笛卡尔 积 ,先 运 算再投影 优 于 先投影再 计 算

  • 相关阅读:
    Xshell 连接Linux服务器自动中断问题
    JavaScript验证输入的字符是否包含表情
    jQuery实现单击某个标签改变样式
    ELK之五----logstash收集haproxy日志
    ELK之四-----logstash收集nginx日志及tcp日志
    ELK之三-----JAVA日志多行合并、tomcat json日志收集与处理
    文本三剑客之二---Sed用法
    ELK之二----kibana部署及logstash单(多)日志收集
    ELK之一-----Elasticsearch介绍与部署
    Jenkins之五-----基于脚本实现代码部署与回滚
  • 原文地址:https://www.cnblogs.com/shizhongtao/p/3569712.html
Copyright © 2011-2022 走看看