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

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

  • 相等性比较和“域检查重载”:希望此部分讨论会让你确信域实际上就是类型。
  • 数据值原子性和第一范式:希望此部分会让你确信类型是可以任意复杂的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值