查找为位于温哥华市的公司工作的所有员工的姓名、公司名称和经理姓名。
如何在元组关系演算中写这个?这个问题我想了很久。每当涉及“管理”时,我不知道如何处理 manages.manager_name 到 employee.person_name
works
如果您取,company
和关系中所有元组的笛卡尔积,然后将结果限制为s 与 之间匹配、s 与 and 之间匹配且匹配' Vancouver' 的manages
那些元组,那么您可以将任何and一起取用from ,组成你的结果元组,例如:company_name
works
company
person_name
works
manages
city
person_name
company_name
manager_name
manages
{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
)
}
如果你想加入employee
for bothperson_name
和manager_name
in 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
)
}
希望这是有道理的,已经有一段时间了,我不得不查一下。