0

在此处输入图像描述 查找为位于温哥华市的公司工作的所有员工的姓名、公司名称和经理姓名。

如何在元组关系演算中写这个?这个问题我想了很久。每当涉及“管理”时,我不知道如何处理 manages.manager_name 到 employee.person_name

4

1 回答 1

0

works如果您取,company和关系中所有元组的笛卡尔积,然后将结果限制为s 与 之间匹配、s 与 and 之间匹配且匹配' Vancouver' 的manages那些元组,那么您可以将任何and一起取用from ,组成你的结果元组,例如:company_nameworkscompanyperson_nameworksmanagescityperson_namecompany_namemanager_namemanages

{t : {person_name, company_name, manager_name} |
     ∀ w, c, m (
         works(w) ∧ company(c) ∧ manages(m) ∧
         w.company_name = c.company_name ∧ c.city = 'Vancouver' ∧
         w.person_name = m.person_name ∧ t.person_name = w.person_name ∧
         t.company_name = c.company_name ∧ t.manager_name = m.manager_name
     )
}

如果你想加入employeefor bothperson_namemanager_namein works(即使它是多余的),那么你可以这样做:

{t : {person_name, company_name, manager_name} |
     ∀ e1, w, c, m, e2 (
         employee(e1) ∧ works(w) ∧ company(c) ∧ manages(m) ∧ employee(e2) ∧
         e1.person_name = w.person_name ∧ e1.person_name = m.person_name ∧ 
         w.company_name = c.company_name ∧ c.city = 'Vancouver' ∧
         m.manager_name = e2.person_name ∧ t.manager_name = e2.person_name ∧
         t.person_name = e1.person_name ∧ t.company_name = c.company_name
     )
}

希望这是有道理的,已经有一段时间了,我不得不查一下。

于 2015-08-06T13:31:26.077 回答