您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

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

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

sql搁置一会儿…

关系运算符将一个或多个关系作为参数并生成一个关系。因为根据定义,关系中没有具有重复名称属性,所以关系操作theta联接和自然联接都将“除去重复的属性”。[按照您的要求在sql中发布示例以解释关系操作的一个大问题是,SQL查询的结果不是关系,因为除其他缺点外,它可能具有重复的行和/或列。]

关系笛卡尔积运算(一个关系的结果)与设置的笛卡尔积(一对结果的结果)不同。“笛卡尔”一词在这里并不是特别有用。实际上,科德称他的原始运算符为“产品”。

真正的关系语言Tutorial D在Tutorial D的合著者Hugh Darwen **提出的关系代数中缺少乘积运算符,而product不是原始运算符。这是因为没有属性名称的两个关系的自然连接在相同的关系中产生的结果与相同的两个关系的乘积相同,即自然连接更普遍,因此更有用。

考虑以下示例(教程D):

WITH RELATION { TUPLE { Y 1 } , TUPLE { Y 2 } , TUPLE { Y 3 } } AS R1 ,
     RELATION { TUPLE { X 1 } , TUPLE { X 2 } } AS R2 :
R1 JOIN R2

返回关系的乘积,即两个关系的度数(即两个属性XY)和基数为6(2 x 3 = 6个元组)。

然而,

WITH RELATION { TUPLE { Y 1 } , TUPLE { Y 2 } , TUPLE { Y 3 } } AS R1 ,
     RELATION { TUPLE { Y 1 } , TUPLE { Y 2 } } AS R2 :
R1 JOIN R2

返回关系的自然连接,即关系的度数(即属性的集合并集产生一个属性Y)和基数为2(即,删除了重复的元组)。

我希望上面的例子能解释为什么您的陈述“一组13 X一组4 = 52”不是严格正确的。

同样,教程D不包含theta联接运算符。这本质上是因为其他运算符(例如自然连接和限制)使它既不必要又不是非常有用。相比之下,Codd的原始运算符包括可用于执行theta联接的乘积和限制。

sql一个显式的乘积运算符CROSS JOIN,即使通过创建重复的列(属性)违反了1NF的条件,也可以将结果强制为乘积。考虑与上面的后者Tutormap D示例等效的sql

WITH R1 AS (SELECT * FROM (VALUES (1), (2), (3)) AS T (Y)), 
     R2 AS (SELECT * FROM (VALUES (1), (2)) AS T (Y))
SELECT * 
  FROM R1 CROSS JOIN R2;

这将返回一个表表达式,该表表达式包含两列(而不是一个属性),分别称为Y(!!)和6行,即

SELECT c1 AS Y, c2 AS Y 
  FROM (VALUES (1, 1), 
               (2, 1), 
               (3, 1), 
               (1, 2), 
               (2, 2), 
               (3, 2)
       ) AS T (c1, c2);

**也就是说,尽管只有一种关系模型(即Codd的),但是可以有多个关系代数(即Codd只是一个)。

其他 2022/1/1 18:42:07 有394人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶