您的位置:首页 > 数据库

【软考】——数据库之关系代数的运算

2016-10-30 19:29 417 查看

【前言】

       软考的日子越来越近了,我对于知识的学习也仅仅停留在做题上,及时总结的好习惯,需要一点一滴积累。

【正文】

     

    总览

        


       关系代数:以关系为运算对象的一组高级运算的集合。

       一句话总结:五基四组两扩充,关系代数一路通。


    详细介绍


         一、关系代数的五个基本操作

              举例用到两个关系:

 
                        


         
   

              1 .并(Union)

                   设关系R和S具有相同的关系模式,R和S的并是由属于R或属于S的元组构成的集合,记为R∪S。形式定义如:     R∪S
= { t |t ∈R V t ∈S},t是元组变量,R和S的元数相同。


 


              
       注意:并运算可实现插入新元组的操作,消除重复元组


           2 . 差(Difference)

              设关系R和S具有相同的关系模式,R和S的差是由于属于R但不属于S的元组构成的集合,记为R
- S。形式定义如:   R - S ={ t|t ∈R V t ?S},R和S的元数相同。

           


   注意:差运算是有序的,R - S ≠ S - R



              3 .笛卡尔积 (Cartesian Product)

            设关系R和S 的元数分别为r 和 s ,定义R和S的笛卡尔积是一个(r
+ s )元的元组集合,每个元组的前r 个分量(属性值)来自R 的一个元组,后s个分量来自S的一个元组,记为R × S。形式定义如:


    R × S = { t|t
= <tr  , ts> ∧tr∈R∧ts∈S  }  


  此处tr  、 ts  中的r,s 为上标。若R有m个元组,S有n个元组,则R×S有m × n 个元组。





      注意:新关系的属性个数为r+s,元组个数为m×n。


 4 .投影 (Projection)

   这个操作是对一个关系进行垂直分割,消去某些列,并重新安排列的顺序。

   设关系R是k 元关系,R在其分量Ai1,…,Aim(m<=k,i1,…im为1到k间的整数)上的投影用πi1,…im(R)表示,它是一个m元的元组集合,形式定义如下:

  πi1,…,im(R)={t ∣ t
= <ti1,…tim>∧<t1,…tk>∈R}


     

 


      注意 :投影主要是从列的角度进行运算,投影之后不仅取消了原关系中的某些列,而且还可能取消某些元组(避免重复)。 



       5 .选择(Selection)

         选择操作又称限制,是根据某些条件做水平分割,即选取符合条件的元组。条件可用命题公式(即计算机语言中的条件表达式)F表示。F中两种成分:

         运算对象:常数(用引号括起来),元组分量(属性名或列
的序号)。


         运算符:算术比较运算符(<,<=,
> ,>= ,=,≠),逻辑运算符(∧,∨,?)。


         关系R关于公式F的选择操作用sF(R)表示,形式定义如下:

    sF(R) = {t ∣ t ∈ R ∧ F(t)
=true },s为选择运算符,sF(R)表示从R中挑选满足公式F为真的元组所构成的关系。


     


    注意:选择运算是从行的角度进行的运算。

二、四个组合操作


       1  .交(Intersection)

          关系R和S的交是由属于R又属于S的元组构成的集合,记为R∩S,这里要求R和S定义在相同的关系模式上。形式定义如下:

          R∩S
={ t ∣ t ∈ R ∧  t ∈ S
} ,R和S的元数相同。

     


        2 .连接(Join )

           连接是从关系R和S的笛卡尔积中选取属性值满足某一θ操作的元组,记为



 ,这里的i 和j 分别是关系R和S的第i 个、第j 个属性的序号。形式定义如下:
    


        此处,tri、tsj分别表示元组tr的第i 个分量、元组ts的第j 个分量,triθtsj表示这两个分量值满足θ操作。(如果θ是等号“=”,该连接操作为“等值连接”)。







                           

  注意:一般的连接操作是从行的角度进行运算


     3 .自然连接(Natual join)

      两个关系R和S的自然连接操作用R  S 表示,具体计算过程如下: 
          


l  计算R × S ;

l  设R和S 的公共属性是A1,…,AK,挑选R×S 中满足   R.A1=S.A1,…,R.AK=S.AK的那些元组;

l  去掉S.A1,…,S.AK这些列。

因此R ? S可用下式定义:

R  ? S=Πi1,…,im (sR.A1=S.A1∧…∧R.AK=S.AK(R×S)),其中i1,…,im 为R和S的全部属性,但公共属性只出现一次。

R ? S = ΠA,R.B,R.C,D(sR.B=S.B∧R.C=S.C(R×S))
                  

 
                             


 



 一般自然连接使用在R和S有公共属性的情况中。如果两个关系没有公共属性,那么其自然连接就转化为笛卡尔积操作。

注意:自然连接还需要取消重复列,所以是同时从行和列的角度进行运算。


4  .除法(Division)

设关系R和S的元数分别是r 和s(设r> s> 0),那么R÷S是一个(r-s)元的元组的集合。(R÷S)是满足下列条件的最大关系:其中每个元组t 与s中每个元组u组成的新元组<t,u>必在关系R中。为方便起见,我们假设S的属性为R中后

S个属性。

R ÷ S 的具体计算过程如下:

l  T = π1,2,…,r-s(R)

l   W = (T×S) – R(计算T×S中不在R的元组)

l     V = π1,2,…, r-s(W)

l  R ÷ S = T - V

即 R ÷ S = π1,2,…,r-s(R)
-π1,2,…, r-s((π1,2,…r-s(R) ×S) - R)


例:关系R是÷学生选修课程的情况,关系COURSE1、COURSE2、COURSE3分别表示课程情况,而操作R ÷ COURSE1、R ÷ COURSE2、R ÷ COURSE3中列课程的学生名单。


 


 

 

 
                                 


        注意:除操作是同时从行和列的角度进行运算


【后续】

   通过做软考题越来越发现,考试不是学习的最终目的,通过考试学会方法去学习,不断锻炼和培养自己的学习能力,让学习更加有方向和动力,还要打好扎实的基础,仅是做到看过是不够的,更加要做的是多多动手实践一遍,才会了解自己是不是真的掌握了。不足之处请大家多多提意见~~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: