2017-03-11 8 views
0

従業員と仕事の2つの関係があります。従業員関係では、主キーemployee_idを含む従業員に関する関連情報を保存します。タスクの関係では、主キーtask_idを含むタスクに関するすべての関連情報を保存します。SQLで2つの関係を結合する最も良い方法は?

どの従業員がどのタスクを持っているかを知るために、これらの2つの関係に参加する最良の方法は何でしょうか?従業員は複数のタスクを持つことができ、タスクは複数の従業員を持つことができます。このようなタスクに外部キーとしてemployee_idを追加するのが最善でしょうか。

CREATE TABLE Employee(
Name TEXT, 
Employee_id INT PRIMARY KEY 
); 

CREATE TABLE Tasks(
task_description TEXT, 
Employee_id INT, 
FOREIGN KEY (Employee_id) REFERENCES Employee(Employee_id), 
task_id INT PRIMARY KEY 
); 

私の問題は、複数の従業員が同じタスクを持つことができるため、タスクの関係のキーではないことです。

これは私が考えた別のオプションです。これに希望の効果があるかどうかはわかりません。

CREATE TABLE Employee(
Name TEXT, 
Employee_id INT PRIMARY KEY 
); 

CREATE TABLE Tasks(
task_description TEXT, 
Employee_id INT, 
task_id INT, 
PRIMARY KEY(Employee_id, task_id) 
); 

その他の(より良い)オプションはありますか?

答えて

3

これは、定義によって、別のテーブルを必要とmany-to-many関係がされています

CREATE TABLE EmployeeTasks (
    Employee_id INT, 
    Task_id INT, 
    PRIMARY KEY (Employee_id, Task_id), 
    FOREIGN KEY Employee_Id REFERENCES Employees(Employe_id), 
    FOREIGN KEY Task_id REFERENCES Tasks(Task_id)); 

CREATE INDEX EmployeeTasks_Task_id on EmployeeTasks(Task_id); 

あなたは、テーブル名を複数形する必要があります。

+0

これは非常に助けてくれました、ありがとうございます。私は多対多の関係をすべて変更しました:) – Robbebeest

関連する問題