Связи сущностей
Этот раздел описывает связи сущностей домена.
| Ознакомьтесь с правилами нотации в схеме домена. Это позволит присваивать корректные названия создаваемым элементам схемы. Эти названия будут отображаться в интерфейсе системы. |
О связях
Отношения между сущностями в доменах определяются при помощи связей.
Связи задаются в схеме домена отдельным массивом, где хранятся ссылки на связанные сущности и ряд специальных параметров. Как и сущность, связь может обладать атрибутами.
В схеме домена поддерживаются линейные и древовидные связи.
Линейные связи
Линейные связи позволяет строить горизонтальные направленные и ненаправленные отношения между сущностями, задавая ограничения на количество объектов с левой и правой стороны связи.
Древовидные связи
Древовидная связь позволяет организовать взаимодействие между объектами, при котором соединения образуют иерархическую структуру, напоминающую дерево. В этой структуре существует один корневой узел (главный элемент), от которого ответвляются дочерние узлы. Эти узлы также могут иметь свои подчинённые элементы.
Параметры связи
Для того чтобы к сущностям домена можно было добавлять связь, при настройке схемы домена необходимо указать следующие параметры связи:
-
ID связи;
-
Название связи (опционально);
-
Описание связи, отображаемое в схеме домена (опционально).
-
Ссылки на сущности для сторон связи слева и справа;
-
Тип связи (1-1, 1-N, N-N);
-
Название связи для каждой стороны. Например, инцидент "блокирует задачу", задача "блокируется инцидентом".
-
Направление. Для связи типа N-N можно указать, является ли связь ненаправленной. По умолчанию связь направленная.
-
Атрибуты связи. Атрибуты связи задаются подобно атрибутам сущностей.
Структура блока linkages
Путь в схеме: linkages[]
Каждый элемент массива имеет следующую структуру:
| Поле | Обязательность и значение по умолчанию | Тип данных | Описание |
|---|---|---|---|
|
да |
Data ID |
Идентификатор связи. |
|
нет (по умолчанию — пустая строка) |
строка |
Название связи. Поле с названием связи удобно использовать в случае, если сторону связи сложно определить из имеющихся данных, а поле |
|
нет (по умолчанию — пустая строка) |
строка |
Описание связи. Не выводится в представлениях. Отображается в схеме домена. |
|
да |
Data ID Ref или FQID |
Ссылка на первую связываемую сущность в паре связи. Представляет левую сторону действия в связи — направление связи идет от сущности, ссылка на которую указывается в этом поле. |
|
да |
Data ID Ref или FQID |
Ссылка на вторую связываемую сущность в паре связи. Представляет правую сторону действия в связи — направление связи идет к сущности, ссылка на которую указывается в этом поле. Ознакомьтесь с описанием симметричности связи. |
|
да |
перечисление |
Количество сущностей с каждой стороны связи. Доступные значения:
Для древовидной связи всегда указывается тип Ознакомьтесь с описанием типа связи. |
|
нет (по умолчанию — |
логическое |
Переключатель использования данных связи в поисковых запросах:
|
|
нет (по умолчанию — |
логическое |
Переключатель ненаправленности связи. Используется только при описании связи типа Ознакомьтесь с описанием направленности связи. |
|
да |
объект |
Глагольное описание связи с каждой стороны, отображаемое в представлениях. Для любой направленной связи глагольные формы должны быть разными. Ознакомьтесь с описанием поля |
|
нет (по умолчанию — пустой массив) |
массив |
Пользовательские поля связи. Ознакомьтесь с описанием поля |
|
нет |
объект |
|
|
нет (по умолчанию — |
перечисление |
Переключатель отображения связи на диаграмме. Доступные значения:
|
Симметричность связи
Путь в схеме:
-
linkages[].side1 -
linkages[].side2
Симметричная связь — в левой и правой частях связи указана одна и та же сущность.
Пример
Линейная направленная связь типа N-N между сущностями Задача и Задача. Здесь Задача блокирует Задачу.
Асимметричная связь — в левой и правой частях связи указаны разные сущности.
Пример
Линейная направленная связь типа 1-N между сущностями Пользователь и Задача. Здесь Пользователь является исполнителем по Задаче.
Направленность связи (undirected)
Путь в схеме: linkages[].undirected
Доступны следующие значения поля undirected:
| Значение в схеме домена | Название | Описание | Пример |
|---|---|---|---|
|
Направленная связь |
Имеет строго заданное направление от левой стороны связи к правой, определяя связанные с этим ограничения. Обе стороны одновременно осуществляют действие и подвергаются воздействию по отношению друг к другу. |
В системе имеются сущности Уязвимость и Задача. Их соединяет направленная связь. Действие направлено от Уязвимости к Задаче. В результате Уязвимость породила Задачу на устранение уязвимости. |
|
Ненаправленная связь |
Обе стороны одновременно осуществляют действие и подвергаются воздействию по отношению друг к другу. В отличие от направленной, не имеет строго заданного направления и возможна только для линейных связей типа N-N. |
В системе имеются сущности Оборудование 1 и Оборудование 2. Их соединяет связь, но направление при этом отсутствует. |
Типы линейной связи (type)
Путь в схеме: linkages[].type
Доступны следующие значения поля type:
| Значение в схеме домена | Название | Описание | Пример |
|---|---|---|---|
|
1-1 |
Позволяет связать сущность с другой сущностью по принципу "один — к одному". Сущности могут быть связаны этим типом связи только друг с другом. Идентификаторы объектов в связанных парах не повторяются. |
Пользователь → ИД У сущности Пользователь может быть только один уникальный идентификационный номер, и наоборот. |
|
1-N (или N-1) |
Позволяет связать одну сущность с несколькими по принципу "один — ко многим". На одной стороне идентификаторы объектов могут повторяться, а на другой — нет. |
Учетная запись → Пользователь У Пользователя может быть много учетных записей, но у конкретной Учетной записи всегда есть только один Пользователь. |
|
N-N |
Позволяет построить связи между многими сущностями по принципу "многие — ко многим". Несколько сущностей могут быть связаны этим типом связи с несколькими сущностями. Идентификаторы объектов могут повторяться на обеих сторонах |
Сервер → Администратор Сущность Сервер можно привязывать к нескольким администраторам. Администратор также может быть связан с несколькими серверами. |
|
В схеме домена связываются сущности. При этом в доменах, созданных на основе схемы, связываются объекты — экземпляры сущностей. Таким образом, в связях 1-1 связываются два объекта, а в связях 1-N и N-N один или несколько объектов связываются с несколькими объектами. |
Название связи (nameFrom)
Путь в схеме: linkages[].nameFrom
Название связи отображается в интерфейсе и отражает характер отношения между сторонами связи. Задается отдельно для каждой из сторон связи.
Пример
Линейная направленная связь типа 1-N между сущностями Пользователь и Оборудование:
-
название связи, отображаемое со стороны Пользователя — Владеет;
-
название связи, отображаемое со стороны Оборудования — Владелец.
Поле имеет следующую структуру:
| Поле | Обязательное поле | Значение по умолчанию | Описание | Тип данных | Комментарий |
|---|---|---|---|---|---|
|
да |
Глагол связи с левой стороны. |
строка |
Глагольная форма действия. Например, "блокирует". |
|
|
да |
Глагол связи с правой стороны. |
строка |
Глагольная форма воздействия. Например, "блокируется". |
Атрибуты связи (attributes)
Путь в схеме: linkages[].attributes[]
Поле attributes представляет собой массив записей атрибутов определенной сущности. Каждый элемент массива имеет следующую структуру:
| Поле | Обязательность и значение по умолчанию | Тип данных | Описание |
|---|---|---|---|
|
да |
Data ID |
Уникальный идентификатор атрибута. |
|
нет (по умолчанию — пустая строка) |
строка |
Название атрибута |
|
нет (по умолчанию — пустая строка) |
строка |
Описание атрибута. Не выводится в представлениях. Отображается в схеме домена. |
|
да |
перечисление |
Тип данных атрибута. Допустимы базовые типы, кроме |
|
нет (по умолчанию — пустой массив) |
массив |
Валидация атрибута. Для каждого типа данных задается свой набор ограничителей с набором полей. Ознакомьтесь с описанием поля |
|
нет (по умолчанию — |
логическое |
Переключатель доступности атрибута для поиска. |
Структура деревьев (trees)
Путь в схеме: trees[]
Поле trees содержит описание древовидной связи между сущностями. Каждый элемент массива имеет следующую структуру:
| Поле | Обязательность и значение по умолчанию | Тип данных | Описание |
|---|---|---|---|
|
да |
Data ID |
Идентификатор дерева (уникален в рамках домена). |
|
нет (по умолчанию — |
перечисление |
Тип дерева. Ознакомьтесь с описанием поля |
|
нет (по умолчанию — пустая строка) |
число |
Максимально допустимое количество связей дерева от корневого узла до листового узла. Определяет максимальную вложенность дерева. |
|
нет (по умолчанию — пустая строка) |
объект |
Описание иерархии сущностей в дереве. Ознакомьтесь с описанием поля |
|
нет |
массив |
Массив правил сортировки. Ознакомьтесь с описанием поля |
Тип дерева (type)
Путь в схеме: trees[].type
Возможные значения поля type включают:
-
ordinary— обычное дерево, значение по умолчанию. -
orderable— дерево, в котором можно изменять порядок узлов. -
multiparent— дерево, в котором листовой узел можно включать в несколько групп. Позволяет использовать в описании связи типn_n. Используется только для представлений типа Каталог.Ознакомьтесь с разделом Изменение расположения узлов в дереве.
Иерархия сущностей (hierarchy)
Путь в схеме: trees[].hierarchy
Поле hierarchy содержит описание иерархии сущностей в дереве связей. Поле имеет следующую структуру:
| Поле | Обязательное поле | Значение по умолчанию | Описание | Тип данных | Комментарий |
|---|---|---|---|---|---|
|
да |
Ссылка на сущность в корневом узле. |
Data ID Ref или FQID |
Допустима ссылка на сущность в другом домене в формате FQDN/ID. |
|
|
нет |
Максимально допустимое количество объектов сущности в корневом узле. |
число |
Ограничивает создание объектов одной сущности в дереве. |
|
|
нет |
Максимально допустимое количество дочерних узлов для одного родительского узла через указанную связь. |
число |
Ограничивает создание связей между сущностями в корневом узле и дочерних узлах. |
|
|
нет |
Описание объектов, дочерних к сущности, на которую ссылается поле entity. |
массив |
Ознакомьтесь с описанием поля |
Дочерние объекты (children)
Путь в схеме: trees[].hierarchy.children[]
Поле children содержит описание объектов, дочерних к сущности, на которую ссылается поле entity в блоке hierarchy. Каждый элемент массива имеет следующую структуру:
| Поле | Обязательное поле | Значение по умолчанию | Описание | Тип данных | Комментарий |
|---|---|---|---|---|---|
|
да |
Ссылка на идентификатор связи, описанной в поле |
Data ID Ref или FQID |
Необходимо сослаться на связь, описывающую отношения между сущностями в корневом узле и дочерних узлах. |
|
|
да |
Ссылка на идентификатор сущности, дочерней к сущности в корневом узле. |
Data ID Ref или FQID |
||
|
нет |
Максимально допустимое количество объектов одной сущности в разделе. |
число |
Это значение не может превышать значение параметра |
|
|
нет |
Максимально допустимое количество дочерних узлов для сущности, указанной в поле |
число |
Ограничивает количество связей между сущностями в поле |
|
|
нет |
Указывает на сторону связи, с которой находится родительская сущность. |
число |
По умолчанию принимает значение 1. |
|
|
нет |
Описание объектов, дочерних к сущности, на которую ссылается поле entity. |
массив |
Вложенный массив с аналогичной структурой. |
Вы можете создать в схеме домена несколько вложенных блоков children для описания узлов ветвления разных уровней. Предварительно убедитесь, что значение параметра maxDepth в блоке trees позволяет это сделать.
|
Сортировка в древовидном представлении (sorting)
Путь в схеме: trees[].sorting[]
Поле sorting представляет собой массив записей, описывающих правила сортировки по атрибутам сущностей.
Каждый элемент массива имеет следующую структуру:
| Поле | Обязательность и значение по умолчанию | Тип данных | Описание |
|---|---|---|---|
|
да |
Data ID |
Уникальный идентификатор правила сортировки из описания сущности |
|
нет (по умолчанию — пустая строка) |
строка |
Название правила сортировки |
|
да |
массив |
Массив ссылок на сущности и объекты сортировки атрибутов для них. Ознакомьтесь с описанием поля |
Пример задания правил сортировки в древовидном представлении
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.
|
Каждый элемент массива имеет следующую структуру:
| Поле | Обязательность и значение по умолчанию | Тип данных | Описание |
|---|---|---|---|
|
да |
Data ID Ref или FQID |
Идентификатор сущности, для которой задаются параметры фильтрации. |
|
да |
массив |
Массив ссылок на атрибуты сущности с указанием направления сортировки. Ознакомьтесь с описанием поля |
Сортировка для атрибута сущности (by)
Путь в схеме: trees[].sorting[].by[].by[]
Каждый элемент массива имеет следующую структуру:
| Поле | Обязательность и значение по умолчанию | Тип данных | Описание |
|---|---|---|---|
|
да |
Data ID Ref |
Ссылка на атрибут, по которому производится сортировка. |
|
нет (по умолчанию — |
перечисление |
Порядок сортировки. Доступные значения:
|
Если в правиле указана ссылка на атрибут с типом данных Reference, система подставляет при сортировке объектов вместо значения самого атрибута значение поля label объекта, на который указывает ссылка.
|
Структура деревьев транзитивных связей (transitiveLinkages)
Путь в схеме: transitiveLinkages[]
Система поддерживает отображение данных экземпляров сущностей, которые связаны с текущим объектом не напрямую, а через последовательность связей. Поле transitiveLinkages содержит описание транзитивных связей между сущностями. Каждый элемент массива имеет следующую структуру:
| Поле | Обязательность и значение по умолчанию | Тип данных | Описание |
|---|---|---|---|
|
да |
Data ID |
Идентификатор дерева транзитивных связей. |
|
да |
Data ID Ref |
Идентификатор сущности, для которой строится дерево. |
|
нет (по умолчанию — пустая строка) |
строка |
Описание транзитивной связи. Не выводится в представлениях. |
|
да |
массив |
Перечень связей с сущностями, данные которых будут отображаться. Ознакомьтесь с описанием поля |
Пример настройки отображения транзитивных связей
-
В поле
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 -
В списочном представлении добавляем столбцы для отображения данных, полученных транзитивной связью, и настраиваем фильтрацию:
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 ... -
В представлении сущности описываем виджет транзитивных связей и добавляем его на вкладку, которая используется в компактном или полноэкранном представлении:
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[]…
Каждый элемент массива имеет следующую структуру:
| Поле | Обязательность и значение по умолчанию | Тип данных | Описание |
|---|---|---|---|
|
да |
Data ID |
Идентификатор присоединения связи. |
|
да |
Data ID Ref или FQID |
Ссылка на связь с сущностью, данные которой будут отображаться. |
|
нет |
объект |
Возможность поиска по узлу транзитивной связи. Если поле не указано, то поиск производиться не будет. Ознакомьтесь с описанием поля search. |
|
нет |
массив |
Вложенный массив с аналогичной структурой. |
Возможность поиска по узлу транзитивной связи (search)
Путь в схеме:
-
transitiveLinkages[].joins[].search -
transitiveLinkages[].joins[].joins[].….search
Поле имеет следующую структуру:
| Поле | Обязательность и значение по умолчанию | Тип данных | Описание |
|---|---|---|---|
|
да |
логическое |
Переключатель возможности поиска по узлу |
|
нет (по умолчанию — |
перечисление |
Режим поиска. Ознакомьтесь с доступными значениями |
Режим поиска по узлу (mode)
Путь в схеме:
-
transitiveLinkages[].joins[].search.mode -
transitiveLinkages[].joins[].joins[].….search.mode
Режим поиска описывает атрибуты, по которым возможен поиск по узлу. Доступные значения:
-
entity— атрибуты связанных объектов; -
linkage— атрибуты связи; -
both— атрибутам связанных объектов и атрибуты связи.
|
Чтобы поиск по атрибуту связанной сущности был возможен, атрибут нужно описать в правилах поиска этой сущности. |
Отображение связи на диаграмме (view)
Путь в схеме: entities[].view
В блоке view для связи можно задать цвет, которым она будет отображаться на диаграмме.
Поле view содержит следующее поле:
| Поле | Обязательность и значение по умолчанию | Тип данных | Описание |
|---|---|---|---|
|
да |
перечисление |
Цвет иконки. Доступные значения перечислены далее. |
Доступные цвета иконки:
-
red— красный; -
pink— розовый; -
lightpink— светло‑розовый; -
orange— оранжевый; -
peach— персиковый; -
yellow— желтый; -
green— зеленый; -
lightgreen— светло‑зеленый; -
turquoise— бирюзовый; -
lightblue— голубой; -
blue— синий; -
violet— фиолетовый; -
purple— пурпурный; -
grey— серый.
Была ли полезна эта страница?