《交互式程序设计 第2版》一3.3 关系是什么

3.3 关系是什么

本节使用常用的供应商(supplier)关系作为示例基础。图示如下:

定义 设{H}为元组标题,t1,t2,…,tm(m>=0)为标题均是{H}的不重复元组。注3那么,{H}和元组集合{t1,t2,…,tm}的组合(设为r)即为涵盖属性A1,A2,…,An的关系值(relation value)(简记为关系)。其中,A1,A2,…,An均为{H}中的属性。关系r的标题为{H};r和该标题具有相同的属性(当然也有相同的属性名称及类型)和度。元组集合{t1,t2,…,tm}是r的主体(body)。m的值为r的基数(cardinality)。
作为练习,你可以试着用上面的定义来说明供应商关系。不过,我至少要解释一下为什么我们把这个东西叫做关系。从日常的自然语言意义上讲,关系中的每个元组代表一个n元关联(n-ary relationship),而此关联联系着n个值(每一个值对应一个元组属性);而一个确定的关系中元组的全集表示,在某个确定的时刻恰好存在的此种关联的全集;用数学语言来说,该元组集合即为关系。
因此,你经常听到的将关系模型的名称由来归因于其支持“表间关联”的说法,实际上是舍本求末的说法(尽管从某种意义上讲,这种说法也是正确的)。关系模型之所以要这么命名是因为,它所处理的抽象在我们非形式化的思维中是表,而在数学中则形式化地称为关系。
和元组一样,关系也是值,同样具有类型,并且其类型也同样具有名称。在Tutorial D中,这样的类型名称采用RELATION{H}的形式,其中{H}为标题。比如:

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

其中的属性排序是任意指定的。另外,每一个关系值都由关系选择器调用来表示。比如:

RELATION
   { TUPLE { SNO 'S1' , SNAME 'Smith' , STATUS 20 , CITY 'London'} ,
     TUPLE { SNO 'S2' , SNAME 'Jones' , STATUS 10 , CITY 'Paris' } ,
     TUPLE { SNO 'S3' , SNAME 'Blake' , STATUS 30 , CITY 'Paris' } ,
     TUPLE { SNO 'S4' , SNAME 'Clark' , STATUS 20 , CITY 'London'} ,
     TUPLE { SNO 'S5' , SNAME 'Adams' , STATUS 30 , CITY 'Athens'} }

元组的顺序是任意的。下面给出另一个示例(与前一个不同,此示例不是字面值):

RELATION { tx1 , tx2 , tx3 }

此处假设tx1、tx2和tx3都是元组表达式,并且都是同一元组类型。如这些示例所示,Tutorial D中的关系选择器调用通常注4由关键字RELATION以及由大括号封闭的元组表达式列表构成(这些元组表达式必须是相同元组类型的)。
定义的推论
大多数第1章中谈及的关系性质都是上述定义的直接推论,但是还有一些要点以前没有明确说过,现在要详细说明一下。首先要说下面两点:
关系从不包含重复元组。这是因为关系的主体是一个集合(元组的集合),而数学中集合是不包含重复元素的。
关系从不包含null。这是因为关系的主体是元组集合,而元组是从不包含null的。
这两点非常重要,而且其相关内容也非常丰富,所以我会在下一章中进行详细说明。在下面几节中,我要讲一些由这个定义引申出的轻量级的议题(?)。

时间: 2024-11-10 00:53:09

《交互式程序设计 第2版》一3.3 关系是什么的相关文章

《交互式程序设计 第2版》一1.2 交互领域中的编程

1.2 交互领域中的编程 这本书之所以名为<交互式程序设计>,是因为我们主要关注交互设计中要用到的编程知识,也就是用编程的手段,去创造用户能直接与之交互的应用.编程有很多种,其中有些技术和思维方法更适合用于服务器和数据库,而不是交互.而本书集中讨论的东西将是你用来建立用户和应用之间沟通的知识和技能.交互设计中的一大挑战是如何在你设计的作品和用户之间建立真正的交互. 1.2.1 交互的本质 那么,"交互"到底是什么呢?我们可以把它定义为双方或多方之间的信息交换.作家及电子游戏

《交互式程序设计 第2版》一第3章

第3章 使用ProcessingProcessing是较早的开源项目之一,它简化了创建交互式图形应用程序的难度.它就像是艺术家和设计师的专用工具一样,你无需高深的编程技巧,也可以容易地用它进行艺术创作.Processing是完全开源和免费的,你可以下载.使用甚至修改它.最初,麻省理工学院的Casey Reas和Ben Fry在John Maeda的指导下开始这个项目,后来一组开发人员不断更新Processing的内核和工具.现在Processing的最新版本是1.5版译注1,提供的工具支持创建J

《交互式程序设计 第2版》一3.11 小结

3.11 小结 Processing既是一个集成开发环境,也是一门程序设计语言.它们是一体的,可以在processing.org/download上下载.Processing语言是基于Java语言的,但作了简化,以便帮助艺术家和设计师容易地建立可视化样本和交互式应用程序.Processing集成开发环境顶端的工具栏上有几个按钮.单击"Run"按钮可以运行程序:单击"Stop"按钮可以停止应用程序的运行:此外还有"New"."Open&q

《交互式程序设计 第2版》一1.1 本书读者对象

1.1 本书读者对象 本书基于这样一个目标:技术和代码不是计算机科学家和工程师的专用工具,任何人都不需要畏惧或逃避电子技术.硬件和代码.艺术家和设计师可能想知道,如何通过定制的计算机应用程序来更好地实现用户之间以及应用之间的交互.你可能会关心如何创造出富有科技感的应用,这里有两种情况,一种是该应用本身具有突出的科技特性,另一种是看上去很高科技或者使用了一些代表了科技力量的元素,例如键盘.鼠标和触摸屏.你也可能关注交互领域的其他方面,又或者希望把冰冷的技术隐藏于更具生命机理的界面之下.本书会介绍用

《交互式程序设计 第2版》一1.5 数据交换与探索

1.5 数据交换与探索 交互设备的任务.目标和实现其交互的方式都很重要.与之前提到的一样,下面的分类并不是一个交互作品分类的完整清单,只是列举了一些最常见主题,为本书后面的内容提纲挈领一下. 支持数据可视化 我们身处的社会越来越以信息为中心,每天都有大量的数据在处理,数据可视化就变得越来越重要了.结构良好的数据可视化是一种有力的工具,它不仅让用户理解独立的数据点,还让用户明白数据点之间的关系,检测数据模式,甚至重新配置数据,或将其置于新的语境中.数据可视化不是向用户单方面灌输信息,而是通过和用户

《交互式程序设计 第2版》一3.9 导出Processing应用程序

3.9 导出Processing应用程序 如果你想看看应用程序运行情况,想检查代码,那么运行和调试的确很有用.但如果你要把应用程序与某个朋友分享,运行和调试就没有用了,需要做的是导出应用程序.第一步是点击菜单"File"→"Export Application",或者直接按Ctrl + E组合键(Mac OS X下是-E).会弹出如图3-10所示的对话框,让你选择程序将来运行所需的操作系统.如果你单击了Export(导出)按钮,会显示一个对话框,将当前应用程序所在的

《交互式程序设计 第2版》一导读

前 言 本书分三部分.第一部分(第1-6章)介绍贯穿本书的3个项目,第二部分(第7-10章)介绍交互设计和应用程序创作中最普遍的主题,第三部分(第11-17章)深入讨论相关进阶主题.当中还有对相关人士的采访,包括程序员.艺术家.设计师以及工具的开发者.本书涉猎如此广泛,无法对每一个主题进行深入探讨,有兴趣进一步研究的读者不妨参考书中所列出的书目.网站.设计师和艺术家. 本书包括及未包括的内容 当下交互设计领域迅猛发展,观念日新月异,笔者对此的兴奋之情难以言表.受时间和篇幅所限,无法囊括所有的方面

《交互式程序设计 第2版》一2.3.4 运算符

2.3.4 运算符 在程序中,运算符就是编译器用来执行命令和运算的符号,例如"="用来赋值,"=="用来比较等.运算符有三类:一是数学运算符,用于数学运算,就跟数学课上学到的一样:二是赋值运算符,用来改变变量的值:三是比较运算符,比较两个变量是否相等,谁大谁小. 数学运算符的用法就跟一般数学式子里的一样.用"+"可以把两个变量相加,例如: int apples = 5: int moreApples = apples + 3; // moreAp

《交互式程序设计 第2版》一3.4 Processing绘图基础

3.4 Processing绘图基础 因为Processing是为艺术家提供的工具,所以它简化了很多任务,其中最重要的一个任务是绘图.第8章和第9章会介绍利用矢量和位图绘图.第13章将介绍图形库OpenGL(Open Graphics Library)和一些3D(3 Dimension,三维)基础,以及如何创建复杂的绘图系统.在本节,你将学习如何绘制简单的形状和线条,以及如何创建颜色去填充它们. 3.4.1 rect().ellipse()和line()方法 有3个最简单的绘图方法rect().

《交互式程序设计 第2版》一1.2.4 交互语言

1.2.4 交互语言 任何一种交互都需要一套相应的词汇.例如,你要用鼠标把桌面上的某个文件删除,你会说"选中该文件,然后把它拖到回收站".事实上,对你这个动作,系统并不是完全如你这般理解,但没关系.重要的是你明白你可以做什么动作,而对于同一个动作,系统有相同的理解,并作出你所预期的响应.建立一个有意义.有效和有结果的交互,就像创造一种语言或代码,需要交互双方对符号的意思和动作指令的意义有一致的协议.而同一个符号或动作,在不同类型的界面和交互中, 含义会相差很大. 各式各样的交互种类繁多