6.9 KiB
Хранилище данных EAV
Описание модуля EXTRAS :: ENTAXY :: EAV (Entity, Attribute, Value)
Хранилище данных EAV реализует модель Сущность-Атрибут-Значение - это модель данных, предназначенная для описания сущностей, в которых количество атрибутов (свойств, параметров) не ограничено или не известно заранее.
Объекты модуля ЕАV
Внешняя сущность(External Entity) - любая внешняя сущность относительно модуля EAV.
Сущность EAV(Entity EAV) - именованная сущность, связывающая аттрибуты с внешней сущностью. Модуль предоставляет возможность объединять сущности EAV в одноуровневую иерархию.
Атрибут(Attribute) - именованный атрибут сущности EAV, содержит значение и его тип.
Типы значений:
-
DOUBLE
-
LONG
-
TEXT
-
JSON
Использование хранилища EAV
В BLUEPRINT подключаем OSGI-сервис EAVProcessor
<reference id="eavProcessor" interface="ru.entaxy.eav.service.EAVProcessor"/>
в маршрутах или java коде осуществляем необходимые вызовы для создания/получения/изменения значений.
Примеры вызовов из маршрута Apache Camel XMLDSL
Создание атрибута для внешней сущности
<bean ref="eavProcessor" method="createPrimitive('externalIdTest', 'externalTypeTest', 'entityNameTest', 'attributeNameTest', 'textValue', 'testLogin')"/>
Получить все значения сохранённой сущности
<bean ref="eavProcessor" method="getEntityWithValues('externalIdTest', 'externalTypeTest', 'entityNameTest')"/>
Удалить сохранённые значения
<bean ref="eavProcessor" method="deleteExternalEntity('externalIdTest', 'externalTypeTest')"/>
OSGI-сервис EAVProcessor.
Сервис, выставляющий api для работы с EAV хранилищем.
Методы:
-
createPrimitive - простой метод сохранения примитивного значения(числового, строкового)
-
createComplex - простой метод сохранения комплексного значения(JSON)
-
getEntityWithValues - получение значений сущности EAV по имени
-
fetchEntityWithValues - получение значений сущности EAV по имени либо null, без исключений
-
getEntityNamedAttributes - получение значений с определённым именем для сущности EAV
-
getEntityByNameAndAttributeValue - получение сущности EAV по атрибуту
-
getParentEntity - получение родительской сущности EAV для внешней связанной сущности
-
getChildEntities - получение дочерних сущностей EAV для внешней связанной сущности с именем сущности EAV по умолчанию(PARENT)
-
getChildEntitiesByName - получение дочерних сущностей EAV для внешней связанной сущности с указанным именем сущности EAV
-
getByExternalEntity - получение всех сущностей EAV для внешней связанной сущности
-
getByAttributeSet - получение сущностей EAV по множественным наборов параметров, каждый набор составляется из значений элементов с одним порядковым номером всех списков
-
updateAttribute - метод для изменения значения аттрибута
-
deleteExternalEntity - удаление всех записей связанных с внешней сущностью
-
deleteEntity - удаление именованной сущности EAV
-
deleteAllEntityAttributes - удаление атрибутов именованной сущности EAV
-
deleteAllEntityAttributesByName - удаление аттрибута сущности EAV с определённым наименованием
-
combineEntities - метод для объединения внешних сущностей под 1 родителем
Схема базы данных(БД).
Схема БД при таком подходе остаётся неизменной независимо от состава и структуры хранимых данных. Бандл eav-storage разворачивает структуру из 2 таблиц:
Таблица eav_entity
Слолбец |
Параметры |
Описание |
id |
bigint, not null |
идентификатор сущности модуля EAV |
external_id |
text, not null |
внешний идентификатор связываемой сущности |
external_type |
text, not null |
тип связываемой сущности |
name |
text |
наименование сущности модуля EAV |
parent_id |
bigint, not null, default 0 |
идентификатор(поле id) родительской сущности модуля EAV |
create_date |
timestamp, not null |
служебное поле, дата создания |
edit_date |
timestamp |
служебное поле, дата изменения |
created_by |
text, not null |
служебное поле, логин автора записи |
external_type |
text |
служебное поле, логин последнего изменившего сущность |
Таблица eav_attribute
Слолбец |
Параметры |
Описание |
id |
bigint, not null |
идентификатор атрибута |
entity_id |
text, not null |
идентификатор сущности eav_entity |
name |
text, not null |
наименование аттрибута |
type |
text |
тип аттрибута |
double |
double |
служебное поле для хранения значения |
long |
bigint |
служебное поле для хранения значения |
text |
text |
служебное поле для хранения значения |
text2 |
text |
служебное поле для хранения значения |