知识卡片

TABLE_DUM与TABLE_DEE:关系代数中的0

结构图卡

内容

标题(属性集合)作为一个集合,同样可以为空,度为0的关系类型是RELATION{}。这样 的关系恰好只有两种:一种主体为空、不包含任何元组,昵称TABLE_DUM(简称DUM); 另一种主体恰好包含唯一一个0-元组(即之前提到的、唯一的那个空元组),昵称 TABLE_DEE(简称DEE)——之所以恰好只有两种,是因为0-元组本身只有一个(所有 0-元组互为重复),所以”包含0-元组的度为0的关系”要么包含它一次,要么完全不 包含。这两个看似毫无实用价值的”空属性关系”,实际上在关系代数里扮演着核心 角色:它们的语义分别对应FALSE/“no”(DUM)和TRUE/“yes”(DEE),记忆技巧是 DEE和”yes”都含字母E、DUM和”no”都不含。书中把它们类比为普通算术里的数字0—— 没有0,整个算术体系都难以想象(古罗马人尝试过没有0的计数系统,最终失败); 同样,没有TABLE_DEE,整套关系代数的运算也难以自洽地表达”逻辑真”这个基础 概念。这个类比的重要性会在第5、6章关于约束和关系代数运算符的讨论中被反复 用到。可惜SQL完全没有对应物——SQL既没有0-元组的等价物,自然也没有TABLE_DUM 和TABLE_DEE的对应结构,这是SQL在表达纯粹关系逻辑上的一处明确缺失。

结构图

flowchart TD
    A[度为0的关系: RELATION 空标题] --> B["TABLE_DUM<br/>主体为空<br/>0个0-元组"]
    A --> C["TABLE_DEE<br/>主体含唯一的0-元组<br/>1个0-元组"]
    B -.语义类比.-> D[FALSE / no]
    C -.语义类比.-> E[TRUE / yes]
    F[普通算术中的0] -.角色类比.-> C

参考来源

- 位置:《SQL与关系数据库理论——如何编写健壮的SQL代码》第3章"元组、关系、行、表" 3.7节"TABLE_DUM和TABLE_DEE"(源文件:OEBPS/text00037.html) - 结论依据:原文明确"实际上有两个没有属性的关系:一个是只有一个元组;一个是连 一个元组都没有……它们重要的原因在于它们的语义:FALSE(或'no')对应于DUM, 而TRUE(或'yes')对应于DEE……这两个关系(尤其是TABLE_DEE)在关系代数中的 角色可类比于常规算术中的0……SQL没有和0-元组对应的东西……SQL也不会有和 TABLE_DUM及TABLE_DEE对应的东西"。 - 原始内容:实际上有两个没有属性的关系:一个是只有一个元组;一个是连一个元组 都没有……它们重要的原因在于它们的语义:FALSE(或"no")对应于DUM,而TRUE (或"yes")对应于DEE……这两个关系在关系代数中的角色可类比于常规算术中的0。