知识卡片
关系表达式的谓词含义可由关系变量谓词推导
内容
[[关系变量谓词与命题及闭合世界假设]]中说过每个关系变量都关联一个谓词,本节
把这个视角推广到任意关系表达式:任何一个关系表达式rx都有一个关联的含义
(谓词),而这个谓词总是可以由表达式中出现的关系变量本身的谓词、加上表达式
使用的关系运算的语义共同确定。书中用一个具体例子说明这个推导过程:对供应商
关系变量S做投影S{SNO,SNAME,STATUS}(去掉CITY属性),结果对应的谓词并不是
简单丢掉CITY这个参数,而是变成”存在某个城市CITY,满足供应商SNO签订了合同,
名称为SNAME,状态为STATUS,所在城市正是CITY”——原本CITY是谓词的一个自由参数
(对应关系的一个属性),投影后CITY变成了逻辑学意义上被”存在某个城市”这个量词
约束的约束变元(bound variable),不再是结果关系的参数,这也正是为什么投影
结果里减少了一个属性(从四元降到三元):不是信息被丢弃,而是这个信息从”由
调用方指定的参数”变成了”存在性断言里被量化掉的变量”。这个洞察的价值在于:
它把关系代数的每一步运算,都还原成了对底层逻辑命题的操作——不仅是投影,
连接、限制、并、交、差等运算同理,每次施加一个运算,都是在用它对应的逻辑
语义去改写原有谓词,这正是[[类型与关系的逻辑区别数据库是逻辑系统]]中”计算
关系表达式本质是从已有真理推导新真理”这条洞察的具体展开,也为后续第10-11章
用一阶谓词逻辑重新表述SQL语义打下了基础。
参考来源
- 位置:《SQL与关系数据库理论——如何编写健壮的SQL代码》第6章"SQL和关系代数
I:原始运算符"6.9节"关系表达式到底表示什么"(源文件:OEBPS/text00068.html)
- 结论依据:原文明确"每个关系表达式rx总有一个关联的含义(谓词);而且,rx的
谓词总是可以由表达式中关系变量所对应的谓词以及表达式中关系运算的语义来
确定……其结果表示如下的谓词扩展……CITY并不是谓词的参数,而是逻辑学家所谓的
'约束变元',因为其由短语'存在某个城市'所'量化'"。
- 原始内容:每个关系表达式rx总有一个关联的含义(谓词);而且,rx的谓词总是
可以由表达式中关系变量所对应的谓词以及表达式中关系运算的语义来确定……
CITY并不是谓词的参数,而是逻辑学家所谓的"约束变元"。