【问题标题】:Referential integrity access参照完整性访问
【发布时间】:2013-09-14 10:43:10
【问题描述】:

我在 access 数据库中有两个表。第一个表名为 Program,其字段为 Program ID 和 Program Name,Program ID 是该表的主键。第二个表名为Partner,其字段为Partner ID 和Partner Name,Partner ID 是Partner 表的主键。我有另一个表,它是一个交集表,它显示了程序和合作伙伴表之间的所有连接。交叉表具有项目 ID、项目名称、合作伙伴 ID 和合作伙伴名称字段。我在程序表和交集表之间有一对多的关系,在伙伴表和交集表之间有一对多的关系。我还在这两个关系上选择了参照完整性(更新和删除都选择了)。我的问题是:如果我对程序表中的程序名称进行任何更改,那么我希望将更改也更新到交叉表程序名称字段中。合作伙伴名称字段也是如此。我无法做到这一点。我尝试将程序名称字段添加到程序和交集表之间的程序 ID 上的现有关系中,但访问不允许我强制执行参照完整性,它给出错误:“主中引用的字段没有唯一索引桌子”。我还尝试在 Program Name 字段(不是主键)上创建唯一索引。谁能给我一些建议。 谢谢。

【问题讨论】:

    标签: database ms-access-2010 referential-integrity


    【解决方案1】:

    您的交集表应该包含计划/合作伙伴名称,它应该只包含计划/合作伙伴ID值。

    通过在交集表中保留名称的副本,您已经非规范化您的数据。这通常被认为是“坏事”。

    【讨论】:

    • 好的,我想我可以从交集表中删除名称字段。但只是为了回答我的问题,如果它们在程序表中发生更改,是否有办法更新交集表中的程序名称字段。如果是,我该怎么做?
    • @Ksagar 如果您真的想要保留当前(糟糕的)设计,您可以在 [ProgramID] 和 [ProgramName] 字段上创建唯一索引,然后更新关系以包括这两个字段。我刚刚尝试了一个非常简单的设置,它似乎对我有用,但我强烈建议您不要将计划/合作伙伴名称保留在交集表中。
    猜你喜欢
    • 1970-01-01
    • 2011-09-17
    • 1970-01-01
    • 2016-03-13
    • 2010-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多