我有两个关系员工和任务。在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)
);
还有哪些(更好的)选择?
答案 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);
您应该复数表名。