数据库系统概论--关系代数

来源:互联网 发布:开发php用什么软件 编辑:程序博客网 时间:2024/05/22 01:14

 

关系代数

    关系代数是一种抽象的查询语言,是关系数据操纵语言的一种传统表达方。式,它是用对关系的运算来表达查询的。

    任何一种运算都是将一定的运算符作用于一定的运算对象上,得到预期的运算结果。所以运算对象、运算符、运算结果是运算的三大要素。

    关系代数的运算对象是关系,运算结果亦为关系。关系代数用到的运算符包括四类:集合运算符、专门的关系运算符、算术比较符和逻辑运算符,如表1所示。

1  关系代数运算符

    关系代数的运算按运算符的不同可分为传统的集合运算和专门的关系运算两类。

    其中传统的集合运算将关系看成元组的集合,其运算是从关系的“水平”方向即行的角度来进行。而专门的关系运算不仅涉及行而且涉及列。比较运算符和逻辑运算符是用来辅助专门的关系运算符进行操作的。

 传统的集合运算

    传统的集合运算是二目运算,包括并、差、交、广义笛卡尔积四种运算。

    设关系R和关系S具有相同的目n(即两个关系都有n个属性),且相应的属性取自同一个城,则可以定义并、差、交运算如下:

    1. 并(Union)

    关系R与关系S的并记作:

        RS = { t | tR tS }

    其结果仍为n目关系,由属于R或属于S的元组组成。

    2. 差(Difference)

    关系R与关系S的差记作:

        R-S =  { t | tR t/∈S }

    其结果关系仍为n目关系,由属于R而不属于S的所有元组组成。

   3. 交( Intersection)

    关系R与关系S的交记作:

        RS = { t | tR tS }

    其结果关系仍为n目关系,由既属于R又属于S的元组组成。关系的交可以用差来表示,即RS=R-R-S)。

    4. 广义笛卡尔积(ExtendedCartesian Product)

    两个分别为 n目和m目的关系 RS的广义笛卡尔积是一个(n+m)列的元组的集合。元组的前n列是关系R的一个元组,后m列是关系S的一个元组。若Rk1个元组,Sk2个元组,则关系R和关系S的广义笛卡尔积有k1×k2个元组。记作:

        R×S = { trts| trR tsS }

    图1(a)、图1(b)分别为具有三个属性列的关系RS。图1(c)为关系RS的并。图1(d)为关系RS的交。图1(e)为关系RS的差。图1(f)为关系RS的广义笛卡尔积。

              

a)                                                 (b)

         

c)                                  (d)                              (e)

f)

1  传统集合运算举例

 专门的关系运算

   专门的关系运算包括选择、投影、连接、除等。为了叙述上的方便,先引入几个记号。

    (1)设关系模式为RA1A2,…,An)。它的一个关系设为RtR表示tR的一个元组。tAi]则表示元组t中相应于属性Ai的一个分量。

    (2)若A={Ai1Ai2,…,Aik},其中Ai1Ai2,…,AikA1A2,…,An中的一部分,则A称为属性列或域列。tA]=(tAi1],tAi2]…,tAik])表示元组t在属性列A上诸分量的集合。A则表示{A1A2,…,An}中去掉{Ai1Ai2,…,Aik}后剩余的属性组。

    (3)Rn目关系,Sm目关系。trRtsStrts 称为元组的连接(Concatenation)。它是一个 nm列的元组,前n个分量为R中的一个n元组,后m个分量为S中的一个m元组。

    (4)给定一个关系RXZ),XZ为属性组。定义,当t[X]=x时,xR中的象集(Images  Set)为:

        Zx={ tZ] | t Rt[X] = x }

它表示R中属性组X上值为x的诸元组在Z上分量的集合。

    下面给出这些关系运算的定义:

    1. 选择( Selection)

    选择又称为限制(Restriction)。它是在关系R中选择满足给定条件的诸元组,记作:

        бFR= { t | t R F(t) =’真’ }

其中F表示选择条件,它是一个逻辑表达式,取逻辑值“真”或“假”。

    逻辑表达式F由逻辑运算符连接各算术表达式组成。算术表达式的基本形式为:

        X1 θ Y1

其中θ表示比较运算符,它可以是>,,<,=或X1Y1等是属性名,或为常量,或为简单函数;属性名也可以用它的序号来代替。

    选择运算实际上是从关系R中选取使逻辑表达式产为真的元组。这是从行的角度进行的运算。

    设有一个学生-课程数据库,包括学生关系Student、课程关系Course和选修关系SC,如图2所示。下面的许多例子将对这三个关系进行运算。

a)

b)

c)

2  学生-课程数据库

    例1  查询信息系(IS系)全体学生

         δSdept=IS(Student)

   δ5=IS(Student)

    其中下角标“ 5”为 Sdept的属性序号。结果如图3(a)所示。

    例2  查询年龄小于20岁的学生

          δSage20(Student)

    δ420(Student)

结果如图3(b)所示。

a)

b)

3  选择运算举例

    2.  投影(Projection)

    关系R上的投影是从R中选择出若干属性列组成新的关系。记作:

         πAR= { t[A] | tR }

    其中AR中的属性列。

    投影操作是从列的角度进行的运算。

    例3  查询学生的姓名和所在系,即求Student关系在学生姓名和所在系两个属性上的投影。

         πSname, Sdept(Student)

   π2, 5Student)

结果如图4(a)。

    投影之后不仅取消了原关系中的某些列,而且还可能取消某些元组,因为取消了某些属性列后,就可能出现重复行,应取消这些完全相同的行。

    例4  查询学生关系Student中都有哪些系,即查询关系Student在所在系属性上的投影。

         πSdeptStudent)

结果如图 4(b)。Student关系原来有四个元组,而投影结果取消了重复的IS元组,因此只有三个元组。

         

  (a)                                              (b)

4  投影运算举例

    3. 连接( Join)

    连接也称为θ连接。它是从两个关系的笛卡尔积中选取属性间满足一定条件的元组。记作:

其中AB分别为RS上度数相等且可比的属性组。θ是比较运算符。连接运算从RS的广义笛卡尔积R|×|S中选取(R关系)在A属性组上的值与(S关系)在B属性组上值满足比较关系θ的元组。

    连接运算中有两种最为重要也最为常用的连接,一种是等值连接(equal-join),一种是自然连接(Natural-join)。

θ为“=”的连接运算称为等值连接。它是从关系RS的广义笛卡尔积中选取AB属性值相等的那些元组,即等值连接为:

   

    自然连接(Natural-join)是一种特殊的等值连接,它要求两个关系中进行比较的分量必须是相同的属性组,并且在结果中把重复的属性列去掉。即若RS具有相同的属性组B,则自然连接可记作:

       

    一般的连接操作是从行的角度进行运算。但自然连接还需要取消重复列,所以是同时从行和列的角度进行运算。

    例5  设图 5(a)和(b)分别为关系R和关系 S,图5(c)为的结果,图5(d)为等值连接的结果。图5(e)为自然连接R|×|S结果。

     

a)                   (b)                             (c)

        

d)                                                (e)

5  连接运算举例

    4. 除( Division)

    给定关系R(X,Y)和S(Y,Z),其中XYZ为属性组。R中的YS中的Y可以有不同的属性名,但必须出自相同的域集。RS的除运算得到一个新的关系P(X),PR中满足下列条件的元组在 X属性列上的投影:元组在X上分量值x的象集Yx包含SY上投影的集合。记作:

       

其中YxxR中的象集,x=tr{X}

    除操作是同时从行和列角度进行运算。

例6        设关系 R,S分别为图6中的(a)和(b),R÷S的结果为图6(c)。

在关系R中,A可以取四个值{a1a2a3a4},其中:

        a1的象集为{(b1c2),(b2c3),(b2c1)}

        a2的象集为{(b3c7),(b2c3)}

        a3的象集为{(b4c6) }

        a4的象集为{(b6c6)}

        S在(BC)上的投影为{(b1c2),(b2c1),(b2c3)}

    显然只有a1的象集(B,Ca1包含了S在(B,C)属性组上的投影,所以R÷S={a1}。

  

               (a)                            (b)                       (c)

6  除运算举例

    下面再以学生-课程数据库为例,给出几个综合应用多种关系代数运算进行查询的例子。

例7        查询至少选修1号课程和3号课程的学生号码。

首先建立一个临时关系K :

Cno

1

3

 

    然后求: πSno,Cno(SC)÷K

    结果为: { 95001 }

    求解过程与例6类似,先对SC关系在Sno和Cno属性上投影,然后对其中每个元组逐一求出每一学生的象集,并依次检查这些象集是否包含K

    例8  查询选修了2号课程的学生的学号。

          πSno,no=’2’(SC))={95001,95002 }

    例9  查询至少选修了一门其直接先行课为5号课程的学生姓名。

          πSname,Cpno=’5’(Course)|×| SC |×|πSno,Sname(Student))

πSname,( πSnoCpno=’5’(Course)|×| SC) |×|πSno,Sname(Student))

    例10 查询选修了全部课程的学生号码和姓名。

πSno,Cno(SC) ÷ πCno(Course)|×| πSno,Sname(Student)

    本节介绍了8种关系代数运算,其中并、差、笛卡尔积、投影和选择5种运算为基本的运算。其他3种运算,即交、连接和除,均可以用这5种基本运算来表达。引进它们并不增加语言的能力,但可以简化表达。

    关系代数中,这些运算经有限次复合后形成的式子称为关系代数表达式。

    关系代数语言中比较典型的例子是查询语言 ISBLInformationSystem Base Language)。 ISBL语言由 IBM UnitedKingdom研究中心研制,用于 PRTV Peterlee  Relational Test Vehicle)实验系统。

原创粉丝点击