↑↓ 选择↵ 打开⌫ 切换范围完整搜索

PG.CENTER 连接 PostgreSQL 文档、百科与生态知识。由 Pigsty 维护。

已结束支持的版本: 6.5 / 6.4
历史版本。 PostgreSQL 6.5 已结束支持。 请参阅 当前版本手册.

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

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

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

例如,当我们有 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)。

注意

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

59.2.1. 域与数据类型

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

报告文档问题

阅读 上游文档. 反馈更正前请先核对 当前版本手册.

历史原文引用 (1)

此原始版本缺少部分引用目标。正文已标明这些引用,下列清单保留原始地址。

  • sql.html#SUPPLIER-FIG