![Access 2013数据库应用案例课堂](https://wfqqreader-1252317822.image.myqcloud.com/cover/965/27110965/b_27110965.jpg)
4.5 建立表之间的关系
良好的数据库设计目标之一就是消除数据冗余(重复数据)。要实现这一目标,可将数据拆分为多个基于主题的表,以使每个记录只显示一次。然后,可通过在相关表中放置公共字段将拆分的信息组合到一起。而为了把不同表的数据组合在一起,必须建立表间的关系。
在Access 2013中,有3种类型的表关系。
1. 一对一关系
在一对一关系中,第一个表中的每条记录在第二个表中只有一个匹配记录,而第二个表中的每条记录在第一个表中也只有一个匹配记录。这两个表通常是基于同一个主题。这种关系并不常见,因为多数与此方式相关的信息都存储在一个表中。事实上,一对一关系通常都应该避免,因为它违反了规范化的规则。但在某些特殊情况下,可以使用一对一关系将一个表分成许多字段,或出于安全原因隔离表中的部分数据,或存储仅应用于主表中子集的信息。创建此类关系时,这两个表必须共享一个公共字段,并且该公共字段必须具有唯一索引。
2. 一对多关系
假设有一个订单跟踪数据库,其中包含“客户”表和“订单”表。客户可以签署任意数量的订单。因此,“客户”表和“订单”表之间的关系就是一对多关系。
要在数据库设计中表示一对多关系,需要设置表关系“一方”的主键,并将其作为额外公共字段添加到关系“多方”的表中。例如在订单跟踪数据库中,需要将一个字段(即“客户”表中的主键“客户ID”字段)添加到“订单”表中。然后,Access就可以使用“订单”表中的“客户ID”号来查找每个订单的正确客户。
3. 多对多关系
要表示多对多关系,用户需要创建第三个表,该表通常称为连接表,它将多对多关系划分为两个一对多关系。用户可以将这两个表的主键都插入到第三个表中,或者将第三个表的主键插入到这两个表中。由此可知,第三个表可以作为一对多关系中的“一方”,也可以作为“多方”。
例如,在一个订单跟踪数据库中,还包含“订单纳税状态”表,一个订单纳税状态可以对应多张订单表,它与“订单”表是一对多的关系,而“客户”表与“订单”表也是一对多的关系。因此我们可以得出以下结论:“订单纳税状态”表和“客户”表是多对多的关系,而“订单”表即是第三个表(即连接表),它作为一对多关系中的“多方”连接这两个表,创建表关系时,用户需要将这两个表的主键字段插入到“订单”表中,如图4-70所示。
![](https://epubservercos.yuewen.com/0F13FE/15477645704549006/epubprivate/OEBPS/Images/00183.jpg?sign=1738906441-hdaqSSGnFsLUn4QHVueeHj1W7cLoyIMD-0-3f12f34b82a48d69e4de557071164255)
图4-70 “订单纳税状态”表和“客户”表是多对多的关系
若在订单跟踪数据库中,还包含“客户访问”表,一个客户可以多次访问公司,则“客户”表与“客户访问”表是一对多的关系。我们可以得出以下结论:“订单”表和“客户访问”表是多对多的关系,而“客户”表即是第三个表,它作为一对多关系中的“一方”连接这两个表。创建表关系时,用户需要将“客户”表的主键字段插入到这两个表中,如图4-71所示。
![](https://epubservercos.yuewen.com/0F13FE/15477645704549006/epubprivate/OEBPS/Images/00184.jpg?sign=1738906441-IMG7VIVpagSHTijayH8E5zkZfWzznuAa-0-06dcefe23c6532b2bfe959fb2150a026)
图4-71 “订单”表和“客户访问”表是多对多的关系
4.5.1 表的索引
索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。索引好比是一本书的目录,通过它可以快速锁定需要的章节。创建索引可以大大提高系统的性能。当然其也有缺点,它增加了数据库的存储空间耗用,并且当对表中的数据进行添加、删除或修改的时候,索引也要动态地维护,这样就降低了数据的维护速度。
在创建索引的时候,应考虑如何选用合适的列创建索引。一般来说,用户可以参考以下几点创建索引。
(1)在经常需要搜索的列上创建索引,这样可以加快搜索的速度。
(2)在作为主键的列上创建索引,这样可以强制该列的唯一性和组织表中数据的排列结构。
(3)在经常用的链接的列上创建索引,这些列主要是一些外键,可以加快链接的速度。
(4)在经常需要根据范围进行搜索的列上创建索引,因为索引已经排序,其指定的范围是连续的。
(5)在经常需要排序的列上创建索引,因为索引已经排序,这样查询可以利用索引的排序,加快排序查询时间。
索引分为单字段索引和多字段索引。如果用户经常同时依据两个或更多个字段进行搜索或排序,则可以为该字段组合创建索引。创建多字段索引时,需要设置字段的次序。如果在第一个字段中的记录具有重复值,则Access会接着依据为索引定义的第二个字段来进行排序,以此类推。而在一个多字段索引中最多可以包含10个字段。
下面通过两种方法来创建单字段索引。
1. 通过字段属性列表框创建单字段索引
具体操作步骤如下。
step 01 启动Access 2013,打开“应用”数据库,并进入“客户”表的【设计视图】界面。
step 02 选中“客户ID”字段,在字段属性列表框中单击【索引】选项右侧的下拉按钮,弹出索引列表,包括【无】、【有(有重复)】和【有(无重复)】3个选项,如图4-72所示。
![](https://epubservercos.yuewen.com/0F13FE/15477645704549006/epubprivate/OEBPS/Images/00185.jpg?sign=1738906441-vbVFhHm4BhjVZcrZjqT1VRaYJYKVXvbF-0-c3e9da3749bb97437dabedf54590a399)
图4-72 索引列表
提示
【无】选项表示不在此字段上创建索引(或删除现有索引);
【有(有重复)】选项表示在此字段上创建索引;
【有(无重复)】选项表示在此字段上创建唯一索引。
step 03 “客户ID”字段为主键,且不会重复,因此选择【有(无重复)】选项,即可为该字段创建索引,如图4-73所示。
![](https://epubservercos.yuewen.com/0F13FE/15477645704549006/epubprivate/OEBPS/Images/00186.jpg?sign=1738906441-6NRqm7SQzcbNKZiJRMZljugR1VdHXioS-0-6ab2b88a9880f7974564e685eb3d3fae)
图4-73 选择【有(无重复)】选项
step 04 使用同样的方法,设置“客户姓名”字段索引属性为“有(有重复)”。
2. 通过索引设计器对话框创建单字段索引
下面为“客户”表的“联系电话”字段创建索引。具体操作步骤如下。
step 01 启动Access 2013,打开“应用”数据库,并进入“客户”表的【设计视图】界面。
step 02 切换到【设计】选项卡,单击【显示/隐藏】组中的【索引】按钮,如图4-74所示。
![](https://epubservercos.yuewen.com/0F13FE/15477645704549006/epubprivate/OEBPS/Images/00187.jpg?sign=1738906441-SjveUk87exHYUF1BpglDwSNZdzpnrSmh-0-85e3afb5d3fe0413e9828d64041b34cc)
图4-74 单击【显示/隐藏】组中的【索引】按钮
step 03 弹出索引设计器,用户可以看到,Access已经自动为主键“客户ID”字段创建了索引,如图4-75所示。
![](https://epubservercos.yuewen.com/0F13FE/15477645704549006/epubprivate/OEBPS/Images/00188.jpg?sign=1738906441-YwPBGyUl9QhDmvNwWmw2NeGeD9vLZj16-0-4b4a4b9e19883a340913b1a22cb7e152)
图4-75 索引设计器
step 04 在【索引名称】列中输入新建的索引名称“联系电话”,单击【字段名称】列右侧的下拉按钮,在弹出的下拉列表中选择“客户姓名”字段,在【排序次序】列中选择【升序】选项,即完成使用索引设计器创建索引的操作,如图4-76所示。
![](https://epubservercos.yuewen.com/0F13FE/15477645704549006/epubprivate/OEBPS/Images/00189.jpg?sign=1738906441-mXzRxeEtst5QmmWL6TwwBJe7uI44wcpe-0-70027a196d13d06f97e5e5ed67781cde)
图4-76 创建“联系电话”索引
在索引设计器下方,有【主索引】、【唯一索引】和【忽略空值】3个选项。利用这3个选项,用户还可以设计其他的索引属性。例如,若【主索引】选择【是】选项,表示设计该字段为主键,若【唯一索引】选择【是】选项,表示此字段中的值是唯一的,若【忽略空值】选择【是】选项,表示该索引将排除值为空的记录。
提示
数据类型为OLE对象或附件的字段不能创建索引。另外,Access还会自动为主键创建唯一索引。
4.5.2 创建表关系
表关系有助于合并两个不同表中的数据。每个关系由两个表中的字段组成,包含相对应的数据。Access中有3种不同的表关系,与此相对应的,创建表关系也应分为3种,即建立一对一表关系、一对多表关系以及多对多表关系。
1. 创建一对一表关系
一对一表关系在实际中运用得较少,但在某些情况下,还是非常有用的。假如在数据库中,有“客户”表和“原始信息”表,在这两个表中都是某个客户相关的信息,而且客户名单是完全一致的,因此可以建立一对一表关系,将这两个表合二为一。具体操作步骤如下。
step 01 启动Access 2013,打开“应用”数据库。切换到【数据库工具】选项卡,单击【关系】组中的【关系】按钮,如图4-77所示。
![](https://epubservercos.yuewen.com/0F13FE/15477645704549006/epubprivate/OEBPS/Images/00190.jpg?sign=1738906441-3mjHFjg8OXldBQPjKmUGMpc4jo5KIcLg-0-f9efc13115450e872980a4bc91015cce)
图4-77 单击【数据库工具】选项卡的【关系】按钮
step 02 此时进入【关系】工作窗口,用户可在此窗口中创建表关系,如图4-78所示。
![](https://epubservercos.yuewen.com/0F13FE/15477645704549006/epubprivate/OEBPS/Images/00191.jpg?sign=1738906441-cquXYQDMwXUPEYRWa7PwxXwiLxjkDdUR-0-748c0f5aabfe65a75d8697af69cb6e0c)
图4-78 【关系】工作窗口
step 03 切换到【设计】选项卡,单击【关系】组中的【显示表】按钮,如图4-79所示;或者在【关系】工作窗口中,右击,在弹出的快捷菜单中选择【显示表】命令,如图4-80所示。
![](https://epubservercos.yuewen.com/0F13FE/15477645704549006/epubprivate/OEBPS/Images/00192.jpg?sign=1738906441-eyHvUihXNbY7E1E04BcXxeJK4CQ9XC4G-0-3628ec0223a93bf0e5445cab64314565)
图4-79 单击【关系】组中的【显示表】按钮
![](https://epubservercos.yuewen.com/0F13FE/15477645704549006/epubprivate/OEBPS/Images/00193.jpg?sign=1738906441-ZxI76DpbkN9bJ6DfCbiJ9KpUrP8NhPjU-0-9b5be345c4026f56ba63582806d3ec7c)
图4-80 选择【显示表】命令
step 04 打开【显示表】对话框。在此对话框中,用户可以看到,共有【表】、【查询】和【两者都有】3个选项卡,如图4-81所示。
![](https://epubservercos.yuewen.com/0F13FE/15477645704549006/epubprivate/OEBPS/Images/00194.jpg?sign=1738906441-kBhRsuxc83HTgeLCRFBxLozB1f6M0f7J-0-13e86166a108e1bfb58510b0bfe7416c)
图4-81 【显示表】对话框
step 05 在【表】选项卡中,系统显示出当前“应用”数据库下包含的所有表对象。选择“客户”表,单击【添加】按钮,可将该表添加到【关系】工作窗口中,如图4-82所示。
![](https://epubservercos.yuewen.com/0F13FE/15477645704549006/epubprivate/OEBPS/Images/00195.jpg?sign=1738906441-5TUFxHKlAAenwicComnSOxsT9YSvVivM-0-40435a1db571bc6de1c5f7548c3f05f5)
图4-82 选择“客户”表
step 06 使用同样的方法,添加“原始信息”表到【关系】工作窗口中。操作完成后,单击【关闭】按钮,此时【关系】工作窗口中将出现这两个表的相关信息,如图4-83所示。
![](https://epubservercos.yuewen.com/0F13FE/15477645704549006/epubprivate/OEBPS/Images/00196.jpg?sign=1738906441-2BuodbaMT2GsacdQ67wKAjVDOLoh52dp-0-9e9100d0a3063b3ffc20d71cb211982c)
图4-83 【关系】工作窗口
提示
用户也可以在导航窗格中选中这两个表,按住左键不放,将其拖动到【关系】工作窗口中。
step 07 选中“客户”表的“客户ID”字段,按住左键不放将其拖到“原始信息”表的“客户ID”字段处,松开鼠标后,弹出【编辑关系】对话框。在【关系类型】栏中可看到,当前的类型为“一对一”,如图4-84所示。
![](https://epubservercos.yuewen.com/0F13FE/15477645704549006/epubprivate/OEBPS/Images/00197.jpg?sign=1738906441-PthL7xhIpNTGUuTd3jKTNhmSQOXsmJ1Y-0-969d8e3fc129ada689e4c33a7b377b01)
图4-84 【编辑关系】对话框
step 08 单击【创建】按钮,返回到工作窗口中,可以看到两个表的“客户ID”字段之间出现一条关系连接线,如图4-85所示。
![](https://epubservercos.yuewen.com/0F13FE/15477645704549006/epubprivate/OEBPS/Images/00198.jpg?sign=1738906441-pi4Oh1POvJdjsAWmpi8cwnqcWpzCrzWf-0-2c8aab55dcdeae1927b8579a7e9d43df)
图4-85 关系连接线
step 09 创建完成后,单击【保存】按钮,即可保存创建的表关系。在左侧导航窗格中,双击打开“客户”表,可以看到,每条记录的行首出现了标记。单击该标记,Access以子表的形式显示出每个客户的原始信息,如图4-86所示。
![](https://epubservercos.yuewen.com/0F13FE/15477645704549006/epubprivate/OEBPS/Images/00200.jpg?sign=1738906441-souGq8QFjawYE4TTSYxP8Ngrvo0NzS3Z-0-f90e6d2f7b370ca4d3506ac37be8dae7)
图4-86 “客户”表的子表
step 10 同理,在左侧导航窗格中,双击打开“原始信息”表,可以看到,每条记录的行首也出现了标记。单击该标记,Access以子表的形式显示出每个客户的详细信息。至此,即完成创建一对一表关系的操作,如图4-87所示。
![](https://epubservercos.yuewen.com/0F13FE/15477645704549006/epubprivate/OEBPS/Images/00202.jpg?sign=1738906441-E1nfB3VsMY6TEWniRmm4s7fFDNzHFh7L-0-8b445d69a503104e098015df2c128c53)
图4-87 “原始信息”表的子表
2. 创建一对多表关系
一对多表关系在数据库中最为常见。在关系“一方”的字段必须具有唯一索引,该字段通常为主键,该表称为主表。关系“多方”的字段不应具有唯一索引,它可以有索引,但必须允许重复,该字段通常称为表关系的“外键”。当一个字段具有唯一索引而其他字段不具有唯一索引时,Access将创建一对多关系。
假设在订单跟踪数据库中,有“客户”表和“订单”表,一个客户可以有多个订单,而一个订单只能对应一个客户,因此,在一对多的表关系中,关系“一方”应为“客户”表,而关系“多方”应为“订单”表。下面就以这两个表为例,详细介绍如何创建一对多表关系。具体操作步骤如下。
step 01 打开“应用”数据库,进入“客户”表和“订单”表的【数据表视图】界面。
step 02 切换到【表】选项卡,单击【关系】组中的【关系】按钮,如图4-88所示,可进入【关系】工作窗口。
![](https://epubservercos.yuewen.com/0F13FE/15477645704549006/epubprivate/OEBPS/Images/00203.jpg?sign=1738906441-Ste1QmgJdxhjBiUzC8inM64HPA9CHgJ4-0-c859c41bb9215c463f62dbfa4ade753d)
图4-88 单击【表】选项卡中的【关系】按钮
提示
若进入的是“客户”表的【设计视图】界面,切换到【设计】选项卡,单击【关系】组中的【关系】按钮,同样可以进入【关系】工作窗口,如图4-89所示。
![](https://epubservercos.yuewen.com/0F13FE/15477645704549006/epubprivate/OEBPS/Images/00204.jpg?sign=1738906441-x0qoYtael0wu9w8VE0JMLUPSOWPvqAnw-0-0dd57f6b01c99d70dfc8d9d32f54466f)
图4-89 单击【设计】选项卡中的【关系】按钮
step 03 在【关系】工作窗口中,用户可看到之前创建的表关系,如图4-90所示。
![](https://epubservercos.yuewen.com/0F13FE/15477645704549006/epubprivate/OEBPS/Images/00205.jpg?sign=1738906441-k7tyqZGd9QA0T5wMUdVKrARZbVBK1HYK-0-9dcd744fa89e861a5e2e2ef0907d44ec)
图4-90 创建的表关系
step 04 为便于演示,选中“原始信息”表,切换到【设计】选项卡,单击【关系】组中的【隐藏表】按钮,将该表隐藏起来,如图4-91所示。
![](https://epubservercos.yuewen.com/0F13FE/15477645704549006/epubprivate/OEBPS/Images/00206.jpg?sign=1738906441-1LtV6ALXpsspEbtnnnh2Xb8A0z3s4oqu-0-00f65b57c7f62d1ef779d87800748e2c)
图4-91 单击【隐藏表】按钮
step 05 隐藏以后,单击【关系】组中的【显示表】按钮,弹出【显示表】对话框。选中“订单”表,单击【添加】按钮,如图4-92所示。
![](https://epubservercos.yuewen.com/0F13FE/15477645704549006/epubprivate/OEBPS/Images/00207.jpg?sign=1738906441-fleidcHR5sJDk90lBDYpYuaMck1TiEDi-0-6462fad1a6b6a6a828d1f2c534c1aea4)
图4-92 【显示表】对话框
step 06 添加完成后,单击【关闭】按钮,返回到【关系】工作窗口。用户可以看到“订单”表已添加成功,如图4-93所示。
![](https://epubservercos.yuewen.com/0F13FE/15477645704549006/epubprivate/OEBPS/Images/00208.jpg?sign=1738906441-QXqEGHPjbwTDTbFPEGP3gMalLNC8eJiA-0-4b41570786d0630ab0ba8b56ce5d5255)
图4-93 添加“订单”表
step 07 选中“客户”表的“客户ID”字段,按住鼠标左键不放将其拖动到“订单”表的“客户ID”字段处,松开鼠标后,弹出【编辑关系】对话框。在【关系类型】栏中可看到,当前的类型为【一对多】,如图4-94所示。
![](https://epubservercos.yuewen.com/0F13FE/15477645704549006/epubprivate/OEBPS/Images/00209.jpg?sign=1738906441-XZjisx9Gd52q6rLHxJf2HlvH4zhZfJ3J-0-8466d9094f4acefcb7cf27cd39478602)
图4-94 【编辑关系】对话框
step 08 单击【创建】按钮,返回到【关系】工作窗口中,可以看到这两个表的“客户ID”字段之间出现一条关系连接线,如图4-95所示。
![](https://epubservercos.yuewen.com/0F13FE/15477645704549006/epubprivate/OEBPS/Images/00210.jpg?sign=1738906441-hneWNpF7A1chnSLTsw8HklRP0G5bPbyM-0-db54ad2eb7f27b6bf47f74d5581d0a31)
图4-95 关系连接线
step 09 创建完成后,单击【保存】按钮,保存创建的表关系。切换到“客户”表的【数据表视图】界面,可以看到,每条记录的行首出现了标记。单击该标记,Access以子表的形式显示出每个客户的订单信息。至此,即完成创建一对多表关系的操作,如图4-96所示。
![](https://epubservercos.yuewen.com/0F13FE/15477645704549006/epubprivate/OEBPS/Images/00212.jpg?sign=1738906441-I4gpMQh00TEnwFdMMsGOqxnihAKB4x8l-0-562d34bd94ede841724d952db98425e9)
图4-96 “客户”表的子表
提示
在一对多表关系中,只有关系“一方”的数据表才能查看子表的信息。关系“多方”的数据表是无法出现子表的。
3. 创建多对多表关系
用户既可以如图4-70和图4-71所示来表示多对多表关系,也可以直接创建多对多表关系。下面为“客户访问”表和“订单”表创建多对多表关系。具体操作步骤如下。
step 01 打开“应用”数据库,切换到【数据库工具】选项卡,单击【关系】组中的【关系】按钮,进入【关系】工作窗口。用户在其中可以查看当前数据库中已存在的表关系,如图4-97所示。
![](https://epubservercos.yuewen.com/0F13FE/15477645704549006/epubprivate/OEBPS/Images/00213.jpg?sign=1738906441-xNKQ1yDoDlthmelgaxf79S9dF5eprGsf-0-3feb89792386da19aae71c995b19ab64)
图4-97 “应用”数据库的表关系
step 02 切换到【设计】选项卡,单击【关系】组中的【显示表】按钮,弹出【显示表】对话框,将“客户访问”表添加到【关系】工作窗口中,如图4-98所示。
![](https://epubservercos.yuewen.com/0F13FE/15477645704549006/epubprivate/OEBPS/Images/00214.jpg?sign=1738906441-lAwhA38UyOfxbxA0S3IlC1VWGzMejXLR-0-76681830ff79af22a768d5f67c083b25)
图4-98 添加“客户访问”表
step 03 选中“客户访问”表的“客户ID”字段,按住鼠标左键不放将其拖动到“订单”表的“客户ID”字段处,松开鼠标后,弹出【编辑关系】对话框,如图4-99所示。
![](https://epubservercos.yuewen.com/0F13FE/15477645704549006/epubprivate/OEBPS/Images/00215.jpg?sign=1738906441-bErw8cm2SaclGjANS7LqTEEHtWS3P6Yv-0-02638982d5fbcbde82e0451bd6575a4d)
图4-99 【编辑关系】对话框
step 04 单击【创建】按钮,返回到【关系】工作窗口中,可以看到这两个表的“客户ID”字段之间出现一条关系连接线,如图4-100所示。
![](https://epubservercos.yuewen.com/0F13FE/15477645704549006/epubprivate/OEBPS/Images/00216.jpg?sign=1738906441-1RCpVCSqBJENskHdcEjte5RzucSSjHuZ-0-af0606ce52ee8a6c47a7fac3aadd38ca)
图4-100 关系连接线
step 05 创建完成后,单击【保存】按钮,即可保存创建的表关系。至此,就完成了创建多对多表关系的操作。
请注意,在数据库实际应用中,用户通常用两个一对多关系来表示多对多关系,而不是直接创建两个表的多对多关系。
4.5.3 查看与编辑表关系
表关系创建完成后,用户可对表关系进行查看、编辑、隐藏或删除等操作。这一系列的操作都可以通过【设计】选项卡中的【工具】和【关系】组来实现,如图4-101所示。
![](https://epubservercos.yuewen.com/0F13FE/15477645704549006/epubprivate/OEBPS/Images/00217.jpg?sign=1738906441-ggyEzFavy7vK2YSLYzfkut7MHOg5CNC0-0-46894b45895ba3bdb2cf7b53dbe5b81c)
图4-101 【工具】组和【关系】组
具体操作步骤如下。
step 01 打开“应用”数据库,进入【关系】工作窗口。
step 02 单击“客户”表和“原始信息”表之间的关系连接线,此时连接线显示得较粗,表示其为选中状态,如图4-102所示。
![](https://epubservercos.yuewen.com/0F13FE/15477645704549006/epubprivate/OEBPS/Images/00218.jpg?sign=1738906441-VZiGBf8XfCGajB30BDRRgte3tkxpzDg3-0-b50d67b94d2d2ee4853378d95ef7ff40)
图4-102 选中关系连接线
step 03 切换到【设计】选项卡,单击【工具】组中的【编辑关系】按钮,弹出【编辑关系】对话框。在该对话框中,可以设置实施参照完整性、连接类型和新建表关系等,如图4-103所示。
![](https://epubservercos.yuewen.com/0F13FE/15477645704549006/epubprivate/OEBPS/Images/00219.jpg?sign=1738906441-osPYM4wlbXuqOTZMKIMdUOWCGZO78Lbe-0-8edb6994e6d656ed3782b1c048f55523)
图4-103 【编辑关系】对话框
提示
双击关系连接线,或者右击,在弹出的快捷菜单中选择【编辑关系】命令,同样可以打开【编辑关系】对话框。
step 04 单击【工具】组中的【清除布局】按钮,弹出Microsoft Access对话框,提示是否将关系窗口的布局清除。若单击【是】按钮,将会删除当前创建的所有表关系,如图4-104所示。
![](https://epubservercos.yuewen.com/0F13FE/15477645704549006/epubprivate/OEBPS/Images/00220.jpg?sign=1738906441-suM69HcFV59bOntlBn59eITREmRMYTWV-0-dd56e44afda1448e200e1784c4859987)
图4-104 Microsoft Access对话框
step 05 单击【工具】组中的【关系报告】选项,Access将自动生成表关系的报表,并进入打印预览模式,用户可打印该报表,如图4-105所示。
![](https://epubservercos.yuewen.com/0F13FE/15477645704549006/epubprivate/OEBPS/Images/00221.jpg?sign=1738906441-TOBZexwBzQIX50S4sAgG1tJccBIo8lAT-0-6480f3feee7a43d2702b1153aeae8f22)
图4-105 表关系的报表
step 06 选中“订单”表,单击【关系】组中的【隐藏表】按钮,可在【关系】工作窗口中隐藏该表,如图4-106所示。
![](https://epubservercos.yuewen.com/0F13FE/15477645704549006/epubprivate/OEBPS/Images/00222.jpg?sign=1738906441-vrwx9EdCVcl6BFqNXet0VcyJCVkvHbbI-0-aafbcc3e14817b6a2a0e07d2d6e5c91f)
图4-106 隐藏“订单”表
step 07 选中“客户”表,单击【关系】组中的【直接关系】按钮,可以显示并查看所有与该表有直接关系的表。即使这些表被隐藏,此时也会显示出来。例如这里显示出隐藏的“订单”表,如图4-107所示。
![](https://epubservercos.yuewen.com/0F13FE/15477645704549006/epubprivate/OEBPS/Images/00223.jpg?sign=1738906441-UfjSxcAuaZnrxHtv04zvM6MzYu3bZkJr-0-ae3ad6433c740a07630bb89c028f20ab)
图4-107 显示直接关系
step 08 单击【关系】组中的【所有关系】按钮,用户可以查看“应用”数据库中所有的表关系,如图4-108所示。
![](https://epubservercos.yuewen.com/0F13FE/15477645704549006/epubprivate/OEBPS/Images/00224.jpg?sign=1738906441-KCo7Ad5qBXsRZHKJyfFQlTHgR9KjfFVj-0-a6c44e3a5675594e0da6bed0c18e4a47)
图4-108 “应用”数据库中所有的表关系
step 09 单击【关系】组中的【关闭】按钮,退出【关系】工作窗口,如果窗口中创建的表关系没有保存,则会弹出对话框,提示是否保存,如图4-109所示。
![](https://epubservercos.yuewen.com/0F13FE/15477645704549006/epubprivate/OEBPS/Images/00225.jpg?sign=1738906441-2Cd1AsK49aj5iNsaDMUTfkeTf3y8rOZX-0-a25c930d8ebc285f078946cd85eea415)
图4-109 提示对话框
step 10 若要删除“客户”表和“订单”表的表关系,在【关系】工作窗口中删除关系连接线即可。首先选中这两个表的关系连接线(选中状态下显示得较粗),按Delete键,弹出Microsoft Access对话框,单击【是】按钮,即可删除表关系,如图4-110所示。或者选中关系连接线后,右击,在弹出的快捷菜单中选择【删除】命令,也可删除表关系,如图4-111所示。
![](https://epubservercos.yuewen.com/0F13FE/15477645704549006/epubprivate/OEBPS/Images/00226.jpg?sign=1738906441-cQENwt4wlEhb6CMOtD3kjFqKAYb4yX1a-0-982f0e5b025ca60e056891a26606a73d)
图4-110 Microsoft Access对话框
![](https://epubservercos.yuewen.com/0F13FE/15477645704549006/epubprivate/OEBPS/Images/00227.jpg?sign=1738906441-gH0dwMUAtSIdUSASq15BEtaE8FE1o13v-0-3a9c324c40038c75e79787069d470dfd)
图4-111 选择【删除】命令
提示
删除表关系时,如果表关系中涉及的任何一个表处于打开状态,或正在被其他程序使用,则用户无法删除该表关系。
4.5.4 实施参照完整性
Access允许数据库实施参照完整性规则,从而保证数据不会丢失或遭到破坏。例如,“客户”表和“订单”表之间存在一对多关系,若想要删除一个客户,如果要删除的客户在“订单”表中具有订单,则删除该客户记录后,这些订单将成为“孤立记录”。这些订单仍然包含客户ID,但该ID不再有效,因为它所参照的记录已不存在。由此而知,使用参照完整性规则的目的就是防止出现孤立记录并保持参照同步。
实施参照完整性的方法是为表关系启用参照完整性。实施后,Access将拒绝违反表关系参照完整性的任何操作。下面在“应用”数据库中对表关系实施参照完整性。具体操作步骤如下。
step 01 打开“应用”数据库,切换到【数据库工具】选项卡,单击【关系】组中的【关系】按钮,如图4-112所示,进入【关系】工作窗口。
![](https://epubservercos.yuewen.com/0F13FE/15477645704549006/epubprivate/OEBPS/Images/00228.jpg?sign=1738906441-ri9LUKckDMltTTDAhYozWHEytDQwYFYy-0-168cfbd763827143ffb9922e2ba1238f)
图4-112 单击【关系】组中的【关系】按钮
step 02 切换到【设计】选项卡,单击【关系】组中的【所有关系】按钮,显示出“应用”数据库的所有表关系,如图4-113所示。
![](https://epubservercos.yuewen.com/0F13FE/15477645704549006/epubprivate/OEBPS/Images/00229.jpg?sign=1738906441-Ct0zfdFw6NPEVZbkmDkK2nUazS6cKbRT-0-c2aad56dab50ee904842f36039a74971)
图4-113 “应用”数据库中的所有表关系
step 03 双击“客户”表和“客户访问”表之间的关系连接线,弹出【编辑关系】对话框,选中【实施参照完整性】复选框,单击【确定】按钮,如图4-114所示。
![](https://epubservercos.yuewen.com/0F13FE/15477645704549006/epubprivate/OEBPS/Images/00230.jpg?sign=1738906441-PP6X2lUQvl0a2qDHJUJ8XM3y1dcRTQZX-0-00be037aeb143f413070d26dfd6a12b8)
图4-114 【编辑关系】对话框
step 04 返回到【关系】工作窗口,可以看到,这两个表的关系连接线上分别以和
符号标记出一对多的表关系,如图4-115所示。
![](https://epubservercos.yuewen.com/0F13FE/15477645704549006/epubprivate/OEBPS/Images/00233.jpg?sign=1738906441-QowczF6vS5LuWtClWUbM2VdCWD9MeyTb-0-78d29941d32b1e0f6025b651e126cfad)
图4-115 关系连接线上的符号
当用户对数据库实施参照完整性以后,系统将会严格限制主表和中间表的记录修改和更新操作。限制规则如下。
●如果在主表的主键字段中不存在某条记录,则不能在相关表的外键字段中输入该记录,否则会创建孤立记录。即不允许在“多方”的字段中输入“一方”主键中不存在的值。
●当“多方”的表中含有和主表相匹配的记录时,不能从主表中删除这条记录。例如,如果在“订单”表中有某客户的订单,则不能从“客户”表中删除该客户的记录。但是如果在【编辑关系】对话框中选中【级联删除相关记录】复选框,则用户在进行删除操作时,可以删除“客户”表中某个客户的记录,但是系统会同时删除“订单”表中该客户所有的订单记录,从而保证数据的完整性。
●当“多方”的表中含有和主表相匹配的记录时,不可从主表中改变相应的主键值。例如,如果在“订单”表中有某客户的订单,则不能从“客户”表中改变该客户的客户ID值。但是如果在【编辑关系】对话框中选中【级联更新相关字段】复选框,则允许完成此操作。
4.5.5 设置级联选项
用户有时可能需要更新或删除关系一方的值,那么关系另外一方的值会发生什么变化呢?对于数据库完整性而言,用户希望当关系一方的值更新或删除时,系统能自动更新或删除所有受影响的值。这样,数据库可以进行完整更新,有效地防止整个数据库呈现不一致的状态。
Access提供的【级联更新相关字段】选项和【级联删除相关记录】选项正好可以解决此问题。如果实施了参照完整性并选中【级联更新相关字段】复选框,当更新主键时,Access将自动更新参照主键的所有字段。同样地,如果选中【级联删除相关记录】复选框,当删除包含主键的记录时,Access会自动删除参照该主键的所有记录。
下面在“应用”数据库中对所有表关系实施参照完整性并设置级联选项。具体操作步骤如下。
step 01 打开“应用”数据库,切换到【数据库工具】选项卡,单击【关系】组中的【关系】按钮,进入【关系】工作窗口。
step 02 双击“客户”表和“订单”表之间的关系连接线,弹出【编辑关系】对话框,选中【实施参照完整性】复选框。此时用户可以看到,【级联更新相关字段】和【级联删除相关记录】两个复选框均变为可选状态,选中这两个复选框,单击【确定】按钮,如图4-116所示。
![](https://epubservercos.yuewen.com/0F13FE/15477645704549006/epubprivate/OEBPS/Images/00234.jpg?sign=1738906441-ZM42LQqeETnO5Fb9OjDNuYvPhw9AV93S-0-a3b63934e9b2d9c91b6b76e86295fd6e)
图4-116 【编辑关系】对话框
step 03 使用同样的方法,为其他表设置级联选项。这样就对数据库中的表都设置了参照完整性和级联选项,如图4-117所示。
![](https://epubservercos.yuewen.com/0F13FE/15477645704549006/epubprivate/OEBPS/Images/00235.jpg?sign=1738906441-mAFGa3ZqJTzjHKHfA6CZc6f7Bk8MhU4l-0-9125bde12993d408c556580f26c06d1e)
图4-117 设置参照完整性和级联选项
提示
如果主键是自动编号字段,则选中【级联更新相关字段】复选框时将不起作用,因为系统无法更改自动编号字段中的值。