@Dano справедливо порушує деякі питання, на які найкраще вирішити повну відповідь.
Одна з труднощів , яку вже зазначав @Celenius, полягає в тому, що з'єднання між B і A (в будь-якому напрямку) дублює всі поля; це може бути важко виправити. У коментарях я припустив, що очевидний простий спосіб (експорт до електронної таблиці) викликає питання цілісності даних. Ще одна складність , на яку вже звертається пропозиція Селеніуса, стосується вирішення цієї проблеми, коли жодна комбінація атрибутів не може слугувати ключовою як для А, так і для В, оскільки це виключає об'єднання бази даних. Просторове з'єднання обходить цю проблему.
Що ж тоді є хорошим рішенням? Один підхід використовує A для визначення відповідних записів B, що містять бажані дані. Залежно від припущень щодо конфігурацій багатокутників - перекриваються вони, чи можуть одні містити інші тощо - це може бути здійснено різними способами: використовуючи один шар для вибору об'єктів в інший або за допомогою з'єднання. Сенс у тому, що все, що ми хочемо зробити на цьому етапі, це вибрати підмножину B, відповідне А.
Досягнувши цього відбору, експортуйте вибір та дозвольте йому замінити А. Готово .
Це рішення передбачає, що всі поля в B призначені для заміни своїх аналогів в A. Якщо ні, то дійсно необхідно здійснити приєднання B 1 (джерело) 1-1 до пункту призначення. Об'єднання на основі ідентифікаторів є найкращим, але введення об'єднання в полігонічну ідентичність (Celenius) працює добре, якщо ідентифікатори недоступні і немає шансів, що відповідні форми багатокутника в A і B можуть, однак, незначно відрізнятися . (Це тонкий момент і потенційна причина підступних помилок, тому що попередні зміни в B на багатокутники, які не відповідають А, все ще могли б незрозуміло змінити інші багатокутники в B, якщо ГІС "оснащується" або "підтримує топологію" або іншим чином автоматично вносити глобальні зміни під час локальних редагувань.)
На цьому переході є дві копії кожного поля: якщо [Foo] є загальним полем для A і B, то приєднання містить A. [Foo] і B. [Foo]. За допомогою обчислення поля скопіюйте B. [Foo] в A. [Foo]. Повторіть для всіх необхідних полів. Після цього вийміть з'єднання.
Хоча ця процедура може бути трохи обтяжливою, коли задіяно багато полів, її достоїнства включають
- Сценарій простий та швидкий.
- Сценарій його залишає аудиторський слід, який документує обробку даних, що виконуються. Це має вирішальне значення для захисту цілісності даних.
- Він захищає від деяких видів оптових помилок, таких як збереження неправильного поля після з'єднання (тим самим зберігаючи старі дані замість нових даних для цього поля) або видаляючи важливе поле.
- Він використовує вбудовані засоби захисту, пропоновані системою управління базами даних, такі як примусові типи даних та виконання ділових правил, які функціонують для запобігання та виявлення помилок та підтримання узгодженості між усіма таблицями та шарами бази даних.
Деякі керівні принципи, пов'язані з цією пропозицією, є
- Використовуйте систему управління базами даних для обробки даних, а не для використання програмного забезпечення, не призначеного або непридатного для цього завдання.
- Уникайте змін структур баз даних (наприклад, видалення або додавання полів), коли операції цього абсолютно не вимагають.
- Використовуйте можливості програмного забезпечення для автоматизації, щоб спростити роботу, документувати її та зробити операції відтворюваними.
Можна заперечити, що в багатьох випадках існують більш швидкі та прості способи досягти однакового результату. Так, вони можуть бути, і вони можуть бути ефективними, і зазвичай вони працюють при обережному виконанні. Але рішення, які ризикують отриманням даних, важко рекомендувати та захищати як відповіді загального призначення. Їх найкраще використовувати в разових ситуаціях з невеликими наборами даних, коли корупція в даних повинна швидко ставати очевидною, а наслідки будь-яких таких помилок несуттєві.