没有合适的资源?快使用搜索试试~ 我知道了~
数据库的SQL的关系代数基础
5星 · 超过95%的资源 需积分: 13 35 下载量 65 浏览量
2010-04-21
15:09:53
上传
评论
收藏 1.36MB PDF 举报
温馨提示
试读
34页
SQL语言是数据库的一种重要查询,而关系代数是关系数据库模型的数学基础。值得学习。
资源推荐
资源详情
资源评论
下载
第6章 关 系 代 数
6.1 引言
自从C o d d 的文章[5.1, 6.1]发表后,关系模型的操作部分已取得了相当大的发展。操作
的主要组成部分是关系代数,它是一个操作符的集合,以关系作为操作对象,返回的结果是
一个关系。在第3章中,已经比较简单地介绍了三个操作符:选择( r e s t r i c t ),投影(p r o j e c t)
和连接(j o i n);本章将要深入地学习这些操作符以及其他几个操作符。
在参考文献[6 . 1 ]中,C o d d定义了一个如图 6 - 1 所示的含8个操作符的集合,即通常所说
的基本(o r i g i n a l )关系代数。现在, C o d d 想要给这8个操作符作出精确的定义,下一章将会
看到。但必须明白这 8个操作符绝不是全部,实际上满足“关系进,关系出”这一简单要求的
任何操作符都可以定义。许多学者也已经定义了不少操作符(看参考文献[ 6 . 1 0])。本章首
先讨论C o d d最初的操作符(或至少是我们的版本),然后以此为基础讨论有关代数学的种种思
想;并考虑对这8个操作符的基本集合进行有益的扩展。
基本代数概述
图6 - 1中的基本代数由8个操作符组成,可分成两组:
1) 传统的集合操作符并( u n i o n ),交( i n t e r s e c t i o n ),差( d i ff e r e n c e )和笛卡尔积
(Cartesian product)(所做的修改只是操作对象变为了特定的关系,而不再是任意的集
合);
2) 专门的关系操作符 r e s t r i c t (也称为s e l e c t
—
选择)、投影(p r o j e c t )、连接(j o i n )和
除(d i v i d e)。
下面给出这8个操作符的简单定义(参考图 6 - 1 ):
选择:返回一个关系,其中的元组来自指定关系中所有满足指定条件的元组。
投影:返回一个关系,由去掉若干属性列后的指定关系中剩余的所有(子)元组组成。
积:返回一个关系,包含任意两个分别来自两个指定关系的元组组合的所有可能的元组。
并:返回的关系由两个指定关系中所有的元组构成。
交:返回关系由同时出现在两个指定关系中的元组构成。
差:返回的关系由那些属于第一个关系却不属于第二个关系的元组构成。
连接:返回关系中的元组是两个元组的结合,这两个元组分别来自两个指定的关系,需
满足的条件是此两个关系存在相同的属性,且在相同属性上有相同的值(在结果元组中,共
同的值只出现一次,而不是两次)。
除:此操作是在两个单目关系和一个双目关系上,返回关系的元组满足以下条件:这些
元组来自一个单目关系,其在双目关系中的对应元组能与另一个单目关系中的所有元组相匹
配。
对基本操作符的概述先到此为止。本章接下来的安排如下:在本节的简介之后,6 .2节再
次讨论关系封闭的问题,着重举例说明。 6 . 3 节和6 . 4 节详细讨论 C o d d的8个基本操作符,6 . 5节
给出用这些操作符进行查询的一些例子。接下来, 6 . 6节考虑了代数应用的更多问题。 6 . 7 节描
述了对C o d d 基本代数的一些有益扩充,包括 E X T E N D和S U M M E R I Z E 这两个重要的操作符。
6 . 8节讨论了在含有关系型属性的关系和只含有标量属性的关系之间进行映射的操作符。 6 . 9节
讲了关系的比较。最后,6 . 1 0 节提供了一个简要的小结。
图6-1 基本关系代数的8个操作符(概览)
以下是两个预先的提示:
• 由于众所周知的原因,经常说到“X是R上的一个选择”(其中R是一个具体的关系变量),
而更准确的说法是“ X是关系变量R当前值的一个选择”,或者“X是一个变量,它的值
是关系变量R当前值的一个选择”。我们认为该简略的说法不会引起混淆。
• SQL中类似于关系代数操作符的问题推迟到第 7章进行讨论,原因将在该章讲到。
6.2 关系封闭性
在第3章中已经看到,任何关系操作的结果是另一个关系,这一事实被称为是关系封闭的
特性。封闭性意味着可以写出嵌套的关系表达式,也就是说,关系表达式的操作对象可以用
任意复杂的关系表达式来表示(关系代数中的关系嵌套和普通算术中的算术表达式嵌套有着
类似之处;代数中的关系是封闭的,这一点和“普通算术中的数是封闭的”这一事实具有同
样的重要性)。
第6章 关 系 代 数使用107
下载
选择 投影
积
差
交
并
(自然)连接
除
当第3章讨论封闭性时,故意忽略了非常重要的一点。回顾一下可知,每个关系分为两部
分
—
表头和主体;不严格地讲,表头是属性,主体是元组。现在,基本关系(即基本关系
变量的值)的表头对系统来说是非常容易理解的。但是由此而得出的关系会怎样呢?例如,
考虑下面表达式:
S JOIN P
(本例表示了供应商和零件关系通过匹配城市进行连接。 C I T Y 是两个关系之间的唯一的共同
属性)。我们知道结果中主体的形式,但表头是何种形式呢?封闭性规定,结果必须有一个表
头,并且对系统是可知的(实际上,用户也必须知道,过一会儿将会看到)。换句话说,结果
必须是一个定义好的关系类型。如果严格地根据封闭性,定义的关系操作必须保证每个操作
的结果具有正确关系类型
—
即,带有正确的属性名称 。
每个结果关系需要含有正确的属性名称,原因之一当然是可以使在后面的操作中利用这
些属性名
—
特别是在整个嵌套表达式的其余部分的操作中。例如,如果不知道 S JOIN P的
结果中有一个叫C I T Y 的属性名,就不能写一个如下的表达式:
(S JOIN P) WHERE CITY='Athens'
因此,我们需要的是一个嵌入到代数中的类型参照规则的集合(关系的),以利于如果知
道给定关系操作中输入关系的类型,则可以推断输出的类型。假如有这样一个规则,那么任
意的关系表达式,不论怎样复杂,产生的结果就会有一个定义好的(关系)类型,且有一个
定义好的属性名称的集合。
为此先介绍一个新的操作符
—
R E N A M E ,它的作用是在给定的关系中更改属性的名称。
确切地说,R E N A M E返回的关系与原给定关系是一样的,除了至少一个属性名改变以外(给
定的关系可通过关系表达式来指定,当然其中可以包含一些关系操作)。例如,可以写出如下
的式子:
S RENAME CITY AS SCITY
注意,这不是一个命令或声明,而是一个表达式。因此,它可以嵌套在别的表达式里面
—
产生一个与关系S有相同表头和主体的关系,只是属性 C I T Y 更名为S C I T Y:
注意:请注意S N A M E 表达式没有改变数据库中的供应商关系变量
—
它只是一个表达式,
就象S JOIN SP一样,产生了一个确定的结果(在这个特殊的例子中,这个结果碰巧看起来象
供应商关系变量的当前值)。
下面有另外一个例子(这次是多个改名):
P RENAME PNAME AS PN , WEIGHT AS WT
结果如下:
108使用第二部分 关系数据模型
下载
代数的这方面内容在很多文献中被相当程度地忽略了 ( S Q L语言和S Q L 产品中同样如此),Hall et al.[6.10]和
D a r w e n [ 6 . 2 ]除外。本章有关代数的内容受了这两本书的很大影响。
有必要明确地指出, R E N A M E 的应用意味着关系代数(不像 S Q L )没有必要使用像 S . S #
那样严格的名字。
6.3 语法
本节中,将描述关系代数表达式具体的语法。注意:大多数数据库书籍的关系操作符使
用了某种数学的或希腊的符号,典型的有以 表示选择, 表示投影,∩表示交, 表示连接,
等等。大家可能注意到,我们喜欢用诸如 J O I N 和W H E R E 等关键字。使用关键字虽会使表达
式变得稍长一些,但它使表达式变得更易读。
<relational expre s s i o n > 是一个关系表达式(当然是一个关系值)。第一个格式是关系选择
子调用(包括作为特殊情况的关系文字);这里不列出 <tuple expre s s i o n > 的详细语法,只是
用例子来说明基本的思想。其余的格式意思比较明显。
在语法中,由于操作符优先的原因,把 <p ro j e c t > 与<n o n p ro j e c t > 区分开来(给p r o j e c t i o n
赋予一个高优先级是很方便的)。
<relational expre s s i o n> 必须不是一个<n o n p ro j e c t >(非投影符)。
<relational expre s s i o n> 必须不是一个<n o n p ro j e c t >。前一节介绍了<re n a m i n g >的语法。
<relational expre s s i o n >必须不是一个 <n o n p ro j e c t > 。除非其中之一或两者都是另一个
<u n i o n >。
<relational expre s s i o n > 必须不是一个 <n o n p ro j e c t > 。除非其中之一或两者都是另一个
第6章 关 系 代 数使用109
下载
<i n t e r s e c t >。
<relational expre s s i o n > 必须不是一个<n o n p ro j e c t >。
<relational expre s s i o n> 必须不是一个 <n o n p ro j e c t > 。除非其中之一或两者都是另一个
<t i m e s> 。
<relational expre s s i o n >必须不是一个<n o n p ro j e c t > 。注意:<boolean expre s s i o n> 可以包含
<relational expre s s i o n> 表示的关系的一个属性的引用,其中 <relational expre s s i o n>允许一个选
择子调用(即S WHERE CITY = 'London' 是一个合法的<re s t r i c t>)。
<relational expre s s i o n>必须不是一个<n o n p ro j e c t>。除非其中之一或两者都是另一个<j o i n>。
<relational expre s s i o n> 必须不是一个<n o n p ro j e c t >。
<relational expre s s i o n>必须不是一个<n o n p ro j e c t > 。
6.4 语义
本节将举例说明6 . 3 节中的语法。依次考虑下面的操作符:并、交、差、积、选择、投影、
连接和除(重命名在6 . 2 节已经讲过)。
1. 并
数学中两个集合的并是这两个集合的所有元素组成的集合。因为一个关系是(或更确切
地说是包含)一个集合,即一个元组的集合,所以构造这样两个集合的并是完全可能的;所
得结果包含了出现在任一个或两个原关系中的所有元组。例如,出现在关系变量S中的供应
商元组的集合与出现在关系变量P中的零件元组的集合的并当然是一个集合。
然而,尽管这一结果是一个集合,却不是一个关系;关系不能含有不同类型的元组,其
中的元组必须是同类的。当然,我们希望结果是一个关系,因为要保持封闭性。所以,关系
代数中的并,不是通常数学中的并;它是一种特殊类型的并,要求两个参与操作的关系是同
一类型
—
即它们或者都包含供应商元组,或者都包含零件元组,而不能是两者的混合。如
果两个关系属于同一类型,那就可以进行并操作,得到的结果是一个相同类型的关系;换句
话说,封闭的特性被保持了下来 。
110使用第二部分 关系数据模型
下载
以前,大多数数据库书籍(包括本书的早期版本)使用术语“并相容性( u n i o n c o m p a t i b i l i t y )”来表示两个关系
必须是同一类型。然而,由于多种原因,这个术语并不恰当,最明显的一点是此术语不是仅适用于并的。
剩余33页未读,继续阅读
资源评论
- Mikey_Kop2013-03-15看了很有收货。
ntcome
- 粉丝: 11
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功