知识卡片

限制的精确定义与"SELECT不是限制"的辨析

普通读书笔记卡

内容

限制(restrict/restriction,也叫选择select,但书中不喜欢这个说法因为会和SQL的 SELECT运算符混淆)的精确定义是:给定关系r和一个属性都取自r、且不含任何关系变量 引用的布尔表达式bx,r WHERE bx是标题与r相同、主体由r中使bx取值为TRUE的全部 元组构成的关系。有一种特殊限制值得单独命名——恒等限制(identity restriction), 即r WHERE TRUE(或任何bx恒为真的写法,如1=1),它原样返回r本身。书中特别 提醒一个容易望文生义的误区:SQL的SELECT运算符(更准确说是SELECT子句)根本不是 限制运算符,而是UNGROUP、EXTEND、RENAME和”投影”这几种功能的松散组合——SQL里 真正对应”限制”这个概念的其实是WHERE子句,SELECT子句负责的是投影/重命名/扩展 这类完全不同的工作,SELECT这个关键字的命名恰好和它实际承担的角色完全对不上号, 是SQL术语与关系代数概念错位的一个典型例子。

参考来源

- 位置:《SQL与关系数据库理论——如何编写健壮的SQL代码》第6章"SQL和关系代数 I:原始运算符"6.3节"限制"(源文件:OEBPS/text00062.html) - 结论依据:原文明确"bx为限制条件……依据bx对r的限制(r WHERE bx)是满足以下 两点的关系:(a)标题与r一样;(b)主体由r中bx取值为TRUE的所有元组构成…… 限制(restrict)有时也称为选择(select),但我不喜欢使用这个术语,因为它与 SQL的SELECT运算符存在潜在混淆。SQL的SELECT运算符……根本不是限制,而是一种 对于UNGROUP、EXTEND、RENAME和'投影'……的松散组合"。 - 原始内容:依据bx对r的限制(r WHERE bx)是满足以下两点的关系:(a)标题与r 一样;(b)主体由r中bx取值为TRUE的所有元组构成……SQL的SELECT运算符……根本 不是限制,而是一种对于UNGROUP、EXTEND、RENAME和"投影"的松散组合。