この関係をどのように構築するかを考えています。インセンティブプログラムに参加する従業員向けです。彼らは複数年参加することができ、同じ仕事をすることもできます。したがって、これは多対多の関係です。また、その年までに記録を取得できる必要があります。これが最善の方法ですか?可能ですか?
従業員テーブル:
EmpID PK
Year PK
ジョブ テーブル:
JobID PK
Year PK
この関係をどのように構築するかを考えています。インセンティブプログラムに参加する従業員向けです。彼らは複数年参加することができ、同じ仕事をすることもできます。したがって、これは多対多の関係です。また、その年までに記録を取得できる必要があります。これが最善の方法ですか?可能ですか?
従業員テーブル:
EmpID PK
Year PK
ジョブ テーブル:
JobID PK
Year PK
多対多の関係の場合、標準的なアプローチは、個別のテーブル(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)
)
どの従業員がどの年にどの仕事に参加したかだけを保存したい場合は、より単純な設計を行うことができます。
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)