具有多个连接的关系代数

时间:2017-01-25 05:00:21

标签: sql relational-database query-optimization rdbms relational-algebra

我必须为查询编写关系代数表达式,以便构建和优化查询树。我无法理解如何为涉及连接多个关系的查询编写表达式。

关系是,

供应商( snum ,姓名,地址,bdate,性别,pnum)

植物( pnum ,mgrnum,位置)

项目(项目#,位置,pnum)

卖出( snum,item#,数量)

工厂的Mgrnum是供应商表(外键)中的经理的snum。

查询是,

  

对于位于“丹佛”的每个项目,检索项目编号,控制工厂编号以及工厂经理的姓名,地址和出生日期。

我喜欢首先使用笛卡尔积来写这个而不是使用连接,所以我可以绘制初始查询树。

这是朋友的尝试:

  

PROJECT item#,pnum,mgrnum,address,bdate((SELECT location ='Denver'(Plant)x Item)JOIN mgrnum = snum(供应商))

我正在努力了解如何得出这个答案。 谢谢。

1 个答案:

答案 0 :(得分:0)

  

对于位于“丹佛”的每个项目,检索项目编号,控制工厂编号以及工厂经理的姓名,地址和出生日期。

由于这是作业,这里有一个提示。您显然希望item#, pnum, name, bdate行位于:

(for some sex, mgrnum, location, snum,
        snum called name occupying address born bdate is sex and manages pnum
    and item# in location is controlled by pnum
    and location = 'Denver')

猜测表格的含义以及适用的商业规则,因为您没有明确解释。)

让我们使用一个明显的简写:

(for some sex, mgrnum, location, snum,
        Supplier(snum, name, address, bdate, sex, pnum)
    and Item(item#, location, pnum)
    and location = 'Denver')

回想一下,PROJECT保持/删除属性,RESTRICT / SELECT保持/删除元组,如果关系R& S持有从谓词 R(...)&中生成真实语句的元组。 S(...)(分别)然后R NATURAL JOIN S返回R(...)和S(...)的元组。 (见this answer。也是我对Relational Algebra Cross Product and Natural Join的回答。)