无法在主键和外键的组合键之间建立联系

时间:2018-09-23 01:31:43

标签: database access ms-access-2016

我有两个表: 具有三(3)个字段的“项目”。两(2)个字段的一个组合键:Donor_Source和Project_Number和项目标题 Project table design view

请注意,Donor_Source字段的索引为是(重复确定),而Project_Number字段的索引为是(否重复)。 之所以必须这样,是因为捐助者可以支持多个项目。

最后还有PRF_Table,它具有许多字段,但是由于我想将其与Project表关联,因此我制作了两个字段用作Projects表的外键: PRF_Table

请注意,外键的两个字段都被索引为:NO。 当我尝试关联两个表时,我设法关联了两个表中的项目字段,但是无法关联两个表中的捐助者源字段: Relations between tables

从上图可以看出,我设法在PRF_Table和Project之间获得了许多:1关系,这是正确的。 PRF_Table可以在一个特定项目上有很多记录,但是该项目在Project表中仅列出一次

尝试关联Donor_Source字段时出现问题:我总是得到不确定的关系(我想避免的事情)。我猜可能是因为Project表中的Donor_Source字段尽管已建立索引,但仍然可以重复,当然在PRF_Table中也可以重复。

我该怎么做才能获得许多:1关系(PRF_Table:Projects)?

2 个答案:

答案 0 :(得分:0)

复合键中的所有字段都必须寻址以创建参照完整性

因此,您必须:

  1. 在PRF_Table中创建字段Agrmnt_ID,并将其包含在与联结表的关系中。

  2. 在与表项目的关系中的PRF_Table中包括字段Donor_Source。

答案 1 :(得分:0)

您无需为Agrmnt_ID中的PRF_Table创建一个具有参照完整性的字段。到目前为止,您在PRF_TablePRF-PO_Junction_Table之间所做的事情都很好。

关于ProjectsPRF_Table之间的链接,看来您的意图是使Projects中的每个记录都能够与PRF_Table中的多个记录相关。如果是这样,那么您的解决方案是更改Projects中的主键,并因此更改两个表之间的关系。

  1. 在表Projects中,删除当前的组合主键并创建一个自动编号字段(即名为ProjectID)作为主键。

  2. 现在,在Projects表中的Donor_SourceProject_Number字段上创建唯一索引(复合唯一索引),这将为您带来相同的效果作为您当前的组合主键方案,每个捐赠者可以在多个项目中,但是同一捐赠者不能在同一项目中多次。

  3. 现在,您将在PRF_Table中创建与在第1步中在Projects中创建新主键(即ProjectID)相同的字段

    < / li>
  4. Projects中的新主键和PRF_Table中的新字段之间建立关系。这将允许Projects中的每个项目/捐助者记录在PRF_Table中具有多个记录。

复合主键在联结表中最有用,例如如何与PRF-PO_Junction_Table一起使用。但是,在任何其他链接中,您都想尝试拥有一个主键字段,并仅使用唯一的复合索引来在两个或多个字段中强制唯一性。