在研究关系代数时,我发现在任何关系模式上应用UNION,INTERSECTION和SET DIFFERENCE时,关系模式需要具有UNION COMPATIBLE,因为这些操作是set操作
但是笛卡尔积也是集合运算,那么为什么当我们在两个关系模式上应用笛卡尔积运算时,并不需要UNION兼容性条件?
答案 0 :(得分:1)
对于R&S集,
当且仅当一个元组在R∪S中时,才在R∪S中。
当且仅当元组位于R∩S中时,
当且仅当一个元组在R中而不在S中时,才在R-S中。
对于关系(定义为集合或集合加标题),
UNION返回一个或另一个操作数中的元组。
INTERSECTION返回一个操作数和另一个操作数中的元组。
DIFFERENCE返回一个操作数中的元组,而不返回另一个。
因此,我们可以合理地称其为“设置”或“布尔”操作。
如果每个基本关系都包含一些关联的谓词(由属性名称参数化的句子模板)中构成真正的命题(语句)的元组,则每个查询result 有一个由其操作数谓词组成的谓词,并且其值包含从该谓词构成真实命题的元组:
假设U
持有元组,而 U 和V
持有元组,其中 V 。然后
U UNION V
包含元组,其中 U 或 V
U INTERSECTION V
包含元组,其中 U 和 V
U DIFFERENCE V
持有元组,其中 U 而不是 V
但不仅如此,那些运算符对应于某些布尔命题逻辑连接词/非终结符,而且每个关系运算符对应于谓词逻辑连接词/非终结符,每个查询表达式具有一个关联的谓词,并且每个查询结果值包含从该谓词得出真实命题的元组:
U JOIN V
包含元组,其中 U 和 V
U RESTRICT
condition
包含元组,其中 U 和条件
U PROJECT A
包含元组,其中除A, U
之外的所有属性的FORSOME值
U RENAME A A'
包含元组,其中 U 用A替换为A'
因此,所有关系运算符实际上可以与谓词逻辑的语法和语义联系在一起。数学,科学(包括计算机科学)和工程(包括软件工程)中的精确度的语言/符号。实际上,这就是我们知道查询含义的方式。因此,实际上这三个运算符在某种意义上并不是布尔值,而是 all 所有关系运算符都是逻辑:每个关系表达式都对应一个谓词逻辑表达式。 / p>
之所以称为这三个“集合运算符”,是因为作为结果关系主体的集合是根据同名集合运算符根据作为运算对象关系的主体的集合而产生的。这可能是一种在您的脑海中分组或记住他们或他们的名字的有用方法,并且无疑激发了他们的名字。但是,鉴于关系运算符和谓词逻辑连接词/非终结符之间的对应关系以及关系表达式和谓词逻辑表达式之间的对应关系以及谓词和关系值之间的对应关系,某些关系运算符让人联想到某些集合运算符的事实是完全不相关。
(因此,您可以用诸如关系之类的东西代数,但其主体是袋而不是集合。)