在Access 2007中引用复合主键

时间:2012-07-30 22:27:38

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

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

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

Access composite key database structure

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

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

非常感谢提前。

2 个答案:

答案 0 :(得分:4)

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

Relationship with two fields

答案 1 :(得分:1)

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

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

您可以在同一个表格中以更具描述性的形式获得更多属性,例如第二个字段可能是1月13日,2月13日等等。

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