【问题标题】:Why condition of union compatibility is not applicable to cartesian product?为什么联合兼容条件不适用于笛卡尔积?
【发布时间】:2018-09-03 05:09:34
【问题描述】:

在学习关系代数时,我发现在任何关系模式上应用 UNION、INTERSECTION 和 SET DIFFERENCE 关系模式需要具有 UNION COMPATIBLE 因为这些操作是集合操作

但是笛卡尔积也是集合运算,那么为什么我们在两个关系模式上应用笛卡尔积运算时不需要UNION COMPATIBILITY条件?

【问题讨论】:

  • 你认为“集合操作”是什么?是什么迫使一个采取集合元组具有相同模式的输入,或者如果它们相同则具有相同模式的输出?元组集上的某些重要运算符并非都这样做:关系代数运算符。你有一些关于“集合操作”的假设,你没有确定,但你正在使用它们来模糊地产生期望。有什么假设?您对“设置操作”的定义是什么?如果使用得当,产品会出现什么问题? (你的期望是不合理的。)

标签: rdbms relational-algebra cartesian-product


【解决方案1】:

对于集合 R & S,

一个元组在 R ∪ S 中当且仅当它在 R 中 OR 在 S 中。
一个元组在 R ∩ S 中当且仅当它在 R AND 在 S 中。
一个元组在 R - S 中当且仅当它在 R 中而不在 S 中。

对于关系(定义为集合或集合加标题),

UNION 返回一个操作数或另一个操作数中的元组。
INTERSECTION 返回一个操作数和另一个操作数中的元组。
DIFFERENCE 返回一个操作数而不是另一个操作数中的元组。

因此我们可以合理地将这些称为“设置”或“布尔”操作。

如果每个基本关系都包含从一些关联的谓词(由属性名称参数化的句子模板)构成真正的命题(陈述)的元组,那么每个查询结果 有一个由它的操作数谓词组成的谓词,它的值包含从那个谓词提出一个真实命题的元组:

假设U 包含 U 的元组和V 包含 V 的元组。那么

U UNION V 保存元组 U OR V
U INTERSECTION V 保存元组 U AND V
U DIFFERENCE V 包含 U AND NOT V 的元组

但不仅如此,那些运算符对应于一些布尔命题逻辑连接词/非终结符,而且每个关系运算符都对应于谓词逻辑连接词/非终结符,每个查询表达式都有一个关联的谓词,并且每个查询结果值都保存着从那个谓词提出一个真实命题的元组:

U JOIN V 保存元组 U AND V
U RESTRICTcondition 保存元组 U AND condition
U PROJECT A 保存除 A 之外的所有属性的 FORSOME 值的元组,U
U RENAME A A' 保存元组,其中U 将 A 替换为 A'

所以真的所有关系运算符可以绑定到谓词逻辑的语法和语义。这是数学、科学(包括计算机科学)和工程(包括软件工程)中精确度的语言/符号。事实上,这就是我们知道查询含义的方式。因此,这三个运算符在某种意义上实际上并不是布尔型,而是所有关系运算符都是逻辑:每个关系表达式都对应一个谓词逻辑表达式。

之所以称这三个“集合运算符”是因为作为结果关系的主体的集合是根据同名的集合运算符从作为操作数关系的主体的集合产生的。这可能是在您的脑海中将它们分组或记住它们或它们的名字的有用方式,并且无疑激发了它们的名字。但鉴于关系运算符与谓词逻辑连接词/非终结符的对应关系,关系表达式与谓词逻辑表达式的对应关系,以及谓词与关系值的对应关系,一些关系运算符让人想起一些集合运算符的事实是 完全不相关

(事实上,你可以用关系之类的东西来做一个代数,但它的身体是袋子而不是集合。)

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-18
  • 1970-01-01
  • 2013-01-15
  • 2017-12-18
  • 2020-07-05
  • 1970-01-01
相关资源
最近更新 更多