本節書摘來華章計算機《交互式程序設計 第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))。