【问题标题】:Tricky intersection in Relational Algebra关系代数中的棘手交集
【发布时间】:2013-01-22 16:08:24
【问题描述】:

您好,在我的考试修订中,我选择了以下关系代数示例问题:

employee (+person_name, street, city)
works (+person_name, company_name, salary)
company (+company_name, city)
manages (+person_name, manager_name)

+ indicate the underlined primary keys
  1. 查找与其经理居住在同一城市和同一条街道上的所有员工的姓名

          MY solution
    JOIN manages and employee (OVER person_name) GIVING T1
    JOIN manages and employee (OVER manager_name) GIVING T2
    PROJECT T1 over person_name, street, city GIVING T3
    PROJECT T2 over street, city GIVING T4
    T3 intersect T4 GIVING T5
    PROJECT T5 over person_name GIVING RESULT
    

这是我的解决方案,直到我发现交集必须是联合兼容的(匹配的列数及其标题)

从那以后,我真的找不到解决这个问题的方法,因为如果我对第 3 行进行以下更改
PROJECT T1 在街道上,城市 GIVING T3
那么我将永远没有机会将交集的结果链接回 person_name。

另一方面,当我对第 4 行进行以下更改时: 项目 T2 超过 person_name、街道、城市 GIVING T4
然后在十字路口,我永远不会找到一个除了他自己还有其他经理的人。

我将不胜感激任何提示,也许我拿起的这个在线示例非常模棱两可。

【问题讨论】:

    标签: intersection relational-algebra


    【解决方案1】:

    另一种表达问题的方式:对于每个经理+人员对,找到相关城市+州对于两个人都相同的人。你几乎做到了:

    JOIN manages AND employee (OVER person_name) GIVING T1
    JOIN T1 AND employee (OVER manager_name, street, city) GIVING T2
    PROJECT T2 OVER person_name, manager_name, street, city GIVING RESULT
    

    问题陈述不需要在单个列中返回名称,并且此答案提供了有用的结果。如果需要,您可以重复上述查询,将两个投影合并:一个是 person_name,另一个是 manager_name。

    只有一件事:许多经理会反对一个名为“人”的栏目和另一个名为“经理”的栏目,因为几乎每个经理——尽管有你的经验,也许吧? ——认为自己是一个人。更可接受的配对可能是经理/工人、领主/农奴、主/从等。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-09-08
      • 1970-01-01
      • 2023-03-09
      • 1970-01-01
      • 2022-10-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多