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