Связи сущностей

Этот раздел описывает связи сущностей домена.

Ознакомьтесь с правилами нотации в схеме домена. Это позволит присваивать корректные названия создаваемым элементам схемы. Эти названия будут отображаться в интерфейсе системы.

О связях

Отношения между сущностями в доменах определяются при помощи связей.

Связи задаются в схеме домена отдельным массивом, где хранятся ссылки на связанные сущности и ряд специальных параметров. Как и сущность, связь может обладать атрибутами.

В схеме домена поддерживаются линейные и древовидные связи.

Линейные связи

Линейные связи позволяет строить горизонтальные направленные и ненаправленные отношения между сущностями, задавая ограничения на количество объектов с левой и правой стороны связи.

Древовидные связи

Древовидная связь позволяет организовать взаимодействие между объектами, при котором соединения образуют иерархическую структуру, напоминающую дерево. В этой структуре существует один корневой узел (главный элемент), от которого ответвляются дочерние узлы. Эти узлы также могут иметь свои подчинённые элементы.

Параметры связи

Для того чтобы к сущностям домена можно было добавлять связь, при настройке схемы домена необходимо указать следующие параметры связи:

  • ID связи;

  • Название связи (опционально);

  • Описание связи, отображаемое в схеме домена (опционально).

  • Ссылки на сущности для сторон связи слева и справа;

  • Тип связи (1-1, 1-N, N-N);

  • Название связи для каждой стороны. Например, инцидент "блокирует задачу", задача "блокируется инцидентом".

  • Направление. Для связи типа N-N можно указать, является ли связь ненаправленной. По умолчанию связь направленная.

  • Атрибуты связи. Атрибуты связи задаются подобно атрибутам сущностей.

Структура блока linkages

Путь в схеме: linkages[]

Каждый элемент массива имеет следующую структуру:

Поле Обязательность и значение по умолчанию Тип данных Описание

id

да

Data ID

Идентификатор связи.

name

нет (по умолчанию — пустая строка)

строка

Название связи. Поле с названием связи удобно использовать в случае, если сторону связи сложно определить из имеющихся данных, а поле label для элемента управления в представлении не определено.

description

нет (по умолчанию — пустая строка)

строка

Описание связи. Не выводится в представлениях. Отображается в схеме домена.

side1

да

Data ID Ref или FQID

Ссылка на первую связываемую сущность в паре связи. Представляет левую сторону действия в связи — направление связи идет от сущности, ссылка на которую указывается в этом поле.

side2

да

Data ID Ref или FQID

Ссылка на вторую связываемую сущность в паре связи. Представляет правую сторону действия в связи — направление связи идет к сущности, ссылка на которую указывается в этом поле.

Ознакомьтесь с описанием симметричности связи.

type

да

перечисление

Количество сущностей с каждой стороны связи. Доступные значения:

  • 1_1;

  • 1_n;

  • n_n.

Для древовидной связи всегда указывается тип 1_n.

Ознакомьтесь с описанием типа связи.

useForSearch

нет (по умолчанию — false)

логическое

Переключатель использования данных связи в поисковых запросах:

  • true — данные связи могут использоваться в поиске. Доступность отдельного атрибута для поиска определяется в поле searchable в описании атрибута.

  • false — данные связи не могут использоваться в поиске.

undirected

нет (по умолчанию — false)

логическое

Переключатель ненаправленности связи. Используется только при описании связи типа n_n.

Ознакомьтесь с описанием направленности связи.

nameFrom

да

объект

Глагольное описание связи с каждой стороны, отображаемое в представлениях.

Для любой направленной связи глагольные формы должны быть разными.

Ознакомьтесь с описанием поля nameFrom.

attributes

нет (по умолчанию — пустой массив)

массив

Пользовательские поля связи.

Ознакомьтесь с описанием поля attributes.

view

нет

объект

Настройки отображения связи на диаграмме.

Ознакомьтесь с описанием поля view.

excludeOnGraph

нет (по умолчанию — false)

перечисление

Переключатель отображения связи на диаграмме. Доступные значения:

  • true — отображать;

  • false — не отображать.

Симметричность связи

Путь в схеме:

  • linkages[].side1

  • linkages[].side2

Симметричная связь — в левой и правой частях связи указана одна и та же сущность.

Пример

Линейная направленная связь типа N-N между сущностями Задача и Задача. Здесь Задача блокирует Задачу.

Асимметричная связь — в левой и правой частях связи указаны разные сущности.

Пример

Линейная направленная связь типа 1-N между сущностями Пользователь и Задача. Здесь Пользователь является исполнителем по Задаче.

Направленность связи (undirected)

Путь в схеме: linkages[].undirected

Доступны следующие значения поля undirected:

Значение в схеме домена Название Описание Пример

false

Направленная связь

Имеет строго заданное направление от левой стороны связи к правой, определяя связанные с этим ограничения. Обе стороны одновременно осуществляют действие и подвергаются воздействию по отношению друг к другу.

В системе имеются сущности Уязвимость и Задача. Их соединяет направленная связь. Действие направлено от Уязвимости к Задаче. В результате Уязвимость породила Задачу на устранение уязвимости.

true

Ненаправленная связь

Обе стороны одновременно осуществляют действие и подвергаются воздействию по отношению друг к другу. В отличие от направленной, не имеет строго заданного направления и возможна только для линейных связей типа N-N.

В системе имеются сущности Оборудование 1 и Оборудование 2. Их соединяет связь, но направление при этом отсутствует.

Типы линейной связи (type)

Путь в схеме: linkages[].type

Доступны следующие значения поля type:

Значение в схеме домена Название Описание Пример

1_1

1-1

Позволяет связать сущность с другой сущностью по принципу "один — к одному". Сущности могут быть связаны этим типом связи только друг с другом.

Идентификаторы объектов в связанных парах не повторяются.

Пользователь → ИД

У сущности Пользователь может быть только один уникальный идентификационный номер, и наоборот.

1_n

1-N (или N-1)

Позволяет связать одну сущность с несколькими по принципу "один — ко многим".

На одной стороне идентификаторы объектов могут повторяться, а на другой — нет.

Учетная запись → Пользователь

У Пользователя может быть много учетных записей, но у конкретной Учетной записи всегда есть только один Пользователь.

n_n

N-N

Позволяет построить связи между многими сущностями по принципу "многие — ко многим". Несколько сущностей могут быть связаны этим типом связи с несколькими сущностями.

Идентификаторы объектов могут повторяться на обеих сторонах

Сервер → Администратор

Сущность Сервер можно привязывать к нескольким администраторам. Администратор также может быть связан с несколькими серверами.

В схеме домена связываются сущности. При этом в доменах, созданных на основе схемы, связываются объекты — экземпляры сущностей.

Таким образом, в связях 1-1 связываются два объекта, а в связях 1-N и N-N один или несколько объектов связываются с несколькими объектами.

Название связи (nameFrom)

Путь в схеме: linkages[].nameFrom

Название связи отображается в интерфейсе и отражает характер отношения между сторонами связи. Задается отдельно для каждой из сторон связи.

Пример

Линейная направленная связь типа 1-N между сущностями Пользователь и Оборудование:

  • название связи, отображаемое со стороны Пользователя — Владеет;

  • название связи, отображаемое со стороны Оборудования — Владелец.

Поле имеет следующую структуру:

Поле Обязательное поле Значение по умолчанию Описание Тип данных Комментарий

side1

да

Глагол связи с левой стороны.

строка

Глагольная форма действия. Например, "блокирует".

side2

да

Глагол связи с правой стороны.

строка

Глагольная форма воздействия. Например, "блокируется".

Атрибуты связи (attributes)

Путь в схеме: linkages[].attributes[]

Поле attributes представляет собой массив записей атрибутов определенной сущности. Каждый элемент массива имеет следующую структуру:

Поле Обязательность и значение по умолчанию Тип данных Описание

id

да

Data ID

Уникальный идентификатор атрибута.

name

нет (по умолчанию — пустая строка)

строка

Название атрибута

description

нет (по умолчанию — пустая строка)

строка

Описание атрибута. Не выводится в представлениях. Отображается в схеме домена.

dataType

да

перечисление

Тип данных атрибута. Допустимы базовые типы, кроме Automation, Configuration и Variable.

constraints

нет (по умолчанию — пустой массив)

массив

Валидация атрибута. Для каждого типа данных задается свой набор ограничителей с набором полей.

Ознакомьтесь с описанием поля constraints.

searchable

нет (по умолчанию — true)

логическое

Переключатель доступности атрибута для поиска.

Структура деревьев (trees)

Путь в схеме: trees[]

Поле trees содержит описание древовидной связи между сущностями. Каждый элемент массива имеет следующую структуру:

Поле Обязательность и значение по умолчанию Тип данных Описание

id

да

Data ID

Идентификатор дерева (уникален в рамках домена).

type

нет (по умолчанию — ordinary)

перечисление

Тип дерева. Ознакомьтесь с описанием поля type.

maxDepth

нет (по умолчанию — пустая строка)

число

Максимально допустимое количество связей дерева от корневого узла до листового узла. Определяет максимальную вложенность дерева.

hierarchy

нет (по умолчанию — пустая строка)

объект

Описание иерархии сущностей в дереве. Ознакомьтесь с описанием поля hierarchy.

sorting

нет

массив

Массив правил сортировки. Ознакомьтесь с описанием поля sorting.

Тип дерева (type)

Путь в схеме: trees[].type

Возможные значения поля type включают:

  • ordinary — обычное дерево, значение по умолчанию.

  • orderable — дерево, в котором можно изменять порядок узлов.

  • multiparent — дерево, в котором листовой узел можно включать в несколько групп. Позволяет использовать в описании связи тип n_n. Используется только для представлений типа Каталог.

    Ознакомьтесь с разделом Изменение расположения узлов в дереве.

Иерархия сущностей (hierarchy)

Путь в схеме: trees[].hierarchy

Поле hierarchy содержит описание иерархии сущностей в дереве связей. Поле имеет следующую структуру:

Поле Обязательное поле Значение по умолчанию Описание Тип данных Комментарий

entity

да

Ссылка на сущность в корневом узле.

Data ID Ref или FQID

Допустима ссылка на сущность в другом домене в формате FQDN/ID.

maxInstances

нет

Максимально допустимое количество объектов сущности в корневом узле.

число

Ограничивает создание объектов одной сущности в дереве.

maxChildren

нет

Максимально допустимое количество дочерних узлов для одного родительского узла через указанную связь.

число

Ограничивает создание связей между сущностями в корневом узле и дочерних узлах.

children

нет

Описание объектов, дочерних к сущности, на которую ссылается поле entity.

массив

Ознакомьтесь с описанием поля children.

Дочерние объекты (children)

Путь в схеме: trees[].hierarchy.children[]

Поле children содержит описание объектов, дочерних к сущности, на которую ссылается поле entity в блоке hierarchy. Каждый элемент массива имеет следующую структуру:

Поле Обязательное поле Значение по умолчанию Описание Тип данных Комментарий

linkage

да

Ссылка на идентификатор связи, описанной в поле linkages

Data ID Ref или FQID

Необходимо сослаться на связь, описывающую отношения между сущностями в корневом узле и дочерних узлах.

entity

да

Ссылка на идентификатор сущности, дочерней к сущности в корневом узле.

Data ID Ref или FQID

maxInstances

нет

Максимально допустимое количество объектов одной сущности в разделе.

число

Это значение не может превышать значение параметра maxChildren в описании сущности в корневом узле.

maxChildren

нет

Максимально допустимое количество дочерних узлов для сущности, указанной в поле entity, через связь, указанную в поле linkages, в этом блоке.

число

Ограничивает количество связей между сущностями в поле entity и в дочерних узлах.

side

нет

Указывает на сторону связи, с которой находится родительская сущность.

число

По умолчанию принимает значение 1.

children

нет

Описание объектов, дочерних к сущности, на которую ссылается поле entity.

массив

Вложенный массив с аналогичной структурой.

Вы можете создать в схеме домена несколько вложенных блоков children для описания узлов ветвления разных уровней. Предварительно убедитесь, что значение параметра maxDepth в блоке trees позволяет это сделать.

Сортировка в древовидном представлении (sorting)

Путь в схеме: trees[].sorting[]

Поле sorting представляет собой массив записей, описывающих правила сортировки по атрибутам сущностей.

Каждый элемент массива имеет следующую структуру:

Поле Обязательность и значение по умолчанию Тип данных Описание

id

да

Data ID

Уникальный идентификатор правила сортировки из описания сущности

name

нет (по умолчанию — пустая строка)

строка

Название правила сортировки

by

да

массив

Массив ссылок на сущности и объекты сортировки атрибутов для них.

Ознакомьтесь с описанием поля by.

Пример задания правил сортировки в древовидном представлении
trees:
  - id: StandardsTree
    type: orderable
    hierarchy:
      entity: entity_id_1
      children:
        - linkage: entity_id_1_entity_id_2
          entity: entity_id_2
    sorting:
      - id: sorting_name
        name: По наименованию
        by:
          - entity: entity_id_1
            by:
              - attribute: name
                direction: asc
              - attribute: description
                direction: asc
          - entity: entity_id_2
            by:
              - attribute: title
                direction: asc
        - id: sorting_date
          name: По дате создания
          by:
            - entity: entity_id_1
              by:
                - attribute: date
                  direction: asc
            - entity: entity_id_2
              by:
                - attribute: date
                  direction: asc

Сортировка для сущности (by)

Путь в схеме: trees[].sorting[].by[]

Поле by представляет собой запись требований к сортировке для сущности.

Если сортировка для конкретной сущности не задана явно, то объекты этой сущности будут сортироваться по полю updatedAt.

Каждый элемент массива имеет следующую структуру:

Поле Обязательность и значение по умолчанию Тип данных Описание

entity

да

Data ID Ref или FQID

Идентификатор сущности, для которой задаются параметры фильтрации.

by

да

массив

Массив ссылок на атрибуты сущности с указанием направления сортировки.

Ознакомьтесь с описанием поля by.

Сортировка для атрибута сущности (by)

Путь в схеме: trees[].sorting[].by[].by[]

Каждый элемент массива имеет следующую структуру:

Поле Обязательность и значение по умолчанию Тип данных Описание

attribute

да

Data ID Ref

Ссылка на атрибут, по которому производится сортировка.

direction

нет (по умолчанию — desc)

перечисление

Порядок сортировки. Доступные значения:

  • asc — по возрастанию.

  • desc — по убыванию.

Если в правиле указана ссылка на атрибут с типом данных Reference, система подставляет при сортировке объектов вместо значения самого атрибута значение поля label объекта, на который указывает ссылка.

Структура деревьев транзитивных связей (transitiveLinkages)

Путь в схеме: transitiveLinkages[]

Система поддерживает отображение данных экземпляров сущностей, которые связаны с текущим объектом не напрямую, а через последовательность связей. Поле transitiveLinkages содержит описание транзитивных связей между сущностями. Каждый элемент массива имеет следующую структуру:

Поле Обязательность и значение по умолчанию Тип данных Описание

id

да

Data ID

Идентификатор дерева транзитивных связей.

entity

да

Data ID Ref

Идентификатор сущности, для которой строится дерево.

description

нет (по умолчанию — пустая строка)

строка

Описание транзитивной связи. Не выводится в представлениях.

joins

да

массив

Перечень связей с сущностями, данные которых будут отображаться.

Ознакомьтесь с описанием поля joins.

Пример настройки отображения транзитивных связей
  1. В поле transitiveLinkages объявляем дерево транзитивных связей:

    transitiveLinkages:
      - id: EquipmentTree
        entity: Equipment
        joins:
          - id: equipmentcity
            linkage: EquipmentToCity
            joins:
              - id: equipmentcityoffice
                linkage: CityToOffice
                search:
                  # Нужно разрешить поиск в описании атрибутов связи и сущности.
                  enabled: true
                  mode: both
            ...
    
      - id: countryTree
        entity: Country
        joins:
          - id: countryCity
            linkage: CityToCountry
            joins:
              - id: countryCityOrg
                # Связь из другого дрмена.
                linkage: trans.rel.example.com/CityToOrg
  2. В списочном представлении добавляем столбцы для отображения данных, полученных транзитивной связью, и настраиваем фильтрацию:

    views:
      - id: EquipmentList
        type: list
        source:
          entity: Equipment
        table:
          columns:
            - id: equipmentoffice
              join: equipmentcityoffice
              attribute: Name
              label: Офис
              ...
          filter:
            linkages:
              type: specific
              use:
                - join: equipmentcityoffice
                  # Атрибуты связаннной сущности.
                  linkedEntity:
                    - attribute: Name
                    - attribute: address
                    ...
                  # Атрибуты связи.
                  attributes:
                    - attribute: linkAttrTimestamp
                    ...
  3. В представлении сущности описываем виджет транзитивных связей и добавляем его на вкладку, которая используется в компактном или полноэкранном представлении:

views:
  - id: EquipmentCard
    type: entity
    entity: Equipment
    widgets:
      - id: widget_equipmentcityoffice
        type: join
        joinId: equipmentcityoffice
        attribute: Name
        label: Офис
      ...
    groups:
      - id: tabs_equipment
        type: tab
        components:
          - widget: widget_equipmentcityoffice
          ...
    views:
      - id: equipment_info
        type: panel
        tabs:
          - tab: tabs_equipment
      ...

Перечень транзитивных связей (joins)

Путь в схеме:

  • transitiveLinkages[].joins[]

  • transitiveLinkages[].joins[].joins[]…

Каждый элемент массива имеет следующую структуру:

Поле Обязательность и значение по умолчанию Тип данных Описание

id

да

Data ID

Идентификатор присоединения связи.

linkage

да

Data ID Ref или FQID

Ссылка на связь с сущностью, данные которой будут отображаться.

search

нет

объект

Возможность поиска по узлу транзитивной связи. Если поле не указано, то поиск производиться не будет.

Ознакомьтесь с описанием поля search.

joins

нет

массив

Вложенный массив с аналогичной структурой.

Путь в схеме:

  • transitiveLinkages[].joins[].search

  • transitiveLinkages[].joins[].joins[].….search

Поле имеет следующую структуру:

Поле Обязательность и значение по умолчанию Тип данных Описание

enable

да

логическое

Переключатель возможности поиска по узлу

mode

нет (по умолчанию — both)

перечисление

Режим поиска.

Ознакомьтесь с доступными значениями

Режим поиска по узлу (mode)

Путь в схеме:

  • transitiveLinkages[].joins[].search.mode

  • transitiveLinkages[].joins[].joins[].….search.mode

Режим поиска описывает атрибуты, по которым возможен поиск по узлу. Доступные значения:

  • entity — атрибуты связанных объектов;

  • linkage — атрибуты связи;

  • both — атрибутам связанных объектов и атрибуты связи.

Чтобы поиск по атрибуту связанной сущности был возможен, атрибут нужно описать в правилах поиска этой сущности.

Чтобы был возможен поиск по атрибутам связи, в описании связи нужно указать параметр useForSearch: true, а в описании атрибута — searchable: true.

Отображение связи на диаграмме (view)

Путь в схеме: entities[].view

В блоке view для связи можно задать цвет, которым она будет отображаться на диаграмме.

Поле view содержит следующее поле:

Поле Обязательность и значение по умолчанию Тип данных Описание

iconColor

да

перечисление

Цвет иконки. Доступные значения перечислены далее.

Доступные цвета иконки:

  • red — красный;

  • pink — розовый;

  • lightpink — светло‑розовый;

  • orange — оранжевый;

  • peach — персиковый;

  • yellow — желтый;

  • green — зеленый;

  • lightgreen — светло‑зеленый;

  • turquoise — бирюзовый;

  • lightblue — голубой;

  • blue — синий;

  • violet — фиолетовый;

  • purple — пурпурный;

  • grey — серый.

Была ли полезна эта страница?

Обратная связь