创建、编辑或删除关系

重要:  本文是由机器翻译的,请参阅免责声明。请在 此处 中查找本文的英文版本以便参考。

关系有助于您合并两个不同表中的数据。每个关系由两个表中的字段组成,包含相对应的数据。例如,您的“产品”表和“订单明细”表中都有一个“产品ID”字段。“订单明细”表中的每条记录都有一个产品 ID,与“产品”表中有着相同产品 ID 的记录相对应。

在查询中使用相关表时,Access 可以通过关系来确定每个表中的哪些记录可以组合在结果集中。关系还有助于让删除的数据保持同步,从而防止数据缺失。

本文提供了用于创建、编辑和删除关系的分步过程, 还介绍了如何实施参照完整性以禁止创建孤立记录,如何设置联接类型以确定查询结果中包括关系每侧的哪些记录,以及如何设置级联选项以保持参照同步。

本文内容

概述

使用“关系”窗口创建表关系

通过使用“字段列表”窗格添加字段来创建表关系

在 Web 数据库中创建或修改关系

编辑关系

实施参照完整性

删除表关系

概述

在常规 Access 数据库中,可以使用下列方法之一创建表关系:

  • 在“关系”窗口中,添加要关联的表,然后拖动字段以使它们从一个表关联到其他表。

  • 将字段从“字段列表”窗格拖到表的数据表上。

在表之间创建关系时,不要求公共字段具有相同的名称,但实际情况往往是这样。公共字段必须具有相同的数据类型。不过,如果主键字段为“自动编号”字段,并且两个字段的“字段大小”属性相同,则外键字段可以为“数字”字段。例如,如果两个字段的“字段大小”属性都是长整型,则可以将“自动编号”字段与“数字”字段匹配。在两个公共字段都是“数字”字段时,它们必须具有相同的“字段大小”属性设置。

Web 数据库关系

重要: “关系”窗口在 Web 数据库中不可用。

在 Web 数据库中,可以使用查阅和关系向导创建关系: 将新字段添加到其中一个表,新字段将通过查阅现有表来获取其值。

如果要在 Web 数据库中更改关系,请选择相关字段,然后再次运行查阅向导以修改关系。

返回页首

使用“关系”窗口创建表关系

  1. “数据库工具”选项卡上的“关系”组中,单击“关系”

  2. 如果您尚未定义过任何关系,则会自动显示“显示表”对话框。如果未出现该对话框,请在“设计”选项卡上的“关系”组中单击“显示表”

    “显示表”对话框会显示数据库中的所有表和查询。要只查看表,请单击“表”。若要只查看查询,请单击“查询”。若要同时查看表和查询,请单击“两者”

  3. 选择一个或多个表或查询,然后单击“添加”。将表和查询添加到“关系”文档选项卡之后,请单击“关闭”

  4. 将字段(通常为主键)从一个表拖至另一个表中的公共字段(外键)。要拖动多个字段,请按 Ctrl 键,单击每个字段,然后拖动这些字段。

    将显示“编辑关系”对话框。

    “编辑关系”对话框

  5. 验证显示的字段名称是否是关系的公共字段。 如果字段名称不正确,请单击该字段名称并从列表中选择合适的字段。

    要对此关系实施参照完整性,请选中“实施参照完整性”复选框。有关参照完整性的详细信息,请参阅实施参照完整性一节

  6. 单击“创建”

    Access 会在两个表之间绘制一条关系线。 如果已选中“实施参照完整性”复选框,则该线在每端都显示为较粗。 此外,仅当再次选中“实施参照完整性”复选框后,数字“1”才会出现在关系线一侧较粗的部分之上,无限大符号 () 将出现在该线另一侧较粗的部分之上,如下图所示。

将字段从一个表拖至其他表的匹配字段

注释: 

  • 若要创建一对一关系   这两个 (通常主键和外键字段) 的公共字段必须具有唯一索引。这意味着应将这些字段索引属性设置为 (无重复)。如果两个字段都具有唯一索引,Access 将创建一对一关系。

  • 若要创建一个一对多关系   关系的一方 (通常是主键) 的字段必须具有唯一索引。这意味着应将此字段索引属性设置为 (无重复)。多侧字段应具有唯一索引。它可以有索引,但不允许重复。这意味着,应将该字段的索引属性设置为是 (有重复)。如果一个字段具有唯一索引,并且在另一个不,Access 将创建一个一对多关系。

返回页首

通过使用“字段列表”窗格添加字段来创建表关系

可以向在“数据表”视图中打开的现有表中添加字段,方法是将该字段从“字段列表”窗格拖动到该表中。“字段列表”窗格显示相关表中可用的字段以及数据库的其他表中可用的字段。

从其他(无关联)的表中拖动一个字段并完成“查阅向导”时,会在“字段列表”窗格中的表和您将该字段拖至其中的表之间自动创建新的一对多关系。默认情况下,由 Access 创建的这种关系不实施参照完整性。要实施参照完整性,必须对该关系进行编辑。有关详细信息,请参阅编辑表关系部分。

在“数据表”视图中打开表

  • 在导航窗格中,双击表。

打开“字段列表”窗格

  • 按 Alt+F8。随即会显示“字段列表”窗格。

    “字段列表”窗格

字段列表”窗格显示数据库中的所有其他表,它们分成几类。 在数据表视图中处理表时,Access 在“字段列表”窗格中显示以下两个类别中任一类别的字段: “相关表中的可用字段”和“其他表中的可用字段”。 第一个类别列出了与当前正在处理的表有关系的所有表。 第二个类别列出了与您的表没有关系的所有表。

“字段列表”窗格中,单击表名旁边的加号 (+) 时,您会看到该表中所有可用字段的列表。要向您的表中添加一个字段,请将所需字段从“字段列表”窗格拖动到数据表视图中的表中。

添加字段并从“字段列表”窗格中创建关系

  1. 当表在“数据表”视图中打开时,按 Alt+F8。随即会显示“字段列表”窗格。

  2. “其他表中的可用字段”下,单击表名称旁边的加号 (+),以显示该表中的字段列表。

  3. 将所需字段从“字段列表”窗格拖动到数据表视图中打开的表中。

  4. 当插入行出现时,将该字段放到适当位置。

    将启动“查阅向导”

  5. 按照说明完成“查阅向导”

    该字段显示在数据表视图中的表中。

从其他(无关联)的表中拖动一个字段并完成“查阅向导”时,会在“字段列表”中的表和当前正在将字段拖至其中的表之间自动创建新的一对多关系。默认情况下,由 Access 创建的这种关系不实施参照完整性。要实施参照完整性,必须对该关系进行编辑。有关详细信息,请参阅编辑表关系一节。

返回页首

在 Web 数据库中创建或修改关系

要在 Web 数据库中创建关系,您必须使用查阅向导。“关系”窗口在 Web 数据库中不可用。使用一个表中的一个字段作为另一个表中的相关字段中值的源。

注意: 在可以使用查阅向导之前,您用作值的源的字段必须已经存在。

使用查阅向导创建关系

  1. 打开应从其他表中获取其值的表。

  2. 在最后一个字段右侧,单击“单击以添加”,然后单击“查阅和关系”

    可能需要水平滚动才能看到“单击以添加”

  3. 在查阅向导的第一个屏幕上,选择“使用查阅字段获取其他表中的值”,然后单击“下一步”

  4. 选择具有源值的表,然后单击“下一步”

  5. “可用字段”框中,双击具有源值的字段,然后单击“下一步”

  6. 或者,指定查阅字段的排序顺序。单击“下一步”。

  7. 或者,如果值较长,则最好是调整查阅字段的宽度。单击“下一步”。

  8. 为新字段输入名称。如果想要确保两个表中的值始终匹配,请选中“启用数据完整性”复选框,然后单击下列选项之一:

    • 级联删除 – 此选项意味着如果您删除一个表中的记录,则另一个表中的对应记录也会被删除。

    • 限制删除 – 此选项意味着如果您尝试删除一个表中的记录,但是其他表中存在对应记录,则不允许删除操作。

      注意: 当使用查阅向导创建关系时,请不要选择该向导中的“允许多值”

在 Web 数据库中修改关系

  1. 打开从其他表中获取其值的表。

  2. 选择从其他表中获取其值的字段。

  3. “字段”选项卡上的“属性”组中,单击“修改查阅”

  4. 按照向导中的步骤进行所需更改。可以更改下列内容:

    • 值的源字段

    • 值的排序顺序

    • 字段宽度以及是否隐藏键列

    • 查阅字段的标签

    • 是否启用了数据完整性

    • 如果启用了数据完整性,则执行级联删除还是限制删除

返回页首

编辑关系

更改关系的方法是在“关系”窗口中选择表关系,然后对其进行编辑。

  1. 小心放置光标,以使其指向关系线,然后单击该线以将其选中。

    选中关系线时,它会显示得较粗。

  2. 选中关系线后,双击该线。

    - 或 -

    “设计”选项卡上的“工具”组中,单击“编辑关系”

将显示“编辑关系”对话框。

打开“编辑关系”对话框

  1. “数据库工具”选项卡上的“关系”组中,单击“关系”

    将显示“关系”窗口。

    如果您尚未定义过任何关系,这是您第一次打开“关系”窗口,则会出现“显示表”对话框。如果出现该对话框,请单击“关闭”

  2. “设计”选项卡上的“关系”组中,单击“所有关系”

    将显示具有关系的所有表,同时显示关系线。请注意,除非在“导航选项”对话框中选中“显示隐藏对象”,否则不会显示隐藏的表(在表的“属性”对话框中选中“隐藏”复选框的表)及其关系。

  3. 单击要更改的关系的关系线。选中关系线时,它会显示得较粗。

  4. 双击该关系线。

    - 或 -

    在“设计”选项卡上的“工具”组中,单击“编辑关系”。

    将显示“编辑关系”对话框。

    “编辑关系”对话框

  5. 进行更改,然后单击“确定”。

    通过“编辑关系”对话框可以更改表关系。特别需要指出的是,您可以更改关系任意一侧的表或查询,或任意一侧的字段。还可以设置联接类型,或实施参照完整性,以及选择级联选项。有关联接类型以及如何设置联接类型的详细信息,请参阅设置联接类型一节。有关如何实施参照完整性以及选择级联选项的详细信息,请参阅实施参照完整性一节。

设置联接类型

定义表关系时,有关关系的事实可以为查询设计提供信息。例如,如果在两个表之间定义关系,然后创建一个使用这两个表的查询,Access 将根据在关系中指定的字段来自动选择默认匹配字段。可在查询中覆盖这些初始默认值,但该关系提供的值经过验证通常是正确的。在除了最简单的数据库之外的所有数据库中,由于匹配和从多个表中汇聚数据是经常要执行的操作,因此通过创建关系来设置默认值可以节省时间,并且非常有用。

多表查询通过匹配公共字段中的值来组合多个表中的信息。执行匹配和组合的操作称为联接。例如,假设您要显示客户订单。可以创建一个查询,以使“客户”表和“订单”表通过“客户 ID”字段联接起来。查询结果中只包含找到对应匹配的行的客户信息和订单信息。

可为每个关系指定的一个值是联接类型。联接类型通知 Access 要在查询结果中包括哪些记录。例如,再次考虑这样一个查询,它将“客户”表和“订单”表通过代表“客户 ID”的公共字段联接起来。使用默认联接类型(称为内部联接)时,查询只返回公共字段(也称为联接字段)相等的“客户”行和“订单”行。

但是,假设您要包括所有客户 - 即使是尚未下任何订单的客户。要实现此功能,必须将联接类型由内部联接更改为左外部联接。左外部联接将返回关系左侧表中的所有行,以及关系右侧表中的匹配行。右外部联接则返回右侧的所有行,以及左侧的匹配行。 

在这种情况下,“左”和“右”指的是表在“编辑关系”对话框中而不是在“关系”窗口中的位置。

应该先考虑最希望通过在此关系中联接表的查询获取的结果,然后再相应设置联接类型。

设置联接类型

  1. “编辑关系”对话框中,单击“联接类型”

    将显示“联接属性”对话框。

  2. 单击您的选择,然后单击“确定”

下表(使用“客户”和“订单”表)显示了“联接属性”对话框中显示的三种选择、它们使用的联接类型以及为每个表返回所有行还是匹配行。

选择

关系联接

左表

右表

1. 只包括两个表中的联接字段相同的行。

内部联接

匹配行

匹配行

2. 包括“客户”表中的所有记录以及“订单”表中联接字段相同的记录。

左外部联接

所有行

匹配行

3. 包括“订单”表中的所有记录以及“客户”表中联接字段相同的记录。

右外部联接

匹配行

所有行

当您选择选项 2 或选项 3 时,会在关系线上显示一个箭头。此箭头指向只显示匹配行的关系一侧。

在“联接属性”对话框中进行更改

  1. “数据库工具”选项卡上的“关系”组中,单击“关系”

    注意: 如果您尚未定义过任何关系,这是您第一次打开“关系”窗口,则会出现“显示表”对话框。如果出现该对话框,请单击“关闭”

  2. “设计”选项卡上的“关系”组中,单击“所有关系”

  3. 将显示具有关系的所有表,同时显示关系线。请注意,除非在“导航选项”对话框中选中“显示隐藏对象”,否则不会显示隐藏的表(在表的“属性”对话框中选中“隐藏”复选框的表)及其关系。

  4. 单击要更改的关系的关系线。选中关系线时,它会显示得较粗。

  5. 双击该关系线。将显示“编辑关系”对话框。

  6. 单击联接类型.

  7. 在“联接属性”对话框中,单击一个选项,然后单击“确定”。

    1. “联接属性”对话框

  8. 对关系进行任何其他更改,然后单击“确定”。

返回页首

实施参照完整性

参考完整性的用途是防止出现孤立记录 - 参照不再存在的其他记录的记录。实施参照完整性的方法是为表关系启用参照完整性。实施后,Access 将拒绝违反表关系参照完整性的任何操作。这意味着 Access 既拒绝更改参照目标的更新,也拒绝删除参照目标的删除。要让 Access 传播参照更新和删除,以便所有相关行都进行相应更改,请参阅设置级联选项部分。

打开或关闭参照完整性

  1. “数据库工具”选项卡上的“关系”组中,单击“关系”

  2. “设计”选项卡上的“关系”组中,单击“所有关系”

    将显示具有关系的所有表,同时显示关系线。请注意,除非在“导航选项”对话框中选中“显示隐藏对象”,否则不会显示隐藏的表(在表的“属性”对话框中选中“隐藏”复选框的表)及其关系。

  3. 单击要更改的关系的关系线。选中关系线时,它会显示得较粗。

  4. 双击该关系线。将显示“编辑关系”对话框。

  5. 选中或清除“实施参照完整性”

  6. 对关系进行任何其他更改,然后单击“确定”

如果实施参照完整性,以下规则将适用:

  • 如果值在主表的主键字段中不存在,则不能在相关表的外键字段中输入该值 - 否则会创建孤立记录。 

  • 如果某记录在相关表中有匹配记录,则不能从主表中删除它。例如,如果在“订单”表中有分配给某雇员的订单,则不能从“雇员”表中删除该雇员的记录。但通过选中“级联删除相关记录”复选框可以选择在一次操作中删除主记录及所有相关记录。

  • 如果更改主表中的主键值会创建孤立记录,则不能执行此操作。例如,如果在“订单明细”表中为某一订单指定了行项目,则不能更改“订单”表中该订单的编号。但通过选中“级联更新相关字段”复选框可以选择在一次操作中更新主记录及所有相关记录。

    注释: 如果在启用参照完整性时遇到困难,请注意在实施参照完整性时需要满足以下条件:

    • 来自于主表的公共字段必须为主键或具有唯一索引。

    • 公共字段必须具有相同的数据类型。例外的是自动编号字段可与 FieldSize 属性设置为长整型的数字字段相关。

    • 这两个表都存在于同一个 Access 数据库中。不能对链接表实施参照完整性。但是,如果来源表为 Access 格式,则可打开存储这些表的数据库,并在该数据库中启用参照完整性。

设置级联选项

您可能会遇到这样的情况,即需要更改关系一侧的值。在这种情况下,您需要 Access 在一次操作中自动更新所有受影响的行。这样便可完成全部更新,因此数据库不会保留为不一致状态 - 更新一些行,而不更新另外一些行。Access 通过支持“级联更新相关字段”选项避免了这一问题。如果您实施了参照完整性并选择“级联更新相关字段”选项,在您更新主键时,Access 将自动更新参照主键的所有字段。 

您可能还会需要删除一行及所有相关字段,例如,某个运货商记录及其所有相关订单。因此,Access 支持“级联删除相关记录”选项。如果您实施参照完整性并选中“级联删除相关记录”复选框,则当您删除包含主键的记录时,Access 将自动删除参照该主键的所有记录。 

打开或关闭级联更新和/或级联删除

  1. “数据库工具”选项卡上的“关系”组中,单击“关系”

  2. “设计”选项卡上的“关系”组中,单击“所有关系”

    将显示具有关系的所有表,同时显示关系线。请注意,除非在“导航选项”对话框中选中“显示隐藏对象”,否则不会显示隐藏的表(在表的“属性”对话框中选中“隐藏”复选框的表)及其关系。

  3. 单击要更改的关系的关系线。选中关系线时,它会显示得较粗。

  4. 双击该关系线。

    将显示“编辑关系”对话框。

  5. 选中“实施参照完整性”复选框。

  6. 选中“级联更新相关字段”“级联删除相关字段”复选框,或同时选中两者。

  7. 对关系进行任何其他更改,然后单击“确定”

注意: 如果主键是“自动编号”字段,则选中“级联更新相关字段”复选框将不起作用,因为您无法更改“自动编号”字段中的值。

返回页首

删除表关系

重要: 删除关系时,如果启用了参照完整性支持,则同时会删除对该关系的参照完整性支持。因此,Access 将不再自动禁止在关系的“多”侧创建孤立记录。

要删除表关系,必须在“关系”窗口中删除关系线。放置光标,使其指向关系线,然后单击该线。选中关系线时,它会显示得较粗。在选中关系线的情况下,按 Delete。

  1. “数据库工具”选项卡上的“关系”组中,单击“关系”

  2. “设计”选项卡上的“关系”组中,单击“所有关系”

    将显示具有关系的所有表,同时显示关系线。请注意,除非在“导航选项”对话框中选中“显示隐藏对象”,否则不会显示隐藏的表(在表的“属性”对话框中选中“隐藏”复选框的表)及其关系。

  3. 单击要删除的关系的关系线。选中关系线时,它会显示得较粗。

  4. 按 Delete 键。

  5. Access 可能会显示消息“确实要从数据库中永久删除选中的关系吗?”。如果出现此确认消息,请单击“是”

注意: 如果表关系中使用的任何一个表正在使用中 - 可能正在被其他人或进程使用,或在打开的数据库对象(例如窗体)中,您将无法删除该关系。必须将使用这些表的所有已打开对象全部关闭,才能删除该关系。  

返回页首

注意: 机器翻译免责声明:本文是由无人工介入的计算机系统翻译的。Microsoft 提供机器翻译是为了帮助非英语国家/地区用户方便阅读有关 Microsoft 产品、服务和技术的内容。由于机器翻译的原因,本文可能包含词汇、语法或文法方面的错误。

扩展你的技能
了解培训
抢先获得新功能
加入 Office 预览体验计划

此信息是否有帮助?

谢谢您的反馈!

谢谢你的反馈! 可能需要转接到 Office 支持专员。

×