1

この関係をどのように構築するかを考えています。インセンティブプログラムに参加する従業員向けです。彼らは複数年参加することができ、同じ仕事をすることもできます。したがって、これは多対多の関係です。また、その年までに記録を取得できる必要があります。これが最善の方法ですか?可能ですか?

従業員テーブル:

EmpID PK
Year PK

ジョブ テーブル:

JobID PK
Year  PK
4

2 に答える 2

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)
)
于 2012-07-15T08:09:49.687 に答える
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)

于 2012-07-15T09:04:06.290 に答える