Большинство руководств по разработке баз данных рекомендуют строить базу данных на основе множества атрибутивных таблиц – каждая из которых посвящена отдельной теме – вместо создания одной большой таблицы, содержащей все необходимые поля. Такая схема предотвращает дублирование информации в базе данных, так как информация содержится только в одной таблице. Когда вам нужна информация, которая не содержится в текущей таблице, вы можете связать две таблицы.
Например, вы можете получить данные из других отделов вашей организации, покупать коммерческие данные или загружать данные из Интернет. Если эта информация хранится в таблице, такой как таблица dBASE, INFO или таблица базы геоданных, вы можете связать эти данные с вашими пространственными объектами и отобразить их на карте.
ArcGIS позволяет ассоциировать записи одной таблицы с записями в другой через общее поле, известное как ключевое. Создать эти ассоциации можно разными способами, включая временное объединение или связывание таблиц на карте или создание классов отношений в базе геоданных, что позволяет получить постоянные ассоциации. Например, вы можете связать таблицу собственников земельных участков со слоем земельных участков, поскольку у них имеется общее поле parcel ID.
Когда вы соединяете две таблицы, то атрибуты из одной присоединяются к атрибутам другой на основании поля, общего для обеих таблиц. Связывание таблиц описывает отношение между двумя таблицами - также на основании общего поля, но при этом не происходит добавления атрибутов одной таблицы в другую, вместо этого вы можете при необходимости обращаться к связанным данным.
Соединение таблиц по атрибуту
Обычно к слою присоединяют таблицу с данными на основании значений поля, которое присутствует в обеих таблицах. Название поля в таблицах может различаться, но тип поля должен быть один и тот же: числовые поля соединяются с числовыми, строковые со строковыми и т.д. Можно выполнить соединение при помощи диалогового окна Соединение данных, которое открывается по щелчку правой кнопкой на слое в ArcMap, или с помощью инструмента Добавить соединение.
Предположим, что вы получаете ежедневные данные прогноза погоды по округам и строите карты погоды, основанные на этой информации. Ваши данные о погоде хранятся в таблице в вашей базе данных и имеют общее поле со слоем округов, таким образом, вы можете присоединить данные прогноза к географическим данным и после этого отображать, надписывать и анализировать слой, используя любое из присоединенных полей.
Отношение один-к-одному и многие-к-одному
Когда вы соединяете таблицы в ArcMap, вы создаете отношение один-к-одному или много-к-одному между таблицей атрибутов слоя и таблицей, содержащей информацию, которую необходимо присоединить. Пример, приведенный ниже, иллюстрирует отношение один-к-одному между округами и данными прогноза погоды. Другими словами, одной записи в таблице с прогнозом соответствует одна запись в таблице слоя округов.
В следующем примере показано отношение много-к-одному. Предположим, у вас есть слой, где для каждого полигона задан определенный тип землепользования. Таблица атрибутов слоя при этом хранит только код землепользования; полное описание каждого типа землепользования хранится в отдельной таблице. Соединение этих двух таблиц устанавливает отношение многие-к-одному, так как несколько записей таблицы атрибутов слоя соединяются с одной записью таблицы описаний видов землепользования. В результате вы можете использовать более информативные подписи при построении легенды к вашей карте.
Отношение один-к-одному и многие-к-одному
При использовании отношений один-ко-многим или многие-ко-многим, вам необходимо использовать опцию Связать, или Создать класс отношений, чтобы поддержать отношения между наборами данных. Однако в таких случаях можно создать соединение. При создании соединения, результат зависит от типа источника данных. Для данных базы геоданных, при создании соединения возвращаются все сопоставленные записи. Для данных других форматов, например шейп-файлов или таблиц dBase, возвращается только первая сопоставленная запись.
Это означает, что если вы создали соединение 1:M или M:M данными базы геоданных, и вам необходимо построить отчет, вы увидите несколько записей в отчете, по одной для каждого сопоставления. Множественные сопоставления также приводятся, при использовании присоединенных полей для присвоения условных знаков, присоединении слоя, надписывании, идентификации объектов, построении диаграмм, а также при использовании инструментов Найти и Гиперссылка. Если вы используете присоединенный слой в качестве входных данных для инструментов геообработки, или в операциях экспорта, также будут использованы множественные сопоставления записей.
Пространственное соединение данных
Если слои на карте не имеют общего атрибутивного поля, их можно соединить с помощью пространственного соединения, которое позволяет связать атрибуты двух слоев на основе местоположения объектов слоев.
Можно выполнить пространственное соединение при помощи диалогового окна Соединение и связи, которое открывается по щелчку правой кнопкой на слое в ArcMap, или с помощью инструмента Пространственное соединение.
Используя пространственное соединение, вы можете:
- Находить ближайшие объекты по отношению к другим объектам.
- Находить, что расположено внутри объекта.
- Находить, что пересекает объект.
- Вычислить, сколько точек находится внутри каждого полигона.
Пространственное соединение использует пространственные связи (ассоциации) между слоями, поля одного из которых будут добавлены в другой. Пространственное соединение отличается от соединения по атрибуту и классу отношений тем, что оно не динамично и требует сохранения результатов в новый выходной слой.
При осуществлении пространственного соединения можно использовать один из трех типов ассоциаций, описание которых приведено ниже:
- Сопоставление каждого объекта с ближайшим объектом или объектами: в этой ассоциации вы можете либо добавить атрибуты ближайшего объекта, либо добавить множество числовых атрибутов ближайших объектов (min, max и т.д.).
- Сопоставление каждого объекта с объектом внутри: в этом случае добавляются атрибуты объекта, находящегося внутри текущего объекта. Примером такого случая может быть точка, находящаяся внутри полигона или сегмент линии, полностью находящийся внутри другого сегмента (другими словами, перекрывается им).
- Сопоставление каждого объекта с пересекающим объектом, или объектами: Как и в случае с ассоциацией по ближайшему объекту (объектам), описанной выше, вы можете либо добавить атрибуты отдельного пересекающего объекта, либо множество числовых атрибутов пересекающих объектов.
Для каждой точки, полигона и комбинации линий в диалоговом окне соединения доступна только самая часто используемая ассоциация из перечисленных выше.
Связывание таблиц
В отличие от соединения, связывание таблиц просто устанавливает отношение между двумя таблицами. Связанные данные не добавляются в таблицу атрибутов слоя , как это происходит при соединении. Вместо этого вы можете обращаться к связанным данным, когда вы работаете с таблицей атрибутов слоя.
Например, если вы выберете здание, вы можете найти всех арендаторов, которые занимают его. Точно так же, если вы выберете арендатора, вы найдете здание, в котором он арендует помещение (или несколько зданий, в случае, если он владеет сетью магазинов, расположенных в разных торговых центрах, – отношение многие-ко-многим). Однако если вы попробуете использовать операцию соединения, ArcMap найдет только по одному арендатору, соответствующему каждому зданию, игнорируя данные по остальным арендаторам.
Связи, определенные в ArcMap, по сути, то же самое, что и простые классы отношений в базе геоданных, за исключением того, что они хранятся вместе с картой, а не в базе геоданных.
Если класс пространственных объектов в базе геоданных участвует в классе отношений, это отношение будет доступно для использования, вам не придется связывать таблицы в ArcMap. Классы отношений будут автоматически доступны, когда вы добавите на карту слой, участвующий в классе отношений. Обратите внимание, что отношение многие-ко-многим определяется иначе, если ваши данные хранятся в базе геоданных. Таким образом, если у вас есть классы отношений, определенные в базе геоданных, надо использовать их, а не создавать новые в ArcMap.
Классы отношений в базе геоданных
Класс отношений хранит информацию о связях между объектами и записями в базе геоданных, и обеспечивает целостность ваших данных.
Более подробно о преимуществах использования классов отношений
Различия между соединениями и связями
При выборе между связыванием и соединением воспользуйтесь следующими общими рекомендациями:
- Вы будете использовать соединение двух таблиц, когда тип связи данных один-к-одному или много-к-одному.
- Связывать таблицы надо, если отношения данных в них – один-ко-многим или много-ко-многим.
Более подробно о выборе между классами отношений, связыванием и соединением
Сохранение соединений и связей
Когда вы сохраняете карту, содержащую соединения и связи, ArcMap сохраняет только определение связи двух атрибутивных таблиц, а не сами связанные данные. Когда вы в следующий раз открываете карту, ArcMap восстанавливает отношение (соединение или связь) между таблицами, считывая его из базы данных. Таким образом, любые изменения исходных таблиц, произошедшие с момента их последнего отображения на карте, автоматически отобразятся при следующем просмотре.
Соединения могут храниться в документе ArcMap или файле слоя. Если по какой-либо причине вы планируете переместить данные, вам необходимо сохранить ваши документы ArcMap с относительными путями. Если данные были перемещены, вы можете восстановить таблицы и слои после открытия документа, но если целевая таблица и связанные таблицы не находятся в одной директории или одной рабочей области, то соединения не подлежат восстановлению. Если вы сохраняете документ с относительными путями, то таблицы и слои будут автоматически восстановлены с соединениями, так как документ был перемещен в соответствии с местом перемещения данных.
Если вы хотите, вы можете делать копию слоя со связанными данными на диске: просто экспортируйте слой. Чтобы экспортировать слой, щелкните на нем правой кнопкой в таблице содержания, укажите на Данные, затем Экспорт данных. При этом создается новый класс пространственных объектов со всеми атрибутами, включая атрибуты связанных полей.
Использование соединений, связей и классов отношений одновременно
Если ваши данные подвергаются и соединению, и связыванию, то важен порядок создания соединений и связей. Если ваш слой или таблица содержат связи, то они удаляются сразу после присоединения к ним данных. Если вы связываете присоединенный слой или таблицу, связь удаляется при удалении соединения. В соответствии с эмпирическим правилом, лучше всего сначала создавать соединения, а потом добавлять связи.
В случае, если вам необходимо присоединить таблицу А и связать таблицу В со слоем С, возможны три варианта действий. Опишем все эти ситуации:
- Присоедините таблицу А к слою С, затем свяжите таблицу В со слоем С: Сценарий работает. В результате вы получите присоединенный слой, связанный с таблицей В.
- Присоедините таблицу А к слою С, затем свяжите таблицу В со слоем С: Сценарий также работает. Так как связь работает в двух направлениях, то вы сможете обращаться к связанным записям из любой таблицы, участвующей в связи. В данном случае связь принадлежит таблице В, поэтому при соединении со слоем С связь не удаляется.
- Присоедините таблицу B к слою С, затем свяжите таблицу A со слоем С: Этот сценарий не работает. Отличие от предыдущей последовательности заключается в том, что здесь связь принадлежит слою С. Поэтому при соединении таблицы А к слою С, связь удаляется.
Соединение не оказывает влияния на связи, принадлежащие присоединенной таблице. Однако, целевая таблица или слой не могут обращаться к этим связям.
Классы отношений никогда не удаляются в результате операции соединения и разъединения. Они могут использоваться независимо от того, участвуют ли данные в соединении или связывании.