知识卡片

域即类型:关系理论对类型系统的依赖

普通读书笔记卡

内容

关系理论必须建立在类型理论之上,因为关系本身就是定义在类型之上的——每个关系的 每个属性都被定义为某种类型(关系变量同理),这意味着这个关系可能取的每一个值, 它的每个元组在这个属性位置上都必须持有该类型的一个合法值。Codd最初定义关系模型 时用的是”域”(domain)而非”类型”,但书中态度鲜明:域事实上和类型完全是一回事, 只是历史上用词不同。关系化属性理论上可以是任意类型,不限于数字、字符串这类简单 类型——类型既可以是系统预定义的,也可以是用户自定义的;书中约定除非特别说明, “类型”专指系统定义类型,因为从纯粹使用者(而非类型定义者)的视角看,用户定义类型 在各方面理应表现得和系统定义类型完全一样,不该有特殊对待。关系模型本身只强制 规定了一个类型——BOOLEAN(只包含TRUE/FALSE两个值),是所有类型中最基础的一个; 真实系统还会额外支持INTEGER、RATIONAL(有理数,可表示为两个整数之比)、CHARACTER 等类型,作为本书讨论的默认假设。

参考来源

- 位置:《SQL与关系数据库理论——如何编写健壮的SQL代码》第2章"类型和域"2.1节 "类型和关系"(源文件:OEBPS/text00019.html) - 结论依据:原文明确"关系理论尤其要求一个类型理论支撑,因为关系定义在类型之上; 即,每个关系的每个属性都定义为某种类型……在第一次定义关系模型的时候,Codd说 关系是定义在域(domain)之上而不是定义在类型之上的。然而,域事实上和类型完全是 一回事……关系模型只规定了一个类型——BOOLEAN(所有类型中最为基础的类型)"。 - 原始内容:关系理论尤其要求一个类型理论支撑,因为关系定义在类型之上……然而,域 事实上和类型完全是一回事……关系模型只规定了一个类型——BOOLEAN(所有类型中最为 基础的类型)。