回答

收藏

关系代数中“ heta联接”的清晰解释?

技术问答 技术问答 419 人阅读 | 0 人回复 | 2023-09-14

我正在寻找有关关系代数中theta join概念的清晰,基本的解释,并且可能需要一个示例(也许使用SQL)来说明其用法。1 T6 b2 x; ]& s8 e! _
如果我正确理解,则theta联接是添加了条件的自然联接。因此,尽管自然联接在相同名称的属性之间强制相等(并删除重复的属性?),但是theta联接执行相同的操作,但是增加了在某种情况下。我有这个权利吗?以简单的术语(对于非数学家)的任何清楚的解释将不胜感激。  V& U: s; g: ~+ S
另外(很抱歉,最后才提出来,但与之相关),有人可以解释笛卡尔积的重要性或想法吗?我认为我在基本概念方面缺少一些东西,因为在我看来,这似乎是对一个基本事实的重申,即一组13
7 `' m  [% Z; z% ?  T: q4 y) tX一组4 = 52 …2 m1 h$ [, Q7 ]2 I! o2 T( K
                & x3 ^5 {% C$ l6 f% c3 T1 |
解决方案:% n: @' q$ w2 ~* v
               
; A! U' ~" U+ r3 P% D: P- P
* z$ [5 C5 l0 ^
. J* K( h8 a8 _+ {6 g                将SQL搁置一会儿…  a5 e8 h' t5 ~6 Q9 j
关系运算符将一个或多个关系作为参数并生成一个关系。因为根据定义,关系中没有具有重复名称的属性,所以关系操作theta联接和自然联接都将“除去重复的属性”。[按照您的要求在SQL中发布示例以解释关系操作的一个大问题是,SQL查询的结果不是关系,因为除其他缺点外,它可能具有重复的行和/或列。]
7 _: t8 K( h% y& A0 o关系笛卡尔积运算(一个关系的结果)与设置的笛卡尔积(一对结果的结果)不同。“笛卡尔”一词在这里并不是特别有用。实际上,科德称他的原始运算符为“产品”。
- X$ s) x8 L8 E真正的关系语言Tutorial
: F) A; W7 A/ T% f% \- p$ O' |/ f  tD在Tutorial
4 O! ~2 j# g7 w3 ^3 r# ID的合著者Hugh Darwen$ |7 z1 T0 {# M4 E5 T
**提出的关系代数中缺少乘积运算符,而product不是原始运算符。这是因为没有属性名称的两个关系的自然连接在相同的关系中产生的结果与相同的两个关系的乘积相同,即自然连接更普遍,因此更有用。4 |' T6 E: S& _  l: @* ?2 E
考虑以下示例(教程D):* k$ {7 F: G- M9 ^
WITH RELATION { TUPLE { Y 1 } , TUPLE { Y 2 } , TUPLE { Y 3 } } AS R1 ,
2 C/ z& X* Q1 ?& o     RELATION { TUPLE { X 1 } , TUPLE { X 2 } } AS R2 :
0 \( {7 j$ ]: o5 {8 K) \7 nR1 JOIN R2
/ |& U- X. T$ e% `3 d返回关系的乘积,即两个关系的度数(即两个属性X和Y)和基数为6(2 x 3 = 6个元组)。/ n$ r9 P8 E  E" l
然而,1 G' t; f( p$ \: M
WITH RELATION { TUPLE { Y 1 } , TUPLE { Y 2 } , TUPLE { Y 3 } } AS R1 ,: Z$ G$ }/ D8 Z/ S3 ?$ z& x
     RELATION { TUPLE { Y 1 } , TUPLE { Y 2 } } AS R2 :
  Q& j) Z4 c0 _; f/ ZR1 JOIN R2' e! j% G; r. \5 M
返回关系的自然连接,即关系的度数(即属性的集合并集产生一个属性Y)和基数为2(即,删除了重复的元组)。8 K9 t+ p6 z" t) i
我希望上面的例子能解释为什么您的陈述“一组13 X一组4 = 52”不是严格正确的。, F" S' A% m  G& l/ D4 o
同样,教程D不包含theta联接运算符。这本质上是因为其他运算符(例如自然连接和限制)使它既不必要又不是非常有用。相比之下,Codd的原始运算符包括可用于执行theta联接的乘积和限制。6 g/ v) p( v* V5 ]4 K; K
& h; Y& g# N2 i2 C- y/ I6 w+ ^! y
SQL有一个显式的乘积运算符CROSS" \7 f3 U+ v3 `  ]
JOIN,即使通过创建重复的列(属性)违反了1NF的条件,也可以将结果强制为乘积。考虑与上面的后者Tutormap D示例等效的SQL:
$ O- D1 _# ~$ \* WWITH R1 AS (SELECT * FROM (VALUES (1), (2), (3)) AS T (Y)), : x  |8 Y  E/ f- w3 D6 d
     R2 AS (SELECT * FROM (VALUES (1), (2)) AS T (Y))
+ i4 g5 x! B3 a, HSELECT *
! ~- Q# e9 e6 F6 ]+ r7 ^3 Q; I  FROM R1 CROSS JOIN R2;, ~. `# G7 U9 w' z# q# _5 I: g
这将返回一个表表达式,该表表达式包含两列(而不是一个属性),分别称为Y(!!)和6行,即
1 U9 m8 X* {4 {! k% P# L' DSELECT c1 AS Y, c2 AS Y * O: `2 L% W/ q3 z/ D' |7 d
  FROM (VALUES (1, 1), ( N5 b6 z5 p3 \# _
               (2, 1), : i/ s% s# {! i  E; P
               (3, 1), 7 E+ c/ G- Q0 ?
               (1, 2),
- b+ u( E4 i3 M7 ~; m  H* G               (2, 2),
  r3 ~" F  J# n1 Y& _9 d               (3, 2)  O! _# C. H$ }
       ) AS T (c1, c2);% H- Q# J: A# h; q" `3 P3 U

5 p4 R! N" X3 S1 H1 X4 d) S1 z**也就是说,尽管只有一种关系模型(即Codd的),但是可以有多个关系代数(即Codd只是一个)。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则