バンクーバー市にある会社で働くすべての従業員の名前、会社名、マネージャー名を検索します。
これをタプルリレーショナル計算でどのように書くのですか? 私は長い間これを考えてきました。「管理する」となると、manages.manager_name から employee.person_name への対処方法がわかりません。
works
、company
およびmanages
関係のすべてのタプルのデカルト積を取得する場合、 とcompany_name
の間でs が一致し、 との間works
でs が一致し、「バンクーバー」と一致するタプルに結果を制限すると、任意のおよびを一緒に取ることができます。fromを使用して、結果のタプルを作成します。例: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
)
}
それが理にかなっていることを願っています、それはしばらく経ちました、そして私はそれを調べなければなりませんでした.