То, как вы задаете значения параметра, когда запускаете инструмент геообработки Создать класс отношений, зависит от необходимого класса отношений и правил, которые нужно будет применить.
Чтобы улучшить понимание, какие значения использовать, далее описываются входные параметры инструмента геообработки Создать класс отношений.
Параметры
Далее приведены разъяснения по каждому параметру инструмента геообработки Создать класс отношений:
- Таблица-источник - таблица или класс пространственных объектов, которые связаны с таблицей-адресатом.
- Таблица-адресат - таблица, которая связана с таблицей-источником.
- Выходной класс отношений - имя класса отношений, который будет создан.
- Тип отношений - задает тип отношений между таблицей-источником и таблицей-адресатом.
- Простое- таблица-источник и таблица-адресат будут иметь простое отношение. Используется по умолчанию.
- Сложное - таблица-источник и таблица-адресат будут иметь сложное отношение.
- Надпись прямого отношения - имя для уникальной идентификации отношения, используемое при обращении от таблицы-источника к таблице-адресату.
- Надпись обратного отношения - имя для уникальной идентификации отношения, используемое при обращении от таблицы-адресата к таблице-источнику.
- Направление сообщений - направление, в котором передаются сообщения между таблицей-источником и таблицей-адресатом. Например, в отношении между столбами и трансформаторами, при удалении столба будет отправлено сообщение связанным с ним объектам трансформатора, указывающее на то, что он будет удален.
- Вперед (от объекта-источника к объекту-адресату) - сообщения передаются из таблицы-источника в таблицу-адресат.
- Назад (от объекта-адресата к объекту-источнику) - сообщения передаются из таблицы-адресата в таблицу-источник.
- В оба направления - сообщения передаются из таблицы-источника в таблицу-адресат и из таблицы-адресата в таблицу-источник.
- Отсутствует (сообщения не передаются) - сообщения не будут передаваться. Используется по умолчанию.
- Кардинальность - определяет, сколько будет существовать отношений между строками или объектами таблицы-источника и строками или объектами таблицы-адресата.
- Один-к-одному (1:1) - каждая строка или пространственный объект таблицы-источника могут быть связаны с одной строкой или пространственным объектом таблицы-адресата или не иметь связей. Используется по умолчанию.
- Один-ко-многим (1:М) - каждая строка или пространственный объект таблицы-источника могут быть связаны с одной или несколькими строками или пространственными объектами в таблице-адресате.
- Многие-ко-многим (M:N) - несколько строк или пространственных объектов в таблице-источнике могут быть связаны с одной или несколькими строками или пространственными объектами в таблице-адресате.
- Класс отношений включает атрибуты - указывает, будет ли класс отношений иметь атрибуты. См. раздел Общие сведения о классах атрибутивных отношений, чтобы узнать больше о том, где хранятся эти атрибуты и как создать и заполнить класс атрибутивных отношений.
- Отмечено - класс отношений будет иметь атрибуты.
- Не отмечено - класс отношений не будет иметь атрибутов. Используется по умолчанию.
Первичный ключ источника - для классов отношений один-к-одному или один-ко-многим, которым не присвоены атрибуты, это поле в таблице-источнике, часто обозначаемое сокращенно ПК, которое связано с полем Внешний ключ источника в таблице-адресате.
Для классов отношений «многие-ко-многим» или с атрибутами это поле в таблице-источнике, которое связано с полем Внешний ключ источника в промежуточной таблице класса отношений.
Внешний ключ источника - для классов отношений «один-к-одному» или «один-ко-многим», которым не присвоены атрибуты, это поле в таблице-адресате, часто обозначаемое сокращенно ВК, которое связано с полем Первичный ключ источника в таблице-источнике.
Для классов отношений «один-ко-многим» или с атрибутами это поле в промежуточной таблице классов отношений, которое связано с полем Первичный ключ источника в таблице-источнике.
- Первичный ключ адресата - поле в таблице-адресате, которое связано с полем Внешний ключ адресата в промежуточной таблице классов отношений. Это значение является обязательным для классов отношений «многие-ко-многим» или «один-ко-многим», которым не присвоены атрибуты.
- Внешний ключ адресата - поле в промежуточной таблице классов отношений, которое связано с полем Первичный ключ адресата в таблице-адресате. Это значение является обязательным для классов отношений «многие-ко-многим» или «один-ко-многим», которым не присвоены атрибуты.
Классы-источники и классы-адресаты
При создании класса отношений вы выбираете один класс в качестве источника и один в качестве адресата. Важно не перепутать эти классы. Учитывая поведение каскадного удаления в сложных отношениях, важность этого момента очевидна.
В простом отношении также важно соблюсти этот шаг. Поскольку при удалении записи в классе-источнике простой класс отношений находит соответствующие записи в классе-адресате и обнуляет значения их ключевого поля. Если вы в качестве источника выберите неверный класс и удалите объекты в источнике, то появятся ошибки в поле внешнего ключа. На следующем примере показано, как такое может произойти.
Ситуация 1: участок - зона (неправильно)
Это типичный сценарий, приводящий к данной ошибке. Таблица зон содержит описания различных кодов зон и концептуально сходна со справочной таблицей. В этом случае класс участков является источником, а таблица зон — адресатом. Проблема в том, что при удалении участка значение ключевого поля (зона) для соответствующей записи в таблице зон обнуляется, а другие участки, имеющие идентичный код зоны, не будут сопоставлены в таблице зон.
Ситуация 2: участок - зона (правильно)
Для устранения ошибки установите таблицу зон в качестве источника. Удаление участка (объект-адресат) никак не скажется на таблице зон, а удаление кода зоны (объект-источник) просто обнулит значение поля зоны в соответствующих записях участка, что и должно произойти, поскольку они больше не имеют соответствующих записей в таблице зоны.
Имя Выходного класса отношений
Каждый класс отношений имеет имя, которое отображается на панели Каталог. Рекомендуется назначать классам отношений имена, которые описывают участвующие элементы и кардинальность этих отношений.
Начните с имени класса исходного объекта, затем добавьте Содержит (Has или Have) и закончите именем класса объекта назначения. Например, AddressHasZones или ParcelsHaveOwners. В классах исходных объектов используйте множественное число, если применяется кардинальность многие-к-одному или многие-ко-многим; используйте множественное число в классах объектов назначения, если применяется кардинальность один-ко-многим или многие-ко-многим.
Используя такой метод, вы сможете определить кардинальность отношения по его имени. Если оба класса объектов записаны во множественном числе, например, ParcelsHaveOwners, это означает, что используется отношение многие-ко-многим.
Имена объектов (таблица, класс объектов, класс отношений и т.д.) в базе геоданных должны быть уникальными – они не должны повторяться. См. раздел Определение свойств класса объектов, чтобы узнать больше о правилах и ограничениях в названиях для классов объектов и таблиц.
Подписи прямого и обратного пути
Прямые и обратные надписи отображаются в диалоговых окнах Атрибуты и Результаты идентификации в ArcGIS Pro и помогают вам перемещаться между связанными объектами.
Класс отношений имеет две подписи:
- Прямая подпись отображается при навигации от источника к адресату. В примере столб-трансформатор эта подпись может выглядеть как поддерживает, это означает, что столб поддерживает трансформаторы.
- Обратная подпись отображается при навигации от адресата к источнику. В примере столб-трансформатор эта подпись может выглядеть как установлены, это означает, что трансформаторы установлены на столбе.
Направление отправки сообщения
Как уже упоминалось, при удалении объекта-источника в сложном отношении автоматически удаляются связанные объекты-адресаты.
При работе как в простых, так и в сложных отношениях существует также ряд других действий, которые для запуска обновления одного объекта требуют обновления связанного с ним объекта. Кроме того, обновления могут потребоваться как в одном направлении, так и в обоих сразу.
- Когда вы перемещаете или поворачиваете объект, необходимо чтобы перемещались или вращались также связанные с ним объекты.
- Когда вы обновляете объект, необходимо чтобы атрибут связанного объекта обновлялся автоматически.
- В процессе обновления объекта-источника может потребоваться обновление связанного объекта-адресата.
- В процессе обновления объекта-адресата может потребоваться обновление связанного объекта-источника.
Если ваше отношение требует такого поведения, можно включить обмен сообщениями между источником и адресатом для уведомления друг друга при осуществлении изменений, что позволит привязанным объектам обновляться автоматически.
Для осуществления этого задайте направление отправки сообщения при создании отношения. Если обновление источника требует обновления связанных объектов-адресатов, установите направление отправки сообщения Вперед. Если обновление адресата требует обновления связанных объектов-источников, установите направление отправки сообщений Назад. Если требуется задействовать оба направления, задайте направление отправки сообщений В обе стороны. После создания отношения, необходимо запрограммировать поведение объектов при получении сообщения, чтобы они могли ответить.
Единственным исключением являются сложные отношения, где сообщения отправляются только Вперед. Когда вы создаете сложное отношение с прямым сообщением, перемещение или вращение объекта-источника заставляет соответственно перемещаться или вращаться объекты назначения. При условии, что вы создали отношение правильно, эта функция начинает действовать сразу же после создания отношения, дополнительное программирование при этом не требуется.
Для других направлений отправки сообщений требуется пользовательское программирование. Если вы не создаете сложное отношение с прямым сообщением или же программируете нестандартное поведение, установите направление сообщения Нет, сообщения не передаются. В противном случае, сообщения будут без надобности генерироваться каждый раз при выполнении любой операции редактирования, что замедляет работу.
При установке направления в сложном отношении помните, что при удалении объекта-источника в сложном отношении все связанные объекты-адресаты также удаляются автоматически. Это происходит независимо от того, посылаются сообщения Вперед, Назад, В обе стороны или установлено Нет.
Направление | Действие в простых отношениях | Действие в сложных отношениях |
---|---|---|
Вперед | Не работает без пользовательского программирования |
|
Назад | Не работает без пользовательского программирования |
|
Обе | Не работает без пользовательского программирования |
|
Нет | Не допускает отправку сообщений, незначительно улучшая производительность |
|
Кардинальность
Кардинальность описывает максимальное количество связей между двумя разными строками или столбцами таблицы.
ГИС интегрирует информацию о различных географических и негеографических объектах, многие из которых могут быть связаны между собой. При добавлении негеографических данных к вашим векторным данным вы должны учитывать, как объекты связаны между собой и есть ли у них общее поле.
Отношения строятся на концепции таблицы-источника и таблице-адресата, а также отношений между объектами исходной таблицы и таблицы-адресата. Чтобы создать отношение между двумя таблицами, вы должны определить общее для обеих таблиц поле с общими значениями, известное как ключ.
Примечание:
Общие поля не обязательно должны иметь одинаковое имя, но они должны иметь одинаковый тип данных. Значения в общих полях используются для связывания записей в таблице на основе определенной кардинальности.
Кардинальность отношения указывает количество объектов в таблице-источнике, которые могут быть связаны с объектами в таблице-адресате. Класс отношений может иметь одну из трех кардинальностей:
- Один-к-одному - Одна строка или пространственный объект класса или таблицы источника могут быть связаны с одной строкой или пространственным объектом класса или таблицы адресата или не иметь связей. Это настройка по умолчанию. Например, участок может иметь только одно официальное описание.
Примечание:
В ArcGIS к этой кардинальности может также относится тип многие-к-одному. Примером отношения многие-к-одному может быть привязывание нескольких участков к одному официальному описанию.
- Один-ко-многим - одна строка или пространственный объект класса или таблицы источника могут быть связаны с одной или несколькими строками или пространственными объектами класса или таблицы адресата. Например, на участке может быть несколько зданий. В отношении один-ко-многим одним должен быть класс-источник, а в качестве многих должен выступать класс-адресат.
- Многие-ко-многим - Один объект-источник может быть привязан к нескольким объектам-адресатам и, наоборот, один объект-адресат может быть привязан к нескольким объектам-источникам. Например, у одной собственности может быть несколько владельцев или у одного владельца может быть несколько объектов собственности. Более подробно см. в разделе Понимание классов атрибутивных отношений.
Примечание:
При оценке кардинальности объектов между двумя таблицами терминология один значит ноль-к-одному, а терминология много значит ноль-ко-многим. Таким образом, когда вы создаете отношение один-ко-многим, например, между участком и зданиями, это отношение предполагает следующее:
- Участок без зданий
- Здание без участка
- Участок с любым количеством зданий
Если класс отношений был создан, вы можете дополнительно уточнить мощности, добавив правила в класс отношений. Вы можете добавить правила, определяющие количество строк или объектов в классе или таблице источниках, которым разрешено относиться к ряду строк или объектов в классе-адресате.
Примечание:
Кардинальность определяется при создании класса отношений. После создания класса отношений кардинальность класса отношений не может быть изменена; поэтому важно учитывать и проверять кардинальность данных перед созданием класса отношений.
Первичные и внешние ключи
В классе отношений объекты в таблице-источнике сопоставляются с объектами в таблице-адресате с помощью значений в ключевых полях.
В классе отношений без атрибутов отношение сохраняется, когда значения в поле Первичный ключ источника (ПК) в таблице-источнике напрямую связаны со значениями в поле Внешний ключ источника (ВК) в таблице-адресате. В отличие от настоящего первичного ключа, значения полей первичного ключа в отношении не обязательно должны быть уникальными для каждого объекта. Внешний ключ источника содержит значения, которые соответствуют значениям поля Первичный ключ источника в таблице-источнике. Значения ключевого поля, опять-таки, не обязательно должны быть уникальными для каждой строки.
Например, участок 789 соответствует пропускам 2 и 3, потому что эти записи имеют одинаковый идентификатор участка.
При необходимости в классе отношений с атрибутами, например, при создании отношений многие-ко-многим, также автоматически создается промежуточная таблица. Эта промежуточная таблица сопоставляет значения в полях Внешний ключ источника и Внешний ключ адресата с первичными ключами связанных таблиц или классов объектов. Каждая строка связывает один объект-источник с одним объектом-адресатом. Ключевые поля могут иметь различные имена, но должны быть одного типа и содержать одинаковую информацию, такую как идентификаторы участков. Ключевыми полями могут быть поля любых типов данных, кроме больших двоичных объектов (BLOB), даты и растров.
Например, чтобы помочь определить владельцев участков в вашем сообществе, между классом объектов Участок (Parcel) и автономной таблицей Владелец (Owner) создается класс отношений многие-ко-многим. Этот класс отношений многие-ко-многим создаст промежуточную или атрибутивную таблицу ParcelToOwner, которая свяжет одного или нескольких владельцев с каждым участком.
Ключевые поля указываются при создании класса отношений.
При выборе поля первичного ключа можно использовать поле идентификатора (ID) строки, часто называемого поле ObjectID. Поле ObjectID автоматически добавляется приложением ArcGIS когда вы создаете класс или таблицу объектов или регистрируете слой или таблицу многопользовательской базы геоданных. Это поле обеспечивает уникальный идентификатор для каждой записи. Оно управляется ArcGIS, вы не можете изменять его.
Значение ObjectID объекта остается неизменным все время, пока он находится в своем исходном классе, и вы не можете разбить объект, если он является пространственным. Если вы разбиваете пространственный объект, он сохраняется в виде оригинального объекта (но с обновленной геометрией) и создает новый объект с новым назначенным идентификатором ObjectID. В результате только объект с оригинальным ObjectID сохранит отношения, зависимые от значения ObjectID.
Поэтому правильнее будет не полагаться на поле ObjectID и самому создать поле первичного ключа. Следующий пример показывает, как созданное вами поле первичного ключа помогает поддерживать отношения при выполнении следующих операций.
- Когда вы импортируете записи в другой класс объектов или таблицу, назначаются новые значения ObjectID, а отношения, основанные на исходных значениях ObjectID, теряются. Если вместо этого вы основываете отношение на другом первичном ключе, то при импорте записей значения идентификатора в первичном ключе не изменяются. Это позволяет сохранить отношения при импорте связанных наборов объектов в новые классы.
Исключением является использование функции Копировать/Вставить. Копировать/Вставить сохраняет значения ObjectID, поэтому, если вы собираетесь перемещать объекты только этим методом, можете использовать поле ObjectID в качестве первичного ключа.
- Когда вы разбиваете объект, то сохраняется оригинальный объект (с обновленной геометрией) и создается новый. Если отношение основано на оригинальном идентификаторе ObjectID, только один из двух объектов, созданных в результате разбиения, сохранит это отношение. Но если вы использовали другое поле в качестве ключевого, при разбиении объекта значение идентификатора исходного объекта копируется в оба новых объекта. В результате записи в связанных таблицах привязываются к обоим новым объектам, что особенно удобно при использовании класса отношений многие-ко-многим.
Если вы не собираетесь разбивать объекты и уверены, что объекты останутся в исходном классе, можете использовать ObjectID в качестве идентификатора. Если такой уверенности нет, рекомендуется создать поле идентификатора, а не полагаться на поле ObjectID.
- Когда вы выполняете слияние двух объектов, новый объект сохраняет ObjectID одного из исходных объектов. Если вы планируете выполнять слияние объектов, но не хотите перемещать объекты из классов или разбивать их, можете использовать ObjectID в качестве первичного ключа.