Database design 如何避免需要两个外键引用同一个表

Database design 如何避免需要两个外键引用同一个表,database-design,ms-access,foreign-keys,relational-database,Database Design,Ms Access,Foreign Keys,Relational Database,我有一个Person表,需要记录这个人过去和当前职业的数据。我有一张职业表,上面有职业名称和代码。因为在Person表中,我不能将当前_职业作为外键引用职业,也不能将过去_职业作为外键引用职业,我该如何解决这个问题?即使我添加了一个二级表来记录人员和职业之间的关系,我仍然会遇到同样的问题,即每个人都需要从职业中获取两条数据。为什么不创建一个PersonOccupation表,该表带有附加字段,以“最近”或仅以应用日期为索引。然后从中导出当前职业和过去职业 然后,您只需要一个外键就可以将职业ID关

我有一个Person表,需要记录这个人过去和当前职业的数据。我有一张职业表,上面有职业名称和代码。因为在Person表中,我不能将当前_职业作为外键引用职业,也不能将过去_职业作为外键引用职业,我该如何解决这个问题?即使我添加了一个二级表来记录人员和职业之间的关系,我仍然会遇到同样的问题,即每个人都需要从职业中获取两条数据。

为什么不创建一个
PersonOccupation
表,该表带有附加字段,以“最近”或仅以应用日期为索引。然后从中导出当前职业和过去职业


然后,您只需要一个外键就可以将
职业ID
关联到
个人职业
职业
之间

在Person表中,您可以将当前职业作为外键引用职业,也可以将过去职业作为外键引用职业。在“关系”窗口中,添加占领表的第二个副本。然后创建一个关系行,从当前占领到占领的一个副本,从过去占领到另一个副本

然而,这种方法将限制你对每个人只有一个过去的占领。如果您想为每个人记录多个以前的职业,Widor建议的设计会更好

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中有两个occupation表,一个是currentOcc使用外键,一个是previousOcc使用外键。但是,上面建议创建一个名为PersonOccupations的新表,这是一个更灵活、更健壮的解决方案,因为它允许个人从事任意数量的职业。

您怎么会认为个人不能有两个不同的列,其中包含职业外键?这是什么数据库?设计只要求记录一个过去的职业,但我想我会按照Widor的建议,添加一个额外的列来记录它是过去的职业还是现在的职业。我感谢你的帮助。