0

我有哪些需要記錄的人的過去和現在的職業數據的人員表。我有一個佔領表和職業名稱和代碼列表。由於在Person表中,我不能將current_occupation作爲引用Occupation的外鍵,並且將past_occuption作爲引用Occupation的外鍵,我該如何解決這個問題?即使我添加一個輔助表來記錄Person和Occupation之間的關係,但我仍然遇到同樣的問題,即需要爲每個Person提供來自Occupation的兩個數據。如何解決需要兩個外鍵引用同一個表

+2

什麼讓你覺得你不能有2只個人不同的列有外鍵職業?這是什麼數據庫? – bohica 2012-02-13 16:48:09

回答

0

爲什麼沒有PersonOccupation表附加字段建立索引他們的「最近」或者乾脆日期從他們申請。那麼從那個派生出currentpast_occupation

然後你只需要一個外鍵,OccupationIdPersonOccupationOccupation之間。

1

在Person表,你可以有current_occupation作爲一個外鍵引用職業,也past_occuption作爲一個外鍵引用職業。在關係窗口中,添加佔位表的第二個副本。然後創建一條關係線,從current_occupation到Occupation的一個副本,另一個從past_occuption到另一個副本。

但是,這種方法會限制你只有一個每個人past_occuption。如果你想記錄每個人以前的多個職業,Widor的設計建議會更好。

+0

設計只要求要記錄一個past_occupation,但想到我會按照Widor的建議,並添加一個額外的列來記錄無論是過去或現在的職業。我很感激幫助。 – 2012-02-14 09:01:00

1
SELECT Person.PersonId, Person.Name, 
CurrentOccupation.OccupationName AS CurrentOcc, 
PreviousOccupation.OccupationName AS PrevOcc 
FROM (Person INNER JOIN Occupation AS CurrentOccupation ON Person.CurrentOccId = CurrentOccupation.OccupationId) 
INNER JOIN Occupation AS PreviousOccupation ON Person.PreviousOccId = PreviousOccupation.OccupationId; 

此代碼有職業表兩次在SQL中使用一次currentOcc外鍵,一次使用了previousOcc外鍵然而,上述的建議,以創建一個名爲PersonOccupations新表是一種更加靈活和強大的解決方案因爲它允許任何人數的職業。

相關問題