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
    

交差点がユニオン互換でなければならないことがわかるまで、これが私の解決策でした(一致する列の数とその見出し)

それ以来、この問題の解決策を実際に見つけることができませんでした。なぜなら、次の変更を行 3 の
プロジェクト T1 に通り、都市 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

問題のステートメントでは、名前を単一の列で返す必要はありません。この回答は有用な結果を提供します。必要に応じて、上記のクエリを繰り返して、2 つの射影 (person_name の 1 つと manager_name のもう 1 つ) の和をとることもできます。

1 つだけ: 多くのマネージャーは、1 つの列が「人」で、もう 1 つの列が「マネージャー」であることに反対します。-- 自分を人だと思っています。より受け入れられるペアは、管理者と労働者、領主と農奴、主人と奴隷などです。

于 2013-02-06T07:09:58.363 に答える