本节书摘来华章计算机《交互式程序设计 第2版》一书中的第3章 ,第3.6节,Joshua Noble 著 毛顺兵 张婷婷 陈宇 沈鑫 任灿江 译更多章节内容可以访问云栖社区“华章计算机”公众号查看。
3.6 关系比较
与元组类型类似,关系类型也逃不过“'='比较运算符必须对每种类型都定义”这一规则;即,对于同种类型T的两个关系r1和r2,必须至少能检验它俩是否相等。其他的比较可能也是有用的。比如,我们可能想检验是否有“r1包含r2(即r2中的所有元组也在r1中)”,或者是否有“r1完全包含r2(即r2中的所有元组也在r1中,且r1至少包含一个不在r2种的元组)”。下面是一个关系相等性比较的实例,依旧用Tutorial D表达:
S { CITY } = P { CITY }
此处,左侧的比较元是供应商在{CITY}注7上的投影,右侧比较元是零件在{CITY}上的投影,如果两个投影是相等的,则比较运算返回TRUE,否则返回FALSE。换言之,这个比较(布尔表达式)意味着“供应商城市集合与零件城市集合相等”(当然,它的计算结果不是TRUE就是FALSE)。
另一个示例如下:
S { SNO } SP { SNO }
此处的符号“”代表“完全包含(properly include)”(或等价 “是其真超集”(is a proper superset of))。此表达式的含义是(意会):一些供应商根本没供应任何零件型号(计算结果不是TRUE就是FALSE)。
其他有用的关系比较运算符包括“△”(“包含”),“”(“包含于”)和“
”(“完全包含于”)。注意:在这些运算符中,人们常常会认为“
”运算符就是“那个”关系包含运算符。
一个特别常见的需求就是,把某个确定的关系r和同类型的空关系进行“=”比较,也就是说,这是一个用来检验是否为空的测试。因此,定义一个缩写是很方便的:
IS_EMPTY ( r )
此表达式定义为在关系r为空时返回TRUE,否则返回FALSE。后续章节将非常依赖这个表达式(尤其是第8章)。它的反运算符也很有用:
IS_NOT_EMPTY ( r )
此表达式逻辑等价于NOT (IS_EMPTY (r))。