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

Cannot add or change a record because a related record is required in table 'COMPANY'

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

You cannot add or change a record because a related record is required in table 'COMPANY'

我是 Access 的新手,这是一个名为 "Computer Concepts II" 的 class。我已经完成了我的任务,并且一丝不苟地按照指示去做。本课程仅在线举办,我尝试了 3 次 3 种不同的方式,但未能从讲师那里得到任何反馈。

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

商业规则

  1. 一个人一定只有一个家庭,但一个家庭可以有很多人
  2. 一个人可以为一家或零家公司工作。
  3. 一家公司可以有零个人或多人。
  4. 出于 MS Access 的目的,PERSONstrong table.

我的 ERD 图

建造 TABLES

  1. 建造人 table。
  2. 建立公司table。
  3. 建立家庭table。

建立关系

  1. 在 table 之间建立关系(见附件截图)。对于可选性,将 PERSON 设置为 "strong" table.
  2. 最初在 FAMILY table 中有 ID-FAM 和 LNAME 字段作为必需和索引。
  3. 最初有 ID-PER,ID-FAM_FK,& ID-COM_FK 在 PERSON table 中作为索引。
  4. 最初将 ID-COM 作为 COMPANY table 中唯一的索引和必填字段。

在父 TABLE

中输入数据时遇到 'RELATED RECORD' 错误
"You cannot add or change a record because a related record is required in table 'FAMILY'"

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

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

如果您需要 link Person with Family and/or Company,请先将数据输入 Family and/or Company tables,然后在 Person [中添加或更新记录=23=]

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

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

错误信息不是很清楚。实际的违规行为是,在您离开 Person having added or edited rows 之前,每行必须为每个必需的 FK 都有一个值,因此它引用的行,以及每个非必需的 FK 的值或 NULL 。但是错误消息只是提到了缺少足够行的部分。

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

已解决!

在看到 Sergey S 的评论之前,我自己发现了这一点,但正如他指出的那样,"Default" [=23] 中应该没有任何价值=] 字段。找到解决方案后,我将以下内容发布到 class 的讨论区:

It turns out that Access was automatically setting a default value for my foreign keys [FK] of zero ("0"). I didn't realize it, but what was happening was even though a person wasn't required to have a company, because "0" was in the company field for my person record that was what was causing the error. The reason? I suspect that the database was looking for a company record with an ID of "0". Since my company records start at 2 the "0" record was never found, causing the error.

SOLUTION

The way I solved this was simply to set go into the default field for my 2 foreign keys in the design view, delete the zeros, and make sure there was no default values. Or, another way to put it is: ensure there are no default values for your foreign keys.

I was able to add 3-4 rows of data for each table and I even ran a basic query to test the database. It seems to be working perfectly.

感谢大家的贡献!

转到数据库,然后编辑两个相关表之间的关系。检查 "Cascade Update Related Field"。现在可以进行更新或编辑,无需更新任何其他内容。