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

简介:

本节书摘来华章计算机《交互式程序设计 第2版》一书中的第3章 ,第3.3节,Joshua Noble 著 毛顺兵 张婷婷 陈宇 沈鑫 任灿江 译更多章节内容可以访问云栖社区“华章计算机”公众号查看。

3.3 关系是什么

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

定义 设{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的。
这两点非常重要,而且其相关内容也非常丰富,所以我会在下一章中进行详细说明。在下面几节中,我要讲一些由这个定义引申出的轻量级的议题(?)。

相关文章
|
关系型数据库 分布式数据库 数据库
沉浸式学习PostgreSQL|PolarDB 19: 体验最流行的开源企业ERP软件 odoo
本文主要教大家怎么用好数据库, 而不是怎么运维管理数据库、怎么开发数据库内核.
1400 2
|
小程序 容器
日程安排小程序实战教程
日程安排小程序实战教程
|
8月前
|
安全 搜索推荐 iOS开发
WPS Office for Mac 7.3.1 - 写作、表格处理、PPT 制作和 PDF 编辑
WPS Office for Mac 7.3.1 - 写作、表格处理、PPT 制作和 PDF 编辑
499 8
WPS Office for Mac 7.3.1 - 写作、表格处理、PPT 制作和 PDF 编辑
|
机器学习/深度学习 编解码 测试技术
【YOLOv10改进-注意力机制】LSKNet(Large Selective Kernel Network ):空间选择注意力
YOLOv10专栏聚焦遥感目标检测,提出LSKNet,首个探索大型选择性核的模型。LSKNet利用LSKblock Attention动态调整感受野,处理不同目标的上下文。创新点还包括极化滤波和增强技术,提升信息保留和非线性输出。在HRSC2016等遥感基准上取得SOTA性能。LSKNet代码展示其网络结构,包括多阶段模块和注意力机制。详细配置和任务说明见相关链接。
|
前端开发 JavaScript Java
计算机java项目|springboot基于spring框架的电影订票系统
计算机java项目|springboot基于spring框架的电影订票系统
262 0
|
XML 机器学习/深度学习 数据可视化
目标检测笔记(六):如何通过界面化操作YOLOv5完成数据集的自动标注
这篇文章介绍了如何通过界面化操作YOLOv5来完成数据集的自动标注,包括修改源码、自动标注的前期准备、开始自动标注、可视化标注效果以及将XML文件转换为YOLO训练所需的TXT格式。
837 1
目标检测笔记(六):如何通过界面化操作YOLOv5完成数据集的自动标注
|
存储 算法
【数据结构和算法】图的各类概念与图的存储结构(还有十字链表与邻接多重表的介绍)
【数据结构和算法】图的各类概念与图的存储结构(还有十字链表与邻接多重表的介绍)
603 0
【数据结构和算法】图的各类概念与图的存储结构(还有十字链表与邻接多重表的介绍)
|
缓存 负载均衡 监控
Nginx性能调优5招35式不可不知的策略实战
以上 V 哥总结的5个方面关于 Nginx性能调优的策略,实际应用中需要结合实际项目的情况来测试,希望对你有帮助,欢迎关注威哥爱编程,技术路上我们一起成长。
440 0
|
SQL 缓存 数据库连接
SqlAlchemy 2.0 中文文档(二十二)(2)
SqlAlchemy 2.0 中文文档(二十二)
283 3