2017-03-11 19 views
0

我有两个关系员工和任务。在员工关系中,我保存了有关员工的相关信息,包括主键employee_id。在任务关系中,我保存有关任务的所有相关信息,包括主键task_id。在SQL中连接两个关系的最佳方法是什么?

加入这两个关系的最佳方式是什么?这样你就知道哪个员工有哪个任务?我假设一个员工可以有多个任务,一个任务可以有多个员工。最好是将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

相关问题