这种自然连接操作是否正确使用? 关系代数

问题描述

教授给我的任务如下:R-E Modell

  1. 假设这些公司可能位于多个城市。查找位于“小银行公司”所在的每个城市的所有公司 找到。

现在,教授的解决方案如下:

s ← Π city (σ company_name=’Small Bank Corporation’ (company))
temp1 ← Π comp_id,company_name (company)
temp2 ← Π comp_id,company_name ((temp1 × s) − company)
result ← Π company_name (temp1 − temp2)

我自己发现了一个自然连接方案的完全不同的解决方案,这似乎简单得多:

我试图做的是使用自然联合运算,其定义如下:关系r和s在它们的公共属性上结合在一起。因此,我试图通过对所有公司名称为“小型银行合作”的公司进行投影来获得所有城市的名称。之后,我将带有城市名称的表与公司表一起加入,这样我就得到了所有带有城市名称的公司条目。

company ⋈ Π city (σ company_name=”Small Bank Cooperation” (company)))

现在我的问题是我的解决方案是否也有效,因为这似乎微不足道?

解决方法

您不一样。

My answer here says how to query relationally.它使用关系代数的一种版本,其中标题是属性名称的集合。 My answer here summarizes it:

每个查询表达式都有一个关联的(特征) 谓词-由属性参数化的语句模板。元组 使谓词成为真实的命题(陈述) 关系。

我们为关系名称的表达式提供了谓词。

让查询表达式E具有谓词e。然后:

  • R ⨝ S具有谓词{{​​1}}
  • r and s具有谓词{{​​1}}
  • R ∪ S具有谓词{{​​1}}
  • r or s具有谓词{{​​1}}
  • R - S有谓词{{​​1}} r and not s σ p (R)

当我们希望元组满足某个谓词时,我们找到了一种方法 用关系运算符表达该谓词 给定关系谓词的转换。对应查询 返回/计算元组。

您的解决方案

r and p

是其中的行

π A (R)

exists

non-A attributes of R

您将返回的行比company_name还要多。但是您的公司不是要求的公司。

在company_name上投影行将在其中显示行

[r]

之后,我与公司一起加入了带有城市名称的表格 表格,这样我就可以获得所有城市名称都在其中的公司条目 它。

目前尚不清楚您会得到什么。但是,您所在行中的公司是至少一个SBC城市中的公司。该请求针对所有SBC城市中的人:

位于“小银行公司”所在的每个城市的公司

我提供的链接告诉您如何构成查询,还可以在查询结果规范和关系代数表达式之间进行转换,以返回结果。

当您看到与其他行的“每”或“所有”匹配的行的查询时,您可以期望查询的该部分涉及或一些相关的习惯用法。确切的代数取决于(经常表现不佳/模棱两可)需求的目的。例如,当没有这样的城市时,“位于每个城市的公司”应该是没有公司(部门)还是所有公司(相关习语)。 (对您的任务的一般数学解释是后者。)例如,他们是否想要在所有此类城市或至少所有此类城市中的公司。

(这有助于避免在“查找”和“返回”之后出现“全部”和“每个”,因为它们在任何地方都是多余的。)

Database Relational Algebra: How to find actors who have played in ALL movies produced by “Universal Studios”?
How to understand u=r÷s,the division operator,in relational algebra?
How to find all pizzerias that serve every pizza eaten by people over 30?