honghu
路人甲
路人甲
  • 注册日期2003-08-06
  • 发帖数113
  • QQ
  • 铜币292枚
  • 威望0点
  • 贡献值0点
  • 银元0个
阅读:2008回复:1

(原创)Geodatabase中的属性域和有效性规则【教学】

楼主#
更多 发布于:2003-08-06 00:31
ArcGIS8 包含了四种主要的有效规则:属性域(Attribute Domian)、连接规则(Connectiveity Rules)、关系规则(Relationship Rules)、定制规则(Custom Rules)。
以下主要介绍属性域。
属性域是描述一个字段类型的合法值的规则,用于限制在表、要素类或子类的任何具体的属性字段内允许的值,每一个要素类或表有一个属性域的集合,这些属性域用语不同的属性和子类,并且可以在Geodatabase的要素类和表之间共享。属性域是有效属性的指定集合或范围。确定一个属性的值时,属性域能够防止许多简单的错误。同时可以将新对象使用期望的值作为默认值,连接规则用在网络中,效验一种类型的要素是否正确的和另外一种要素连结。
属性域的组成元素有:
范围域——范围域限制对象和要素的数值型属性的最大值和最小值范围。
代码值域——定义要素的分类值的有效值
默认值——当要素被创建、分裂、合并时,默认值作为对象类中的子类型应用预期值
分裂要素——可以定义分裂政策,确定分裂要素所发生的属性变化
合并要素——可以定义合并政策,确定分裂要素所发生的属性变化
一般认为有两种不同的属性域,即范围域(Range Domains)(也叫值域)和代码值域(Code Value Domians)(也称为码域)。每个域有一个名字、一个描述、一个可以应用的属性类型。范围域是数值属性指定值的有效范围,代码值域可以应用与任何属性类型,包括文本、数字、日期等。代码值域给一个属性指定有效的取值集合,包括两个值,一个是存储在数据库中实际值,一个是说明值的实际意义的用户友好描述。值域详细规定了可以接受的起始值和结束数值。这些数值可以是整形数(9——99),也可以是带有小数位的数字(9.15—99.86)。码域是可以接受的编码的详细清单。
属性域为数据库提供了良好的数据检验方法,码域提供了一个有效的下拉列表,而值域则提供了检测值域错误的验证工具。这样,码域的验证是自动的,而值域的验证则是交互式的。
由于域是Geodatabase的一个属性,所以它对于Geodatabase中任何一个表都是适用的。唯一需要注意的是你所使用的字段或子类必须也同样具有这个域的字段类型。例如文本型域只能对文本型字段使用。
ArcINFO8的属性域不规定空值“NULL”在其关联的字段出现与否,当表或要素在数据库中被建立时,“NULL”枝可以是允许的或不允许的。但数据库本身不允许“NULL”值插入不支持它的列中。然而所有域把“NULL”值作为有效值对待。在ArcINFO8中,分段的域(如10-16,65-80)是不允许的。假如你想使用这样分段的数值,你还得把所有的数值包括在一个码域中。可以从一个UML方案中引入一个域,但不可以把一个域输出到另外一个Geodatabase中,也不可以输回到UML模型中。
值域和码域都可以通过ArcCatalog来创建。右击Geodatabase并点击Properties就可以进入Properties对话框进行创建,创建域的过程比较简单,这里就不祥述了。
如果你无法改变一个域的属性,你应该检查两件事情:
1、这个域是否正被Geodatabase中的任何一个要素类使用?如果这个域正被Geodatabase中的任何一个要素类使用,你必须在编辑这个域之前切断他与要素类的关联。千万注意,由于一个域可以被许多要素类同时使用,因袭在编辑域前应该把他们全部检查一遍。
2、是否正在用ArcMap查看图层?如果你正在使用Personal Geodatabase,ArcMap将会在你查看Geodatabase中的任何一个要素类时锁住整个Geodatabase。解决的办法当然是最好关闭ArcMap了,呵呵。如果你正用ArcSDE Geodatabase,如果有人正在查看使用着域的某个要素时,你也无法改变这个域。只有那个人停止查看数据或你切断该域与要素类的关联,域才可以被编辑。

使用域不一定要有子类,你可以对表中的所有字段使用域,域是字段的一个属性,所以你可以在要素类属性表的Fields标签下设定。当然如果为了准确的描述某个要素,域可以通过子类施于一组要素。每个子类的所有其它字段都可以使用域。如果你想把某个子类中的所有域复制到另一个子类中,可以使用Use Defaults按钮。

请记住!子类和域是由ArcINFO的客户端来操作的。RDBMS只是把子类和域的信息存储在附加的表格里,却不知道如何执行有效性协议。作为ArcINFO的用户,因为这些协议是被建在ArcMap和ArcCatalog内部的,所以对用户是屏蔽的。如果ArcINFO以外的其他数据库用户对数据库进行编辑,就要由数据管理员告诉他们这些规则。以使得RDBMS也象ArcINFO一样具有属性的有效性规则。

参考
ArcGIS 8开发与实践(毛锋)
Geodatabase教程(培训教程)
Building a Geodatabase(ESRI)
Modeling Our World(ESRI)

喜欢0 评分0
linqg
路人甲
路人甲
  • 注册日期2008-12-25
  • 发帖数17
  • QQ
  • 铜币136枚
  • 威望0点
  • 贡献值0点
  • 银元0个
1楼#
发布于:2009-04-24 19:43
<P>路过 </P><img src="images/post/smile/dvbbs/em02.gif" />
举报 回复(0) 喜欢(0)     评分
游客

返回顶部