天天看點

《互動式程式設計 第2版》一3.6 關系比較

本節書摘來華章計算機《互動式程式設計 第2版》一書中的第3章 ,第3.6節,joshua noble 著 毛順兵 張婷婷 陳宇 沈鑫 任燦江 譯更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視。

與元組類型類似,關系類型也逃不過“'='比較運算符必須對每種類型都定義”這一規則;即,對于同種類型t的兩個關系r1和r2,必須至少能檢驗它倆是否相等。其他的比較可能也是有用的。比如,我們可能想檢驗是否有“r1包含r2(即r2中的所有元組也在r1中)”,或者是否有“r1完全包含r2(即r2中的所有元組也在r1中,且r1至少包含一個不在r2種的元組)”。下面是一個關系相等性比較的執行個體,依舊用tutorial d表達:

此處,左側的比較元是供應商在{city}注7上的投影,右側比較元是零件在{city}上的投影,如果兩個投影是相等的,則比較運算傳回true,否則傳回false。換言之,這個比較(布爾表達式)意味着“供應商城市集合與零件城市集合相等”(當然,它的計算結果不是true就是false)。

另一個示例如下:

此處的符号“

《互動式程式設計 第2版》一3.6 關系比較

”代表“完全包含(properly include)”(或等價 “是其真超集”(is a proper superset of))。此表達式的含義是(意會):一些供應商根本沒供應任何零件型号(計算結果不是true就是false)。

其他有用的關系比較運算符包括“△”(“包含”),“

《互動式程式設計 第2版》一3.6 關系比較

”(“包含于”)和“

《互動式程式設計 第2版》一3.6 關系比較

”(“完全包含于”)。注意:在這些運算符中,人們常常會認為“

《互動式程式設計 第2版》一3.6 關系比較

”運算符就是“那個”關系包含運算符。

一個特别常見的需求就是,把某個确定的關系r和同類型的空關系進行“=”比較,也就是說,這是一個用來檢驗是否為空的測試。是以,定義一個縮寫是很友善的:

此表達式定義為在關系r為空時傳回true,否則傳回false。後續章節将非常依賴這個表達式(尤其是第8章)。它的反運算符也很有用:

此表達式邏輯等價于not (is_empty (r))。

繼續閱讀