《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原始定义的关系模型开始;所以,我会在进一步的提示之前使用域而不使用类型。我想在下面两节中主要讨论两个主题:

  • 相等性比较和“域检查重载”:希望此部分讨论会让你确信域实际上就是类型。
  • 数据值原子性和第一范式:希望此部分会让你确信类型是可以任意复杂的。
相关文章
|
1月前
|
存储 安全 数据库
数据库的索引都有哪些类型?如何选择?
【8月更文挑战第17天】数据库的索引都有哪些类型?如何选择?
52 0
|
28天前
|
存储 SQL 安全
【数据库高手的秘密武器:深度解析SQL视图与存储过程的魅力——封装复杂逻辑,实现代码高复用性的终极指南】
【8月更文挑战第31天】本文通过具体代码示例介绍 SQL 视图与存储过程的创建及应用优势。视图作为虚拟表,可简化复杂查询并提升代码可维护性;存储过程则预编译 SQL 语句,支持复杂逻辑与事务处理,增强代码复用性和安全性。通过创建视图 `high_earners` 和存储过程 `get_employee_details` 及 `update_salary` 的实例,展示了二者在实际项目中的强大功能。
29 1
|
1月前
|
SQL 数据处理 数据库
SQL中的函数有哪些类型
【8月更文挑战第20天】SQL中的函数有哪些类型
20 1
|
1月前
|
数据采集 DataWorks 安全
DataWorks产品使用合集之如何判断数据库类型是否支持整库
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
1月前
|
SQL 关系型数据库 数据库
数据库空间之谜:彻底解决RDS for SQL Server的空间难题
【8月更文挑战第16天】在管理阿里云RDS for SQL Server时,合理排查与解决空间问题是确保数据库性能稳定的关键。常见问题包括数据文件增长、日志文件膨胀及索引碎片累积。利用SQL Server的动态管理视图(DMV)可有效监测文件使用情况、日志空间及索引碎片化程度。例如,使用`sp_spaceused`检查文件使用量,`sys.dm_db_log_space_usage`监控日志空间,`sys.dm_db_index_physical_stats`识别索引碎片。同时,合理的备份策略和文件组设置也有助于优化空间使用,确保数据库高效运行。
48 2
|
24天前
|
SQL 安全 数据库
基于SQL Server事务日志的数据库恢复技术及实战代码详解
基于事务日志的数据库恢复技术是SQL Server中一个非常强大的功能,它能够帮助数据库管理员在数据丢失或损坏的情况下,有效地恢复数据。通过定期备份数据库和事务日志,并在需要时按照正确的步骤恢复,可以最大限度地减少数据丢失的风险。需要注意的是,恢复数据是一个需要谨慎操作的过程,建议在执行恢复操作之前,详细了解相关的操作步骤和注意事项,以确保数据的安全和完整。
56 0
|
28天前
|
SQL 存储 数据库
SQL Server 中的备份类型详解
【8月更文挑战第31天】
43 0
|
28天前
|
JSON 数据格式 Java
化繁为简的魔法:Struts 2 与 JSON 联手打造超流畅数据交换体验,让应用飞起来!
【8月更文挑战第31天】在现代 Web 开发中,JSON 成为数据交换的主流格式,以其轻量、易读和易解析的特点受到青睐。Struts 2 内置对 JSON 的支持,结合 Jackson 库可便捷实现数据传输。本文通过具体示例展示了如何在 Struts 2 中进行 JSON 数据的序列化与反序列化,并结合 AJAX 技术提升 Web 应用的响应速度和用户体验。
72 0
|
28天前
|
SQL 存储 数据库
|
28天前
|
SQL 数据库 开发者