关系模型之关系演算

一、关系元组演算

1.1 概述

  • 关系演算是以数理逻辑中的谓词演算为基础
  • 关系演算是描述关系元算的另一种思维方式
  • SQL语言是继承了关系代数和关系演算各自的优点所形成的
  • 按照谓词变量的不同,可分为关系元组演算和关系域演算
    • 关系元组演算是以元组变量作为谓词变量的基本对象
    • 关系域演算是以域变量作为谓词变量的基本对象

1.2 关系元组元组演算公式的形式

  • 关系元组演算公式的基本形式:\left \{ t\mid P\left ( t \right ) \right \}
  • 上式表达:所有使谓词P为真的元组t的集合
    • t是元组变量
    • t\in r表示元组t在关系r中
    • t\left [ A \right ]表示元组t的分量,即t在属性A上的值
    • P是与谓词逻辑相似的公式,P\left ( t \right )表示以元组t为变量的公式
  • P\left ( t \right )可以如下递归地进行定义
    • 三种形式的原子公式是公式
      • s\in R
      • s[A]\theta c
      • s[A]\theta u[B]
    • 如果P是公式,那么┐P也是公式
    • 如果P1,P2是公式,则P1\wedge P2,P1\vee P2也是公式
    • 如果P\left ( t \right )是公式,R是关系,则$${\exists}$$\left ( t\in R \right )\left ( P\left ( t \right ) \right )$${\forall}$$\left ( t\in R \right )(P(t))也是公式
    • 需要时可以加括弧
    • 上述运算符的优先次序一次自高至低为:括弧,\theta$${\exists}$$$${\forall}$$,┐,\wedge\vee
    • 公式只限以上形式

1.3 关系元组演算公式之原子公式及与、或、非之理解与运用

1.3.1 元组演算公式之原子公式

  • 关系元组演算公式的基本形式:\left \{ t\mid P\left ( t \right ) \right \}
  • P\left ( t \right )可以是如下三种形式之一的原子公式
    • t\in R:t是关系R中的一个元组,例如:\left \{ t\mid t\in Student \right \}
    • s[A]\theta c:元组分量s[A]与常量c之间满足比较关系\theta,例如:\left \{ t\mid t\in R\wedge t[Sage] \leqslant 19\wedge t[Sname]='zhangsan' \right \}
    • s[A]\theta u[B]s[A]u[B]为元组分量,A和B分别是某些关系的属性,他们之间满足比较关系\theta,例如:\left \{ t\mid t\in Student\wedge $$ {\exists}$$\left ( u\in Student \right )\left ( t[Sage]> u[Sage] \right ) \right \}
  • P\left ( t \right )可以由公式加运算符与、或、非递归的构造
    • 如果F是一个公式,则┐F也是一个公式
    • 如果F1、F2是公式,则F1\wedge F2F1\vee F2也是公式

  • 例1:检索出年龄小于20岁并且是男同学的所有学生
    • \left \{ t\mid t\in Student\wedge t[Sage]< 20\wedge t[Ssex]='male' \right \}
  • 例2:检索出年龄小于20岁或者03系的所有男学生
    • \left \{ t\mid t\in Student\wedge \left ( t[Sage]< 20\vee t[D\#]='03' \right )\wedge t[Ssex]='male' \right \}​​​​​​​
  • 在元组演算公式构造过程中,如果需要,可以使用括号,通过括号改变运算的优先次序,即:括号内的运算优先计算

1.3.2 关系元组演算公式 之 存在量词与全称量词之理解与运用

  • 构造P\left ( t \right )还有两个运算符:\exists\forall​​​​​​​
    • 如果F是一个公式,则\exists \left ( t\in r \right )\left ( F\left ( t \right ) \right )也是公式
    • 如果F是一个公式则,\forall \left ( t\in r \right )\left ( F\left ( t \right ) \right )​​​​​​​也是公式
  • 运算符\exists\forall,又称为量词,前者称为“存在量词”,后者称为“全称量词”
  • 而被\exists\forall限定的元组变量t,或者说,元组变量t前有存在量词或全称量词,则该变量被称为“约束变量”,否则被称为“自由变量”

  • 例如:检索出年龄不是最小的所有同学

  • 再例如:检索出课程都及格的所有同学

1.3.3 关系元组演算之应用训练 语义正确性与等价性变换训练

  • P\left ( t \right )公式,如谓词演算一样,也有一系列演算的等价性

1.3.4 关系元组演算之应用训练 将关系代数转换为元组演算

  • 关系代数有五种基本操作:并、差、广义积、选择、投影操作,还有:交,\theta-连接操作
    • 并运算:R \cup S=\left \{ t\mid t\in R\vee t\in S \right \}
    • 差运算:
    • 交运算:

    • 广义笛卡尔积:

    • 选择运算:

    • 投影运算:

      扫描二维码关注公众号,回复: 12462559 查看本文章
  • 元组演算公式总结

    • 用递归定义公式,组合、递归地构造公式

    • 一种用逻辑表达查询的思维

    • 以元组为基本单位进行循环,先找到元组,再找到元组分量,进行谓词判断

    • 元组演算与关系代数可以相互转换(有前提)

二、关系域演算

2.1 关系域演算公式

  • 关系域演算公式的基本形式:\left \{ <x_1,x_2,...,x_n> \mid P\left ( x_1,x_2,...,x_n \right )\right \}其中,x_i代表域变量或常量,P为以x_i为变量的公式
  • 公式P可以递归地进行构造
    • 三种形式的原子公式是公式
      • <x_1,x_2,...,x_n>\in R。其中x_i代表域变量或常量,表示由域变量构成的<x_1,x_2,...,x_n>是属于关系R的
      • x\theta c。其中,域变量x域常量c之间满足比较关系\theta
      • x\theta y。其中,域变量x和域变量y之间满足比较关系\theta​​​​​​​。
    • 如果P是公式,那么┐P也是公式
    • 如果P1,P2是公式,则P1\wedge P2,P1\vee P2也是公式
    • 如果P是公式,t是域变量,则$${\exists}$$\left ( t\in R \right )\left ( P\left ( t \right ) \right )$${\forall}$$\left ( t\in R \right )(P(t))也是公式
    • 需要时可以加括弧
    • 上述运算符的优先次序一次自高至低为:括弧,\theta$${\exists}$$$${\forall}$$,┐,\wedge\vee
    • 公式只限以上形式

2.2 关系域演算公式构造示例

2.3 关系域演算与关系元组演算的比较

  • 元组演算的基本形式:\left \{ t\mid P\left ( t \right ) \right \}
  • 域演算的基本形式:\left \{ <x_1,x_2,...,x_n> \mid P\left ( x_1,x_2,...,x_n \right )\right \}
  • 元组演算是以元组为变量,以元组为基本处理单位,先找到元组,然后找到元组分量,进行谓词判断。
  • 域演算是以域变量为基本处理单位,先有域变量,然后再判断由这些域变量组成的元组是否存在或是否满足谓词判断
  • 公式运算符都是相同的,只是其中的变量不同
  • 元组演算和域演算可以等价交换

三、关系演算的安全性

3.1 什么是关系演算的安全性

  • 不产生无限关系和无穷验证的运算被称为是安全的
  • 关系代数是一种集合运算,是安全的
    • 集合本身是有限的,有限元素集合的有限次数运算仍旧是有限的
  • 关系演算不一定是安全的

3.2 关系演算的约束

  • 需要对关系演算施加约束条件,即任何公式都在一个集合范围内操作,而不是无限范围内操作,才能保证其安全性
  • 安全约束有限集合DOM
    • DOM(\psi )是一个有限集合,其中的每个符号要么 是\psi中明显出现的符号,要么是出现在\psi中的某个关系R的某元组的分量
    • DOM主要用于约束\psi中一些谓词的计算范围,它不必是最小集合

3.3 安全元组演算表达式

  • 满足下面三个条件的元组演算表达式\left \{ t\mid \psi (t) \right \}称为安全表达式
    • 只要t满足\psi,t的每一个分量就是DOM(\psi )的一个成员
    • 对于\psi中形如(\exists u)(\omega (u))的子表达式,若u满足\omega,则u的每一个分量都是DOM(\psi )中的成员
    • 对于\psi中形如(\forall u)(\omega (u))的子表达式,若u不满足\omega,则u的每个分量都是DOM(\psi )中的成员

猜你喜欢

转载自blog.csdn.net/qq_38689352/article/details/110916643