Microsoft Access 2013 - 同一记录中的多个外键

时间:2014-01-06 14:25:35

标签: database

我在将多个外键拉入Microsoft Access表中的一个记录时遇到了问题。

我有两张包含这些字段的表格:

表1: 拥有者 领域: 所有者ID(主键) 名字 姓氏

表2: 船舶 领域: 发货ID(主键) 出货名称

我需要在表1和表2之间创建一个关系,显示谁拥有该船。我已经尝试在表2中添加一个名为Owner ID(外键)的数字字段,这非常好用。

工作示例:

Table 1 – Owners                  Table 2 – Ships 
Owner ID (Primary Key)__          Ship ID (Primary Key)
First Name              \         Ship Name
Last Name                \________Owner ID (Foreign Key)

不幸的是,表2中的我的船只可以同时拥有多个所有者(最多5个)。当我尝试在表2中创建一系列链接字段时,我的问题出现了。

不工作:

Table 1 – Owners                     Table 2 – Ships 
Owner ID (Primary Key)__             Ship ID (Primary Key)
First Name              \            Ship Name
Last Name                \           Owner1 ID (Foreign Key)
                          \______/   Owner2 ID (Foreign Key)
                                 \   Owner3 ID (Foreign Key)

任何人都可以推荐任何解决方法,以便我可以显示从Ships表中的Owners表中获取的多个所有者吗?

感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

您的数据库设计绝对不正确。

在您解释的情况下,您与船舶和船东之间存在多对多关系,必须转换为关系模型中的“关系表”。
在这种情况下:[所有权]表,包含2个字段,是相关表的2个主键(PK)。

换句话说,你需要3个表:

  • 船舶(ShipId,ShipName,Whatever)PK是ShipId
  • 所有者(OwnerId,FirstName,LastName)PK是OwnerId
  • OwnerShip(ShipId,OwnerId)PK由2个FK
  • 组成

答案 1 :(得分:0)

问题在于,看起来Access不允许Nullable FK,因此无论拥有多少所有者,都必须填写所有所有者字段。

我能想到的唯一解决方案是引入ShipOwner表,该表具有ShipID和OwnerID列(作为Ship和Owner表的FK)。然后,您可以拥有任意数量的所有者。

Pros: You can add things like %Owned if that matters
Cons: The software has to enforce the limit of 5 owners

最大的专业:它会起作用!

干杯 -

编辑:第一段错误:Access确实允许你添加可空的FK。不过我仍然认为这里的建议很好。重复组(所有者1到5)违反规范化规则,并且此建议已标准化。