171 lines
6.9 KiB
Plaintext
171 lines
6.9 KiB
Plaintext
= Хранилище данных EAV
|
||
|
||
== Описание модуля EXTRAS :: ENTAXY :: EAV (Entity, Attribute, Value)
|
||
|
||
Хранилище данных EAV реализует модель _Сущность-Атрибут-Значение_ - это модель данных, предназначенная для описания сущностей, в которых количество атрибутов (свойств, параметров) не ограничено или не известно заранее.
|
||
|
||
|
||
== Объекты модуля ЕАV
|
||
|
||
image::eav_objects.png[]
|
||
|
||
*Внешняя сущность*(External Entity) - любая внешняя сущность относительно модуля EAV.
|
||
|
||
*Сущность EAV*(Entity EAV) - именованная сущность, связывающая аттрибуты с внешней сущностью.
|
||
Модуль предоставляет возможность объединять сущности EAV в одноуровневую иерархию.
|
||
|
||
*Атрибут*(Attribute) - именованный атрибут сущности EAV, содержит значение и его тип.
|
||
|
||
*Типы значений:*
|
||
|
||
* DOUBLE
|
||
* LONG
|
||
* TEXT
|
||
* JSON
|
||
|
||
|
||
|
||
|
||
== Использование хранилища EAV
|
||
|
||
В BLUEPRINT подключаем OSGI-сервис EAVProcessor
|
||
[source]
|
||
----
|
||
<reference id="eavProcessor" interface="ru.entaxy.eav.service.EAVProcessor"/>
|
||
----
|
||
|
||
в маршрутах или java коде осуществляем необходимые вызовы для создания/получения/изменения значений.
|
||
|
||
*Примеры вызовов из маршрута Apache Camel XMLDSL*
|
||
|
||
Создание атрибута для внешней сущности
|
||
[source]
|
||
----
|
||
<bean ref="eavProcessor" method="createPrimitive('externalIdTest', 'externalTypeTest', 'entityNameTest', 'attributeNameTest', 'textValue', 'testLogin')"/>
|
||
----
|
||
|
||
Получить все значения сохранённой сущности
|
||
[source]
|
||
----
|
||
<bean ref="eavProcessor" method="getEntityWithValues('externalIdTest', 'externalTypeTest', 'entityNameTest')"/>
|
||
----
|
||
|
||
Удалить сохранённые значения
|
||
[source]
|
||
----
|
||
<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
|
||
|служебное поле для хранения значения
|
||
|
||
|=== |