第四周翻译

2.9 大学数据库模型

查询语言用于实践包括非过程元素的程序和方法。我们在第3到5章对SQL查询语言研究的非常广泛。这里有很多“纯”查询语言:程序上的关系代数,而非过程元组关系演算和域关系演算。这些查询语言简洁,正式的、缺乏商业语言的“语法”,但他们说明的基础技术从数据库中提取数据。在第六章中,我们将详细分析相关的代数和两个版本的关系演算,元组关系演算和域关系演算。关系代数由一组操作组成,它们以一个或两个关系作为输入,并产生一个新的关系作为结果。关系演算使用谓词逻辑来定义所需的结果,而不提供任何特定的代数过程来获得结果。

关系运算

所有的过程关系查询语言都提供了一组可以应用于单个关系或一对关系的操作。这些操作具有良好的和期望的属性,其结果总是一个单一的关系。此属性允许一个将这些操作在一个模块化的方式。具体而言,由于关系查询的结果本身是一种关系,关系操作可以应用于查询结果以及给定的关系集。

具体的关系操作根据语言而不同地表达,但符合我们在本节中描述的一般框架。在第3章中,我们展示了用SQL表示操作的具体方式。

最频繁的操作是从一个满足特定谓词的单一关系(比如教师)中选择特定的元组(比如工资> 85000美元)。其结果是一种新关系,即原始关系(教师)的子集。例如,如果我们从图2.1的讲师关系中选择tuple,满足谓词“工资大于$ 85000”,我们将得到如图2.10所示的结果。

 

2.10的结果是查询选择导师工资大于85000美元

另一个常见的操作是从关系中选择某些属性(列)。结果是只有选定属性的新关系。例如,假设我们想要一个教员ID和薪水列表,而不列出图2.1的教员关系中的名称和dept名称值,那么结果如图2.11所示,有两个属性ID和salary。结果中的每个tuple都来自于一个教师关系的元组,但只显示所选的属性。

join操作允许合并两种关系,合并一对元组,一个来自每个关系,一个元组。有许多不同的方式来连接关系(就像我们将在Chapter3中看到的那样)。图2 . 12显示了从指导者和department表中加入tuple的示例,其中显示了每个教师和她工作的部门的信息。这一结果是由教师与系里关系中的每个元组相结合而形成的。在图2.12中所示的联接形式中,称为“自然连接”,如果值,则来自于教师关系的tuple与department关系中的tuple匹配。

                           ID salary

10101 65000

12121 90000

15151 40000

22222 95000

32343 60000

33456 87000

45565 75000

58583 62000

76543 80000

76766 72000

83821 92000

98345 80000

在图2.12中所示的连接形式中,称为“自然连接”,如果其dept名称属性的值相同,则与department关系中的tuple相匹配。在联接结果中出现了所有这些匹配的元组。一般来说,两种关系的自然连接操作都匹配tuple,它们的值对于两种关系中的所有属性名称都是相同的。

Cartesian产品操作将tuple与两个关系结合在一起,但与join操作不同,它的结果包含了来自两个关系的所有元组,不管它们的属性值是否匹配。

由于关系是集,我们可以在关系上执行正常的集操作。union操作执行了两个“类似结构”表的集合(比如所有研究生的表和所有本科生的表)。例如,一个部门可以获得所有学生的集合。其他的集合操作,例如交集和设置差异也可以执行。

如前所述,我们可以对查询的结果执行操作。例如,如果我们想为那些年薪超过8.5万美元的教师找到身份证和工资,我们将在上面的示例中执行前两个操作。首先,我们从教师关系中选择这些元组,其工资值大于85,000美元,然后从这个结果中选择两个属性ID和工资,结果如图2.13所示的关系代数定义关系的一组操作,并联一般的代数运算格雷申加减法和乘法,这操作就像代数操作号码讲一个或多个数字作为输入并返回一个数字作为输出,关系代数操作通常采用一个或两个关系作为输入并返回一个关系作为输出,关系代数操作典型的输入一个或两个关系并返回一个关系作为输出。

 

符号(名字)

使用的例子

(选择)

返回满足谓词的输入关系的行

 

(投影)

教练

从输入关系的所有行输出指定的属性,删除重复的元组

(连接)

教练&部门

两个输入关系对所有具有相同名称的属性具有相同的值的输出对行

笛卡尔产品

输出来自两个输入关系的所有行(无论他们是否具有相同的公共属性值)

 

工会

从两个输入关系输出元组

 

和工资。在本例中,我们可以以任意顺序执行操作,但在所有情况下都不是这样,我们将看到。

有时,查询的结果包括重复的元组。例如,如果我们从教师关系中选择dept.name属性,就会有几个重复的例子,包括“合成.Sci”.这显示了三次。离子语言严格遵循集合的数学定义,并删除重复。另外,考虑到从大型关系结果关系删除副本所需的大量处理,保留副本。在后一种情况下,关系并不是纯粹数学意义上的关系。

当然,数据库的数据必须是随时间变化。一个关系可以通过插入新的元组,删除已有的元组或修改元组来更新。

对关系模型的介绍

改变某些属性的值。可以删除整个关系,并创建新的关系。

我们将在第三章到第五章中讨论使用SQL语言的关系查询和更新。

 

posted @ 2017-10-02 11:32  黄百万  阅读(307)  评论(0编辑  收藏  举报