rdbms - 为什么联合兼容条件不适用于笛卡尔积?
问题描述
在学习关系代数时,我发现在任何关系模式上应用 UNION、INTERSECTION 和 SET DIFFERENCE 关系模式需要具有 UNION COMPATIBLE 因为这些操作是集合操作
但是笛卡尔积也是集合运算,那么为什么我们在两个关系模式上应用笛卡尔积运算时不需要UNION COMPATIBILITY条件呢?
解决方案
对于集 R & S,
一个元组在 R ∪ S 当且仅当它在 R OR 在 S 中。
一个元组在 R ∩ S 当且仅当它在 R AND 在 S 中。
一个元组在 R - S 当且仅当它在 R 中而不是在 S 中。
对于关系(定义为集合或集合加标题),
UNION 返回一个操作数或另一个操作数中的元组。
INTERSECTION 返回一个操作数和另一个操作数中的元组。
DIFFERENCE 返回一个操作数而不是另一个操作数中的元组。
所以我们可以合理地称这些为“set”或“boolean”操作。
如果每个基本关系都包含从某个关联谓词(由属性名称参数化的句子模板)构成一个真实命题(陈述)的元组,那么每个查询结果都有一个由其操作数谓词构成的谓词,并且它的值包含使一个真实的元组该谓词的命题:
假设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 RESTRICT
condition
保存元组,其中U AND条件
U PROJECT A
保存元组,其中除 A 之外的所有属性的 FORSOME 值,U
U RENAME A A'
保存元组,其中U用 A 替换为 A'
所以实际上所有关系运算符都可以与谓词逻辑的语法和语义联系起来。这是数学、科学(包括计算机科学)和工程(包括软件工程)中精确度的语言/符号。事实上,这就是我们知道查询意味着什么的方式。因此,这三个运算符在某种意义上并不是真正的布尔值,而是所有关系运算符都是逻辑的:每个关系表达式都对应于谓词逻辑表达式。
之所以称这三个“集合运算符”,是因为作为结果关系的主体的集合是根据同名的集合运算符从作为操作数关系的主体的集合产生的。这可能是在您的脑海中将它们分组或记住它们或它们的名字的有用方式,并且无疑激发了它们的名字。但鉴于关系运算符与谓词逻辑连接词/非终结符的对应关系,关系表达式与谓词逻辑表达式的对应关系,以及谓词与关系值的对应关系,一些关系运算符让人联想到一些集合运算符的事实是完全不相关的。
(事实上,你可以用关系之类的东西来做代数,但它的身体是袋子而不是集合。)
推荐阅读
- ssis - 派生列的问题
- recharts - Recharts 放大挂钩
- c++ - 我需要帮助将此 ppc 指令翻译成 c++
- c# - 自定义 Asp.NET Core Identity 未经授权的响应类型和状态码
- python - 在 pynput 的鼠标监听器中使用 while 循环
- php - CSP 框架祖先 - 如何阻止除一页之外的整个域?
- java - 代码在 main 方法中工作,但不在 Apache 上运行的 Spring 中
- xaml - 我在 Xamarin Forms App.Shell 中的颜色配置缺少什么?
- javascript - 设置 HTML 表格内容而不是 Ajax
- node.js - node-postgres:数据库“database_name”不存在错误