我认为我的联系人列表数据库设计是正确的,但是有一个错误。 Access 2013告诉我:
您无法添加或更改记录,因为表'COMPANY'中需要相关记录
我是Access的新手,这是一个名为“Computer Concepts II”的课程。我已经完成了我的任务,并且一丝不苟地遵循了指示。这门课程只在网上举行,我已经尝试了3次不同的方式,但未能得到教练的任何反馈。
这是我尝试的事情的细分:
"You cannot add or change a record because a related record is required in table 'FAMILY'"
那么,一个COMPANY条目是完全可选的,不需要任何方式,所以这有点令人困惑。我不确定我做错了什么或从哪里开始。我不知道在这堂课之前如何使用Access,但我觉得我现在有一个非常好的处理,我一丝不苟地按照说明操作。因此,我认为这个问题是某个地方设置错误。
在看到Sergey S的评论之前,我自己发现了这个,但正如他所指出的那样,“默认”属性字段中应该没有值。在我发现解决方案后,我将以下内容发布到我班级的讨论区:
事实证明Access正在自动设置我的外键[FK]的默认值为零(“0”)。我没有意识到这一点,但发生的事情是即使一个人不需要有公司,因为“0”在公司领域是我的人员记录,这是造成错误的原因。原因?我怀疑数据库正在寻找ID为“0”的公司记录。由于我的公司记录从2开始,从未找到“0”记录,导致错误。
SOLUTION
我解决这个问题的方法就是在设计视图中设置进入我的2个外键的默认字段,删除零,并确保没有默认值。或者,另一种方法是:确保外键没有默认值。
我能够为每个表添加3-4行数据,我甚至运行了一个基本查询来测试数据库。它看起来很完美。
感谢所有贡献的人!
如果您不需要将家庭和/或公司链接到人员记录,请不要在ID-FAM_FK
和ID-COM_FK
字段中输入任何内容,请将其留空。在表定义中,这些字段不应具有默认值,而Required
属性应为No
。
如果您需要将Person与Family和/或Company链接,请先将数据输入Family和/或Company表,然后在Person表中添加或更新记录
在表中声明FK意味着该表中列的子行必须出现在引用的表中。宣布FK没有其他理由。在SQL数据库中,当FK列保持NULL时(默认情况下),子行值不必出现在引用的表中。
因此,添加或编辑的Person行的非空/非NULL FK值必须已经位于其引用表的某些行中。在评论中你说一个人必须有一个家庭,即需要人FK,即可以是非空白/非空,但不必有公司,即公司FK不是必需的,即可以为空/ NULL。因此,要添加Person行,您必须首先在Family中为其族添加一行,然后将Person行的ID-FAM值添加为ID-FAM-FK,并将ID-COM-FK添加为空/ NULL或ID - 公司在公司行中的-COM值。
错误消息不是很清楚。实际的违规行为是,在您离开添加或编辑行的人之前,每行必须具有每个所需FK的值,因此必须为其引用的行,以及每个非必需FK的NULL或NULL。但错误消息只是提到有关缺少足够行的部分。
查询或更新数据库(包括JOINing)不需要FK(和其他约束)。它们用于DBMS的更新验证(和增强优化)。
转到数据库,然后编辑位于两个相关表之间的关系。选中“级联更新相关字段”。现在更新或编辑将起作用,无需更新任何其他内容。