理解关系代数中的自然连接
Understanding natural join in Relational algebra
我看到natural join只是selection和cartesian product的组合,但是在各种网站上说它是projection和cartesian product的组合,两者完全不同,那么哪个定义更准确呢?
"relational algebra" 有许多不同的版本,甚至在 "relation" 的概念上也有所不同。没有一个 PRODUCT 或 NATURAL JOIN。
某些版本的关系代数具有关系标题,即属性名称列表。 PRODUCT 为每个输入列表元素输出一个属性。如果有一个 NATURAL JOIN 那么它的结果就像先做 PRODUCT,然后 RESTRICTing/SELECTing 在 same-named 属性对相等时,然后投影出每对属性中的一个属性。当没有共享属性名称时,它们给出相同的结果。 PRODUCT 适用于任何两个输入,但当输入具有重复的属性名称时,NATURAL JOIN 可能未定义。
某些版本的关系代数具有关系标题,这些关系标题是属性名称的集合。 (元素是无序且唯一的。)NATURAL JOIN 的结果有一个标题,它是输入标题的并集。 (元组具有两个输入共有的属性名称的每个副本和一个输入唯一的属性名称的每个副本。)它 returns 所有具有该标题的元组,可以通过组合每个输入的元组来制作table。这与有多少公共属性名称无关,包括零。 PRODUCT 仅在输入不共享属性名称时定义,但在其他方面类似于 NATURAL JOIN。 PRODUCT 的作用是确认您期望没有共享属性名称。当所有的列名都通用时,就是一种INTERSECTION。
所有这一切都与 PK、UNIQUE、FK 和其他约束无关。
我看到natural join只是selection和cartesian product的组合,但是在各种网站上说它是projection和cartesian product的组合,两者完全不同,那么哪个定义更准确呢?
"relational algebra" 有许多不同的版本,甚至在 "relation" 的概念上也有所不同。没有一个 PRODUCT 或 NATURAL JOIN。
某些版本的关系代数具有关系标题,即属性名称列表。 PRODUCT 为每个输入列表元素输出一个属性。如果有一个 NATURAL JOIN 那么它的结果就像先做 PRODUCT,然后 RESTRICTing/SELECTing 在 same-named 属性对相等时,然后投影出每对属性中的一个属性。当没有共享属性名称时,它们给出相同的结果。 PRODUCT 适用于任何两个输入,但当输入具有重复的属性名称时,NATURAL JOIN 可能未定义。
某些版本的关系代数具有关系标题,这些关系标题是属性名称的集合。 (元素是无序且唯一的。)NATURAL JOIN 的结果有一个标题,它是输入标题的并集。 (元组具有两个输入共有的属性名称的每个副本和一个输入唯一的属性名称的每个副本。)它 returns 所有具有该标题的元组,可以通过组合每个输入的元组来制作table。这与有多少公共属性名称无关,包括零。 PRODUCT 仅在输入不共享属性名称时定义,但在其他方面类似于 NATURAL JOIN。 PRODUCT 的作用是确认您期望没有共享属性名称。当所有的列名都通用时,就是一种INTERSECTION。
所有这一切都与 PK、UNIQUE、FK 和其他约束无关。