表关系指南

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

一个好的数据库设计的目标是消除数据冗余 (重复数据)。若要实现该目标,您将您的数据分成多个基于主题的表,以便仅一次表示每个事实。然后将拆分的信息重新的方法中提供访问-您执行此操作通过相关的表中放置公共字段。若要执行此步骤正确,但是,您必须首先了解您的表之间的关系,然后指定这些关系数据库中。

有关详细信息,请参阅文章数据库设计基础

本文不介绍 web 数据库中的关系。Web 数据库不支持关系窗口。使用查阅字段来创建 web 数据库中的关系。有关详细信息,请参阅生成可在 Web 上共享数据库一文。

本文内容

简介

表关系的类型

为什么创建表关系?

了解参照完整性

查看表关系

创建表关系

删除表关系

更改表关系

实施参照完整性

简介

数据库中的每个主题创建表格后,必须将 Access 提供在需要时将该信息重新组合在一起的方法。您执行此操作,相关的表中放置公共字段和定义表之间的关系。然后,您可以创建查询、 窗体和报表显示来自多个表的信息。例如,下面显示的窗体包括来自几个表的信息 ︰

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

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

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

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

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

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

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

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

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

2. ...一个是外键。

返回页首

表关系的类型

有三种类型的表关系。

  • 一对多关系

    请考虑订单跟踪数据库,包括客户表和订单表。客户可以将添加任意数量的订单。是这样,任何客户表中表示的客户,可以有多个订单表中表示的订单。客户表和订单表之间的关系,因此,是一个一对多关系。

    表示-一对多关系数据库设计中,采用关系的"一"方的主键和将其作为其他字段或域添加到关系的"多"方表中。在此例中,例如,添加新字段-客户表中的 ID 字段 — 到订单表并将其命名客户 id。Access 可以再使用的客户 ID 号订单表中以找到正确的每个订单的客户。

  • 多对多关系

    请考虑产品表和订单表之间的关系。单个订单可以包含多个产品。另一方面,单个产品可以出现在多个订单。因此,订单表中的每条记录,可以有许多记录在产品表中。此外,在产品表中每条记录,可以有许多记录中订单表。这种关系称为多对多关系,因为任何产品,可以有多个订单,然后按任何顺序,对于可能有许多产品。请注意,检查表之间的现有多对多关系,务必要考虑的关系的两面。

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

  • 一对一关系

    一对一关系,在第一个表中的每个记录可以仅有一个匹配记录的第二个表中,,然后在第二个表中的每条记录可以仅有一个匹配记录的第一个表。此类型的关系不常见,因为在大多数情况下,将以这种方式相关的信息存储在同一个表。您可以使用一对一关系将分成许多字段,或隔离出于安全考虑,表的一部分或存储信息仅适用于主表的子集的表。当执行识别这种关系时,请两个表必须共享公共字段。

返回页首

为什么创建表关系?

您可以通过使用关系窗口中,或者通过从字段列表窗格拖动字段显式创建表关系。Access 将使用表关系了解如何联接表,当您需要在数据库对象中使用它们。有多种原因为什么您应该之前创建其他数据库对象,例如窗体、 查询和报表创建表关系。

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

    若要处理多个表中的记录,通常必须创建联接表的查询。查询的工作原理是匹配的主键字段中的第一个表中第二个表的外键字段的值。例如,若要返回列出每个客户的订单的所有行,您构造联接与基于客户 ID 字段订单表客户表的查询。在关系窗口中,您可以手动指定要联接的字段。但是,如果您已经拥有定义表之间的关系,Access 将提供默认联接,基于现有的表关系。此外,如果您使用其中一个查询向导,Access 将使用的表关系已经定义要向您提供正确的选择,预填充具有适当的默认值属性设置收集的信息。

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

    设计窗体或报表时,Access 将使用的表关系从您已经定义要向您提供正确的选择,预填充具有适当的默认值的属性设置收集的信息。

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

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

返回页首

了解参照完整性

设计数据库时,您将拆分到多个基于主题的表,以最小化数据冗余您的信息。然后,您将数据重新组合到一起通过在相关表中放置的常见字段的方法提供访问。例如,若要表示-一对多关系您执行"一"方表中的主键,将其作为额外字段添加到"多"方表。将数据重新组合在一起,Access 将在"多"方表中的值,并查找"一"方表中相应的值。在这种方式"多"表中的值引用"一"方表中的对应值。

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

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

实施参照完整性时通过启用它的表关系 (获得分步说明,请参阅实施参照完整性)。实施后,Access 会拒绝违反参照完整性的表关系的任何操作。这意味着 Access 将拒绝更改的引用,并删除引用的目标删除目标这两个更新。但是,很可能您可能需要完全有效若要更改在订单表中具有订单运货商为主键。为这种情况下,您确实需要适用于 Access 自动更新所有受影响的行,作为单个操作的一部分。这样,Access 确保,以便您的数据库不会处于不一致的状态更新一些行和不更新完全完成。因此 Access 支持级联更新相关字段选项。如果实施参照完整性并选择级联更新相关字段选项,然后更新主键,Access 会自动更新引用该主键的所有字段。

也有可能您可能需要删除行和所有相关记录 — 例如,运货商记录和所有相关的订单。因此,Access 支持级联删除相关记录选项。如果实施参照完整性,并选择级联删除相关记录选项,然后删除关系的主键方中的记录,Access 将自动删除引用该主键的所有记录。

返回页首

查看表关系

若要查看表关系,请单击数据库工具选项卡上的关系。关系窗口打开,并显示任何现有关系。如果您第一次打开关系窗口已定义表关系,Access 将提示您添加到窗口的表或查询。

打开“关系”窗口

  1. “文件”选项卡上,单击“打开”

  2. “打开”对话框中,选择并打开数据库。

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

  4. 如果数据库中包含的关系,将显示关系窗口。如果数据库中不包含任何关系,并且您第一次打开关系窗口,显示显示表对话框。单击关闭以关闭对话框。

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

    这将显示所有已定义的关系数据库中。请注意,隐藏的表 (选中隐藏复选框表的属性对话框中的表) 和它们之间的关系将不会显示在导航选项对话框中选中显示隐藏对象复选框,除非。

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

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

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

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

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

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

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

  • 显示表    打开“显示表”对话框,使您可以选择表和查询以在“关系”窗口中进行查看。

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

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

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

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

返回页首

创建表关系

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

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

  1. “文件”选项卡上,单击“打开”

  2. “打开”对话框中,选择并打开数据库。

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

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

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

  1. 选择一个或多个表或查询,然后单击“添加”。将表和查询添加到“关系”窗口之后,请单击“关闭”

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

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

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

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

  1. 单击“创建”

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

    注释: 

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

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

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

您可以将域添加到现有的表,方法是在数据表视图中打开从字段列表窗格拖动。字段列表窗格显示相关表中可用的字段,以及其他表中可用的字段。当您从"其他"(无关联) 表中拖动字段并完成查阅向导时,字段列表窗格中的表和字段拖至其中的表之间自动创建新的一对多关系。默认情况下,这种关系,Access,创建不强制参照完整性。若要强制实施参照完整性,您必须编辑关系。请参阅更改表关系的详细信息部分。

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

  1. “文件”选项卡上,单击“打开”

  2. “打开”对话框中,选择并打开数据库。

  3. 在导航窗格中,右键单击要向其添加字段并创建关系的表,然后单击“打开”

打开“字段列表”窗格

  • 按 Alt+F8。

    随即会显示“字段列表”窗格。

字段列表窗格中显示的所有其他表中您的数据库,分为类别。当您使用数据表视图中的表,Access 将显示字段中的字段列表窗格中的两个类别 ︰相关表中的可用字段其他表中的可用字段。第一个类别列出所有具有与您当前正在使用的表关系的表。第二个类别列出的所有表格没有关系的表。

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

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

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

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

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

    将启动“查阅向导”

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

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

当您从"其他"(无关联) 表中拖动字段并完成查阅向导时,字段列表中的表和字段拖至其中的表之间自动创建新的一对多关系。默认情况下,这种关系,Access,创建不强制参照完整性。若要强制实施参照完整性,您必须编辑关系。请参阅更改表关系的详细信息部分。

返回页首

删除表关系

若要删除表关系,必须删除在关系窗口中的关系线。小心放置光标,以使其指向关系线,,然后单击线条。选中此选项后,该关系线显示得较粗。选中关系线时,按 DELETE。如果已启用,请注意时删除关系,则您还删除该关系,支持参照完整性。因此,Access 将不再自动禁止创建孤立记录关系的"多"端上。

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

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

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

将显示所有具有关系的表,同时显示关系线。

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

  2. 按 Delete 键。

    - 或 -

单击右键,然后单击“删除”

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

注意: 如果表关系中涉及的任何一个表正被其他人或进程使用,或处于打开的窗体等数据库对象中,您将无法删除关系。必须首先将使用这些表的所有已打开对象全部关闭,才能删除关系。

返回页首

更改表关系

更该表关系的方法是在“关系”窗口中选择表关系,然后对其进行编辑。小心放置光标,以使其指向关系线,然后单击该线以将其选中。选中关系线时,它会显示得较粗。选中关系线后,双击该线,或者单击“设计”选项卡上“工具”组中的“编辑关系”。将显示“编辑关系”对话框。

在“编辑关系”对话框中进行更改

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

关系窗口显示。如果您有未定义任何关系,这是第一次打开关系窗口,显示显示表对话框。如果出现对话框中,单击关闭

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

  • 将显示所有具有关系的表,同时显示关系线。

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

  • 双击该关系线。

  • 进行更改,然后单击“确定”

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

设置联接类型

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

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

您可以为每个关系中指定的值之一是联接类型。联接类型告诉 Access 要包含在查询结果中的记录。例如,考虑再次查询联接客户表和订单表中的公共字段表示客户 id。使用默认的联接类型 (称为内部联接),该查询返回仅客户行和订单行 (也称为联接的字段) 的常见字段相等。

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

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

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

设置联接类型

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

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

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

下表 (使用客户和订单表) 显示在联接属性对话框,他们所使用的联接类型显示三个选项以及为每个表包括所有行或匹配行。

选择

关系联接

左表

右表

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

内部联接

匹配行

匹配行

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

左外部联接

所有行

匹配行

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

右外部联接

匹配行

所有行

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

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

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

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

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

    将显示具有关系的所有表,同时显示关系线

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

  • 双击该关系线。

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

  1. 单击联接类型

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

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

返回页首

实施参照完整性

使用参照完整性的目的是防止出现孤立记录并保持同步,以便您没有任何引用不再存在其他记录的记录的引用。通过启用它的表关系中实施参照完整性。实施后,Access 会拒绝违反参照完整性的表关系的任何操作。Access 会拒绝更改的引用,以及删除引用的目标删除目标的更新。若要访问传播参照更新和删除,以便所有相关的行都也会相应更改,请参阅设置级联选项部分。

打开或关闭参照完整性

  1. 在“关系”窗口中,单击要更改的关系的关系线。选中关系线时,它会显示得较粗。

  2. 双击该关系线。

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

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

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

实施了参照完整性之后,以下规则将适用:

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

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

  • 如果这样做会创建孤立记录,您无法更改主表中的主键值。例如,无法更改订单号订单表中的,如果有分配给该订单订单明细表中的行项目。但是,可以选择要更新的主要记录通过选择级联更新相关字段复选框在一个操作中的所有相关的记录。

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

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

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

    • 两个表必须位于相同的 Access 数据库。不能在链接表实施参照完整性。但是,如果源表在 Access 格式,您可以打开它们存储并启用参照完整性该数据库中的数据库。

设置级联选项

您可能会遇到的情况下,在其中可以有效需要更改关系的"一"端上的值。这种情况下,您需要 Access 自动更新所有受影响的行作为单个操作的一部分。这种方法完成全部更新,以便您的数据库不会处于不一致的状态-更新一些行和不。Access 可帮助您避免此问题支持级联更新相关字段选项。如果实施参照完整性并选择级联更新相关字段选项,然后更新主键,Access 会自动更新引用该主键的所有字段。

您可能还需要删除行和所有相关记录 — 例如,运货商记录和所有相关的订单。因此,Access 支持级联删除相关记录选项。如果实施参照完整性,选择级联删除相关记录选项时,Access 将自动删除引用该主键,当您删除包含主键的记录的所有记录。

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

  1. 在“关系”窗口中,单击要更改的关系的关系线。选中关系线时,它会显示得较粗。

  2. 双击该关系线。

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

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

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

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

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

返回页首

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

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

此信息是否有帮助?

谢谢您的反馈!

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

×