12 | Документация

Отношения

На уровне QGS-проекта можно задать отношения между слоями и таблицами, которые будут поддерживаться при публикации сервисов в CoGIS Server , а затем и при сборке карты в CoGIS Portal . Дополнительных настроек на уровне CoGIS Server или CoGIS Portal не потребуется.
Для этого нужно настроить отношения ( Relations ) между слоями/таблицами на основании значений общего атрибутивного поля (см. п. 3.4.1 и Рисунок 16 ).
При этом поддерживаются все типы кардинальности: «один-к-одному», «один-ко-многим», «многие-ко-многим». Для таблиц отношения «многие-ко-многим» поддерживаются также настроенные для полей псевдонимы и домены.

Создание отношения «один-к-одному» и «один-ко-многим»

Отношение «один-к-одному» является частным случаем отношения «один-ко-многим».
Примером отношения «один-к-одному» может быть отношение между списком сотрудников и таблицей с их персональными данными: одному сотруднику соответствует одна запись с его персональными данными. Пример отношения «один-ко-многим» - между садовыми обществами и участками, принадлежащими этим садовым обществам: одному садовому обществу соответствует множество участков, входящих в его состав.
Чтобы создать отношение «один-к-одному» или «один-ко-многим»:
  1. В свойствах картографического проекта (меню Проект > Свойства ) в разделе Отношения (см. Рисунок 15 ) нажмите Добавить отношение (см. Рисунок 16 ).
  2. Задайте параметры отношения:
    • Имя класса отношений;
    • Степень связи - Ассоциация или Композиция ;
    • Ассоциация (Association) - дочерние объекты могут существовать независимо от родительского. При удалении родительского объекта значение внешнего ключа дочерних объектов сбрасывается на NULL .
    • Композиция (Composition) - дочерние объекты существуют только с родительским объектом. При дублировании родительского объекта дублируются и его дочерние объекты. При удалении родительского объекта удаляются и его дочерние объекты.
    • Связываемый слой (родитель) и ключевое поле (первичный ключ), по которому устанавливается связь с дочерними объектами;
    • Значения ключевого поля должны быть уникальны.
    • Связанный слой (дочерний) и ключевое поле (внешний ключ), по значениям которого устанавливается связь с родительским объектом.
Значения ключевого поля могут повторяться. Ключевое поле дочерних объектов должно содержать значения ключевого поля родительского слоя.
Связь устанавливается между родительским объектом и дочерними при совпадении значений первичного и одного или нескольких внешних ключей.
Рисунок 15 - Отношения между слоями/таблицами проекта
Рисунок 16 - Добавление нового отношения
После указания всех параметров в окне Добавить отношение нажмите ОК - настроенное отношение добавится в список отношений. После настройки всех нужных отношений нажмите ОК в окне Свойства проекта .

Создание отношения «многие-ко-многим»

Примером отношения «многие-ко-многим» может быть отношение между автобусными маршрутами и остановками, где останавливаются автобусы: каждый автобусный маршрут включает в себя несколько остановок, каждая остановка может быть частью нескольких автобусных маршрутов.
Чтобы создать отношение «многие-ко-многим»:
  1. Определите атрибутивные поля в наборах данных, по которым эти наборы данных будут связаны (ключевые поля).
  2. Ключевые поля связываемых наборов данных должны иметь уникальные значения (первичные ключи).
  3. В Менеджере БД (меню База данных > Менеджер БД ) в схеме данных выбранной базы данных создайте промежуточную таблицу (меню Таблица > Создать таблицу ), см. Рисунок 17 :
    • Задайте имя таблицы;
    • Создайте поля в новой таблице тех же типов, которые имеют выбранные ключевые поля для связывания, для обоих связываемых наборов данных;
    • Создайте, если необходимо, дополнительные поля - атрибуты связи.
  4. Атрибуты связи могут быть любого типа.
Полям промежуточной таблицы могут быть добавлены псевдонимы. Также на поля могут быть наложены домены (см. Рисунок 18 ).
Рисунок 17 - Добавление таблицы отношений в Менеджере БД
Рисунок 18 - Пример созданной промежуточной таблицы (здесь - ключевое поле первого связываемого набора данных FeatureName с псевдонимом Объект, ключевое поле второго связываемого набора данных OwnerName с псевдонимом Заказчик, а также два добавленных атрибута связи)
  1. Добавьте созданную таблицу в картографический проект.
  2. В свойствах слоя созданной таблицы в разделе Переменные добавьте для слоя две новые переменные: elitegis_relation_table и elitegis_relation_table_published (см. подробнее п. 6.5 ).
  3. Настройте отношение «один-ко-многим», связывая первый набор данных ( Связываемый слой (родитель)) с созданной промежуточной таблицей ( Связанный слой (дочерний)) по выбранному ключевому полю (см. подробнее п. 3.4.1 ).
  4. Аналогично настройте отношение «один-ко-многим», связывая второй набор данных ( Связываемый слой (родитель)) с созданной промежуточной таблицей ( Связанный слой (дочерний)) по выбранному ключевому полю (см. подробнее п. 3.4.1 ).
  5. Пример - см. Рисунок 19 .
  6. Сохраните картографический проект.
Убедитесь, что оба связываемых набора данных и созданная промежуточная таблица добавлены в картографический проект как слои.
Рисунок 19 - Пример добавленных отношений в свойствах проекта между связываемыми наборами данных и промежуточной таблицей
Далее необходимо заполнить поля промежуточной таблицы значениями, указав соответствие значений ключевого поля первого связываемого набора данных значениям ключевого поля второго связываемого набора данных.
Это можно сделать вручную в картографическом приложении с опубликованным картографическим сервисом на основе созданного картографического проекта (см. подробнее Руководство по созданию картографических приложений ). Связывание объектов происходит в Карточке объекта при редактировании объектов связываемых наборов данных. Благодаря добавленным к слою промежуточной таблицы переменным и настроенным отношениям, при редактировании объектов первого набора данных в интерактивной карте в Карточке объекта будет доступен для связывания выпадающий список из значений ключевого поля второго набора данных с возможностью множественного выбора (см. Рисунок 20 ). И наоборот, при редактировании объектов второго набора данных в Карточке объекта будет доступен для связывания выпадающий список из значений ключевого поля первого набора данных также с возможностью множественного выбора.
Рисунок 20 - Создание нового объекта первого набора данных с возможностью связать его с одним или несколькими объектами второго набора данных
Таким образом создается связь «многие-ко-многим» (см. Рисунок 21 и Рисунок 22 ).
Рисунок 21 - Пример объекта, связанного с несколькими заказчиками
Рисунок 22 - Пример заказчика, связанного с несколькими объектами
При создании связей между объектами в картографическом приложении промежуточная таблица автоматически заполнится значениями. Атрибуты связи можно заполнить, отдельно отредактировав промежуточную таблицу любыми способами (см. Рисунок 23 ).
Рисунок 23 - Пример заполненной промежуточной таблицы
Если при добавлении промежуточной таблицы в картографический проект для переменной elitegis_relation_table_published было указано значение true , то саму промежуточную таблицу также можно посмотреть в картографическом приложении (см. Рисунок 24 ).
Рисунок 24 - Таблица связей в готовом картографическом приложении