Access 中的关系可帮助你将两张不同的表中的数据组合在一起。 每个关系都由具有对应数据的两张表中的字段构成。 例如,您的“产品”表和“订单明细”表中都有一个“产品ID”字段。 “订单明细”表中的每条记录都有一个产品 ID,与“产品”表中有着相同产品 ID 的记录相对应。
在查询中使用相关表时,Access 可以通过关系来确定每个表中的哪些记录可以组合在结果集中。 关系还可保证已删除的数据始终同步,从而帮助避免数据缺失,而这被称为引用完整性。
本文内容
概述
在 Access 数据库中,使用下述方法之一创建表关系:
-
在“关系”窗口中,添加要关联的表,然后拖动字段以使它们从一个表关联到其他表。
-
将字段从“字段列表”窗格拖到表的数据表上。
在表之间创建关系时,不要求公共字段具有相同的名称,但实际情况往往是这样。 公共字段必须具有相同的数据类型。 不过,如果主键字段为“自动编号”字段,并且两个字段的“字段大小”属性相同,则外键字段可以为“数字”字段。 例如,如果两个字段的“字段大小”属性都是长整型,则可以将“自动编号”字段与“数字”字段匹配。 在两个公共字段都是“数字”字段时,它们必须具有相同的“字段大小”属性设置。
使用“关系”窗口创建表关系
-
在“数据库工具”选项卡上的“关系”组中,单击“关系”。
-
在“ 关系设计 ”选项卡上的“ 关系” 组中,单击“ 添加表”。
-
选择一个或多个表或查询,然后单击“添加”。 将表和查询添加到“关系”文档选项卡之后,请单击“关闭”。
-
将字段(通常为主键)从一个表拖至另一个表中的公共字段(外键)。 要拖动多个字段,请按 Ctrl 键,单击每个字段,然后拖动这些字段。
将显示“编辑关系” 对话框。 -
验证显示的字段名称是否是关系的公共字段。 如果字段名称不正确,请单击该字段名称并从列表中选择合适的字段。实施参照完整性部分。
要对此关系实施参照完整性,请选中“实施参照完整性”复选框。 有关参照完整性的详细信息,请参阅 -
单击“创建”。
Access 会在两个表之间绘制一条关系线。 如果已选中“实施参照完整性”复选框,则该线两端都显示为较粗。 此外,还是仅当选中“实施参照完整性”复选框后,数字 1 才会出现在关系线一端较粗的部分上,无限大符号 (∞) 将出现在该线另一端较粗的部分上,如下图所示。
注意:
-
创建一对一关系 两个常用字段(通常是主键和外键字段)都必须具有唯一索引。 这意味着这些字段的 Indexed 属性应设为“是”(无重复项)。 如果这两个字段都具有唯一索引,则 Access 会创建一对一关系。
-
创建一对多关系 关系“一”侧的字段(通常是主键)必须具有唯一索引。 这意味着此字段的 Indexed 属性应设为“是”(无重复项)。 “多”侧的字段不得具有唯一索引。 它可具有索引,但必须允许存在重复项。 这意味着此字段的 Indexed 属性应设为“否”或“是”(允许重复项)。 如果一个字段具有唯一索引,而另一个没有,则 Access 会创建一对多关系。
-
通过使用“字段列表”窗格添加字段来创建表关系
可以向在“数据表”视图中打开的现有表中添加字段,方法是将该字段从“字段列表”窗格拖动到该表中。 “字段列表”窗格显示相关表中可用的字段以及数据库的其他表中可用的字段。
从其他(无关联)的表中拖动一个字段并完成“查阅向导”时,会在“字段列表”窗格中的表和您将该字段拖至其中的表之间自动创建新的一对多关系。 默认情况下,由 Access 创建的这种关系不实施参照完整性。 要实施参照完整性,必须对该关系进行编辑。 有关详细信息,请参阅编辑关系部分。
在“数据表”视图中打开表
-
在导航窗格中,双击表。
打开“字段列表”窗格
-
按 Alt+F8。 显示“字段列表”窗格。
“字段列表”窗格显示数据库中的所有其他表,它们分成几类。 在数据表视图中处理表时,Access 在“字段列表”窗格中显示以下两个类别中任一类别的字段:“相关表中的可用字段”和“其他表中的可用字段”。 第一个类别列出了与当前正在处理的表有关系的所有表。 第二个类别列出了与您的表没有关系的所有表。
在“字段列表”窗格中,单击表名称旁边的加号 (+) 时,您会看到该表中所有可用字段的列表。 要向您的表中添加字段,请将所需字段从“字段列表”窗格拖动到“数据表”视图中的表中。
添加字段并从“字段列表”窗格中创建关系
-
当表在“数据表”视图中打开时,按 Alt+F8。 随即会显示“字段列表”窗格。
-
在“其他表中的可用字段”下,单击表名称旁边的加号 (+),以显示该表中的字段列表。
-
将所需字段从“字段列表”窗格拖动到“数据表”视图中打开的表中。
-
当插入行出现时,将该字段放到适当位置。
将启动“查阅向导”。
-
按照说明完成“查阅向导”。
该字段显示在“数据表”视图中的表中。
从其他(无关联)的表中拖动一个字段并完成“查阅向导”时,会在“字段列表”窗格中的表和您将该字段拖至其中的表之间自动创建新的一对多关系。 默认情况下,由 Access 创建的这种关系不实施参照完整性。 要实施参照完整性,必须对该关系进行编辑。 有关详细信息,请参阅编辑关系部分。
编辑关系
更改关系的方法是在“关系”窗口中选择表关系,然后对其进行编辑。
-
小心放置光标,以使其指向关系线,然后单击该线以将其选中。
选中关系线时,它会显示得较粗。
-
选中关系线后,双击该线。
- 或 -
在“ 关系设计 ”选项卡上的“ 工具” 组中,单击“ 编辑关系”。
将显示“编辑关系”对话框。
打开“编辑关系”对话框
-
在“数据库工具”选项卡上的“关系”组中,单击“关系”。
-
在“ 关系设计 ”选项卡上的“ 关系” 组中,单击“ 所有关系”。
将显示具有关系的所有表,同时显示关系线。 请注意,除非在“导航选项”对话框中选中“显示隐藏对象”,否则不会显示隐藏的表(在表的“属性”对话框中选中“隐藏”复选框的表)及其关系。
-
单击要更改的关系的关系线。 选中关系线时,它会显示得较粗。
-
双击该关系线。
- 或 -
在“ 关系设计 ”选项卡上的“ 工具” 组中,单击“ 编辑关系”。
将显示“编辑关系”对话框。
-
进行更改,然后单击“确定”。
通过“编辑关系”对话框可以更改表关系。 特别需要指出的是,您可以更改关系任意一侧的表或查询,或任意一侧的字段。 还可以设置联接类型,或实施参照完整性,以及选择级联选项。 有关联接类型以及如何设置联接类型的详细信息,请参阅设置联接类型部分。 有关如何实施参照完整性以及选择级联选项的详细信息,请参阅实施参照完整性部分。
设置联接类型
定义表关系时,有关关系的事实可以为查询设计提供信息。 例如,如果在两个表之间定义关系,然后创建一个使用这两个表的查询,Access 将根据在关系中指定的字段来自动选择默认匹配字段。 可在查询中覆盖这些初始默认值,但该关系提供的值经过验证通常是正确的。 在除了最简单的数据库之外的所有数据库中,由于匹配和从多个表中汇聚数据是经常要执行的操作,因此通过创建关系来设置默认值可以节省时间,并且非常有用。
多表查询通过匹配公共字段中的值来组合多个表中的信息。 执行匹配和组合的操作称为联接。 例如,假设您要显示客户订单。 可以创建一个查询,以使“客户”表和“订单”表通过“客户 ID”字段联接起来。 查询结果中只包含找到对应匹配的行的客户信息和订单信息。
可为每个关系指定的一个值是联接类型。 联接类型通知 Access 要在查询结果中包括哪些记录。 例如,再次考虑这样一个查询,它将“客户”表和“订单”表通过代表“客户 ID”的公共字段联接起来。 使用默认联接类型(称为内部联接)时,查询只返回公共字段(也称为联接字段)相等的“客户”行和“订单”行。
但是,假设您要包括所有客户 — 即使是尚未下任何订单的客户。 要实现此功能,必须将联接类型由内部联接更改为左外部联接。 左外部联接将返回关系左侧表中的所有行,以及关系右侧表中的匹配行。 右外部联接则返回右侧的所有行,以及左侧的匹配行。
注意: 在这种情况下,“左”和“右”指的是表在“编辑关系”对话框中而不是在“关系”窗口中的位置。
应该先考虑最希望通过在此关系中联接表的查询获取的结果,然后再相应设置联接类型。
设置联接类型
-
在“编辑关系”对话框中,单击“联接类型”。
将显示“联接属性”对话框。
-
选择你的选择,然后单击“ 确定”。
下表(使用“客户”和“订单”表)显示了“联接属性”对话框中显示的三种选择、它们使用的联接类型以及为每个表返回所有行还是匹配行。
选项 |
关系联接 |
左表 |
右表 |
---|---|---|---|
1. 只包括两个表中的联接字段相同的行。 |
内部联接 |
匹配行 |
匹配行 |
2. 包括“客户”表中的所有记录以及“订单”表中联接字段相同的记录。 |
左外部联接 |
所有行 |
匹配行 |
3. 包括“订单”表中的所有记录以及“客户”表中联接字段相同的记录。 |
右外部联接 |
匹配行 |
所有行 |
当您选择选项 2 或选项 3 时,会在关系线上显示一个箭头。 此箭头指向只显示匹配行的关系一侧。
在“联接属性”对话框中进行更改
-
在“数据库工具”选项卡上的“关系”组中,单击“关系”。
-
在“ 关系设计 ”选项卡上的“ 关系” 组中,单击“ 所有关系”。
将显示具有关系的所有表,同时显示关系线。 请注意,除非在“导航选项”对话框中选中“显示隐藏对象”,否则不会显示隐藏的表(在表的“属性”对话框中选中“隐藏”复选框的表)及其关系。 -
单击要更改的关系的关系线。 选中关系线时,它会显示得较粗。
-
双击该关系线。 将显示“编辑关系”对话框。
-
单击“联接类型”。
-
在“ 联接属性 ”对话框中,选择一个选项,然后单击“ 确定”。
-
对关系进行任何其他更改,然后单击“确定”。
实施参照完整性
参考完整性的用途是防止出现孤立记录 - 参照不再存在的其他记录的记录。 实施参照完整性的方法是为表关系启用参照完整性。 实施后,Access 将拒绝违反表关系参照完整性的任何操作。 这意味着 Access 既拒绝更改参照目标的更新,也拒绝删除参照目标的删除。 要让 Access 传播参照更新和删除,以便所有相关行都进行相应更改,请参阅设置级联选项部分。
打开或关闭参照完整性
-
在“数据库工具”选项卡上的“关系”组中,单击“关系”。
-
在“ 关系设计 ”选项卡上的“ 关系” 组中,单击“ 所有关系”。
将显示具有关系的所有表,同时显示关系线。 请注意,除非在“导航选项”对话框中选中“显示隐藏对象”,否则不会显示隐藏的表(在表的“属性”对话框中选中“隐藏”复选框的表)及其关系。 -
单击要更改的关系的关系线。 选中关系线时,它会显示得较粗。
-
双击该关系线。 将显示“编辑关系”对话框。
-
选中或清除“实施参照完整性”。
-
对关系进行任何其他更改,然后单击“确定”。
如果实施参照完整性,以下规则将适用:
-
如果值在主表的主键字段中不存在,则不能在相关表的外键字段中输入该值 - 否则会创建孤立记录。
-
如果某记录在相关表中有匹配记录,则不能从主表中删除它。 例如,如果在“订单”表中有分配给某雇员的订单,则不能从“雇员”表中删除该雇员的记录。 但通过选中“级联删除相关记录”复选框可以选择在一次操作中删除主记录及所有相关记录。
-
如果更改主表中的主键值会创建孤立记录,则不能执行此操作。 例如,如果在“订单明细”表中为某一订单指定了行项目,则不能更改“订单”表中该订单的编号。 但通过选中“级联更新相关字段”复选框可以选择在一次操作中更新主记录及所有相关记录。
注意: 如果在启用参照完整性时遇到困难,请注意在实施参照完整性时需要满足以下条件:
-
来自于主表的公共字段必须为主键或具有唯一索引。
-
公共字段必须具有相同的数据类型。 例外情况是自动编号字段可与“字段大小”属性设置为“长整型”的数字字段相关。
-
这两个表都存在于同一个 Access 数据库中。 不能对链接表实施参照完整性。 但是,如果来源表为 Access 格式,则可打开存储这些表的数据库,并在该数据库中启用参照完整性。
-
设置级联选项
您可能会遇到这样的情况,即需要更改关系一侧的值。 在这种情况下,您需要 Access 在一次操作中自动更新所有受影响的行。 这样,便可进行完整更新,以便数据库不会出现不一致的状态(即更新某些行,不更新其他行)。 Access 通过支持“级联更新相关字段”选项避免了这一问题。 如果您实施了参照完整性并选择“级联更新相关字段”选项,在您更新主键时,Access 将自动更新参照主键的所有字段。
您可能还需要删除一行及所有相关记录,例如,某个运货商记录及其所有相关订单。 因此,Access 支持“级联删除相关记录”选项。 如果您实施参照完整性并选中“级联删除相关记录”复选框,则当您删除包含主键的记录时,Access 将自动删除参照该主键的所有记录。
打开或关闭级联更新和/或级联删除
-
在“数据库工具”选项卡上的“关系”组中,单击“关系”。
-
在“ 关系设计 ”选项卡上的“ 关系” 组中,单击“ 所有关系”。
将显示具有关系的所有表,同时显示关系线。 请注意,除非在“导航选项”对话框中选中“显示隐藏对象”,否则不会显示隐藏的表(在表的“属性”对话框中选中“隐藏”复选框的表)及其关系。 -
单击要更改的关系的关系线。 选中关系线时,它会显示得较粗。
-
双击该关系线。
将显示“编辑关系” 对话框。 -
选中“实施参照完整性”复选框。
-
选中“级联更新相关字段”或“级联删除相关字段”复选框,或同时选中这两者。
-
对关系进行任何其他更改,然后单击“确定”。
注意: 如果主键是“自动编号”字段,则选中“级联更新相关字段”复选框将不起作用,因为您无法更改自动编号字段中的值。
删除表关系
重要: 删除关系时,如果启用了参照完整性支持,则同时会删除对该关系的参照完整性支持。 因此,Access 将不再自动禁止在关系的“多”侧创建孤立记录。
要删除表关系,必须在“关系”窗口中删除关系线。 放置光标,使其指向关系线,然后单击该线。 选中关系线时,它会显示得较粗。 在选中关系线的情况下,按 Delete。
-
在“数据库工具”选项卡上的“关系”组中,单击“关系”。
-
在“ 关系设计 ”选项卡上的“ 关系” 组中,单击“ 所有关系”。
将显示具有关系的所有表,同时显示关系线。 请注意,除非在“导航选项”对话框中选中“显示隐藏对象”,否则不会显示隐藏的表(在表的“属性”对话框中选中“隐藏”复选框的表)及其关系。 -
单击要删除的关系的关系线。 选中时,关系线加粗显示。
-
按 Delete 键。
-
Access 可能会显示消息“确实要从数据库中永久删除选中的关系吗?”。 如果出现此确认消息,请单击“是”。
注意: 如果表关系中使用的任何一个表正在使用中 - 可能正在被其他人或进程使用,或在打开的数据库对象(例如窗体)中,您将无法删除该关系。 必须将使用这些表的所有已打开对象全部关闭,才能删除该关系。