知识卡片
类型与关系的逻辑区别:数据库是一个逻辑系统
内容
承接[[关系变量谓词与命题及闭合世界假设]]中”命题的实参取值来自元组属性、而属性 值都是某种类型的取值”这条链条,本节给出类型和关系之间最重要的逻辑区别: 类型是我们可以谈论的事物的集合,关系是我们针对这些事物所做出的(取值为真的) 陈述——类型给了我们词汇表,关系给了我们用这个词汇表进行陈述的能力。这个区分 带来三条推论:其一,类型和关系都是必需的,没有类型就无从谈起(没有词汇), 没有关系就无物可谈(有词汇但没有陈述能力);其二,类型和关系合起来是充分的, 逻辑层面不再需要别的东西来表示现实世界某一确定时刻的状态(物理层需要指针等 额外结构,但那是超出关系模型范畴的实现问题);其三,类型和关系终究不是一回事, 必须警惕那些试图把类型伪装成一种特殊关系的产品设计(书中直言这类建立在此逻辑 混淆之上的产品最终大多会失败)。由此引出更根本的一层洞察:一个数据库本质上 是真命题的集合,连同命题上的运算一起构成一个逻辑系统——就像欧几里得几何一样, 有公理(基关系变量中的元组代表的命题)和推导规则(关系代数运算符,或等价的 关系演算,用来从已有命题推出新命题);系统计算一个关系表达式、尤其是响应 一个查询时,本质上是在从既有真理推导新真理,等价于在证明一条推论。这个视角 的价值在于:一旦把数据库问题重新表述为逻辑问题,”数据库该长什么样”“完整性 约束该怎么定义”“查询该如何最优实现”这类问题就全部转化为可以用形式逻辑处理、 得到逻辑答案的问题,这也是书中认为关系模型比其他数据模型更”坚不可摧”的根本 原因——它牢固建立在集合论和谓词逻辑之上,而不是依赖某种特设性的、缺乏统一 理论基础的结构。
参考来源
- 位置:《SQL与关系数据库理论——如何编写健壮的SQL代码》第5章"基关系变量和
基表"5.6节"关系vs.类型"(源文件:OEBPS/text00057.html)
- 结论依据:原文明确"类型是我们可以讨论的事物的集合;关系是我们针对这些事物
所给出的(取值为真的)陈述……类型和关系都是必需的……类型和关系是必要的,
也是充分的……类型和关系不是一回事……一个数据库可认为是真命题的集合。实际
上,一个数据库……是一个逻辑系统……当这个系统计算某个关系表达式……时,它
实际上是从已有真理推导得到新真理;从效果上说,它是在证明推论"。
- 原始内容:类型是我们可以讨论的事物的集合;关系是我们针对这些事物所给出的
(取值为真的)陈述……一个数据库可认为是真命题的集合……当这个系统计算某个
关系表达式……它实际上是从已有真理推导得到新真理;从效果上说,它是在证明
推论!