首页 > 代码库 > 数据库复习9——关系代数和关系演算

数据库复习9——关系代数和关系演算

数据库复习


CH8 关系代数

8.1 关系代数

关系代数是SQL之外还有一种描写叙述数据库操作的形式化语言,关系变量(表)是关系代数中的基本表达式

关系代数三个重要的形式化定义例如以下:

  • σF(E)<script type="math/tex" id="MathJax-Element-1">\sigma_F(E)</script>:E一个表达式(基本表达式或表达式中间结果)。F是关于E中属性的断言,相当于where从句中限制条件(Restrict操作)
  • ΠA(E)<script type="math/tex" id="MathJax-Element-2">\Pi_A(E)</script>:E一个表达式,A是E属性的子集,相当于select从句(Projection操作)
  • ρX(E)<script type="math/tex" id="MathJax-Element-3">\rho_X(E)</script>:E一个表达式,X是E表达式结果的重命名

8.2 关系代数操作符

(1)基本算符

F断言中能够有逻辑运算符(与或非:?<script type="math/tex" id="MathJax-Element-4">\wedge、\vee、\neg </script>)以及关系运算符(=,>,<,,,<script type="math/tex" id="MathJax-Element-5">=,>,<,\geq,\leq,\neq</script>)

有集合运算符(并、交、差、笛卡尔乘积):,,?,×<script type="math/tex" id="MathJax-Element-6">\cup,\cap,-,\times</script>

左箭头<script type="math/tex" id="MathJax-Element-7">\leftarrow</script>为赋值操作

(2)Join操作

定义关系模式R(A,B,C,D)和S(E,B,D)的实例r、s的自然连接为:

r?s=Πr.A,r.B,r.C,r.D,s.E(ρr.B=s.Br.D=s.D(r×s))
<script type="math/tex; mode=display" id="MathJax-Element-23"> r \Join s =\Pi_{r.A,r.B,r.C,r.D,s.E}(\rho_{r.B=s.B \wedge r.D=s.D}(r \times s)) </script>

(3)除操作

定义关系模式R(A1,...,Am,B1,...,Bn)<script type="math/tex" id="MathJax-Element-9">R(A_1,...,A_m,B_1,...,B_n)</script>和S(B1,...,Bn)<script type="math/tex" id="MathJax-Element-10">S(B_1,...,B_n)</script>的实例r、s的除法结果(商)为:

R?S={A1,...,Am}r÷s={t|tΠR?S(r)?us(tur)}
<script type="math/tex; mode=display" id="MathJax-Element-11"> R - S = \{A_1,...,A_m\}\\\r \div s = \{t|t\in \Pi_{R-S}(r) \wedge \forall u \in s(tu \in r) \} </script>

用全然的关系代数表示为:

r÷s=ΠR?S(r)?ΠR?S(ΠR?S(r)×s?ΠR?S,S(r))
<script type="math/tex; mode=display" id="MathJax-Element-12"> r \div s = \Pi_{R-S}(r) - \Pi_{R-S}(\Pi_{R-S}(r)\times s-\Pi_{R-S,S}(r)) </script>

(4)聚合操作

聚合函数定义如SQL。包含了avg、min、max、sum、count等,形式化的关系代数聚合操作为:

G1,G2,...,GngF1(A1),...,Fm(Am)(E)
<script type="math/tex; mode=display" id="MathJax-Element-13"> _{G_1,G_2,...,G_n}g_{F_1(A_1),...,F_m(A_m)}(E) </script>

当中G1,G2,...,Gn<script type="math/tex" id="MathJax-Element-14">G_1,G_2,...,G_n</script>是能够为空的group byFi<script type="math/tex" id="MathJax-Element-15">F_i</script>是作用在属性Ai<script type="math/tex" id="MathJax-Element-16">A_i</script>上的聚合函数

8.3 关系代数数据库改动

(1)删除

删除操作的形式化定义为rr?E<script type="math/tex" id="MathJax-Element-17">r\leftarrow r - E</script>,当中r是关系实例,E是关系代数查询表达式

(2)插入

插入操作的形式化定义为rrE<script type="math/tex" id="MathJax-Element-18">r\leftarrow r \cup E</script>,当中r是关系实例,E是关系代数查询表达式或者常量元组集合

(3)更新

更新用Projection操作赋值给关系变量就可以


CH9 关系演算

9.1 关系演算

关系演算是SQL、关系代数之外的又一种描写叙述数据库操作的形式化语言,关系演算基本操作对象是范围变量(Range Variable,是关系变量/表的逻辑表达的别称)

关系演算基本的语法为:

1.范围变量定义
<Range var definition>::= 
RANGEVAR <range var name> RANGES OVER <relational exp commlist>

2.范围属性定义
<range attr reference>::= 
<range var name>.<attr reference> [ AS <atrr name> ]

3.布尔表达式
<boolean exp>::= ... all the usual possibilities, together with: | <quantified boolean exp>

4.量化布尔表达式(存在和全部)
<quantified boolean exp>::= 
EXISTS <range var name>(<boolean exp>)| 
FORALL <range var name>(boolean exp>)

5.关系操作
<relational operation>::= <proto tuple>[WHERE <boolean exp>]

6.元组表达式
<proto tuple> ::= <tuple exp>

须要特别注意的是量化布尔表达式

  • EXISTS v(P(v))仅仅要有一个P(v)为真,即为真
  • FORALL v(P(v))须要全部P(v)为真,才为真
  • FORALL v(P(v))等价于NOT EXISTS v(NOT P(v))

9.2 元组演算

关系演算中元组演算就是对元组的操作。简单的元组演算和SQL十分类似:

// Find supplier numbers and status for suppliers in Paris with status >20

// Define a range variable
RANGEVAR sx RANGES OVER S;

// Where clause implement Restriction&Projection
(sx.s#, sx.status) WHERE sx.city=‘parisAND sx.status>20

较为复杂的元组演算引入量化布尔表达式:

// Find supplier names for suppliers who supply all parts.

sx.sname WHERE FORALL px(EXISTS spx(spx.s# = sx.s# AND spx.p# = px.p#))

9.3 其它操作

关系演算其它操作,如聚合函数、集合操作等都和SQL较为类似,略

<script type="text/javascript"> $(function () { $(‘pre.prettyprint code‘).each(function () { var lines = $(this).text().split(‘\n‘).length; var $numbering = $(‘
    ‘).addClass(‘pre-numbering‘).hide(); $(this).addClass(‘has-numbering‘).parent().append($numbering); for (i = 1; i <= lines; i++) { $numbering.append($(‘
  • ‘).text(i)); }; $numbering.fadeIn(1700); }); }); </script>

数据库复习9——关系代数和关系演算