没有arcobjects代码,是否可以在版本化要素类上维护主键?


11

由于将ObjectID用作关系中的主键不是一个好主意,因此需要使用其他一些列。是否可以使用DBMS序列来填充版本化要素类中的主键列,还是需要编写arcobjects代码来做到这一点?

我听说可以使用全局ID,但是非GIS DBA维护相关表经常对此想法不满意。


由于我的记忆力很差,并且可能无法正常工作,因此将我的答案转为评论:很多年前,我尝试在adds表上使用插入触发器。如果我没记错的话,那确实可行。我最终(并且很快)使用了ArcObjects解决方案(称为存储过程),因为它(对我来说)更容易,因为在添加/版本化新要素类时不必编写新触发器。
杰·康明斯

2
我认为这是带有空检查的AFTER INSERT触发器(oracle),因此如果移动新行,它将获得现有的主键值。如果为null,则将填充。也许我错了,而且工作不正常,我没有意识到。正在使用什么数据库?
杰·康明斯

@Jay感谢您的阐述。我问这个问题的主要原因是,确定除我为此编写的arcobjects代码之外,是否还有其他方法可以解决此问题。我不想告诉别人,如果不进行深入研究,我的解决方案是唯一可能的解决方案。如果是这样,维护它有多困难。我只是偶尔编写存储过程,而大多数存储过程都在sql服务器上。我怀疑有一种在dbms级别(而不是arcobjects)执行此操作的方法,但从未在所有dbms上仔细研究过。
Kirk Kuykendall

Answers:


7

是的,有可能-有一些警告。

您可以使用触发器来做到这一点-但实现将是特定于DBMS的(因为您必须使用基础数据库(特定)机制来实现不同的AFTER INSERT触发器。

您将无法在该字段上指定任何类型的UNIQUE约束,因为“插入和基表”可能对您修改的每一行都有重复的条目(这就是在版本化数据库中建模更新的方式)。如果您在基表上犯了一个错误,那么您最终将在压缩操作开始失败时意识到这一点。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.