# Модель данных

# Что такое модель данных?

Разные компании и бизнесы имеют различные потребности в продуктовых данных. Кому-то необходимо хранить только основную информацию, другим требуется хранить и такие данные как логистическая информация, информация об аллергенах (для продуктов питания, например), информация о сертификации продукции и т.д.

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

Именно то какую информацию хранить и как и описывает Модель данных.

# Типы

Первым важным аспектом Модели данных являются Типы. Типы определяют какие сущности или объекты есть у вас в системе. Например, ваша номенклатура состоит из 3 уровней иерархии и затем уже идут товары:

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

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

Тип может представлять из себя и товар и иерархию и, например магазин, где находятся ваши товары (если вам необходимо хранить эту информацию тоже) и т.д.

Тип - это группа атрибутов, которую вы хотите хранить в системе.

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

# Редактирование типов

Вы можете создать, изменить или удалить тип зайдя в настройки системы и выбрав меню Типы

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

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

  • Наименование - название типа

  • Иконка - это картинка которая будет показываться с системе вместе с этим типом. Это название иконки из этого списка

  • Цвет иконки - это цвет для иконки. Вы можете выбрать название цвета из этого списка

  • Файл - это признак того что этот тип представляет из себя файл. Если вы его выберете то система позволит вам загружать файлы в объекты того типа.

# Атрибуты

После того как вы создадите типы вам необходимо определить какие атрибуты будут у каждого типа. Например, для товара вам необходимо хранить производителя, его размеры и вес, название и т.д. А вот, например классификация может и не содержать никаких атрибутов.

# Группы атрибутов

Атрибуты объединены в группы. Для создания или изменения группы атрибутов вам необходимо зайти в настройки системы и выбрать меню Атрибуты

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

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

  • Наименование - название группы.

  • Порядковый номер - он определяет в каком порядке группа будет показываться на экране по отношению к другим группам.

  • Группа показывается - группа атрибутов может быть невидима, в этом случае она используется для ограничения доступа. Более подробно об этом вы можете прочитать в разделе Управление доступом

# Зависимость атрибутов от положения товара в иерархии

Как мы уже писали, тип может иметь различные атрибуты. Но представьте себе, что мы ввели в систему множество товаров, все они одного типа - Товар. Но товары могут иметь как общие атрибуты (например, Название) так и различные (например Размер диагонали, который очень важен для телевизоров, не бессмысленнен для наушников).

Поэтому нам необходимо иметь возможность задавать не только к кому типу принадлежит атрибут, но и на каком уровне он показывается.

Например, мы имеем следующую иерархию:

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

Это означает, что мы создаем атрибут Количество капиносов для типа Товар но виден этот атрибут будет только для категорий Подоконники деревянные и Подоконники пластиковые

Таким образом вы можете очень гибко настроить какие атрибуты и как хранить.

# Редактирование атрибутов

После того как вы создали группу атрибутов, вы можете создавать в ней атрибуты. Вам будут доступны следующие настройки:

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

  • Зависит от языка - Если эта опция включена, то для каждого языка в системе вы сможете задать отдельное значение для этого атрибута. Например, наименование товара будет различным для различных языков.

  • Тип атрибута - это тип данных которые вы сможете хранить в этом атрибуте. Доступны следующие типы данных: Текст, Да/Нет, Целочисленный, Дробный, Дата, Время и Список значений

  • Шаблон Regex - Regex позволяет задать дополнительную проверку для данных, например определить что ваш целочисленный атрибут должен быть длиной не менее 3 символом (это задается как ^[0-9]{3,}$) .

  • Текст ошибки при проверки шаблона - Это текст который будет показан пользователю если проверка Regex выдаст ошибку.

  • Порядковый номер - он определяет в каком порядке атрибут будет показываться на экране по отношению к другим атрибутам в этой группе.

Дополнительно, для атрибутов типа Текст вам доступны:

  • Несколько строк - Эта опция означает что текст будет показан не как одно поле, а как текстовое поле в несколько строк (это необходимо если вы хотите хранить длинный текст).

  • Поддержка форматирования - это означает что ваш текст будет не просто текст, а форматированный текст, где вы сможете задать размер, цвет шрифта и т.д.

# Зависимости

Вы уже знаете как задавать типы (типы объектов) которые есть с системе и как определять какие атрибуты будут у этих типов. Но кроме этого вам может понадобится связывать объекты друг с другом через зависимости.

Как мы определили у нас есть дерево номенклатуры с 3 уровнями иерархии и сам товар, но часто дерево номенклатуры не соответствует другим иерархиям. Например, на вашем веб сайте структура каталога другая, или еще хуже, вы выгружаете товары в маркетплейс, где жестко задана структура товаров и вы не сможете это изменить. То есть, получается, что вам товар находится в одном месте в вашем каталоге и в другом в маркетплейсе. Получается, что вам товар должен быть в 2 разным местах. Но наша система типов определяет только один тип, от которого товар может быть создан.

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

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

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

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

Зависимости можно использовать для любых логических отношений между объектами в системе.

Например, вы можете хранить данные о ценах отдельно от товаров (если вам это удобно по модели данных) и связывать цены с конкретными товарами через зависимости.

# Редактирование зависимостей

Вы можете создать, изменить или удалить зависимость зайдя в настройки системы и выбрав меню Зависимости

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

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

  • Наименование - название зависимости.

  • Показывается в виде ребенка - определяет будут ли зависимые объекты показываться в виде детей в основной иерархии или они будут доступны только при просмотре деталей объекта.

  • Может быть больше чем одна - разрешает или запрещает иметь несколько зависимостей для одного исходного объекта.

  • Источники - список типов, от которых ведет эта зависимость.

  • Назначение - список типов, к которым ведет эта зависимость.

# Списки значений

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

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

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

# Редактирование списков значений

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

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

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

  • Наименование - название списка значений.

и также вы сможете задать необходимые вам значения