知识卡片
限制的精确定义与"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和"投影"的松散组合。