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新表是一种更加灵活和强大的解决方案因为它允许任何人数的职业。

相关问题