知识卡片

关系代数/元组演算/域演算的等价性与SQL为何成为主流实现

普通读书笔记卡

内容

关系模型的数据操作有两条不同的描述路径:关系代数是过程化的——用一系列 运算符(选择/投影/连接等)一步步组合出结果,描述”怎么算”;关系演算是 声明式的——用谓词逻辑描述”结果应该满足什么条件”,不关心具体计算步骤, 分为元组关系演算(变量是元组)和域关系演算(变量是属性/域)两种。三者 表达能力完全等价,任何一个能表达的查询另外两个也都能表达,只是描述 问题的思维方式不同:关系代数像是写一段处理流程,关系演算像是描述一个 结果集合应满足的性质。但这三种都只是抽象的数学语言,不能直接被数据库 系统执行,因此还需要一层”可实现的语言”把它们落地——历史上出现过多种 尝试:ALPHA语言(用字符串表达谓词,未真正实现但启发了QUEL)、QBE (基于域关系演算、以填表方式输入查询条件的表格式语言,后来主流数据库 的图形化查询界面大多借鉴了这个思路),而SQL最终成为事实标准,因为它 基于关系代数、语法贴近自然语言表达、又完整覆盖了数据定义、数据操作、 安全性和完整性控制的全部需求——不是因为SQL在理论表达能力上比另外两种 演算更强(三者本就等价),而是它在”描述能力”和”工程可实现性、易用性” 之间取得了最好的平衡。

参考来源

- 位置:《数据库原理(微课版)》第2章《关系数据库》2.5节"其他关系数据操作" (源文件:_epub-src/index_split_002.html) - 结论依据:原文说明"关系代数、元组关系演算和域关系演算是等价的,可以 使用它们中的任意一个来表达对关系数据的操作……SQL是基于关系代数的实用 数据库语言",并介绍了ALPHA语言"通过字符串而不是公式来表达各种谓词 操作,以方便用户在计算机上实现"及QBE"将数据库结构以表格方式呈现, 允许用户以填表的方式输入其数据操作要求",因此可以推出三种抽象语言 等价、但需要额外一层可实现语言落地的结论。 - 原始内容:关系代数、元组关系演算和域关系演算是等价的,可以使用它们 中的任意一个来表达对关系数据的操作……最常见的关系数据库的实现是SQL ……SQL是基于关系代数的实用数据库语言。