良好数据库设计目标之一是消除数据冗余(重复数据)。要实现该目标,可将数据拆分为多个基于主题的表,以使每个因素只显示一次。然后,通过在相关表中放置公共字段来为Microsoft Office Access 2007 提供将拆分的信息组合到一起的方法。但是,要正确执行该步骤,必须首先了解表之间的关系,然后在 Office Access 2007 数据库中指定这些关系。
在数据库中为每个主题创建表后,必须为 Office Access 2007 提供在需要时将这些信息重新组合到一起的方法。具体方法是在相关的表中放置公共字段,并定义表之间的关系。然后,可以创建查询、窗体和报表,以同时显示几个表中的信息。例如,下面显示的窗体包含来自几个表的信息:
此窗体中的信息来自“客户”表……
……“订单”表……
……“产品”表……
……和“订单明细”表。
“受票方”框中的客户名称是从“客户”表中检索到的,“订单ID”和“订单日期”值来自“订单”表,“产品名称”来自“产品”表,“单价”和“数量”值来自“订单明细”表。这些表以多种方式互相链接在一起,以便将各自的信息呈现到窗体中。
在上述示例中,表中的各个字段必须互相协调,这样它们才能显示有关相同定单的信息。这种协调是使用表之间的关系来实现的。通过是通过匹配键字段中的数据来建立表关系,键字段通常是两个表中使用相同名称的字段。在大多数情况下,这些匹配字段是其中一个表的主键(它为每条记录提供唯一标识符),并且是另一个表的外键。例如,通过在“员工”和“订单”表的“员工ID”字段之间创建表关系,可以将员工和他们负责的订单相关联。
“员工ID”出现在两个表中,一个是主键...
...一个是外键。
表关系的类型
有三种类型的表关系。
一对多关系
假设有一个订单跟踪数据库,其中包含“客户”表和“订单”表。客户可以签署任意数量的订单。“客户”表中显示的任何客户都是这样,“订单”表中可以显示很多订单。因此,“客户”表和“订单”表之间的关系就是一对多关系。
要在数据库设计中表示一对多关系,请获取关系“一”方的主键,并将其作为额外字段添加到关系“多”方的表中。例如在本例中,可将一个新字段(即“客户”表中的 ID 字段)添加到“订单”表中,并将其命名为“客户ID”。然后,Access 可以使用“订单”表中的“客户ID”号来查每个订单的正确客户。
多对多关系
考虑“产品”表和“订单”表之间的关系。单个订单中可以包含多个产品。另一方面,一个
产品可能出现在多个订单中。因此,对于“订单”表中的每条记录,都可能与“产品”表中的多条记录对应。此外,对于“产品”表中的每条记录,都可以与“订单”表中的多条记录对应。这种关系称为多对多关系,因为对于任何产品,都可以有多个订单,而对于任何订单,都可以包含许多产品。请注意,为了检测到表之间的现有多对多关系,务必考虑关系的双方。
要表示多对多关系,您必须创建第三个表,该表通常称为联接表,它将多对多关系划分为两个一对多关系。将这两个表的主键都插入到第三个表中。因此,第三个表记录关系的每个匹配项或实例。例如,“订单”表和“产品”表有一种多对多的关系,这种关系是通过与“订单明细”表建立两个一对多关系来定义的。一个订单可以有多个产品,每个产品可以出现在多个订单中。
一对一关系
在一对一关系中,第一个表中的每条记录在第二个表中只有一个匹配记录,而第二个表中的每条记录在第一个表中只有一个匹配记录。这种关系并不常见,因为多数以此方式相关的信息都存储在一个表中。可以使用一对一关系将一个表分成许多字段,或出于安全原因隔离表中的部分数据,或存储仅应用于主表的子集的信息。标识此类关系时,这两个表必须共享一个公共字段。
为什么创建表关系?
您可以使用“关系”窗口或从“字段列表”窗格中拖动字段来显式创建表关系。当需要在数据库对象中使用表时,Office Access 2007 使用确定如何联接表的表关系。应该在创建其他数据库(如窗体、查询和报表)对象之前创建表关系,这样做有以下几个原因:
表关系可为查询设计提供信息
要使用多个表中的记录,通常必须创建联接这些表的查询。查询的工作方式为将第一个表主键字段中的值与第二个表的外键字段进行匹配。例如,要返回列出每个客户所有订单的行,您需要构建一个查询,该查询基于“客户ID”字段将“客户”表与“订单”表联接起来。在“关系”窗口中,可以手动指定要联接的字段。但是,如果已经定义了表间的关系,Office Access 2007 会基于现有表关系提供默认联接。此外,如果使用其中一个查询向导,Access 会使用从已定义的表关系中收集的信息为您提供正确的选择,并用适当的默认值预填充属性设置。
表关系可为窗体和报表设计提供信息
在设计窗体或报表时,Office Access 2007 会使用从已定义的表关系中收集的信息为您提供正确的选择,并用适当的默认值预填充属性设置。
可以将表关系作为基础来实施参照完整性,这样有助于防止数据库中出现孤立记录。孤立记录指的是这样的一些记录:它所参照的其他记录根本不存在,例如参照不存在的客户记录的订单记录。
在设计数据库时,您将信息拆分为表,每个表都有一个主键。然后,您向相关表中添加参照这些主键的外键。这些外键-主键对构成了表关系和多表查询的基础。因此,这些外键-主键参照保持同步非常重要。参照完整性帮助确保参照保持同步并且依赖于表关系。
了解参照完整性
在设计数据库时,您将信息拆分为许多基于主题的表,以最大限度地降低数据冗余。然后,
您通过在相关表中放置公共字段来为 Office Access 2007 提供将数据重新组合到一起的方法。例如,为表示一对多关系,您从“一方”表中获得主键,将其作为额外字段添加到“多方”表。要将数据重新组合到一起,Access 获得“多方”表中的值,并在“一方”表中查阅相应的值。通过这种方法,“多方”表中的值参照“一方”表中相应的值。
假设“运货商”和“订单”之间存在一对多关系,您希望删除一个运货商。如果要删除的运货商在“订单”表中具有订单,则删除该运货商记录后,这些订单将成为“孤立记录”。这些订单仍然包含运货商 ID,但该 ID 不再有效,因为它所参照的记录不再存在。
参照完整性的目的是防止出现孤立记录并使参照保持同步,以使这种假设的情况永远不会发生。
可以通过为表关系启用参照完整性来实施参照完整性(请参阅实施参照完整性,以了解详细步骤)。实施后,Access 将拒绝违反表关系参照完整性的任何操作。这意味着 Access 会拒绝更改参照目标的更新,也会拒绝删除参照目标的删除。但是,您可能确实需要更改某个运货商的主键,而该运货商在“订单”表中有订单。在此类情况下,您真正需要的是 Access 在一次操作中自动更新所有受影响的行。这样,Access 可以确保进行完整更新,以便数据库不会处于不一致状态(即更新某些行,不更新其他行)。因此,Access 支持“级联更新相关字段”选项。如果您实施了参照完整性并选择“级联更新相关字段”选项,在您更新主键时,Access 将自动更新参照主键的所有字段。
您可能还会需要删除某一行及所有相关记录,例如,某个运货商记录以及其所有相关订单。因此,Access 支持“级联删除相关记录”选项。如果实施了参照完整性并选择“级联删除相关记录”选项,则当您删除关系主键方的记录时,Access 会自动删除参照该主键的所有记录。
查看表关系
要查看表关系,请单击“数据库工具”选项卡上的“关系”。将打开“关系”窗口,并显示任所有现存关系。如果尚未定义表关系,并且您是第一次打开“关系”窗口,则 Access 会提示您向窗口中添加表或查询。
打开“关系”窗口
单击“Office 按钮”,然后单击“打开”。
在“打开”对话框中,选择并打开数据库。
在“数据库工具”选项卡上的“显示/隐藏”组中,单击“关系”。
如果数据库包含关系,则会出现“关系”窗口。如果数据库不包含任何关系,并且您是第一次打开“关系”窗口,则会出现“显示表”对话框。单击“关闭”关闭该对话框。
在“设计”选项卡上的“关系”组中,单击“所有关系”。
此时会显示数据库中所有已定义的关系。请注意,除非在“导航选项”对话框中选中了“显示隐藏对象”复选框,否则不会显示隐藏的表(在表的“属性”对话框中选中“隐藏”复选框的表)及其关系。
主键
该线条代表关系
外键
表关系由“关系”窗口中表之间绘制的关系线表示。不实施参照完整性的关系在支持该关系的公共字段之间显示为细线。单击关系线选择关系时,该线变粗指示它被选中。如果对此关系实施参照完整性,则该线在两端都会变粗。此外,在关系一侧线条较粗部分上会显示数字“1”,而在另一侧线条较粗部分上会显示无限大符号(∞)。
在“关系”窗口处于活动状态时,可以选择功能区(功能区是 Microsoft Office Fluent 用户界面的一部分)中的以下命令:
在“设计”选项卡上的“工具”组中:
编辑关系打开“编辑关系”对话框。在选择关系线时,可以单击“编辑关系”以更改表关系。也可以双击关系线。
清除布局从“关系”窗口中删除所有显示的表和关系。请注意,该命令只隐藏这些表和关系,而不会删除它们。
关系报表创建显示数据库中的表和关系的报表。该报表只显示“关系”窗口中未隐藏的表和关系。
在“设计”选项卡上的“关系”组中:
显示表打开“显示表”对话框,使您可以选择表和查询以在“关系”窗口中进行查看。隐藏表隐藏“关系”窗口中选定的表。
直接关系在“关系”窗口中显示所选表的所有关系和相关表(如果尚未显示)。
所有关系在“关系”窗口中显示数据库中所有关系和相关表。请注意,除非在“导航选项”对话框中选中“显示隐藏对象”,否则不会显示隐藏的表(在表的“属性”对话框中选中“隐藏”复选框的表)及其关系。
关闭关闭“关系”窗口。如果对“关系”窗口的布局进行了任何更改,则会询问您是否保存这些更改。
创建表关系
可以使用“关系”窗口或从“字段列表”窗格向数据表拖动字段来创建表关系。在创建表之间的关系时,公共字段不一定具有相同的名称,但实际它们往往是相同的。但这些字段必须具有相同的数据类型。不过如果主键字段为“自动编号”字段,并且两个字段的“字段大小”属性相同,则外键字段可以为“数字”字段。例如,如果两个字段的 FieldSize 属性都是长整型,则可以将“自动编号”字段与“数字”字段匹配。在两个公共字段都是“数字”字段时,它们必须具有相同的“字段大小”属性设置。
使用“关系”窗口创建表关系
单击“Office 按钮”,然后单击“打开”。
在“打开”对话框中,选择并打开数据库。
在“数据库工具”选项卡上的“显示/隐藏”组中,单击“关系”。
如果您尚未定义过任何关系,则会自动显示“显示表”对话框。如果未出现该对话框,请在“设计”选项卡上的“关系”组中单击“显示表”。
“显示表”对话框会显示数据库中的所有表和查询。要只查看表,请单击“表”。要只查看查询,请单击“查询”。要同时查看表和查询,请单击“两者”。
选择一个或多个表或查询,然后单击“添加”。将表和查询添加到“关系”窗口之后,请单击“关闭”。
将字段(通常为主键)从一个表拖至另一个表中的公共字段(外键)。若要拖动多个字段,请按 Ctrl 键,单击每个字段,然后拖动这些字段。
将显示“编辑关系”对话框。
access数据库建表的完整步骤
验证显示的字段名称是否是关系的公共字段。如果字段名称不正确,请单击该字段名称并从列表中选择新字段。
要对此关系实施参照完整性,请选中“实施参照完整性”复选框。有关参照完整性的详细信息,请参阅了解参照完整性和实施参照完整性等小节。
单击“创建”。
关系线是在两个表之间绘制的。如果已选中“实施参照完整性”复选框,则该线两端都显示为较粗。此外,仅当再次选中“实施参照完整性”复选框后,在关系一侧线条较粗部分上会显示数字“1”,而在另一侧线条较粗部分上会显示无限大符号(∞)。
注释
创建一对一关系两个公共字段(通常为主键字段和外键字段)都必须具有唯一索引。这意味着应将这些字段的“索引”属性设置为“是(不允许重复)”。如果两个字段都具有唯一索引,Access 将创建一对一关系。
创建一对多关系在关系“一方”的字段(通常为主键)必须具有唯一索引。这意味着应将此字段的“索引”属性设置为“是(不允许重复)”。“多方”的字段不应具有唯一索引。它可以有索引,但必须允许重复。这意味着应将此字段的“索引”属性设置为“否”或“是(允许重复)”。当一个字段具有唯一索引,而其他字段不具有唯一索引时,Access 将创建一对多关系。
使用“字段列表”窗格创建表关系
在 Office Access 2007 中,可以向数据表视图中打开的现有表添加字段,方法是将该字段从“字段列表”窗格拖动到该表中。“字段列表”窗格显示相关表中可用的字段以及其他表中可用的字段。从其他(无关联)的表中拖动一个字段并完成“查阅向导”时,会在“字段列表”窗格中的表和当前正在将字段拖至其中的表之间自动创建新的一对多关系。默认情况下,由 Access 创建的这种关系不实施参照完整性。要实施参照完整性,必须对该关系进行编辑。