Доступно с лицензией Standard или Advanced.
Классы отношений
Классы отношений (relationship classes) позволяют вам отслеживать связи между объектами в вашей базе геоданных. Эти отношения могут быть простыми или сложными. Сложные отношения подразумевают отношения между родительским и дочерним объектами или композицией, а также обладают поведением, которое выражается во влиянии изменений объектов с одной стороны отношения на объекты с другой стороны отношения. Объектно-связанные аннотации в базе геоданных используют сложные отношения.
Отношения в классе отношений могут храниться с использованием первичного и внешнего ключей в классах объектов с любой стороны класса отношений. В случае отношения многие ко многим (M к N) и атрибутированных классов отношений, эти классы отношений хранятся в виде отдельной таблицы.
Вы можете использовать окно Атрибуты или таблицу для поиска всех объектов, которые связаны с выбранным объектом. Когда вы нашли связанный объект, вы можете редактировать его атрибуты. Также вы можете использовать инструмент редактирования в ArcMap, чтобы прекратить отношение между любыми двумя объектами или создать новые отношения. При таком способе редактировании объектов и отношений, вся целостность на уровне ссылок сохраняется.
Добавление и удаление отношений
Вы можете использовать окно Атрибуты, чтобы создавать и удалять отношения между двумя объектами. Если отношения контролируются с помощью первичного (primary) и вторичного (foreign) ключей (неатрибутированные отношения один к одному – 1-1 и один ко многим – 1-M), вторичный ключ в объекте-адресате заполняется значениями первичного ключа в объекте-источнике. Если отношение между двумя объектами удаляется, то значение внешнего ключа в объекте-адресате заменяется нулевыми значениями. У внешнего ключа объекта-адресата должны быть поля, допускающие нулевые значения.
Если класс отношений представляет отношение многие ко многим (M–N) или отношение с атрибутами, то они хранятся в отдельной таблице базы геоданных. При создании нового отношения между объектами в классе отношений такого типа, к таблице добавляется новая строка. Эта строка заполняется значениями из первичных ключей объекта-источника и адресата. Если отношение между двумя объектами будет удалено, то строка, относящаяся к этому отношению будет удалена из таблицы отношения.
Редактирование объектов в простом классе отношений
Когда объект, который участвует в отношениях с другими объектами, удаляется из базы геоданных, то все отношения также удаляются. Если объект, который был удален, является объектом-источником, то вторичный ключ во всех объектах-адресатах, которые связаны с источником устанавливается равным нулевому значению – null. Если удаленный объект являлся объектом-адресатом, то объект-источник не изменяется.
Если отношения хранятся в виде строк в таблице (отношения многие ко многим M – N атрибутированные или нет), тогда при удалении адресата или объекта-источника происходит удаление строк таблицы, соответствующих отношениям между удаленными объектами.
Создание новых связанных объектов
В ArcMap вы можете выбрать объект, затем обратиться к диалоговому окну Атрибуты, чтобы создать новый непространственный объект в связанном классе. Когда этот новый связанный объект создан, все его атрибуты заполняются допустимыми значениями по умолчанию и устанавливается отношение с объектом, из которого оно было создано. Таким способом вы можете создать только непространственный объект; пространственные объекты так не создаются.
Если отношения хранятся с помощью первичного и вторичного ключа, вторичный ключ в объекте-адресате заполняется значениями первичного ключа объекта-источника, вне зависимости от того, были ли объект-источник и объект-адресат созданы с помощью диалогового окна Атрибуты. Если отношения хранятся в виде строк в таблице отношений (отношения многие ко многим M-N, атрибутированные отношения), новая строка добавляется в таблицу класса отношений.
Следующие таблицы показывают, что когда вы используете окно Атрибуты для создания новых связанных объектов, отношение создается с объектом на основе которого оно было создано. Если отношения хранятся с помощью первичного и вторичного ключей, вторичный ключ заполняется с помощью первичного ключа объекта-источника.
Редактирование объектов в сложном классе отношений
Сложные отношения включают специальное поведение. При редактировании объектов, участвующих в сложном отношении, это поведение переносится на процесс редактирования. Правки, внесенные в объект-источник сложного отношения, очень часто непосредственно влияют на связанный с ним объект-адресат. Это поведение частично зависит от режима сообщений в классе отношений.
По умолчанию класс сложного отношения имеет прямое сообщение – таким образом, когда объект в сложном отношении редактируется, он отправляет сообщение к связанным объектам-адресатам. Связанные объекты отвечают на сообщение стандартным образом: если объекты-адресаты не являются пространственными объектами, они не меняются. Однако, если объекты-адресаты являются пространственными объектами, они будут перемещены на то же расстояние или повернуты на тот же угол, что и источники. Редактирование отдельных вершин пространственного объекта считается обновлением, но не перемещением геометрии пространственных объектов. В таком случае связанные объекты перемещены не будут. В таком случае связанные объекты перемещены не будут.
В этом примере, выбранная синяя опора является объектом-источником, а зеленый трансформатор – объектом-адресатом.
Как и в случае простых отношений, сложные отношения также поддерживают целостность на уровне ссылок при удалении объектов, но реализуется это по-другому. Когда объект-источник в сложном отношении удаляется, все объекты, связанные с ним через это отношение, также удаляются. Это каскадное удаление произойдет в любом случае, независимо от того, посылаются сообщения в прямом, обратном, обоих направлениях или не посылаются совсем.
Набор таблиц ниже демонстрирует, что когда объект-источник в сложном отношении удаляется, все объекты-адресаты связанные через сложное отношение будут также удалены.
Когда объект-адресат удален, то удаляется связь между ним и объектом-источником, но сам объект-источник не удаляется и не изменяется.
В случае с объектно-связанными аннотациями, связь между каждым фрагментом аннотации и соответствующим пространственным объектом моделируется как сложное отношение. Родительский (оригинальный) объект в отношении – это обычный объект, а дочерний (целевой) объект – это связанная с ним аннотация.
Если у вас есть отношения многие-к-многим, которые моделируются с помощью таблицы Присоединить (Join table) вы можете использовать инструмент геообработки Таблица в класс отношений (Table To Relationship Class) для преобразования таблицы, которая связывает значения из двух других таблиц в класс отношений с атрибутами.
Можете добавить атрибутированный класс отношений как таблицу в ArcMap. Уже в ArcMap эту таблицу можно открыть и редактировать точно так же, как и любую другую таблицу. Однако вы не можете редактировать поля вторичного ключа и добавлять новые строки, если не будете пользоваться редактором атрибутов.
Разбиение пространственных объектов, участвующих в отношениях
Разбиение одного пространственного объекта, хранящегося в базе геоданных на два отдельных объекта сохранит оригинальный объект (но изменит его геометрию), а также создаст один новый объект. Когда объект разбивается, то для большей его части сохраняется прежний ObjectID оригинального объекта, а для меньшей части создается новый пространственный объект. В случае, когда объект делится поровну, то та часть, в которой расположена начальная точка, сохранится в качества оригинального объекта (сохранит ObjectID), а вторая часть станет новым объектом. Это имеет применение, когда объект, который разбивают на части, имеет отношения с другими объектами в базе геоданных.
В случае простых отношений, когда вы разбиваете объект-источник, отношения между ним и объектами-адресатами удаляются. Когда новые объекты создаются в результате операции разбиения, оба объекта будут обладать одинаковым первичным ключом, и таким образом, оба останутся связанными с объектами-адресатами.
В случае сложных отношений поведение будет другим. Если разбивается участвующий в сложном отношении исходный пространственный объект, при этом не удаляются связанные с ним посредством сложных отношений другие пространственные объекты, так как исходный пространственный объект все еще остается. Только геометрия объекта-источника будет изменена в результате операции разбиения.
При разбиении объекта-адресата, участвующего в сложном либо в простом отношении, отношения между разбиваемым объектом и связанными объектами-источниками не удаляются, и связанные объекты-источники тоже не удаляются. Новые отношения устанавливаются между объектом-источником и новым объектом-адресатом, созданным в результате разбиения.
Описанное здесь поведение при разбиении объектов, связанных отношениями, является поведением по умолчанию. Вы можете изменить это поведение на уровне класса, написав расширение класса, реализующее интерфейс IFeatureClassEdit. Интерфейс IFeatureClassEdit имеет свойство с именем CustomSplitPolicyForRelationship, позволяющее задать, как обрабатываются отношения при разбиении объектов.