entaxy-public/documentation/extras/eav.adoc

6.9 KiB
Raw Blame History

Хранилище данных EAV

Описание модуля EXTRAS :: ENTAXY :: EAV (Entity, Attribute, Value)

Хранилище данных EAV реализует модель Сущность-Атрибут-Значение - это модель данных, предназначенная для описания сущностей, в которых количество атрибутов (свойств, параметров) не ограничено или не известно заранее.

Объекты модуля ЕАV

eav objects

Внешняя сущность(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

служебное поле для хранения значения