4

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

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

Access复合键数据库结构

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

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

提前谢谢了。

4

2 回答 2

4

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

与两个字段的关系

于 2012-07-31T09:32:09.247 回答
1

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

1301 1302 1303……………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………… 1312

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

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

于 2013-12-18T05:49:56.283 回答