@Dano справедливо поднимает некоторые вопросы, которые лучше всего решать в полном ответе.
Одна из трудностей , уже отмеченных @Celenius, заключается в том, что соединение между B и A (в любом направлении) дублирует все поля; исправить это может быть обременительно. В комментариях я предположил, что очевидный простой способ (экспорт в электронную таблицу) поднимает вопросы целостности данных. Другая трудность , уже затронутая предложением Celenius, касается решения этой проблемы, когда никакая комбинация атрибутов не может служить ключом как для A, так и для B, поскольку это исключает объединение базы данных. Пространственное соединение обходит эту проблему.
Что же тогда является хорошим решением? Один подход использует A для идентификации соответствующих записей B, содержащих требуемые данные. В зависимости от предположений о конфигурации многоугольников - перекрываются ли они, могут ли некоторые содержать другие и т. Д. - это может быть выполнено различными способами: используя один слой для выбора объектов в другом или с помощью объединений. Дело в том, что все, что мы хотим сделать на этом этапе, это выбрать подмножество B, соответствующее A.
Получив этот выбор, экспортируйте его и дайте ему заменить A. Готово .
Это решение предполагает, что все поля в B предназначены для замены их аналогов в A. Если нет, то действительно необходимо выполнить соединение 1-1 B (источник) с A (пункт назначения). Объединение на основе идентификаторов является лучшим, но создание объединения на основе многоугольника (Celenius) работает хорошо, если идентификаторы недоступны и нет шансов, что соответствующие формы многоугольников в A и B могут отличаться, хотя и незначительно . (Это тонкий момент и потенциальная причина коварных ошибок, потому что предыдущие правки в B в многоугольники, которые не соответствуют A, все еще могли бы незаметно изменить другие многоугольники в B, если ГИС "привязывает" или "поддерживает топологию" или иным образом автоматически вносить глобальные изменения во время локального редактирования.)
На данном этапе имеется две копии каждого поля: если [Foo] является общим полем для A и B, то объединение содержит A. [Foo] и B. [Foo]. Используя вычисление поля , скопируйте B. [Foo] в A. [Foo]. Повторите для всех необходимых полей. После этого удалите соединение.
Хотя эта процедура может быть немного обременительной, когда задействовано много полей, ее достоинства включают
- Это простой и быстрый сценарий.
- Написание сценария оставляет контрольный журнал, документирующий обработку данных. Это крайне важно для защиты целостности данных.
- Он защищает от некоторых видов оптовых ошибок, таких как сохранение неправильного поля после объединения (таким образом, сохраняя старые данные вместо новых данных для этого поля) или удаляя критическое поле.
- Он использует встроенные средства защиты, предлагаемые системой управления базами данных, такие как принудительное применение типов данных и бизнес-правил, которые используются для предотвращения и выявления ошибок, а также для обеспечения согласованности всех таблиц и слоев в базе данных.
Некоторые из руководящих принципов, связанных с этим предложением,
- Используйте вашу систему управления базами данных для обработки данных, а не программное обеспечение, не предназначенное или не подходящее для этой задачи.
- Избегайте изменения структур базы данных (таких как удаление или добавление полей), когда операциям это абсолютно не нужно.
- Используйте возможности программного обеспечения для автоматизации, чтобы упростить работу, задокументировать ее и сделать операции воспроизводимыми.
Кто-то может возразить, что во многих случаях существуют более быстрые и простые способы достижения того же результата. Да, могут быть, и они могут быть эффективными, и обычно они работают, когда выполняются с осторожностью. Но решения, которые рискуют данными, трудно рекомендовать и защищать как ответы общего назначения. Лучше всего их использовать в одноразовых ситуациях с небольшими наборами данных, где коррупция в данных должна быстро стать очевидной, а последствия любых таких ошибок несущественны.