我想弄清楚如何创建这种关系。参加奖励计划的员工。他们可以参加多年,也可以做同样的工作。所以这是一个多对多的关系。我还需要能够获得年度记录。这是最好的方法吗?甚至可能吗?
员工表:
EmpID PK
Year PK
工作表:
JobID PK
Year PK
答案 0 :(得分:1)
对于多对多的关系,标准方法是创建一个单独的表(mysql语法):
CREATE TABLE employee_job
( empl_id integer not null,
job_id integer not null,
foreign key (empl_id) references employee(empl_id),
foreign key (job_id) references job(job_id)
)
答案 1 :(得分:0)
如果您只想存储哪位员工参与哪一年的工作,您可以采用更简单的设计:
Employee
--------
EmpID PK
Job
--------
JobID PK
Year (optional)
--------
Year PK
Participation
-------------
EmpID PK, FK1
JobID PK, FK2
Year PK, FK3 (the FK3 is optional)
如果您还想在单独的表格中存储哪些职位在哪一年处于活动/可用状态以及哪些员工在哪一年工作(例如,如果您的雇员已经雇用了几年但没有参加任何工作,或者如果您有那些可用但没有人工作的工作),你可能会有更复杂的设计建议:
Employee
--------
EmpID PK
Job
--------
JobID PK
Year
--------
Year PK
Employment
----------
EmpID PK, FK
Year PK, FK
JobActivity
-----------
JobID PK, FK
Year PK, FK
Participation
-------------
EmpID PK, FK1
JobID PK, FK2
Year PK, FK1, FK2
FK1会引用Employment(EmpID, Year)
而FK2会引用JobActivity(JobID, Year)