1

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

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
    

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

从那以后,我真的找不到解决这个问题的方法,因为如果我对 line-3
PROJECT T1 over street, city GIVING T3进行以下更改,
那么我将永远没有机会将交叉点的结果链接回 person_name。

另一方面,当我对第 4 行进行以下更改时: PROJECT T2 over person_name, street, city GIVING T4
然后在交叉路口,我永远不会找到一个除了他自己之外还有其他经理的人。

我会很感激给出的任何提示,也许我拿起的这个在线样本很模棱两可。

4

1 回答 1

0

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

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。

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

于 2013-02-06T07:09:58.363 回答