我想弄清楚如何創建這種關係。參與激勵計劃的員工。他們可以參加多年,也可以做同樣的工作。所以這是一個多對多的關係。我還需要能夠在一年之內獲得記錄。那麼這是最好的方法嗎?甚至有可能嗎?可以將複合主鍵的一部分用作另一個表上覆合主鍵的一部分嗎?
EMPLOYEE表:
EmpID PK
Year PK
作業表:
JobID PK
Year PK
我想弄清楚如何創建這種關係。參與激勵計劃的員工。他們可以參加多年,也可以做同樣的工作。所以這是一個多對多的關係。我還需要能夠在一年之內獲得記錄。那麼這是最好的方法嗎?甚至有可能嗎?可以將複合主鍵的一部分用作另一個表上覆合主鍵的一部分嗎?
EMPLOYEE表:
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)