Чтобы отредактировать версионные (традиционные) данные с помощью SQL-клиента, необходимо редактировать версионное представление данных, а не саму базовую (бизнес) таблицу. Традиционные версионные таблицы используют для записи изменений две связанные таблицы: таблицу добавлений и удалений (вместе их называют дельта-таблицами). При редактировании версионного представления таблицы изменения записываются в таблицы добавлений и удалений. Прямое редактирование базовой таблицы нарушает эти правила и может привести к появлению несвязанных записей и потере данных.
При выполнении SQL-запроса, изменяющего данные в версионном представлении, для каждого типа запросов в базе данных происходит следующее:*
- Insert (Вставка). В таблицу добавлений, связанную с базовой таблицей, добавляется запись, а идентификатор объекта для новой записи генерируется автоматически.
- Update (Обновление). Эта команда удаляет исходную запись и добавляет новую, содержащую уже новую информацию. Следовательно, при выполнении команды Update (Обновление) в каждую из таблиц, связанных с базовой, добавляется по одной записи: и в таблицу добавлений, и в таблицу удалений.
- Delete (Удалить): строка добавляется в таблицу удалений базовой таблицы.
*Если редактирование версии Default производится в тот момент, когда она находится в исходном состоянии (0), все результаты редактирования немедленно переносятся в базовую таблицу.
Имейте в виду, что при выполнении редактирования средствами SQL, согласование в рамках версии не производится. Следовательно, после завершения редактирования нужно выполнить согласование изменений с родительской версией с помощью ArcGIS Desktop или скрипта на языке Python.
Опции редактирования
Можно создать новую именованную версию базы геоданных и редактировать ее. Можно также напрямую редактировать версию Default. Какой именно способ выбрать, зависит от требований в вашей ситуации. Чтобы добиться оптимальной производительности и масштабируемости, очень важно выбрать подходящую модель: либо редактирование именованной версии, либо редактирование версии Default.
Редактирование именованной версии
Создавать именованную версию (для редактирования версионного представления средствами SQL) стоит в тех случаях, когда в вашей ситуации выполняется любое из перечисленных условий.
- Несколько пользователей редактируют одни и те же данные.
- Необходим хорошо организованный процесс управления качеством.
- Не требуется, чтобы изменения были доступны другим пользователям немедленно: они будут храниться отдельно, пока вы не выполните согласование и не закрепите их.
- Версионные классы пространственных объектов, которые вы хотите отредактировать, используют бинарный формат хранения геометрии.
- Версионные классы пространственных объектов или таблицы, которые нужно редактировать, зарегистрированы как версионные с опцией переноса результатов редактирования в базу.
При редактировании через версионное представление, результаты редактирования записываются в таблицы добавлений и удалений. Результаты редактирования записываются в состояние, на которое в текущий момент ссылается именованная версия.
Чтобы отредактировать данные в именованной версии, нужно выполнить перечисленные ниже шаги именно в таком порядке:
- Создайте версионное представление для версионной таблицы или класса пространственных объектов (если оно еще не было создано).
- Создайте версию базы геоданных, которую вы будете редактировать.
- Чтобы указать, к какой именно версии вы хотите получить доступ, используйте процедуру set_current_version. Это действие привязывает сеанс редактирования к данному состоянию именованной версии и блокирует версию.
- Начните сеанс редактирования с выполнения процедуры edit_version или другой подходящей для вашей базы данных функции.
- Отредактируйте данные в версионном представлении с помощью SQL.
- Примените изменения к базе данных или отмените их.
- Завершите сеанс редактирования выполнением процедуры edit_version или другой подходящей для вашей базы данных функции.
- Согласуйте и закрепите ваши изменения через ArcGIS.
- Когда все изменения будут отправлены через ArcGIS в родительскую версию, можно будет удалить ту версию, которую вы создавали для редактирования через версионное представление.
Редактирование версии Default
Вы можете редактировать версию Default средствами SQL через версионные представления, если выполняется одно или более следующих условий:
- Требуемые изменения относятся к типу коротких транзакций.
- Вам нужно, чтобы изменения, производимые через версионное представление, были доступны другим пользователям немедленно.
- При редактировании версионных классов пространственных объектов для хранения геометрии в базе данных SQL используется пространственный формат, а не бинарный формат.
- Таблица классов объектов, которую нужно редактировать, не зарегистрирована как версионная с опцией переноса результатов редактирования в базу.
- Данные, которые вы будете редактировать, не реплицируются. Если вы редактируете версию по умолчанию реплицированных данных, изменения не будет синхронизированы.
При редактировании версии Default результаты редактирования записываются в дельта-таблицы точно так же, как при редактировании именованной версии. Однако при редактировании версии Default любой пользователь, который будет работать с версией Default, сможет увидеть внесенные вами изменения.
Если версия Default находится в исходном состоянии (0), каждое изменение применяется непосредственно к базовой таблице версионной таблицы или класса пространственных объектов. Когда версия Default редактируется клиентом ArcGIS, она обновляется, чтобы ссылаться на новое состояние базы данных после сохранения. Если версионное представление редактирует версию Default напрямую, каждая операция вставки, обновления и удаления записывается в текущее состояние соответствующей версии Default.
Например, если версия Default обновляется клиентом ArcGIS при постоянных изменениях, выполняемых через версионное представление, то эти изменения могут применяться для многих состояний.
Как только результаты редактирования будут закреплены, они сразу же станут доступными для:
- пользователей или приложений, работающих с версионной таблицей и версией Default;
- пользователей или приложений, работающих с дочерней версией, имеющей статус родства с текущим состоянием версии Default.
Не следует задавать версию или начинать сеанс редактирования, если вам необходимо редактировать данные в базе геоданных Default через версионное представление. Выполните следующие действия:
- Создайте версионное представление для версионной таблицы или класса пространственных объектов (если оно еще не было создано).
- Отредактируйте данные в версионном представлении с помощью SQL. Вы автоматически будете редактировать текущее состояние версии Default.
- Примените изменения к базе данных или отмените их. Лучше всего применять или отменять изменения после каждого редактирования, пока ваша транзакция открыта, а для дельта-таблиц созданы эксклюзивные блокировки. Блокировка действует до завершения транзакции.