1

データベース テーブルとそのクエリについて問題があります。これが何であるかを教えてください。プロジェクトマネージャーと従業員の関係についてです。さて、声明で彼らの関係を教えてください...

Manager = Manager は、プロジェクト リーダーであるか、複数のプロジェクトのマネージャーである可能性があります。

従業員= (s)マネージャーが管理するプロジェクトまたはプロジェクトSのみに従事する人です。

Project = Project は、ONE Manager のみが管理するプロジェクトです。

従業員 - マネージャーの関係

店長も会社員ですよね?これによると、私は彼らの関係を次のようにしたいと考えています -> 1 人の従業員を複数のマネージャーが管理できます。
すべてのマネージャーは同じタイトルです。つまり、マネージャーのマネージャーはいません。従業員にはマネージャーしかいません。たとえば、マネージャーは 5 人の従業員を管理できます。

従業員 - プロジェクト関係

従業員は意味のあるプロジェクトを持つことができます。また、従業員は意味のある複数のプロジェクトを持つこともできます。したがって、プロジェクトには複数の従業員を含めることもできます。(注意: プロジェクトには複数の従業員を含めることができますが、複数のマネージャーによって管理することはできません)。

マネージャー - プロジェクト関係

マネージャーは複数のプロジェクトを持つことができます。ただし、プロジェクトは複数のマネージャーによって管理されることはありません。

PS: プロジェクトによると、異なるプロジェクトの同じ従業員が複数のマネージャーによって管理される可能性があります。以下の例を参照してください...

Android App PROJECT マネージャー----> パトリック

Android アプリ PROJECT の社員-----> ジョン、スーザン、ミーガン、ジョー。

別のプロジェクト...

IOS App PROJECT マネージャー----> Ryan

IOS App PROJECT の社員----> Claire、Walter、Robert、Megan

それでは、そのためのテーブルをお見せしましょう...どうすればいいのか本当にわかりません...

従業員 - マネージャー - プロジェクトの現在の現実

そのテーブルでは、マネージャーは会社の従業員であるため、「manager_id(FK)」が「employee_id(PK)」を参照するようにしました。

そして、従業員テーブルの「manager_id」を参照するために、Project テーブルに「manager_id(FK)」があります。

そして、私がはっきりと理解していなかったproj_employeeテーブルです。インターネットの例でこの方法を見つけました。そのようにして、それらをクエリで呼び出します。

今、私が試したクエリを投稿させてくださいが、解決策が得られません...

        select
    e.name as employee_name,
    pm.name as manager_name
from Proj_Employee as pe
    left outer join Employee as e on e.employee_id = pe.emp_id
    left outer join Project as p on p.project_id = pe.project_id
    left outer join Employee as pm on pm.employee_id = p.manager_id
where pe.project_id = <project id>

私はこれをお願いしたいと思います...選択したプロジェクトのEmployeeName、ManagerNameを表示するクエリが必要です。私の表が間違っていたら、私を案内してくれるか、どうすればよいか教えてもらえますか?

知識はありますが、どうすればこれを機能させることができるかわかりませんでした。

4

3 に答える 3

2

問題が見えたと思います(最終的に)。

「そして、従業員テーブルの「manager_id」を参照するために、Project テーブルに「manager_id(FK)」があります。」

それが問題かもしれないと思います。テーブルを、列ではなく、テーブル内の列への外部キーにしmanager_idたいと思います。しかし、あなたはクエリでそれを正しく理解しています。projectemployee_idemployeemanager_id


SQL Fiddle のデモ: http://www.sqlfiddle.com/#!2/e31fb/1


idあなたの質問とはあまり関係ありませんが、これは、名前が付けられた各テーブルに主キー列があると、「間違った」SQL を「間違った」SQL のように見せるのに役立つ場合であることを指摘したいだけです。「間違ったコードを間違ったように見せる」 - Joel Spolsky

それが予想される場合:

主キーは次の形式になります。 id

外部キーは次の形式になります: parent_table_id、またはparent_role_id

結合の大部分は、外部キーから主キーへの結合になります

次に、ほとんどの結合が次の形式になると予想します

child.parent_id = parent.id

その外部キー定義は次の形式になります

FK_child_parent_or_role (parent_or_role_id) REFERENCES parent (id)

これにより、次のような外部キー定義が作成されます。

FK_project_manager (manager_id) REFERENCES employee (manager_id)

私たちには「間違っている」ように見えます。列への参照が表示されることを期待していidます。

于 2013-08-21T18:09:16.840 に答える
0

私が見ることができる外部結合を持つ理由はありません。

select p.Project_Name, m.name as Manager, e.name as Employee
from Project P
join Employee M on m.employee_id = p.manager_id
join project_employee pe on pe.project_id = p.project_id
join Employee E on e.employee_id = pe.employee_id
于 2013-08-21T18:02:11.787 に答える
0

次のようなもので (project_name, manager_name, employee_name) のリストを取得できます。

SELECT p.project_name
     , e.name as employee_name
     , m.name as manager_name
FROM project p
INNER JOIN employee m ON p.manager_id = m.employee_id
LEFT JOIN proj_employee pe ON p.project_id = pe.project_id
LEFT JOIN employees e ON pe.emp_id = e.employee_id;

従業員がいない 2 つのプロジェクトの場合、次のような結果が得られます。

 project_name  | employee_name | manager_name 
---------------+---------------+--------------
 Stack O       | Alice         | Eve
 Stack O       | Bob           | Eve
 Lemon Squeezy |               | Alice
于 2013-08-21T17:54:17.093 に答える