↑↓ 选择 ↵ 打开 ⌫ 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

不受支持的版本: 7.1
历史版本PostgreSQL 7.1 已于 2006 年 4 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本手册首页。

1.2. 关系数据模型的形式化定义 #

关系模型背后的数学概念是集合论的关系,即一组域的笛卡尔积的子集。正是这个集合论意义上的关系赋予了该模型名字(不要把它与实体-联系模型中的联系相混淆)。形式上,域只是一个值的集合。例如整数集合就是一个域。长度为 20 的字符串集合和实数集合也是域的例子。

域 D1、D2、... Dk 的笛卡尔积记作 D1 × D2 × ... × Dk 它是所有 k 元组 v1、v2、... vk 的集合,其中 v1 ∊ D1, v2 ∊ D2, ... vk ∊ Dk。

例如,当我们有 k=2, D1={0,1} 和 D2={a,b,c} 时,D1 × D2 是 {(0,a),(0,b),(0,c),(1,a),(1,b),(1,c)}。

关系是一个或多个域的笛卡尔积的任意子集:R ⊆ D1 × D2 × ... × Dk。

例如 {(0,a),(0,b),(1,a)} 是一个关系;它实际上是上文提到的 D1 × D2 笛卡尔积的一个子集。

关系的成员称为元组。某个笛卡尔积 D1 × D2 × ... × Dk 上的每个关系被称为元数为 k,因而它是 k 元组的一个集合。

关系可以被看作一张表(我们前面已经这样做了,回忆一下供应商与零件数据库),其中每个元组由一行表示,而每一列对应元组的一个分量。给列命名(称为属性)就引出了关系模式的定义。

关系模式 R 是属性的一个有限集 A1, A2, ... Ak。对每个属性 Ai(1 <= i <= k)都有一个域 Di,属性的值即取自该域。我们常把关系模式写成 R(A1, A2, ... Ak)。

注意

关系模式只是一种模板,而关系是关系模式的一个实例。关系由元组组成(因此可以看作一张表);关系模式则不然。

1.2.1. 域与数据类型

上一节我们经常谈到域。回想一下,形式上域只是一个值的集合(例如整数集或实数集)。在数据库系统的语境中,我们常常谈论数据类型而不是域。定义一张表时,我们必须决定要包含哪些属性。此外还必须决定属性值将要存储哪种数据。例如,表 SUPPLIER 中 SNAME 的值将是字符串,而 SNO 将存储整数。我们通过为每个属性指定一个数据类型来定义这一点。SNAME 的类型将是 VARCHAR(20)(这是长度 <= 20 的字符串的 SQL 类型),SNO 的类型将是 INTEGER。指定数据类型的同时,我们也就为属性选定了一个域。SNAME 的域是所有长度 <= 20 的字符串的集合,SNO 的域是所有整数的集合。

提交更正

译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。