知识卡片
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。