
4.3 创建表之间的关系
在数据库中为每个主题创建表后,必须为Access提供在需要时将这些信息重新组合到一起的方法。具体方法是在相关的表中放置公共字段,并在表之间定义表关系。
4.3.1 表关系概述
在创建数据库(如窗体、查询和报表)对象之前创建表关系,这样做有以下几个原因。
1. 可为查询设计提供信息
要使用多个表中的记录,通常必须创建联接这些表的查询。查询的工作方式为将第一个表的主键字段中的值与第二个表的外键字段进行匹配。
2. 可为窗体和报表设计提供信息
在设计窗体或报表时,会使用从已定义的表关系中收集的信息,并用适当的默认值预填充属性设置。
3. 防止出现孤立记录
表关系可以作为基础来实施参照完整性,这样有助于防止数据库中出现孤立记录。孤立记录指的是所参照的其他记录根本不存在。
在设计数据库时,将信息拆分为表,每个表都有一个主键。然后,向相关表中添加参照这些主键的外键。这样外键—主键将构成表关系和多表查询的基础。
4.3.2 创建表关系
可以在【关系】窗口中创建表关系,也可以通过【字段列表】窗格向数据表拖动字段来创建表关系。除此之外,还可以在创建关系表时设置关系表的参照完整性。
1. 创建关系
执行【数据库工具】|【关系】|【关系】命令,在弹出的【显示表】对话框中,选择列表中的数据表,单击【添加】按钮。

提示
如果不显示【显示表】对话框,则需要在弹出的【关系】窗口中执行【关系】|【显示表】命令;或者右击【关系】窗口空白处,执行【显示表】命令。
此时,在【关系】窗口中,将显示新添加的数据表。拖动【客户】表中的ID字段至【订单】表中的【客户ID】字段。

然后,在弹出的【编辑关系】对话框中,将显示两个数据表联接的字段,单击【创建】按钮。

提示
执行【关系工具】|【工具】|【编辑关系】命令,即可打开【编辑关系】对话框。
此时,在【关系】窗口中,将显示两个字段之间的关系线,表示建立了表关系。

2. 设置参照完整性
使用参照完整性的目的是防止出现孤立记录并保持参照同步。
在【编辑关系】对话框中,用户可通过启用【实施参照完整性】复选框来显示两个表之间的关系类型。

此时,在【关系】窗口中的关系线处将显示两个表之间的关系类型。

设置参照完整性时,Access将拒绝违反表关系参照完整性的任何操作,如拒绝更改参照目标的更新,以及拒绝删除参照目标等。
另外,实施参照完整性之后,应该采用以下原则:
□ 如果值在主表的主键字段中不存在,则不能在相关表外键字段中输入该值,否则会创建孤立记录。
□ 如果记录在相关表中有匹配记录,则不能从主表中删除。但通过启用【级联删除相关记录】复选框,可以在操作中删除主记录及所有相关记录。
□ 如果更改主表中的主键值会产生孤立记录,则不能执行此操作。但通过启用【级联更新相关字段】复选框,可以在操作中更新主记录及所有相关记录。
4.3.3 编辑表关系
在【关系】窗口中,将光标放置在关系线上,双击该关系线。

然后,在弹出的【编辑关系】对话框中,可以更改关系任意一侧的表、查询或字段。除此之外,还可以设置联接类型、实施参照完整性以及选择级联选项。

另外,在【编辑关系】对话框中,单击【联接类型】按钮,可在弹出的【联接属性】对话框中编辑联接的属性内容。

在【联接属性】对话框中显示了3种选择,用于指定使用的联接类型以及为每个表返回所有行还是匹配行。
