在SQL中加入两个关系的最佳方法?

时间:2017-03-11 12:44:17

标签: sql database

我有两个关系员工和任务。在Employees关系中,我保存了有关员工的相关信息,包括主键employee_id。在关系任务中,我保存了有关任务的所有相关信息,包括主键task_id。

加入这两个关系的最佳方式是什么,以便了解哪个员工有哪个任务?我假设一个员工可以有多个任务,一个任务可以有多个员工。是否最好将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)
);

还有哪些(更好的)选择?

1 个答案:

答案 0 :(得分: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);

您应该复数表名。