Можно ли поддерживать первичные ключи в версионных классах объектов без кода arcobjects?

11

Поскольку не рекомендуется использовать ObjectID в качестве первичных ключей в отношениях, необходимо использовать другой столбец. Можно ли использовать последовательности СУБД для заполнения столбцов первичного ключа в версионных классах объектов, или мне потребуется написать код arcobjects для этого?

Я слышал, что можно использовать глобальные идентификаторы , но не связанные с ГИС администраторы баз данных часто осуждают эту идею.

Кирк Куйкендалл
источник
Переместив мой ответ в комментарий, так как у меня недостаточно памяти и он мог работать неправильно: несколько лет назад я пытался использовать триггер вставки в таблице добавлений. Если я правильно помню, это сработало. В конце концов (и быстро) я перешел к решению ArcObjects (которое называлось хранимой процедурой), потому что это было проще (для меня), потому что мне не нужно было писать новый триггер при добавлении / создании версий нового класса объектов.
Джей Камминс
2
Я думаю, что это был триггер AFTER INSERT (оракул) с нулевой проверкой, поэтому новая строка получит существующее значение первичного ключа, если оно будет перемещено. Если бы оно было нулевым, оно заполнилось бы. Может быть, я ошибаюсь, и это не сработало, и я этого не осознавал. Какую базу данных используете?
Джей Камминс
@Jay Спасибо за разработку. Моя основная причина задать этот вопрос - определить, существуют ли другие подходы к этой проблеме, кроме кода arcobjects, который я написал для этого. Я не хочу говорить кому-то, что мое решение является единственным возможным решением без тщательного расследования. И если да, то насколько сложно это поддерживать. Я только иногда пишу хранимые процедуры, и большинство из них на сервере SQL. Я подозреваю, что есть способ сделать это на уровне dbms (вместо arcobjects), но никогда не рассматривал его близко ко всем dbms.
Кирк Куйкендалл

Ответы:

7

Да, это возможно - с несколькими оговорками.

Вы можете сделать это с помощью триггеров - но реализация будет зависеть от СУБД (поскольку вам придется реализовать другой триггер AFTER INSERT, используя базовый (специфический) механизм базы данных.

Вы не сможете указать какое-либо ограничение UNIQUE для этого поля, так как вставки и базовые таблицы могут содержать дублирующиеся записи для каждой изменяемой строки (именно так моделируются обновления в версионных базах данных). Если вы допустите ошибку, сделав это на базовой таблице, вы в конечном итоге поймете это, когда ваши операции сжатия начнут давать сбой ...

Раги Язер Бурхум
источник