数据连接通常用于通过两个表的公共属性或字段将一个表的字段追加到另一个表中。可以选择基于属性或预定义的地理数据库关系类来定义连接,或者也可以按位置定义连接(也称作空间连接)。对于要连接的地理数据库数据,如果已在地理数据库中为其定义了一个关系类,将只列出基于关系类的连接。
可将多个表或图层连接到一个表或图层,并且可将关系类连接与属性连接混合使用。移除某个连接表时,同时会移除在该表之后所连接的表中的所有数据,但会保留之前所连接的表中的数据。移除连接后,基于追加列的符号系统或标注会恢复到默认状态。
大多数情况下,追加列以 <表名称>.<字段名> 形式命名。当目标表和连接表具有相同的字段名时,此命名约定可防止字段名重复。如果不想像上面那样显示完整字段名称,可单击“表”窗口的表选项按钮 ,然后单击显示字段别名打开或关闭此选项。启用此选项时,选项菜单上此选项旁将显示复选标记,字段的表名称前缀将不再显示。
以下连接表中的字段名即以表名称为前缀:
以下连接表仅显示字段别名:
连接数据之前对数据进行汇总
根据数据的组织方式,在将数据连接到图层之前可能需要汇总表中的数据。汇总表时,ArcMap 会创建一个新表来包含从表获得的汇总统计数据。可以创建各种汇总统计数据,包括计数值、平均值、总和、最小值和最大值。
例如,假定您要创建州而非县气象地图,但您仅拥有县的气象信息。您可以为州汇总各县的数据(例如,查找一个州内所有县的平均降雨量),然后通过将新建的输出表连接到州图层创建一个关于州的降雨量气象地图。
编辑和连接表
连接验证
在创建连接前,可使用连接数据 对话框上的验证连接按钮可对其进行分析。连接验证用于评估在创建连接时可能遇到的任何潜在问题。连接验证将对两个参与数据集进行分析,以确定数据是否存在任何常见问题。以下列出了数据中要检查的内容:
- 检查字段名称是否以无效字符开头。
- 检查字段名称是否包含无效字符。
- 检查字段名称是否与保留字匹配。
- 检查是否存在非地理数据库 MS Access 表。
出现上述四个问题中的任何一个都可能会导致连接字段在属性表中显示空值或导致选择和记录数不正确。分析 coverage 数据时,连接验证将字符符号、数字符号 (#)、美元符号 ($) 和连字符 (-) 作为合法字符;检查 ArcSDE 软件连接数据的字符时,句号 (.) 为合法字符。如果字段名称以上述任一字符开头,仍将出现警告。
连接验证将检查以下字符:
无效的起始字符:`~@#$%^&*()-+=|\\,<>?/{}.!'[]:;_0123456789
无效的包含字符: `~@#$%^&*()-+=|\\,<>?/{}.!'[]:;
连接验证还会告知您创建连接后将匹配的记录的数目。可计算成功匹配的记录的百分比,如果匹配的记录数与预期不符,还可确定数据中是否可能存在其他错误。使用文本字段创建连接时,如果本应匹配的记录存在拼写错误或因字符大小写导致找不到匹配项,则可能会出现上述情况。如果连接验证计算出的匹配记录数大于源数据集中的记录数,将显示一条警告消息,指明在参与的数据之间存在 1:M 或 M:M 的关系,您不应使用连接将这些数据集关联在一起,而应使用关联或关系类。
有关连接数据的性能提示
来自追加字段的数据可用于对要素进行符号化和标注以及执行查询等许多其他操作。访问连接的数据会比访问目标表中的数据要慢,因为需要执行额外的工作来维护连接。
处理连接的数据时可使用以下提示来改善性能:
- 可以使用连接数据 对话框(可通过在 ArcMap 中右键单击某个图层访问)或一组地理处理工具执行连接。当处理特大数据集时,可使用“连接”地理处理工具来获得最佳性能。如果您要自动执行连接操作所涉及的重复或复杂步骤时,还可以将这些工具加入到地理处理模型和脚本中。由于这些工具在执行实际的后台连接处理时与连接数据 对话框略有不同,因此,如果在使用此对话框的连接功能时遇到任何异常问题,请使用这些工具。这些地理处理工具为“空间连接”工具、“添加连接”工具和“移除连接”工具。
-
为连接字段创建属性索引。如果连接仅涉及 shapefile、dBASE 文件、coverage 或 INFO 文件,则创建索引并不会改善绘制或使用表窗口时的性能。但会改善编辑时的性能。所有其他情况下,属性索引可改善整体性能。
- 连接同一地理数据库中的数据时,可选择仅保留匹配记录选项。某些情况下,此选项会产生不同结果,但允许数据库对连接进行处理。您会发现,此选项通常会提高需要访问连接列中数据的操作(符号化、标注等)的速度。
默认的保留所有记录选项将始终在客户端上执行处理。不需要访问连接数据的操作(如使用默认符号化进行绘制)通常具有较好的性能。但在需要访问连接数据时,操作可能会减慢许多。
- 对于目标表和连接表来自不同数据源的交叉数据库连接,性能可能会较差。尤其是当连接表来自地理数据库或 OLE DB 连接时更是如此。当连接表来自基于文件的数据源(如 shapefile、dBASE 文件以及 coverage)且目标表具有 ObjectID 字段(大部分数据源)时,性能会好很多。
- 将多个表或图层连接到单个图层会使性能大幅下降。如果所有数据都来自相同的 ArcSDE 服务器并且在连接时选择了仅保留匹配记录,则性能将不会受到很大的影响。
连接表可能失败的原因
执行连接操作之后,连接表字段中的值可能显示为空或 null。显示 Null 值的原因有如下多种:
- 用于连接的指定字段中的值不匹配。
连接区分大小写,使用字符串字段创建连接时要注意此问题。例如,NEW YORK 不会与 New York 连接。要将字符串值转换为正常的大小写形式,请参阅进行字段计算中的任务。
- 表或要素类的名称,或者表或要素类中的字段名称包含空格或特殊字符。
这些特殊字符包括连字符(如 x-coordinate 和 y-coordinate)、圆括号、方括号以及 $、% 和 # 等符号。实际上排除了字母数字和下划线之外的所有符号,但字段名称不能以数字或下划线开头。必须先对带分隔符的文本文件或其他表中的字段名称进行编辑以删除不支持的字符,然后再在 ArcGIS 中使用这些文件。地理数据库的要素类、表和字段的名称最多可包含 64 个字符。(更具体地说,您最多只能为个人地理数据库的要素类名称输入 52 个字符,因为系统会将字符总数追加到 64 个。)Shapefile 和 .dbf 字段的最大名称长度为 10 个字符。对于 INFO 表,最多使用 16 个字母或数字。有关更多字段命名原则,请参阅添加和删除字段。
- 表中的字段名为 Microsoft Access 的保留字。
例如,date、day、month、table、text、user、when、where、year 和 zone。要获取保留字列表,请参阅 Microsoft 支持文章 (KB 286335)。
- 表存储在非个人地理数据库的 Microsoft Access 数据库中。
应通过 OLE DB 连接在 ArcGIS 中访问 Microsoft Access 表,而不应试图直接向 ArcMap 添加数据库。要了解如何添加 OLE DB 连接,请参阅在 ArcGIS 中使用 Microsoft Access 文件。