数据库_数据模型(七)

关系演算(Relational Calculus)

关系代数通过建立一套代数系统,通过关系代数运算符表达查询;
关系演算基于谓词逻辑,用逻辑条件表达查询。
关系演算分为:元组关系演算(Tuple relational calculus, TRC)和域关系演算(Domain relational calculus, DRC).

  • 元组关系演算变量定义在元组上,域关系演算变量定义在属性上。

域关系演算

查询形式: { ⟨ x 1 , x 2 , . . . , x n ⟩ ∣ P ( x 1 , x 2 , . . . , x n , x n + 1 , . . . , x n + m ) } \left\{ {\left\langle {{x_1},{x_2},...,{x_n}} \right\rangle {\kern 1pt} {\kern 1pt} \left| {P\left( {{x_1},{x_2},{\kern 1pt} {\kern 1pt} ...{\kern 1pt} {\kern 1pt} ,{x_n},{x_{n + 1}},{\kern 1pt} {\kern 1pt} ...{\kern 1pt} {\kern 1pt} ,{x_{n + m}}} \right)} \right.} \right\} {x1,x2,...,xnP(x1,x2,...,xn,xn+1,...,xn+m)}

  • 结果变量由 x 1 , x 2 , . . . , x n {x_1},{x_2},...,{x_n} x1,x2,...,xn组成

  • 这n个域变量应满足的条件: P ( x 1 , x 2 , . . . , x n , x n + 1 , . . . , x n + m ) {P\left( {{x_1},{x_2},{\kern 1pt} {\kern 1pt} ...{\kern 1pt} {\kern 1pt} ,{x_n},{x_{n + 1}},{\kern 1pt} {\kern 1pt} ...{\kern 1pt} {\kern 1pt} ,{x_{n + m}}} \right)} P(x1,x2,...,xn,xn+1,...,xn+m)

  • 域关系演算查询,定义一组变量(域变量),定义表达式(布尔表达式)来对变量进行限制。

  • P所表达的公式,在关系演算中,采用递归的方法定义。从简单的原子公式(atomic formulas)开始,利用逻辑连接符,构成更复杂,更大的公式。

域关系演算中的原子公式:

  • ⟨ x 1 , x 2 , . . . , x n ⟩ ∈ R n a m e , o r X o p Y , o r X o p c o n s tan ⁡ t \left\langle {{x_1},{x_2},...,{x_n}} \right\rangle \in Rname,{\kern 1pt} {\kern 1pt} or{\kern 1pt} {\kern 1pt} X{\kern 1pt} {\kern 1pt} op{\kern 1pt} {\kern 1pt} Y,{\kern 1pt} {\kern 1pt} or{\kern 1pt} {\kern 1pt} X{\kern 1pt} {\kern 1pt} op{\kern 1pt} {\kern 1pt} cons\tan t x1,x2,...,xnRname,orXopY,orXopconstant(n个变量的某一组取值属于某个关系)
  • op是比较公式:<,>,=,等等。。。

公式的定义(什么样的式子是公式):

  • 原子公式
  • 如果p,q是公式,那么 ¬ p , p ∧ q , p ∨ q \neg p,{\kern 1pt} {\kern 1pt} p \wedge q,{\kern 1pt} {\kern 1pt} p \vee q ¬p,pq,pq也是公式。
  • ∃ X ( p ( X ) ) \exists X\left( {p\left( X \right)} \right) X(p(X)),存在x使p(x)为真。(在p中x是free的,没有被其他量词绑定)
    - ∀ X ( p ( X ) ) \forall X\left( {p\left( X \right)} \right) X(p(X)),所有x使p(x)为真。(在p中x是free的,没有被其他量词绑定)

什么是绑定(bound)和自由( free )变量

  • 如果在一个域变量上面使用了量词, ∃ o r ∀ \exists {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\rm{or}}{\kern 1pt} {\kern 1pt} \forall or.那么称X被绑定。
  • 变量没有被绑定,就是free的。

关系演算法实质:使P为真的X对应的元组(结果域变量应该在p中是free的)。

例:查找所有级别大于7的水手: { ⟨ I , N , T , A ⟩ ∣ ⟨ I , N , T , A ⟩ ∈ S a i l o r s ∧ T &gt; 7 } \left\{ {\left\langle {I,N,T,A} \right\rangle {\kern 1pt} {\kern 1pt} \left| {\left\langle {I,N,T,A} \right\rangle {\kern 1pt} {\kern 1pt} \in {\kern 1pt} {\kern 1pt} Sailors{\kern 1pt} {\kern 1pt} \wedge {\kern 1pt} {\kern 1pt} T{\kern 1pt} {\kern 1pt} } \right. &gt; {\kern 1pt} {\kern 1pt} 7} \right\} {I,N,T,AI,N,T,ASailorsT>7}

不安全查询

句法正确的查询,结果无限多。即为不安全查询。

表达能力

可以证明,关系代数所表达的查询,都可以用一个安全的域关系演算或元组关系演算来表达。反之亦然。SQL语言是建立在关系演算之上的。

元组关系演算

查询形式: { t [ a t t r i b u t e l i s t ] ∣ P ( t ) } \left\{ {t\left[ {attribute{\kern 1pt} {\kern 1pt} {\kern 1pt} list} \right]{\kern 1pt} \left| {P\left( t \right)} \right.} \right\} {t[attributelist]P(t)}

  • 变量t是定义在元组上的,t表明一个元组。
  • t[所需要的元组属性]
  • P(t),使P(t)为真的元组t。

例:查找所有级别大于7,年龄小于50的水手。
{ t [ N ] ∣ t ∈ S a i l o r s ∧ t . T &gt; 7 ∧ t . A &lt; 50 } \left\{ {t\left[ N \right]\left| {t \in Sailors \wedge t.T &gt; 7 \wedge t.A &lt; 50} \right.} \right\} {t[N]tSailorst.T>7t.A<50}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值