【问题标题】:Reference to composite primary key in Access 2007Access 2007 中对复合主键的引用
【发布时间】:2012-07-30 22:27:38
【问题描述】:

我环顾四周发现了一些类似的问题,但它们是针对 SQL Server 的。

这是我创建的一个小型数据库,旨在向您展示我想要建模的关系。基本上很简单,每年有 12 个时期,一个时期-年的实例不能出现两次(时期 9 年 2012 年不能出现超过一次)。

所以我认为最好的建模方法是有一个表格周期,其中只有一个字段的值从 1 到 12,表格年份遵循相同的逻辑(2011、2012...),因为它是N 对 N 关系我创建了 period_by_year 表,将它们连接起来供 rpt_maintenance_kpi 使用。现在棘手的部分是,为了使每个组合都是唯一的,我将 period_no 和 year_no 都设置为复合主键。在我看来,这很好地解决了这个问题,但是我被困在如何从 rpt_maintenance_kpi(或任何其他表)中引用这个复合主键。我尝试进行两次连接,但这似乎不起作用(创建第二个 rpt_maintenance_kpi 表,我相信这不会做我想做的事)。

那么我该如何处理复合主键的外键呢?

非常感谢。

【问题讨论】:

    标签: ms-access foreign-keys ms-access-2007 foreign-key-relationship composite-primary-key


    【解决方案1】:

    使用维护创建年份或期间关系,然后双击关系行以编辑关系或将第二部分(相应的年份或期间)拖动到维护并在询问您是否要编辑关系时选择是。您现在可以添加第二行,如下所示:

    【讨论】:

    • 感谢您的回复。在问我的问题之前,我确实尝试过。出于某种原因,它一开始就奏效了。然后我想把它展示给我的团队负责人,所以我只是取消了连接并在他面前重新做了它,现在它不会这样做(而且它从未在我在家构建的示​​例数据库上工作)。我收到一条错误消息,提示“在索引或连接的定义中字段 pby_period_no 的定义无效”(必须从法语翻译,但它应该会有所帮助)。
    • 所有表中的所有字段都设置为“数字”,除了 id_rpt_maintenance 是“自动编号”。
    • 等等。我设法使它工作。由于某种原因,如果具有复合主键的表和具有复合外键的表之间已经存在连接,那么它将不起作用。我所要做的就是撤消我的加入,点击“创建”,然后一次性重做两个加入。
    • 实际上我正在从头开始设计一个新数据库,因为构建原始数据库的人显然不知道也不关心数据库规范化,我不得不处理 31 个未连接的表。规范化数据库使其从 31 个表变为大约 15 个。此外,他必须使用相当多的 VBA 才能将其组合在一起。嗯。
    • Alexandre,我已删除您的编辑,因为它仅适用于您的情况,并非在所有情况下都是如此。我进行了相当多的测试并添加和删除了关系,以毫无问题地获得措辞和图像。
    【解决方案2】:

    复合键当然很有帮助,可以解决您的问题,但如果您真的想避免复合键连接,另一种完成您需要的替代方法是稍微重新设计您的表结构。由于总是根据月份和年份组合来寻找最终报告,因此拥有 MthYear 维度(或表格)会有所帮助。以下可以是该表中的条目 - 采用 yymm 格式:

    1301 1302 1303 ... ... ... 1312 1401 1402 ... ... 等等……

    您可以在同一个表中以更具描述性的形式拥有更多属性,例如第二个字段可以是 Jan-13、Feb-13....等。

    MthYear 字段可以是您的主要字段,可以连接到报表维护表中的 MthYear。如果您需要在查询或报告中使用通配符,这不仅可以避免使用复合主键,还可以帮助您仅过滤年份或月份。希望这对你有帮助......Arvind

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-11-21
      • 2012-06-13
      • 1970-01-01
      • 1970-01-01
      • 2021-02-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多