《SQL与关系数据库理论——如何编写健壮的SQL代码》一2.1 类型和关系

简介: 本节书摘来华章计算机《SQL与关系数据库理论——如何编写健壮的SQL代码》一书中的第2章 ,第2.1节 C. J. Date 著 单世民 何英昊 许侃 译 更多章节内容可以访问云栖社区“华章计算机”公众号查看。

本节书摘来华章计算机《SQL与关系数据库理论——如何编写健壮的SQL代码》一书中的第2章 ,第2.1节 C. J. Date 著 单世民 何英昊 许侃 译 更多章节内容可以访问云栖社区“华章计算机”公众号查看。

2.1 类型和关系

数据类型(简称为类型)在计算机科学中是很重要的概念。关系理论尤其要求一个类型理论支撑,因为关系定义在类型之上;即,每个关系的每个属性都定义为某种类型(对于关系变量也是如此)。比如,本书中假设供应商关系变量S的属性STATUS定义为INTEGER类型。在此假设下,作为关系变量S可能取值的每个关系都必须也具有类型为INTEGER的STATUS属性。这又意味着这些关系中的每个元组也必须具有类型为INTEGER的STATUS属性,进而又意味着每个元组必须有一个整数的STATUS取值。.
本章中稍后部分会讨论这些问题。现在只讨论:关系化属性可以是任何类型(有一些重要的例外,稍后再叙),这意味着类型可以是任意复杂的。尤其是,这些类型可以是系统定义的,也可以是用户定义的。然而,本书中不会过多涉及用户定义类型,因为:

  • 用户定义类型的关键(从仅使用类型的用户视角而不是定义这些类型的用户视角)是,它们要在各方面表现得和系统定义类型一样。
  • 相对很少的用户会遇到定义类型的工作,而且类型定义并不真正包含任何特别的关系化考虑因素。

所以,从本章开始,除非是上下文特殊要求,否则都可以使用类型来专门表示系统定义类型。关系模型只规定了一个类型——BOOLEAN(所有类型中最为基础的类型)。BOOLEAN类型只包含两个值:具体地说是两个真值,分别代表字面值TRUE和FALSE。当然,真实的系统还会支持其他的多种系统定义类型,为了明确本书会假设支持的类型中包括INTEGER(整数)、RATIONAL(有理数)和CHARACTER(任意长度字符串)。注意:稍后会在本章特别讨论SQL支持的系统定义类型。
旁注:有理数是可以表达为两个整数之比的数(比如,3/8、5/12、-4/3);无理数是不能如此表达的数(比如,,)。有理数(只)有一个性质——以十进制表示,有理数的小数部分可以表示为:(a)数字的有限序列并后续(可以无损忽略的)0的无限序列(比如3/8=0.375000…);(b)可能为空的数字有限序列后续另一个无限重复的有限数字序列,而两个序列中的第一个是不为0的(比如5/12=0.4166666)。相反,以十进制表示的无理数小数部分由数字的无限不重复序列构成(比如,=3.14159…,=1.41412…)。实数是要么为有理数要么为无理数的数。很多编程语言当前都支持所谓的REAL数值类型;然而,计算机是有限的,它真正能够表示的实数本质上是有理数。因此,Tutorial D选择关键字RATIONAL。
为了准确性,我要说明一下:在第一次定义关系模型的时候,Codd说关系是定义在域(domain)之上而不是定义在类型之上的。然而,域事实上和类型完全是一回事。你可以认为此声明是我个人立场的陈述,然而我要列出一系列支持此立场的论证。我会从Codd原始定义的关系模型开始;所以,我会在进一步的提示之前使用域而不使用类型。我想在下面两节中主要讨论两个主题:

  • 相等性比较和“域检查重载”:希望此部分讨论会让你确信域实际上就是类型。
  • 数据值原子性和第一范式:希望此部分会让你确信类型是可以任意复杂的。
相关实践学习
MySQL数据库快速部署实践
本场景主要介绍如何在一台配置了CentOS 7.7版本的ECS实例(云服务器)上安装mysql,执行mysql的常用操作,学习基本的SQL语句。
相关文章
|
2月前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS费用价格:MySQL、SQL Server、PostgreSQL和MariaDB引擎收费标准
阿里云RDS数据库支持MySQL、SQL Server、PostgreSQL、MariaDB,多种引擎优惠上线!MySQL倚天版88元/年,SQL Server 2核4G仅299元/年,PostgreSQL 227元/年起。高可用、可弹性伸缩,安全稳定。详情见官网活动页。
|
2月前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS支持MySQL、SQL Server、PostgreSQL和MariaDB引擎
阿里云数据库RDS支持MySQL、SQL Server、PostgreSQL和MariaDB引擎,提供高性价比、稳定安全的云数据库服务,适用于多种行业与业务场景。
|
8月前
|
SQL 自然语言处理 数据库
【Azure Developer】分享两段Python代码处理表格(CSV格式)数据 : 根据每列的内容生成SQL语句
本文介绍了使用Python Pandas处理数据收集任务中格式不统一的问题。针对两种情况:服务名对应多人拥有状态(1/0表示),以及服务名与人名重复列的情况,分别采用双层for循环和字典数据结构实现数据转换,最终生成Name对应的Services列表(逗号分隔)。此方法高效解决大量数据的人工处理难题,减少错误并提升效率。文中附带代码示例及执行结果截图,便于理解和实践。
211 4
|
3月前
|
SQL 容灾 安全
云时代SQL Server的终极答案:阿里云 RDS SQL Server如何用异地容灾重构系统可靠性
在数字化转型的浪潮中,数据库的高可用性已成为系统稳定性的生命线。作为经历过多次生产事故的资深开发者,肯定深知传统自建SQL Server架构的脆弱性——直到遇见阿里云 RDS SQL Server,其革命性的异地容灾架构彻底改写了游戏规则。
|
10月前
|
SQL Java 数据库连接
如何在 Java 代码中使用 JSqlParser 解析复杂的 SQL 语句?
大家好,我是 V 哥。JSqlParser 是一个用于解析 SQL 语句的 Java 库,可将 SQL 解析为 Java 对象树,支持多种 SQL 类型(如 `SELECT`、`INSERT` 等)。它适用于 SQL 分析、修改、生成和验证等场景。通过 Maven 或 Gradle 安装后,可以方便地在 Java 代码中使用。
3114 11
|
SQL Java 数据库连接
mybatis使用四:dao接口参数与mapper 接口中SQL的对应和对应方式的总结,MyBatis的parameterType传入参数类型
这篇文章是关于MyBatis中DAO接口参数与Mapper接口中SQL的对应关系,以及如何使用parameterType传入参数类型的详细总结。
359 10
|
SQL 存储 关系型数据库
SQL判断CHAR类型字段不为空的方法与技巧
在SQL查询中,判断一个CHAR类型字段是否不为空是一个常见的需求
|
存储 移动开发 数据库
HTML5 Web IndexedDB 数据库常用数据存储类型
IndexedDB 支持多种数据存储类型,满足复杂数据结构的存储需求。它包括基本数据类型(如 Number、String、Boolean、Date)、对象(简单和嵌套对象)、数组、Blob(用于二进制数据如图像和视频)、ArrayBuffer 和 Typed Arrays(处理二进制数据)、结构化克隆(支持 Map 和 Set 等复杂对象),以及 JSON 数据。尽管不直接支持非序列化数据(如函数和 DOM 节点),但可以通过转换实现存储。开发者应根据具体需求选择合适的数据类型,以优化性能和使用体验。
|
SQL 关系型数据库 MySQL
创建SQL数据库的基本步骤与代码指南
在信息时代,数据管理显得尤为重要,其中数据库系统已成为信息技术架构的关键部分。而当我们谈论数据库系统时,SQL(结构化查询语言)无疑是其中最核心的工具之一。本文将详细介绍如何使用SQL创建数据库,包括编写相应的代码和必要的步骤。由于篇幅限制,本文可能无法达到您要求的2000字长度,但会尽量涵盖创建数
391 3

热门文章

最新文章