使用 Microsoft 登录
登录或创建帐户。
你好,
使用其他帐户。
你有多个帐户
选择要登录的帐户。

之所以需要良好的数据库设计,目标之一就是为了消除数据冗余(重复数据)。 为了实现该目标,可将数据拆分为多个基于主题的表,以使每个数据只显示一次。 然后,通过在相关表中放置公共字段来为 Access 提供将拆分的信息组合到一起 的方法。 但是,若要正确执行该步骤,必须了解表之间的关系,然后在数据库中指定这些关系。

本文内容

简介

在数据库中为每个主题创建一个表后,必须为 Access 提供在需要时将这些信息重新组合到一起的方法。 具体方法是在相关的表中放置公共字段,并定义表之间的关系。 然后,可以创建查询、窗体和报表,以同时显示几个表中的信息。 例如,下面显示的窗体包含来自几个表的信息:

同时显示来自五个表的相关信息的“订单”窗体

1. 此窗体中的信息来自“客户”表...

2. ...“订单”表...

3. ...“产品”表...

4. ...和“订单明细”表。

“受票方”框中的客户名称是从“客户”表中检索到的,“订单 ID”和“订单日期”值来自“订单”表,“产品名称”来自“产品”表,“单价”和“数量”值来自“订单明细”表。 这些表以多种方式互相链接在一起,以便将各自的信息呈现到窗体中。

在上述示例中,表中的各个字段必须互相协调,这样它们才能显示有关相同订单的信息。 这种协调是使用表之间的关系来实现的。 表关系是通过匹配键字段中的数据来运作的 ,键字段通常是两个表中使用相同名称的字段。 在大多数情况下,这些匹配字段是其中一个表的主键(它为每条记录提供唯一标识符),并且是另一个表的外键。 例如,通过在“员工”和“订单”表的“员工 ID”字段之间创建表关系,可以将员工和他们负责的订单相关联。

“员工 ID”在“员工”表中用作主键,在“订单”表中用作外键。

1. “员工 ID”出现在两个表 中,一个是主键...

2. ...一个是外键。

返回页首

表关系的类型

Access 中有三种类型的表关系。

  • 一对多关系

    我们使用包含“客户”表和“订单”表的订单跟踪数据库作为示例。 客户可以下任意数量的订单。 因此,对于“客户”表中表示的任何客户,相应“订单”表中可能会有许多订单。 “客户”表和“订单”表之间的关系是一对多关系。

    为了在数据库设计中表示一对多关系,请获取关系“一”方的主键,并将其作为附加的一个或多个字段添加到关系“多”方的表中。 例如在本例中,可将一个新字段 (即“客户”表中的 ID 字段) 添加到“订单”表中,并将其命名为“客户 ID”。 Access 随后即可使用“订单”表中的“客户 ID”号来查找每个订单的正确客户。

  • 多对多关系

    现在,我们来看一下“产品”表和“订单”表之间的关系。 单个订单中可以包含多个产品。 另一方面,一个产品可能出现在多个订单中。 因此,对于“订单”表中的每条记录,都可能与“产品”表中的多条记录对应。 此外,对于“产品”表中的每条记录,都可以与“订单”表中的多条记录对应。 此关系称为多对多关系。 请注意,为了检测到表之间的现有多对多关系,务必考虑关系的双方。

    要表示多对多关系,您必须创建第三个表,该表通常称为联接表,它将多对多关系划分为两个一对多关系。 将这两个表的主键都插入到第三个表中。 因此,第三个表记录关系的每个匹配项或实例。 例如,“订单”表和“产品”表有一种多对多的关系,这种关系是通过与“订单明细”表建立两个一对多关系来定义的。 一个订单可以有多个产品,每个产品可以出现在多个订单中。

  • 一对一关系

    在一对一关系中,第一个表中的每条记录在第二个表中只有一个匹配记录,而第二个表中的每条记录在第一个表中只有一个匹配记录。 这种关系并不常见,因为通常以此方式相关的信息都存储在同一个表中。 可以使用一对一关系将一个表分成许多字段,或出于安全原因隔离表中的部分数据,或存储仅应用于主表的子集的信息。 标识此类关系时,这两个表必须共享一个公共字段。

返回页首

为什么创建表关系?

您可以使用“关系”窗口或从“字段列表”窗格中拖动字段来显式创建表关系。 当需要在数据库对象中使用表时, Access 会使用表关系来确定如何联接这些表。 应该在创建其他数据库对象(如窗体、查询和报表)之前创建表关系,这样做有以下几个原因:

  • 表关系可为查询设计提供信息

    若要使用多个表中的记录,通常必须创建联接这些表的查询。 查询的工作方式为将第一个表主键字段中的值与第二个表的外键字段进行匹配。 例如,若要返回列出每个客户所有订单的行,您需要构建一个查询,该查询基于“客户 ID”字段将“客户”表与“订单”表联接起来。 在“关系”窗口中,可以手动指定要联接的字段。 但是,如果已经定义了表间的关系,Access 会基于现有表关系提供默认联接。 此外,如果使用其中一个查询向导,Access 会使用从已定义的表关系中收集的信息为您提供可能的选择,并用适当的默认值预填充属性设置。

  • 表关系可为窗体和报表设计提供信息

    在设计窗体或报表时,Access 会使用从已定义的表关系中收集的信息为您提供可能的选择,并用适当的默认值预填充属性设置。

  • 可以将表关系作为基础来实施参照完整性,这样有助于防止数据库中出现孤立记录。 孤立记录指的是这样的一些记录:它所参照的其他记录根本不存在, 例如参照不存在的客户记录的订单记录。

    在设计数据库时,您将信息拆分为表,每个表都有一个主键。 然后,您向相关表中添加参照这些主键的外键。 这些外键-主键对构成了表关系和多表查询的基础。 这些外键-主键参照保持同步非常重要。 参照完整性依赖于表关系,有助于确保参照保持同步。

返回页首

了解参照完整性

在设计数据库时,您将数据库信息拆分为许多基于主题的表,以最大限度地降低数据冗余。 然后,您通过在相关表中放置公共字段来为 Access 提供将数据重新组合到一起的方法。 例如,为表示一对多关系,您从“一方”表中获得主键,将其作为附加字段添加到“多方”表。 若要将数据重新组合到一起,Access 获得“多方”表中的值,并在“一方”表中查找相应的值。 通过这种方法,“多方”表中的值参照“一方”表中相应的值。

假设“运货商”和“订单”之间存在一对多关系,您希望删除一个运货商。 如果要删除的运货商在“订单”表中具有订单,则删除该运货商记录后,这些订单将成为“孤立记录”。 这些订单仍然包含运货商 ID,但该 ID 不再有效,因为它所参照的记录不再存在。

参照完整性的目的是防止出现孤立记录并使参照保持同步,以使这种假设的情况永远不会发生。

实施参照完整性的方法是为表关系启用参照完整性。 实施后,Access 将拒绝违反此表关系参照完整性的任何操作。 这意味着 Access 会拒绝更改参照目标的更新操作,也会拒绝删除参照目标的删除操作。 您可能确实需要更改某个运货商的主键,而该运货商在“订单”表中有订单。 在此类情况下,您真正需要的是 Access 在一次操作中自动更新所有受影响的行。 这样,Access 可以确保进行完整更新,以便数据库不会出现不一致的状态(即更新某些行,不更新其他行)。 因此, Access 支持 级联更新相关字段 选项。 如果您实施了参照完整性并选择“级联更新相关字段”选项,在您更新主键时,Access 将自动更新参照主键的所有字段。

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

返回页首

查看表关系

要查看表关系,请单击“数据库工具”选项卡上的“关系”。 将打开“关系”窗口,并显示所有现存的关系。 如果尚未定义表关系,并且您是第一次打开“关系”窗口,则 Access 会提示您向窗口中添加表或查询。

打开“关系”窗口

  1. 单击“ 文件”,单击“ 打开”,然后选择并打开数据库。

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

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

    这会在数据库中显示所有已定义的关系。 请注意,除非在“导航选项”对话框中选中了“显示隐藏对象”复选框,否则不会显示隐藏的表(在表的“属性”对话框中选中“隐藏”复选框的表)及其关系。

表关系由“关系”窗口中表之间绘制的关系线表示。 不实施参照完整性的关系在支持该关系的公共字段之间显示为细线。 单击关系线选择关系时,该线变粗指示它被选中。 如果对此关系实施参照完整性,则该线在两端都会变粗。 此外,在关系一侧线条较粗部分上会显示数字“1”,而在另一侧线条较粗部分上会显示无限大符号 ()。

在“关系”窗口处于活动状态时,可以选择功能区中的以下命令:

在“ 关系设计 ”选项卡上的“ 工具” 组中:

  • 编辑关系 打开“编辑关系”对话框。 在选择关系线时,可以单击“编辑关系”以更改表关系。 也可以双击关系线。

  • 清除布局 从“关系”窗口中删除所有显示的表和关系。 请注意,该命令只隐藏这些表和关系, 而不会删除它们。

  • 关系报表 创建显示数据库中的表和关系的报表。 该报表只显示“关系”窗口中未隐藏的表和关系。

在“ 关系设计 ”选项卡上的“ 关系” 组中:

  • 添加表    启用要显示在“关系”窗口中的表的选择。

  • 隐藏表 隐藏“关系”窗口中的所选表。

  • 直接关系 在“关系”窗口中显示所选表的所有关系和相关表(如果尚未显示)。

  • 所有关系 在“关系”窗口中显示数据库中所有关系和相关表。 请注意,除非在“导航选项”对话框中选中“显示隐藏对象”,否则不会显示隐藏的表(在表的“属性”对话框中选中“隐藏”复选框的表)及其关系。

  • 关闭 关闭“关系”窗口。 如果对“关系”窗口的布局进行了任何更改,则会询问您是否保存这些更改。

返回页首

需要更多帮助?

需要更多选项?

了解订阅权益、浏览培训课程、了解如何保护设备等。

社区可帮助你提出和回答问题、提供反馈,并听取经验丰富专家的意见。

此信息是否有帮助?

你对语言质量的满意程度如何?
哪些因素影响了你的体验?
按“提交”即表示你的反馈将用于改进 Microsoft 产品和服务。 你的 IT 管理员将能够收集此数据。 隐私声明。

谢谢您的反馈!

×