字段构成了表的结构。每个表都必须包含字段。例如,您可以创建一个定义了字段但不包含任何行(记录)的空表。
在数据库中,字段可用于维系表之间的关系。只需在两个表或多个表中创建相互匹配的字段即可。例如,如果在数据库中存储了一个名为 toy_store 的表,同时还存储了一个用于追踪各店雇员信息的 staff 表,那么您便可以在两表之间创建一个公用字段,该字段将填入诸如商店标识符一类的信息。特定玩具店的商店 ID 值在两表中是相同的。
如下所示,STORE_ID 字段已添加到 toy_store 表:
toy_store 表通过商店 ID 链接到 Employee 表。下表显示了 The Play House 的三名雇员:
某些字段还用于维系表及其属性索引之间的关系。
表中的字段使用相同的数据类型存储同一类别的数据。例如,如果在客户表中有一个 name 字段,则该字段的输入内容将是所有客户的姓名,并以文本形式进行存储。需确保输入的内容清晰。例如,您不可以在此字段中放置一条客户姓名记录,同时又在其中放置一条产品名称记录。
在创建表或向现有表添加字段时,您可定义各字段使用哪种数据类型存储数据。在某些情况下,还可指定字段的长度。
字段名称
字段名称是为表中各列指定的名称。名称应指明各列中所包含的数据。例如,在 ArcCatalog 中创建要素类时,表中预填充了一个 Object ID 字段和一个 shape 字段。Object ID 字段包含要素类中每个对象的唯一 ID 编号。shape 字段定义了要素类中存储的形状类型:点、线、面、多点或多面体。
也可以使用固定短语来指示列的类型。例如,如果在表中创建一个单独的唯一 ID 以便用于建立索引,则可将字段命名为 ID_UK,其中 UK 表示这是唯一键字段。
同一表中的字段名称必须唯一,例如,不能存在名称都是 ObjectID 的两个列。字段名称还必须以字母开头,并且不得包含空格或保留字。有关数据库特定限制的详细信息,请参阅文件地理数据库的大小和名称限制或数据库数据和 ArcGIS。
对于某些字段名称,在 ArcGIS 中会显示其在企业级地理数据库存储表中的全限定名称。例如,如果创建或导入了一个包含名为 Area 的字段的面要素类,则会在该名称前追加数据库、方案和表名称。该名称即您在要素类的属性表中看到的名称。也就是说,对于 museum 数据库的 prof 方案中所存储的名为 archsites 的面要素类,其 Area 字段将显示为:MUSEUM.PROF.ARCHSITES.AREA。
以下列出了企业级地理数据库中包含的所有完全限定的字段名称:
- FID
- 面积
- LEN
- POINTS
- NUMOFPTS
- ENTITY
- EMINX
- EMINY
- EMAXX
- EMAXY
- EMINZ
- EMAXZ
- MIN_MEASURE
- MAX_MEASURE
对于这种情况,可能要考虑使用不同的字段名称或字段别名。
重命名字段
可以对属性对话框中字段选项卡上的表或要素类的字段进行重命名。ArcGIS 10 或更高版本的地理数据库中的字段支持重命名,并可以重命名数据库表中的字段。
要重命名字段,可以在目录树中右键单击要素类或表,然后单击属性。单击字段选项卡查看该表或要素类中的字段的列表。单击要重命名的字段的文本,然后输入一个新名称。单击确定应用更改并关闭属性对话框。
无法重命名以下字段:
- ObjectID 和 globalID 字段
- 任何与形状相关的字段;形状、形状长度、形状面积
- 网络要素类的启用字段、辅助角色字段或网络权重字段
- 制图表达字段
- 参与网络数据集、Terrain 或宗地结构的要素类中的字段
- 用于编辑器追踪的字段
- 关系类主键和外键字段
- 子类型字段
- 栅格字段
字段名称规则和限制
下表列出了受支持的字段名称字符规则:
字符 | 名称开头 | 其他位置 | 别名中 |
---|---|---|---|
字母 (A-Z) | |||
下划线 ( _ ) | |||
数字 (0-9) | |||
空格 | |||
符号(下划线除外) | |||
上标字母和数字 | |||
下标字母和数字 |
其他字段名称规则和限制如下:
- 字段名称中不能包含保留字,如 all 或 result。
有关其他保留字,请查阅数据库管理系统 (DBMS) 文档。
- 字段(列)名称的长度取决于基础数据库。
有关数据库特定限制的详细信息,请参阅文件地理数据库的大小和名称限制或数据库数据和 ArcGIS。
字段别名
字段别名用于为字段指定备用名称。通常使用尽可能简短的字段名称来指示该字段中所存储的数据。字段名称中还不能使用空格或特殊字符,而且如上所述,某些字段将在表中显示其完全限定名称。在这些情况下,您可使用字段别名为字段指定一个更具描述性的名称。例如,如果您有一个名为 ST_SUFX 的字段,该字段用于存储街道的类型,并通过街道名称中使用的后缀来表示街道类型,则可为该字段指定别名 Street name suffix。
使用属性域控制字段值
属性域是判断地理数据库中表的字段有效值的规则。它们通过限制用户添加至指定字段的数据值来强制保持数据完整性。
仅在字段有可定义的一组或一系列特定值时,您才可对该字段应用属性域。例如,很难向存储“您最喜欢的食物是什么?”这一调查问题的答案的字段 应用域,因为可能存在大量不同的回答。然而,用于存储眼睛颜色数据的字段可以给它分配属性域,因为只有几个可能的有效值。
- 黑色
- 褐色
- 蓝
- 绿
- 红褐色
- 灰色图
- 紫罗兰色
针对存储眼睛颜色数据的字段使用属性域可确保值的一致性。如果允许数据采集员在文本字段中为眼睛颜色输入任意一种颜色,则蓝色眼睛可能会变成以下某种颜色:
- 天蓝色
- 深蓝色
- 天蓝色
- 深蓝色
- 蓝绿色
属性域的设置还可防止出现拼写错误或排字错误。即使数据采集员知道应该使用 blue 一词表示蓝色眼睛,但也可能将单词拼写错误 (bleu) 或在文本字段中输入单词 (vlue) 时不小心按错了键。
属性域的类型
用于限制字段值的属性域有以下两种类型:编码值属性域和范围属性域。
编码值属性域使用代码为存储离散数据的字段定义一组允许值
对于任何数据类型都可使用编码值属性域。对于眼睛颜色字段,您可以使用以下示例代码集之一创建一个编码域:
- 示例 1
- Blk = 黑色
- Brn = 褐色
- Blu = 蓝色
- Grn = 绿色
- Hzl = 红褐色
- Gra = 灰色
- Vlt = 紫色
- 示例 2
- 1 = 黑色
- 2 = 褐色
- 3 = 蓝色
- 4 = 绿色
- 5 = 红褐色
- 6 = 灰色
- 7 = 紫色
范围属性域用于定义字段所允许的数值范围。
字段必须为数字或日期数据类型时才能使用值域范围。例如,如果某个字段存储动物园中西部低地大猩猩个体活胎的出生体重数据,则该字段示例可应用值域范围。其范围将为最低重量 (1 kg) 至最高重量 (2.5 kg)。
有关属性域的更多信息,请参阅属性域快速浏览。
要了解如何创建属性域,请参阅新建属性的范围属性域和新建编码值属性域。
使用子类型
子类型是对地理数据库中的某种要素类或表的细分。它们可用于根据数据的唯一特征或行为对要素进行分组。此特征或行为由表中某一字段的值表示。例如,对水文表而言,不同类型的水道(如小溪、溪流、河道、运河和河流)都可以拥有子类型。对于每个子类型,可以应用不同的拓扑规则、连通性规则、默认值以及关系规则。
使用子类型存储各组相关要素可以改善查询的性能。如果在单个要素类中存储了不同类型的数据,而不是使用子类型,则在数据库中将存在更多的要素类,而且搜索可能会需要更长时间。
当使用子类型时,可以使用以下规则:
- 只能将子类型应用于表或要素类中的一个字段。
- 要应用子类型的字段必须是长整型或短整型字段。
- 可对不同子类型应用不同的拓扑规则和关系规则。
- 您可以基于子类型对表中的其他字段应用不同的属性域或编码域。
请完成以下步骤以应用子类型:
- 请确保要应用子类型的字段是短整型或长整型字段。如果该字段不是这种类型,则向表或要素类中添加一个短整型或长整型字段。大多数情况下,短整型即可满足要求。但是,如果您的子类型值有可能超过 32,767,则请使用长整型字段。
例如,对于河流要素类,您可以添加一个名为 Watershed 的短整型字段,以便基于河流间的分水岭创建子类型。
- 在表或要素类的属性对话框中,从子类型选项卡的第一个下拉列表中进行选择来指定子类型字段。
对于河流示例,请在子类型字段列表中选择 Watershed 字段。
“子类型”表中将自动添加一个新的子类型。此默认子类型的编码为 0,描述为“新建子类型”。
- 双击每个字段,然后输入子类型编码和描述。
例如,可将第一个编码更改为 1 并将描述更改为第一个分水岭的名称。
- 或者继续向“子类型”表中添加子类型编码和描述。
在编码 1 下方的字段中,您可添加编码 2,其描述字段中包含对应的分水岭名称,然后在编码 2 下方的字段中添加具有对应分水岭名称的编码 3 等,直到为河流要素类中表示的所有分水岭都创建了编码和描述为止。
- 要为每个子类型指定不同的默认值或属性域,请单击子类型列表中的子类型。在默认值和属性域列表中,可为列表中的任意字段输入默认值。可以单击“属性域”字段并从下拉列表中选择一个属性域,以将编码或属性域应用于列表中的字段。如果不存在属性域,可单击属性对话框底部的属性域按钮,然后在出现的工作空间属性域对话框中创建属性域。
指定的默认值和属性域仅应用于子类型列表中所选的子类型。如果单击子类型列表中的其他子类型,则默认值和属性域可能为空(如果尚未指定该子类型的默认值和属性域),也可能包含不同的值。