首页 > 解决方案 > 这种自然连接操作是否正确使用?(关系代数)

问题描述

我有教授给我的以下任务:RE Modell

  1. 假设这些公司可能位于几个城市。查找位于“Small Bank Corporation”所在城市的所有公司。

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

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)))

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

标签: relational-algebrarelationalrelational-division

解决方案


你的不一样。

我在这里的回答说如何进行关系查询。它使用关系代数的一个版本,其中标题是属性名称的集合。我在这里的回答总结了它:

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

我们得到了作为关系名称的表达式的谓词。

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

  • R ⨝ S有谓词r and s
  • R ∪ S有谓词r or s
  • R - S有谓词r and not s
  • σ p (R)有谓词r and p
  • π A (R)有谓词exists non-A attributes of R [r]

当我们想要满足某个谓词的元组时,我们找到一种方法来根据给定关系谓词的关系运算符转换来表达该谓词。相应的查询返回/计算元组。

您的解决方案

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

是行在哪里

    company company_id named company_name is in city
AND FOR SOME company_id & company_name [
            company company_id named company_name is in city
        AND company_name=”Small Bank Corporation”]

IE

    company company_id named company_name is in city
AND FOR SOME company_id [
        company company_id named ”Small Bank Corporation” is in city]

IE

    company company_id named company_name is in city
AND some company named ”Small Bank Corporation” is in city

您返回的行包含的列不仅仅是 company_name。但是您的公司不是被要求的公司。

将您的行投影到 company_name 上会给出行

    some company named company_name is in some city
AND some company named ”Small Bank Corporation” is in that city

之后,我将带有城市名称的表与公司表连接起来,这样我就可以获得所有包含城市名称的公司条目。

这不清楚你得到什么。但是,您所在行中的公司至少是 SBC 城市之一的公司。该请求适用于所有 SBC 城市的人:

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

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

当您看到与“每个”或“所有”其他行匹配的行的查询时,您可以预期查询的该部分涉及或一些相关的成语。确切的代数取决于 - 经常表达不佳/含糊不清 - 要求的意图。例如,当没有这样的城市时,“公司位于每个城市”是否应该是没有公司(部门)或所有公司(相关成语)。(你的任务的正常数学解释是后者。)例如,他们是否想要在所有此类城市或至少在所有此类城市中都有公司。

(这有助于避免在“find”和“return”之后出现“all”和“every”,无论如何它都是多余的。)

数据库关系代数:如何找到在“环球影城”制作的所有电影中出演过的演员?
如何理解u=r÷s关系代数中的除法运算符?
如何找到所有为 30 岁以上的人吃的比萨提供服务的比萨店?


推荐阅读