创建、编辑或删除关系

创建、编辑或删除关系

Access 中的关系可帮助你将两张不同的表中的数据组合在一起。 每个关系都由具有对应数据的两张表中的字段构成。 例如,您的“产品”表和“订单明细”表中都有一个“产品ID”字段。 “订单明细”表中的每条记录都有一个产品 ID,与“产品”表中有着相同产品 ID 的记录相对应。

在查询中使用相关表时,Access 可以通过关系来确定每个表中的哪些记录可以组合在结果集中。 关系还可保证已删除的数据始终同步,从而帮助避免数据缺失,而这被称为引用完整性。

在使用关系之前,请确保你理解背景概念。 有关详细信息,请参阅表关系指南表关系入门

本文内容

概述

在 Access 数据库中,使用下述方法之一创建表关系:

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

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

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

返回页首

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

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

  2. 请在“设计”选项卡上的“关系”组中单击“添加表”(或在Access 2013中“显示表”)。

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

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

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

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

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

  6. 单击“创建”

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

    将一张表中的字段拖动到另一张表中相匹配的字段。

    注意: 

    • 创建一对一关系    两个常用字段(通常是主键和外键字段)都必须具有唯一索引。 这意味着这些字段的 Indexed 属性应设为“(无重复项)。 如果这两个字段都具有唯一索引,则 Access 会创建一对一关系。

    • 创建一对多关系    关系“一”侧的字段(通常是主键)必须具有唯一索引。 这意味着此字段的 Indexed 属性应设为“(无重复项)。 “多”侧的字段得具有唯一索引。 它可具有索引,但必须允许存在重复项。 这意味着此字段的 Indexed 属性应设为“”或“是”(允许重复项)。 如果一个字段具有唯一索引,而另一个没有,则 Access 会创建一对多关系。

返回页首

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

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

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

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

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

打开“字段列表”窗格

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

    “字段列表”窗格

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

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

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

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

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

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

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

    将启动“查阅向导”

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

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

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

返回页首

编辑关系

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

  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. 对关系进行任何其他更改,然后单击“确定”

返回页首

实施参照完整性

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

打开或关闭参照完整性

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

设置级联选项

您可能会遇到这样的情况,即需要更改关系一侧的值。 在这种情况下,您需要 Access 在一次操作中自动更新所有受影响的行。 这样,便可进行完整更新,以便数据库不会出现不一致的状态(即更新某些行,不更新其他行)。 Access 通过支持“级联更新相关字段”选项避免了这一问题。 如果您实施了参照完整性并选择“级联更新相关字段”选项,在您更新主键时,Access 将自动更新参照主键的所有字段。

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

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

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

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

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

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

  4. 双击该关系线。

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

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

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

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

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

返回页首

删除表关系

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

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

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

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

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

  3. 单击要删除的关系的关系线。 选中时,关系线加粗显示。

  4. 按 Delete 键。

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

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

返回页首

在 Access Web 应用中使用关系时存在重大的区别。

“关系”窗口在 Access Web 应用中不可用。 不必在 Access Web 应用中创建关系,可以创建从另一个表中的相关字段获取值的查阅字段。 例如,假设你有一个“员工”表,并且想要向“区域”表添加查阅,以便显示每位员工的工作区域。

注意: 在创建查阅字段前,查阅将用作值的源的字段必须已经存在。

下面介绍如何在 Access Web 应用中创建查阅字段:

  1. 通过在导航中双击表,打开要在其中创建新的查找字段的表。 (提示:可能需要单击“开始”> 导航窗格 以查看可用的表。)

    在上述示例中,单击“员工”表。

  2. 在表的最后一个字段的正下方的“字段名称”列中单击并键入新的查阅字段的名称。

    在该示例中,键入“区域”作为字段名称。

  3. 在“数据类型”列中,单击箭头并选择“查阅”。

    设置查找字段的查找数据类型

    将启动“查阅向导”。

  4. 在“查阅向导”的第一页上,选择“我希望查阅字段从另一个表或查询中获取值”。 对话框中将显示更多选项。

  5. 选择应为查阅提供值的表或查询的名称。

    在该示例中,选择“表:区域”。

    查找向导中可供选择的选项

    (与所使用示例相对应的映像中的表名称。)

  6. 选择该表之后,请使用“希望在查阅中显示哪个值”列表选择要用作查阅字段的显示值的字段。 默认情况下,Access 将选择它可以在选定表中找到的第一个文本字段。

    在该示例中,应保留选定字段“标题”作为显示值。

  7. 如果需要,请使用“是否希望对查阅中的项目进行排序”列表设置排序。

  8. 在 [从“区域”表中删除记录时会发生什么情况] 下,设置要在两张表之间设置的关系类型,并设置是否要强制执行引用完整性。 (该问题中的表名称取决于你在步骤 5 中所选的表。)

    查阅向导默认为“如果‘员工’表中存在对应记录则阻止删除”,因为这在大多数情况下是最安全的选项。 在示例中,此选项意味着如果该区域正在“员工”表中的记录中使用,则不能从“地区”表中删除值。 因此,如果员工记录使用某区域(如“西部”),而你尝试从“区域”表中删除“西部”,则 Access 将阻止你将其删除。 在这种情况下,在可以从“区域”表中删除“西部”之前,需要将使用该值的所有员工记录重置为其他内容。 最后一个选项可以在本示例中使用,因为它允许你从“区域”表中删除“西部”。 区域值将自动从设置为“西部”的员工记录中删除,将该值留空。 选择第二个选项将从“员工”表中删除区域设置为“西部”的所有员工记录。 这称为“级联删除”,删除的数据比示例中需要的数据要多。 选择该选项时应十分谨慎。

不可在 Access Web 应用中使用“关系”窗口。 使用一个表中的一个字段作为另一个表中的相关字段中值的源(查阅字段)。

  1. 单击“编辑表”,打开包含要更改的查阅的表。

    编辑表

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

  3. 在“设计”选项卡上的“表格工具”下,单击“修改查阅”。

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

    • 值的源字段

    • 值的排序顺序

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

    • 查阅字段的标签

    • 是否启用了数据完整性

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

“关系”窗口在 Access Web 应用中不可用。 使用一个表中的一个字段作为另一个表中的相关字段中值的源(查阅字段)。 要在 Access Web 应用中删除两个表之间的关系,需要删除查阅字段及其相关数据。

  1. 单击“编辑表”,打开包含要删除的查阅字段的表。

    编辑表

  2. 选择从 Web 应用中的其他表获取其值的查阅字段。

  3. 在“设计”选项卡上的“表格工具”下,单击“删除字段”。

  4. Access 会显示消息“要永久性删除所选字段及字段中的所有数据吗?”单击“”,确认删除查阅字段及其数据。

    注意: Access 可能还会提示你在删除查阅字段时删除一个或多个索引。 如果出现此确认消息,单击“”。

  5. 单击“保存”,保存表设计更改。

返回页首

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    • 值的源字段

    • 值的排序顺序

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

    • 查阅字段的标签

    • 是否启用了数据完整性

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

返回页首

另请参阅

向表添加查阅字段

什么是“关系”窗口?

比较 Access 中的两个表并只查找匹配的数据

需要更多帮助?

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

此信息是否有帮助?

×