开发者社区> 异步社区> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

《视图更新与关系数据库理论》——2.5 MATCHING,NOT MATCHING以及EXTEND

简介:
+关注继续查看

本节书摘来自异步社区出版社《视图更新与关系数据库理论》一书中的第2章,第2.5节,作者:【美】C.J. Date(达特),更多章节内容可以访问云栖社区“异步社区”公众号查看。

2.5 MATCHING,NOT MATCHING以及EXTEND

就本书的主体部分而言,我当然会讨论一些关系代数的运算符(及其代表的操作)的细节,而基本上我会认为你们理所当然已经对这些运算符及其操作(如果你需要,可以在附录B中找到它们的定义)很熟悉了。但是这里有一些我经常提及的特定操作你们可能并不熟悉;它们被Tutorial D所支持并且很有用处,但是在大多数常见的教材中却并未被讨论过(可能因为它们并不能直接被SQL支持)。第一个我们要说的就是MATCHING,下面是它的定义。

定义:表达式rl MATCHING r2所返回的关系等于表达式rl JOIN r2所返回的关系,都投影到rl的属性上。
这里有一个例子(“求得最近供应过至少一个零部件的供应商”)。

S MATCHING SP

给定我们经常使用的样本值,那么结果应该像下面这样:

image

Tutorial D同时也支持一个“非”格式的操作NOT MATCHING。下面是它的定义。

定义:表达式r1 NOT MATCHING r2所返回的关系等于表达式r1 MINUS (r1 MATCHING r2)所返回的关系。18[18]
这里有一个例子(“求得最近没有供应任何零部件的供应商”)。

S NOT MATCHING SP

给定我们经常使用的样本值,那么结果应该像下面这样:

image

另外一个我想给大家介绍的操作是EXTEND。EXTEND有2种形式。第1种形式的定义如下。

定义:令关系r没有任何一个属性叫作A。那么表达式EXTEND r__:{A := exp}所返回的关系的关系头是扩展了属性A之后的r的关系头,关系体则是数组t,t是扩展了A的值之后的r的数组,而A的值是通过将r的数组应用表达式exp计算后得出的值。
那么现在我们来看,假设关系P中零部件的重量一般使用磅为单位,现在我们想用克为单位来显示这些重量信息。克与磅的换算关系是454克为1磅,所以我们可以这么写:

E XTEND P : { GMWT := WEIGHT * 454 }

给定我们经常使用的样本值,那么结果应该像下面这样:
image
EXTEND的第2种形式主要瞄准的是“假设情况”查询。换句话说,它可以直接浏览特定变化带来的效果,而不需要对目标对象做出实际变化(可能然后再撤消)来实现。这里有个例子(“要是零部件的重量单位使用的是‘克’而不是‘磅’会怎么样?”)。

EXTEND P : { WEIGHT := WEIGHT * 454 }

这里的重点在于在大括号中的赋值目标属性并不像上一个例子中那样是一个“新”的属性,而是一个已经存在于特定关系(在这里这个关系就是关系变量P目前的值)中的属性。整体来讲,这个表达式被定义成与下面所列出的表达式等价。

( ( EXTEND P : { GMWT := WEIGHT * 454 } ) { ALL BUT WEIGHT } )
                                                     RENAME { GMWT AS WEIGHT }

 

正如你所见,这个展开式中使用了Tutorial D RENAME操作。我想这个操作已经差不多人尽皆知了,当然如果你需要的话还是可以在附录B中找到相应的定义。更多关于它的讨论请参阅《SQL and Relational Theory》。
让我们用第2种形式的定义来作为本节的结尾。

定义:令关系r拥有属性A。那么表达式EXTEND r :{A := exp} 所返回的关系的关系头与r相同,关系体则是数组t,t是由替换A值后的r的数组得出的,而替换后的A值则是该数组经由表达式exp计算得出的。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Spring全家桶系列--SpringBoot之AOP详解(下)
Spring全家桶系列--SpringBoot之AOP详解(下)
110 0
【大数据计算】(二) HBase 的安装和基础编程
目录 1. 安装HBase 1.1 下载安装文件 1.2 配置环境变量 1.3 添加用户权限 1.4 查看HBase版本信息 2. HBase的配置 2.1 单机模式配置 2.1.1 配置hbase-env.sh文件 2.1.2 配置hbase-site.xml 2.1.3 启动Hbase 2.2 伪分布模式配置 2.2.1 配置hbase-site.xml 3. HBase常用的Shell命令 3.1 在HBase中创建表 3.2 添加数据 3.3 查看数据 3.4 删除数据 3.5 删除表 3.6 查询历史记录 3.7 退出HBase数据库 4. HBase编程实践 4.1 编程题 API
44 0
Hadoop大数据平台实战(04):Ubuntu 18.04实战安装Spark大数据引擎并统计字符
Spark是一个开源的大数据分析引擎,在Hadoop生态系统中非常的重要组成部分,主要的作用就是分析处理大数据,Spark在大数据生态中的作用是替代之前的mapreduce引擎。Spark的性能测试表名将大数据分析处理的性能提高了100倍。
1566 0
Java 9 和Spring Boot 2.0纷纷宣布支持的HTTP/2到底是什么?
Java 9 和Spring Boot 2.0纷纷宣布支持的HTTP/2到底是什么?
625 0
使用Sqoop从Mysql向云HBase同步数据
Sqoop是一个用来将Hadoop和关系型数据库中的数据相互转移的工具。本文介绍如何使用sqoop将数据从Mysql导入到HBase。从成本的角度考虑,针对没有hadoop集群的用户,重点介绍单机运行sqoop的配置和参数。
5206 0
+关注
异步社区
异步社区(www.epubit.com)是人民邮电出版社旗下IT专业图书旗舰社区,也是国内领先的IT专业图书社区,致力于优质学习内容的出版和分享,实现了纸书电子书的同步上架,于2015年8月上线运营。公众号【异步图书】,每日赠送异步新书。
12049
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载