《视图更新与关系数据库理论》——2.1 关系和关系变量

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

2.1 关系和关系变量

每一个关系都有一个“关系头”和一个“关系体”,其中关系头是一系列状态和特征,而关系体则是符合关系头的一系列数组。让我们再次使用“供应商与零部件”数据库(如图2.1所示,与第1章的图1.1完全一样),供应商关系的关系头是{SNO CHAR, SNAME CHAR, STATUS INTEGER, CITY CHAR}的集合,我们假设在这里确定属性SNO、SNAME、STATUS和CITY分别被定义为CHAR、CHAR、INTEGER和CHAR这几种数据类型,而这个关系的关系体是对于供应商S1、S2、S3、S4和S5的数组的集合。这里要注意,每个数组都符合特定对应的关系头的要求,因为它们每个都只包含一个值,分别对应属性SNO、SNAME、STATUS和CITY(并且没有其他内容)。注意:其实更准确,也是更正确的说法应该是每个数组都“拥有”特定对应的关系头,因为在一个关系中,数组是应当有关系头的。
image

每个关系也都拥有(或者说属于)一个特定的“类型”,而这个特定的类型其实完全是由特定的关系头决定的。因此,我们在Tutorial D中表示一个给定的关系的类型时,其实就是关键词“RELATION”后面跟着适用的关系头。举例来说,供应商关系的类型就是:

RELATION { SNO CHAR , SNAME CHAR , STATUS INTEGER , CITY CHAR }

接下来我要说,关系本身和关系变量之间存在着逻辑差异[3]。现在我们再来看一下图2.1。这张图呈现了3个关系,也就是说,这3个关系有可能在特定的时间里同时存在于数据库中。但是,如果我们换个时间再来看数据库的话,很有可能我们看到的就是其他的关系。换句话说,S、P和SP都是变量,准确地说是关系变量,它们跟其他变量一样,值会随时变化。那么既然它们是具体的关系变量,那么在给定的时间内,它们的值就是关系值。不过要注意,对于一个给定的关系变量来说,合法的值必须都属于同样的关系类型,例如,这些值必须都有相同的关系头,而这个关系类型和关系头也因此被看作这个关系变量的类型和头。

为了更全面地阐述前面提到的想法和理念,我们假设关系变量S拥有和图2.1所示相同的值,我们再假设现在要删除在伦敦的供应商的数组。

DELETE ( S WHERE CITY = ‘London’ ) FROM S ;

关系变量S现在应改变成如下的样子。
image

从概念上来讲,S原来的值(当然是个关系值)已经被一个新的值(另一个关系值)整体替换掉了。现在我们来看,原来的值(有5个数组)和新的值(有3个数组)似乎看起来很像,但是其实它们是完全不同的值。我们用“DELETE”作为刚才操作语句的缩写[4],实际上在这里它等价于下面的“关系赋值”。

S := S WHERE NOT ( CITY = ‘London’ ) ;

或者等价于:

S := S MINUS ( S WHERE CITY = ‘London’ ) ;

那么经过所有这些赋值操作会发生什么呢?我们会看到(a)在右侧的源表达式是需要运算的,而(b)运算得出的值就会被赋给等式左侧的目标变量,于是就会产生我们刚刚讲过的效果。

因此DELETE是一个特定关系赋值的缩写,当然,对于INSERT和UPDATE来说也是相似的,它们从本质上来说也是对于特定的关系赋值的一个缩写。从逻辑上来讲,实际上关系赋值是我们唯一真正需要的更新操作(这是我在下一节要重点说明的观点)。

综上所述:关系本身和关系变量之间存在着逻辑差异。也正因为如此,我在之后也会很谨慎地区分它们二者,当我用“关系值”这个词的时候我就是在指关系的值,而当我说“关系变量”这个词的时候指的就是关系的变量。不过,我大多数时间还是会用“关系”作为“关系值”的简称(就好像我们用“整数”来作为“整数值”的缩写一样)。并且我大多数时间会用“relvar(关系变量,译者注)”来作为“关系变量”的缩写,例如,我会说“供应商与零部件”数据库包含3个“关系变量”(更具体一点来说,是3个“真实”或基础关系变量,之所以这么说是为了把它们和“虚拟”关系变量或者视图区分开)。

基础关系变量定义
下面是Tutorial D对于目前例子中使用的3个关系变量的定义,以供后面参考引用。

VAR S BASE RELATION{ SNO CHAR , SNAME CHAR , STATUS INTEGER , CITY CHAR }KEY { SNO } ;
VAR P BASE RELATION{ PNO CHAR , PNAME CHAR , COLOR CHAR , WEIGHT RATIONAL , CITY CHAR }KEY { PNO } ;
VAR SP BASE RELATION{ SNO CHAR , PNO CHAR , QTY INTEGER }KEY { SNO , PNO }FOREIGN KEY { SNO } REFERENCES SFOREIGN KEY { PNO } REFERENCES P ;

 

出于本书的目的,我选择忽略Tutorial D在目前定义中并不包含明确的FOREIGN KEY语法的这个事实。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/282176.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PHP格式化全国省市区列表

一、代码部分 /*** 获取全国省市区列表(格式化后)*/public function getRegionList(){$data CoreRegion::find()->select([national_code, region_name, parent_id, region_level])->asArray()->all();$data $this->assembleRegionData($…

从 C# 崩溃异常 中研究 页堆 布局

一:背景 1.讲故事最近遇到一位朋友的程序崩溃,发现崩溃点在富编辑器 msftedit 上,这个不是重点,重点在于发现他已经开启了 页堆 ,看样子是做了最后的挣扎。0:000> !analyze -v EXCEPTION_RECORD: (.exr -1) Except…

Win10笔记本不显示wifi列表

一、问题描述 1、连接有线网络时,只显示连接到的有线网络,而不显示wifi列表 2、不连接有线网络时,同样不显示wifi列表 二、解决方案 1、Win R 打开运行,并输入services.msc 2、回车确定,找到WLAN AutoConfig项&…

搭建WeApacheb网站服务器

本地yum源安装mkdir /opt/dvd (先用mkdir去根下opt目录下建一个名字叫dvd的目录)mount /dev/sr0 /opt/dvd (用mount命令,挂载光盘设备(/dev/sr0),将光盘挂载到刚刚建立的dvd目录下(/opt/dvd))写yum源配置文件|-cd…

PHP的构成及生命周期

一、PHP开源源代码下载地址: https://github.com/php/php-src.git 二、PHP的构成 1、目录结构 2、目录分析 (1)sapi目录是PHP的应用接口层。 (2)main为php的主要代码,主要是输入/输出、Web通信、PHP框架…

《Adobe After Effects CS6完全剖析》——动画:最重要的是关系

本节书摘来自异步社区《Adobe After Effects CS6完全剖析》一书中的第2章,动画:最重要的是关系,作者 【美】Mark Christiansen(马克克里斯琴森),译者 苗玉敏,郭圣路,曹玉臣&#xff…

Oracle即将发布的全新Java垃圾收集器 ZGC

Java 11的特性集合已经确定,其中包含了一些非常棒的特性。新版本提供了一个全新的垃圾回收器ZGC,它由甲骨文开发,承诺在TB级别的堆上实现非常低的停顿时间。在本文中,我们将介绍甲骨文开发ZGC的动机、ZGC的技术概览以及ZGC带来的一…

如何获取 OSS AccessKeyId、AccessKeySecret

开通阿里云oss:https://www.aliyun.com/product/oss 1、点击概览 — AccessKey 注:官方链接 2、出现下图,选择“开始使用子用户Access Key” 3、填写用户名,并点击确定 4、这时会给你的手机发送验证码确定是本人操作,…

【网络爬虫入门02】HTTP客户端库Requests的基本原理与基础应用

【网络爬虫入门02】HTTP客户端库Requests的基本原理与基础应用 广东职业技术学院 欧浩源 2017-10-15 1、引言 实现网络爬虫的第一步就是要建立网络连接并向服务器或网页等网络资源发起请求。urllib是目前最常用的做法,然而Requests会比urlib更加方便,能…

《零信任的基石:使用 SPIFFE 为基础设施创建通用身份》翻译电子书分享

国庆假期除了去浙江和安徽玩了一圈欣赏江南山水和徽派建筑之外,还抽空翻译了一本电子书。本书译自 Solving the Bottom Turtle — a SPIFFE Way to Establish Trust in Your Infrastructure via Universal Identity。你可以选择在线阅读(推荐&#xff09…

《Outlook时间整理术》一创建和使用自己的文件夹结构

本节书摘来异步社区《Outlook时间整理术》一书中的第1章,作者: 【德】Lothar Seiwert , Holger Woeltje 译者: 欧阳宇,更多章节内容可以访问云栖社区“异步社区”公众号查看。 创建和使用自己的文件夹结构 花费约两小时为电子邮件…

《实用软件架构:从系统环境到软件部署 》——2.4 架构视图与架构视点

本节书摘来自华章出版社《实用软件架构:从系统环境到软件部署》一书中的第2章,第2.4节,作者:[印]蒂拉克米特拉(Tilak Mitra)著,爱飞翔 译,更多章节内容可以访问云栖社区“华章计算机…

TCP:当初取代NCP,如今害怕被取代

我叫TCP(Transmission Control Protocol)也叫传输控制协议。不觉回忆1983年,亲手将NCP协议淘汰,取而代之的是我,成了火遍大江南北的网络红人之一。现如今,我感受到前所未有的恐惧,因为我一生的敌…

批处理中的IF详解

在CMD使用IF /?打开IF的系统帮助会发现IF有3种基本的用法! 第一种用法:IF [NOT] ERRORLEVEL number command 这种用法现在很少用了,因为它需要使用到CHOICE命令,这个命令现在被set /p代替了,它是判断CHOICE命令选择的选项的&…

fullcalendar 显示的时间间隔只有四十五分钟_【体能新视点】——女子篮球运动员比赛期间的心率、血乳酸浓度和时间运动分析...

女子篮球运动员比赛期间的心率、血乳酸浓度和时间-运动分析—摘要—本研究的目的是检验女子篮球运动员在比赛规则改变后的生理需求和运动模式。在九场正式比赛中,对九名大学代表队队员进行了研究。每场比赛都被录像以确定主要动作的频率,连续记录心率&am…

《JavaScript机器人编程指南》——1.2 NodeBot是什么,基本词汇还有哪些

本节书摘来异步社区《JavaScript机器人编程指南》一书中的第1章,第1.2节,作者:【美】Kassandra Perch(珀芝),更多章节内容可以访问云栖社区“异步社区”公众号查看。 1.2 NodeBot是什么,基本词…

解决在Python中使用Win32api报错的问题,No module named win32api

一、系统环境 操作系统: Win7 64位 Python:3.7.0 二、在使用import win32api时,报错:No module named win32api 网上查到有下面解决办法: 方法1:pip install pypiwin32或pip3 install pypiwin32 或 python -m pip install pypiwin…

《Python游戏编程入门》——1.2 初识Python

本节书摘来自异步社区《Python游戏编程入门》一书中的第1章,第1.2节,作者[美]Jonathan S. Harbour ,李强 译,更多章节内容可以访问云栖社区“异步社区”公众号查看。 1.2 初识Python Python既是一个软件工具包,也是一种…

大数据:Parquet文件存储格式

一、Parquet的组成 Parquet仅仅是一种存储格式,它是语言、平台无关的,并且不需要和任何一种数据处理框架绑定,目前能够和Parquet适配的组件包括下面这些,可以看出基本上通常使用的查询引擎和计算框架都已适配,并且可以…

“数据门”事件频发 如何避免人为因素导致数据泄露?

前段时间,某酒店集团数据泄露引起轩然大波,泄露的数据中包含了用户姓名、手机号、邮箱、号等多项信息。卖家对这个约5亿条数据打包出售价格为8比特币或520门罗币。而关于此次信息泄露事件的原因,目前尚未定论。据悉,由于集团某程序…