【问题标题】:Cannot add or change a record because a related record is required in table 'COMPANY'无法添加或更改记录,因为表 'COMPANY' 中需要相关记录
【发布时间】:2019-03-22 19:40:45
【问题描述】:

我认为我的联系人列表数据库设计是正确的,但是有一个错误。 Access 2013 告诉我:

您无法添加或更改记录,因为表 'COMPANY' 中需要相关记录

我是 Access 新手,这是一个名为“计算机概念 II”的课程。我已经完成了我的任务,并且一丝不苟地按照指示进行操作。本课程仅在线进行,我以 3 种不同的方式尝试了 3 次,但未能从讲师那里获得任何反馈。

这是我尝试过的事情的细分:

业务规则

  1. 一个人必须只有一个家庭,但一个家庭可以有很多人。
  2. 一个人可以为一家或零家公司工作。
  3. 一家公司可以有零个或多个人。
  4. 对于 MS Access,PERSONstrong 表。

我的 ERD 图

建表

  1. 构建 PERSON 表。
  2. 建立 COMPANY 表。
  3. 构建 FAMILY 表。

建立的关系

  1. 在表之间创建了关系(参见随附的屏幕截图)。对于可选性,请将 PERSON 设置为“强”表。
  2. 最初在 FAMILY 表中将 ID-FAM 和 LNAME 字段作为必需字段和索引字段。
  3. 最初将 PERSON 表中的 ID-PER、ID-FAM_FK 和 ID-COM_FK 作为索引。
  4. 最初将 ID-COM 作为 COMPANY 表中唯一的索引和必填字段。

在父表中输入数据时遇到“相关记录”错误

    • 如使用 Access 2010 文档中所述,我首先在父表 (PERSON) 中输入数据。但是,当我填写完第一行中的所有字段并按“向下箭头”键前进到下一行时,我收到一条错误消息说
“您无法添加或更改记录,因为表 'FAMILY' 中需要相关记录”

嗯,COMPANY 条目是完全可选的,在任何情况下都不是必需的,所以这有点令人困惑。我不确定我做错了什么或从这里去哪里。在这堂课之前我不知道如何使用 Access,但我认为我现在已经掌握了它,并且我已经仔细地按照说明进行操作。因此,我认为问题出在某处配置错误。

【问题讨论】:

  • 请在您的问题中编辑附加信息,而不是将其放在评论中。例如您的业务规则。请注意,您的 ER 图并未显示一个人不需要公司。 PS 还有Database Administrators.
  • @philipxy 感谢您的建议!我已经添加了上面的业务规则。问题:为什么我的 ERD 没有显示上述关系?我选择仅显示 PERSON 作为强表的等值连接结果。我是否错误地配置了图表,或者尽管我已正确配置,但 Access 是否无法显示该关系?
  • 我已尝试修复此问题以将答案移至答案框 - 我们不会在标题中使用 [已解决] 或将解决方案编辑为问题(尤其是在中间)。我已经从这个问题中删除了很多 HTML,因为它使问题更难编辑 - 首选 Markdown。我还减少了感谢、签名和紧急乞求——这些都是不鼓励的。
  • 如果我发布的答案与实际答案不准确,请告诉我,我们可以共同努力将解决方案材料移动到正确的位置。谢谢。

标签: ms-access database-design relational-database ms-access-2013 erd


【解决方案1】:

已解决!

在看到 Sergey S 的评论之前,我自己发现了这一点,但正如他所指出的,“默认”属性字段中应该没有值。在我发现解决方案后,我将以下内容发布到班级的讨论区:

事实证明,Access 自动为 我的外键 [FK] 为零 ("0")。我没有意识到, 但是发生的事情是即使一个人不需要 有一家公司,因为“0”在我的人的公司字段中 记录这是导致错误的原因。原因?我怀疑 数据库正在查找 ID 为“0”的公司记录。自从 我的公司记录从 2 开始,从未找到“0”记录,导致 错误。

解决方案

我解决这个问题的方法很简单 设置进入设计中我的 2 个外键的默认字段 查看,删除零,并确保没有默认值。或者, 另一种说法是:确保没有默认值 您的外键的值

我能够添加 每个表 3-4 行数据,我什至运行了一个基本查询来测试 数据库。它似乎运行良好。

感谢所有贡献的人!

【讨论】:

    【解决方案2】:

    如果您不需要将家庭和/或公司链接到个人记录,请不要在 ID-FAM_FKID-COM_FK 字段中输入任何内容,将它们留空。在表定义中,这些字段不应具有默认值,Required 属性应为 No

    如果您需要将人员与家庭和/或公司关联,请先将数据输入到家庭和/或公司表中,然后在人员表中添加或更新记录

    【讨论】:

    • 感谢您的回复。我不是数据库专家。我是初学者,所以我不懂所有的术语。但是,这是我对“商业规则”中我应该完成的理解1)一个人必须只有一个家庭,但一个家庭可以有很多人,2)一个人可以为一个或零个公司工作。我相信这就是我建立的关系。我已经先在 Family 表中输入了数据,但无济于事。
    • 你的表结构是对的。即使您只输入 FNAME 并将其余字段留空(顺便说一句,姓氏在哪里?),您也应该能够在 Person 表中输入和保存新记录。如果数据库不允许这样做,请在表设计模式下检查 *_FK 字段的属性 - Default Value 属性中不应有任何值,Required 属性应为 No
    【解决方案3】:

    在表中声明 FK 意味着该表中其列的子行值必须出现在引用的表中。没有其他理由宣布 FK。在 SQL 数据库中,当 FK 列包含 NULL 时(默认情况下)子行值不必出现在引用的表中。

    因此,添加或编辑的 Person 行的非空白/非 NULL FK 值必须已经在其引用表的某些行中。在评论中,您说一个人必须有一个家庭,即 Person FK 是必需的,即可以是非空白/非 NULL,但不必有公司,即 Company FK 是非必需的,即可以是空白/NULL。因此,要添加 Person 行,您必须首先在 Family 中为他们的家庭添加一行,然后添加 Person 行,其家庭的 ID-FAM 值为 ID-FAM-FK 并且 ID-COM-FK 为空白/NULL 或 ID -COM 值在他们公司的 Company 行中。

    错误信息不是很清楚。实际的违规行为是,在您离开已添加或编辑行的 Person 之前每一行必须为每个所需的 FK 有一个值,因此它所引用的行,对于每个非必需的 FK,要么该值要么为 NULL时间>。但是错误消息只是提到了缺少足够行的部分。

    查询或更新数据库不需要 FK(和其他约束),包括 JOINing。它们用于 DBMS 的更新验证(和增强优化)。

    【讨论】:

      【解决方案4】:

      转到数据库,然后编辑两个相关表之间的关系。勾选“级联更新相关字段”。现在可以进行更新或编辑,无需更新任何其他内容。

      【讨论】:

      • 级联的想法很有趣。我得测试一下。想知道是否有其他人可以验证这是否有效?
      猜你喜欢
      • 2012-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多