# Модель данных
# Что такое модель данных?
Разные компании и бизнесы имеют различные потребности в продуктовых данных. Кому-то необходимо хранить только основную информацию, другим требуется хранить и такие данные как логистическая информация, информация об аллергенах (для продуктов питания, например), информация о сертификации продукции и т.д.
В результате, невозможно создать систему которая будет сразу готова хранить все возможные типы информации. Вместо этого мы даем вам возможность настроить систему для ваших специфических нужд, задать самим какую информацию и как вам необходимо хранить.
Именно то какую информацию хранить и как и описывает Модель данных
.
# Типы
Первым важным аспектом Модели данных
являются Типы
. Типы определяют какие сущности или объекты есть у вас в системе. Например, ваша номенклатура состоит из 3 уровней иерархии и затем уже идут товары:

Для этого вам необходимо задать 4 типа, 3 типа которые будут отражать 3 уровня иерархии и один тип для самого товара:

То есть, Тип
- это некоторый "контейнер", который в дальнейшем сможет содержать атрибуты и тип имеет своего "родителя". Этот тип может быть создан только от другого определенного типа. Вы не сможете в данной конфигурации создать товар и присоединить его к первому уровню иерархии (но это возможно сделать если изменить модель данных).
Тип может представлять из себя и товар и иерархию и, например магазин, где находятся ваши товары (если вам необходимо хранить эту информацию тоже) и т.д.
Тип - это группа атрибутов, которую вы хотите хранить в системе.
В дальнейшем, пользователь уже будет создавать объекты (товары, классификации и т.д.) определенных типов. То есть, тип - это некоторый шаблон по которому будут создаваться объекты. Например, у вас есть тип Товар
и вы сможете ввести, например, 1000 объектов типа Товар
.
# Редактирование типов
Вы можете создать, изменить или удалить тип зайдя в настройки системы и выбрав меню Типы

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

Идентификатор
- это текст по которому в дальнейшем вы сможете обращаться к этому типу, он должен быть на английском языке и не должен содержать пробелов.Наименование
- название типаИконка
- это картинка которая будет показываться с системе вместе с этим типом. Это название иконки из этого спискаЦвет иконки
- это цвет для иконки. Вы можете выбрать название цвета из этого спискаФайл
- это признак того что этот тип представляет из себя файл. Если вы его выберете то система позволит вам загружать файлы в объекты того типа.
# Атрибуты
После того как вы создадите типы вам необходимо определить какие атрибуты будут у каждого типа. Например, для товара вам необходимо хранить производителя, его размеры и вес, название и т.д. А вот, например классификация может и не содержать никаких атрибутов.
# Группы атрибутов
Атрибуты объединены в группы. Для создания или изменения группы атрибутов вам необходимо зайти в
настройки системы и выбрать меню Атрибуты

Вам будут доступны следующие поля:

Идентификатор
- это текст по которому в дальнейшем вы сможете обращаться к этой группе, он должен быть на английском языке и не должен содержать пробелов.Наименование
- название группы.Порядковый номер
- он определяет в каком порядке группа будет показываться на экране по отношению к другим группам.Группа показывается
- группа атрибутов может быть невидима, в этом случае она используется для ограничения доступа. Более подробно об этом вы можете прочитать в разделе Управление доступом
# Зависимость атрибутов от положения товара в иерархии
Как мы уже писали, тип может иметь различные атрибуты. Но представьте себе, что мы ввели в систему множество товаров, все они одного типа - Товар
. Но товары могут иметь как общие атрибуты (например, Название
) так и различные (например Размер диагонали
, который очень важен для телевизоров, не бессмысленнен для наушников).
Поэтому нам необходимо иметь возможность задавать не только к кому типу принадлежит атрибут, но и на каком уровне он показывается.
Например, мы имеем следующую иерархию:

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

Это означает, что мы создаем атрибут Количество капиносов
для типа Товар
но виден этот атрибут будет только для категорий Подоконники деревянные
и Подоконники пластиковые
Таким образом вы можете очень гибко настроить какие атрибуты и как хранить.
# Редактирование атрибутов
После того как вы создали группу атрибутов, вы можете создавать в ней атрибуты. Вам будут доступны следующие настройки:

Идентификатор
- это текст по которому в дальнейшем вы сможете обращаться к этому атрибуту, он должен быть на английском языке и не должен содержать пробелов.Зависит от языка
- Если эта опция включена, то для каждого языка в системе вы сможете задать отдельное значение для этого атрибута. Например, наименование товара будет различным для различных языков.Тип атрибута
- это тип данных которые вы сможете хранить в этом атрибуте. Доступны следующие типы данных: Текст, Да/Нет, Целочисленный, Дробный, Дата, Время и Список значенийШаблон Regex
- Regex позволяет задать дополнительную проверку для данных, например определить что ваш целочисленный атрибут должен быть длиной не менее 3 символом (это задается как^[0-9]{3,}$
) .Текст ошибки при проверки шаблона
- Это текст который будет показан пользователю если проверка Regex выдаст ошибку.Порядковый номер
- он определяет в каком порядке атрибут будет показываться на экране по отношению к другим атрибутам в этой группе.
Дополнительно, для атрибутов типа Текст
вам доступны:
Несколько строк
- Эта опция означает что текст будет показан не как одно поле, а как текстовое поле в несколько строк (это необходимо если вы хотите хранить длинный текст).Поддержка форматирования
- это означает что ваш текст будет не просто текст, а форматированный текст, где вы сможете задать размер, цвет шрифта и т.д.
# Зависимости
Вы уже знаете как задавать типы (типы объектов) которые есть с системе и как определять какие атрибуты будут у этих типов. Но кроме этого вам может понадобится связывать объекты друг с другом через зависимости.
Как мы определили у нас есть дерево номенклатуры с 3 уровнями иерархии и сам товар, но часто дерево номенклатуры не соответствует другим иерархиям. Например, на вашем веб сайте структура каталога другая, или еще хуже, вы выгружаете товары в маркетплейс, где жестко задана структура товаров и вы не сможете это изменить. То есть, получается, что вам товар находится в одном месте в вашем каталоге и в другом в маркетплейсе. Получается, что вам товар должен быть в 2 разным местах. Но наша система типов определяет только один тип, от которого товар может быть создан.
Например, у нас есть товары, и мы бы хотели иметь иерархию где эти же товары разбиты по разным брендам. Для этого нам необходимо создать новые типы, которые будут хранить информацию о брендах:

Затем мы можем загрузить список брендов к нам в систему:

Но мы не можем создать товар под брендом так как он уже создан в нашей основной иерархии. Вместо этого мы может создать Зависимость
между товаром и брендом:

Мы определили, что мы имеем логическую связь между типом Уровень классификации 1
и товаром. Наши загруженные данные брендов являются этим типом Уровень классификации 1
и теперь мы может связать любой бренд с любым товаром.

Зависимости можно использовать для любых логических отношений между объектами в системе.
Например, вы можете хранить данные о ценах отдельно от товаров (если вам это удобно по модели данных) и связывать цены с конкретными товарами через зависимости.
# Редактирование зависимостей
Вы можете создать, изменить или удалить зависимость зайдя в настройки системы и выбрав меню Зависимости

Вам будут доступны следующие настройки:

Идентификатор
- это текст по которому в дальнейшем вы сможете обращаться к этой зависимости, он должен быть на английском языке и не должен содержать пробелов.Наименование
- название зависимости.Показывается в виде ребенка
- определяет будут ли зависимые объекты показываться в виде детей в основной иерархии или они будут доступны только при просмотре деталей объекта.Может быть больше чем одна
- разрешает или запрещает иметь несколько зависимостей для одного исходного объекта.Источники
- список типов, от которых ведет эта зависимость.Назначение
- список типов, к которым ведет эта зависимость.
# Списки значений
Иногда удобно чтобы значения атрибута выбирались из четко заданного списка, вместо ввода его в текстовое поле. Например, если цвет ваших товаром жестко задан то удобно иметь список цветом и выбирать значение из него.
Для этого системе есть понятие Списка значений
. Вы можете задать значения вашего атрибута:

и в дальнейшем при вводе данных вам будет доступны значения из этого списка:

# Редактирование списков значений
Вы можете создать, изменить или удалить зависимость зайдя в настройки системы и выбрав меню Списки значений
Вам будут доступны следующие настройки:

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