
- Все статьи цикла:
- Информационная архитектура: краткий экскурс
- Информационная архитектура: пример и типизация
- Информационная архитектура: сущности (теория) (вы здесь)
- Информационная архитектура: сущности (практика, vol.1)
- Информационная архитектура: сущности (практика, vol.2)
- Информационная архитектура: модели (coming soon)
- Информационная архитектура: практические советы (coming soon)
Сущности — это «кирпичи» информационной архитектуры. Правильно выделенные сущности, их свойства и связи задают масштабируемость продукта, качество поиска и фильтрации, логику навигации и эволюцию данных. В этой статье мы поговорим о том, как выявлять сущности, описывать их свойства, моделировать связи и таксономии (не запутывая при этом команду и пользователей).
1. Вокабуляр
Для начала давайте вспомним некоторые определения, которые помогут вам ориентироваться в этой статье:
Информационная сущность — устойчивый тип информации в домене продукта (товар, пользователь, заказ, пост, коллекция, организация и тп), обладающий набором свойств и связей.
Свойство сущности — характеристика, описывающая сущность количественно или качественно (название, цена, цвет, дата создания и тп). Свойства могут быть разных типов, заполняться и проверяться по разным правилам, быть «зависимыми» или нет.
Таксономия — управляемая схема классификации, объединяющая сущности по общим признакам (категории, метки и прочие). Она создаёт структуру смысловых связей между сущностями, помогает группировать объекты, облегчает поиск и делает навигацию предсказуемой.
Термин таксономии — конкретная единица этой классификации (например, категория «Кроссовки» в таксономии «Обувь»).
Фасет — нормализованный атрибут, используемый для фильтрации и уточнения поиска (бренд, цвет, размер и тп).
2. Что такое «сущность» и чем она не является
Сущность всегда:
- имеет роль в домене (зачем она нужна, какую задачу выполняет);
- несёт набор свойств (атрибутов);
- находится в связях с другими сущностями или таксономиями;
- проходит жизненный цикл (например: создание, модерация, публикация, удаление).
Из-за того, что терминология, как обычно, размыта, сущности легко можно спутать с чем-то, что ими не является, например:
- со страницей/экраном (это представление сущности в одном из контекстов);
- с UI‑компонентом (это способ отображения свойства или связи);
- с таблицей БД (это реализация хранения, одна сущность может жить в нескольких таблицах и наоборот);
- с бизнес‑процессом (это поведение вокруг данных: процесс «оформить заказ» использует сущности «корзина», «заказ», «платёж»).
Небольшая оговорка: иногда название сущности совпадает с названием представления, это абсолютно нормально. В контент‑ориентированных продуктах (CMS, документация, лендинги) тип «Страница» может быть полноценной контент‑сущностью с собственными свойствами (название, ярлык, текст, автор и тп) и жизненным циклом. Тезис «страница — не сущность» касается только путаницы между сущностью домена и экраном интерфейса (UI‑представлением).
Сложно? На самом деле нет. Вот вам простой тест. Объект — это сущность, если содержит хотя бы 3 из следующих признаков:
- имеет собственные свойства;
- имеет связи с другими объектами;
- повторяется во множестве экземпляров;
- нужен в отчётности/поиске;
- имеет собственные правила валидации/жизненный цикл.
3. Свойства сущности
Как мы уже выяснили, у сущностей есть свойства. Это, пожалуй, самое важное, что отличает их от остальных объектов цифрового продукта. Давайте поговорим об этом чуть подробнее.
3.1. Типы свойств
Свойства могут быть нескольких типов:
- Базовые: идентификатор, название, описания и прочие. Это простые поля, которые содержат типовую информацию. Базовые свойства не ссылаются на другие объекты и, как правило, представлены в виде простых типов данных (строка, число, дата и тп).
- Ссылочные: внешние ключи на другие сущности (например, «идентификатор пользователя» в сущности «заказ»), а также термины таксономий (категория, метка, группа). Ссылочные свойства нужны для того, чтобы гарантированно связать сущности между собой и с терминами таксономий.
- Составные: свойства, которые включают в себя сразу несколько значений, объединённых одной логикой. Составные свойства могут быть однородными и неоднородными:
- однородные списки (например, изображения:
{url, alt},...); - неоднородные комплекты (например, габариты:
{weight, width, height, depth}).
- однородные списки (например, изображения:
- Вычисляемые: свойства, для фиксации (сохранения, отображения и тп) которых нужно сначала произвести какие-то операции. Например, это могут быть: цена со скидкой, количество на складе, агрегированный рейтинг.
- Технические: SKU/артикул, временные отметки, статусы модерации/публикации, флаги индексации. Технические свойства редко используются в визуальном представлении (например, в карточке товара из десятка технических свойств будет выводиться только артикул).
- Ограничительные: права доступа (ACL), владельцы, видимость. Их очень легко спутать с техническими, так как они тоже используются больше в логике, чем в представлении. Если сомневаетесь, задайте себе вопрос: «это свойство влияет на возможности пользователей?» — если да, то перед вами именно ограничительное свойство.
И снова небольшое уточнение, чтобы избежать путаницы: типы свойств сущностей — не то же самое, что типы данных, которые эти свойства содержат. Например, если у нашей сущности «товар» есть свойство
title(название), то тип свойства здесь — базовый, тогда как тип данных — строка. Подробнее о типах данных я писал здесь.
3.2. Пример описания свойств
Минимальный набор информации, которую желательно фиксировать при описании каждого свойства сущности:
- название — короткое имя свойства, одно-два слова;
- код — как это свойство будет называться в коде и базе данных;
- тип данных — строка, число, массив, объект, ссылка и тп;
- обязательность — обязано ли свойство быть заполненным, если отметка «да», то значение свойства не может быть пустым;
- пример — короткий пример заполнения свойства (если пример слишком длинный, он может быть обрезан);
- описание/комментарий — если требуется вносить какую-то дополнительную информацию.
При желании, этот перечень можно дополнить дополнительными параметрами:
- источник — откуда берётся значение свойства (логика, подсистемы, интеграции и тп);
- валидации — базовое правило проверки значения свойства;
- индексация/поиск — участвует ли свойство в поиске и индексации, если да, то как;
- политика i18n — для локализуемых свойств: какие переводятся, какие нет;
- политикой заполнения — кто и когда обязан заполнить.
Вот пример того, как могут фиксироваться свойства сущности «товар» (табличка получилась внушительная, скрольте влево):
| Название | Код | Тип данных | Обяза-тельно | Пример | Описание/комментарий | Источник | Валидация | Индексация/поиск |
|---|---|---|---|---|---|---|---|---|
| Внутренний идентификатор | id | int | да | 12345 | Используется на бэкенде, на клиент не передаётся. | БД | уникальность | нет |
| Внешний идентификатор | sku | string | да | X-2025-01 | Артикул, идентифицирует товар в URL. | БД | уникальность | точный |
| Название | title | string | да | Кроссовки X | — | ERP | 5–120 символов | полнотекстовый |
| Описание | description | string | да | Летние кроссовки для самых... | — | ERP | 200–2400 символов | полнотекстовый |
| Категория | category_id | ref | да | 17 | Идентификатор термина ключевой таксономии | Таксономия | существует | фасет |
| Габариты | dimensions | object | нет | {w:10,h:20,d:5} | w — ширина,h — высота,d — глубина | ERP | диапазоны | фильтр |
| Изображения | images | list | да | ['/upload/img1.jpg'] | Список изображений товара, первое в списке — основное. | CDN | не пусто | нет |
| Цена | price | int | да | 4990 | Стоимость в рублях. | ERP | ≥0 | сортировка и фильтр |
| Скидка | discount | int | нет | 20 | Процент, на который снижается price | ERP | целое число | нет |
Такая фиксация свойств экономит кучу времени на разработке, интеграциях и отчётности. Дизайнеры и аналитики получают чёткий перечень с примерами, а разработчики намного более уверенно проектируют БД и жизненный цикл данных в продукте.
3.3. Примеры по доменам
Из-за того, что все продукты разные, домены в них тоже могут отличаться. В одном e-com сущность «товар» будет обладать одним набором свойств, в другом — совершенно иным. Порой очень хочется просто взять наработки с прошлого места работы и запихнуть их в текущую архитектуру «как есть». Призываю вас этого не делать, а всегда проектировать сущности, исходя из реалий продукта, процессов, потребностей пользователей и бизнес-задач.
Чтобы показать, насколько всё может отличаться от продукта к продукту, вот вам несколько примеров сущностей со свойствами из разных доменов:
| Сущность | Свойства |
|---|---|
| Пользователь | id, guid, email, login, password_hash, avatar, roles[], org_id, created_at, last_seen_at |
| Каталог | id, type, parent_id, slug, default_facets[], synonyms[] |
| Товар | id, sku, title, slug, description, images[], price, currency, dimensions{}, weight, category_id, tags[], stock_qty, rating, seller_id |
| Корзина | id, user_id, items[], coupon, total_amount, currency, updated_at |
| Категория | id, parent_id, name, slug, synonyms[], default_filters[] |
| Пост (медиа) | id, title, excerpt, body, author_id, category_id, tags[], published_at, status |
| Организация (SaaS) | id, name, inn, slug, plan, seats, billing_account_id, status, created_at |
Обратите внимание, что категория здесь — информационная сущность, хотя она же — и термин таксономии. У терминов всегда есть собственные свойства, жизненный цикл и связи. Фиксировать ли их как сущности или описывать отдельно — решать вам.
4. Связи между сущностями
Как я уже говорил, сущности почти всегда связаны как между собой, так и с терминами таксономии. Давайте теперь копнём поглубже.
4.1. Кардинальности
Кардинальность — это характеристика связи между двумя сущностями (таблицами, объектами, классами и т.д.), показывающая, сколько экземпляров одной сущности может быть связано с экземпляром другой. Проще говоря, это способ ответить на вопрос: «Сколько А может быть связано с одним B?» и наоборот.
Она лежит в основе информационной и логической архитектуры: без понимания кардинальностей невозможно правильно спроектировать базу данных, API, доменную модель или даже интерфейс.
Подробнее про кардинальности я писал в цикле про дизайн данных, здесь пройдёмся коротко:
- Один-ко-одному, 1:1 — связь, когда каждой записи одной сущности соответствует не более одной записи другой (аккаунт ↔ профиль). Используется для разделения личных и технических данных или выделения редко используемых атрибутов.
- Один-ко-многим, 1:N — наиболее частая связь: один объект верхнего уровня связан с множеством подчинённых (категория → товары; организация → проекты). Применяется для иерархий, коллекций и агрегатов.
- Многие-ко-многим, M:N — объект может быть связан с несколькими другими (товар ↔ теги; пост ↔ автор). Реализуется через промежуточные таблицы/сущности, содержащие идентификаторы обеих сторон и метаданные связи.
4.2. Хранение и производительность
Выбор способа хранения связей напрямую влияет на скорость работы системы, гибкость изменений и устойчивость к росту данных. Здесь важно найти баланс между строгими структурированными связями и гибкими форматами, чтобы обеспечить масштабируемость, простоту поддержки и корректную работу поиска и аналитики.
Это ещё не дизайн баз данных, но первый шаг к нему.
4.2.1. Ключевые, частые связи
Реализуются как явными внешними ключами (Foreign Key, FK — ссылка из одной таблицы БД на запись другой таблицы), так и отдельными таблицами. Индексируются для быстрого поиска и каскадных операций (например, при удалении пользователя каскадом удаляются его профиль, способы оплаты и тп). Ключевые связи хорошо подходят для данных, которые часто запрашиваются и требуют согласованности.
Например, ключевой связью является связь пользователя и его профиля (1:1) или заказа и товара (1:N).

4.2.2. Вариативные, редкие связи
Удобнее хранить в агрегированных структурах (JSON, массивы, ключ-значение) или связующих таблицах без строгих FK. Такой подход облегчает эволюцию схемы и интеграции с внешними источниками.
Пример вариативной связи: товар и теги (M:N через JSON или связующую таблицу) или пост и связанные материалы (список ссылок в массиве).

4.2.3. Комбинированный подход
Сочетает строго типизированные связи для критичных сценариев (например, FK для заказов и пользователей) и гибкие структуры для второстепенных (например, свойства товара в JSON). Это компромисс между скоростью, расширяемостью и затратами на сопровождение.
Пример комбинированного подхода: заказ и пользователь (жёсткий FK) + история изменений в JSON, товар и его характеристики (основные поля + гибкое поле параметров).

4.3. Поисковые сценарии и индексы
Вот вы открыли свой любимый маркетплейс. Вбили в поле поиска нужный товар, отфильтровали по бренду и отсортировали результат по цене. Поздравляю, вы только что покрыли практически все поисковые сценарии.
Поисковые сценарии — это практические случаи, когда пользователь взаимодействует с данными через поиск, фильтрацию и сортировку.
Чтобы такие операции выполнялись быстро и точно, информационная модель должна поддерживать разные типы индексов. Индексы обеспечивают мгновенное обращение к нужным сущностям и позволяют формировать результаты без полного перебора данных.
Индексировать можно разные типы полей:
4.3.1. Фасетные поля
Категория, бренд, размер, цвет, материал и прочее. Хранятся в нормализованных словарях или связаны с терминами таксономий, индексируются отдельно. Это даёт возможность строить фильтры и считать количество элементов в каждой группе (это ещё называется «фасетные агрегации»). Чтобы ускорить отклик системы, важно хранить предвычисленные частоты — но это уже совсем мрак, оставим его архитекторам БД.
4.3.2. Поисковые поля
Используют полнотекстовые индексы и префиксные деревья для автодополнения и предложений. Помните, как вы вбиваете что-то в строку поиска, а вам показывают подсказки? Вот это оно. Здесь же добавляются морфологический анализ, поддержка синонимов, транслитерации и нечёткий поиск (fuzzy search).
4.3.3. Сортировочные поля
Числовые и временные индексы (цена, рейтинг, дата создания, популярность), обеспечивающие быстрые операции сортировки и пагинацию без нагрузки на базу данных.
4.3.4. Сложно? Подождите, это ещё не всё
Существует тьма технических приёмов, нацеленных на оптимизацию индексирования: применение комбинированных индексов по частым связкам category_id + price, денормализация популярных связей product → category_name, кэширование фасетных частот для снижения нагрузки и прочее. Но это вам так, если захочется погрузиться.
5. Таксономии и «сквозные» свойства
Правильная таксономия обеспечивает единый язык между пользователями, системой и бизнесом. Таксономии бывают нескольких типов, и каждая решает свою задачу:
5.1. Иерархическая таксономия
Древовидная структура терминов, где каждый элемент подчинён родительскому (например, дерево категорий или разделов). В таких таксономиях «родительство» обычно обеспечивается отдельным свойством, вроде parent_id.
Такая модель хорошо подходит для каталогов товаров, корпоративных порталов и CMS, где пользователи ожидают логичную последовательность разделов и вложенных подразделов.

Преимущество: высокая предсказуемость навигации и простота в управлении.
Недостаток: ограниченная гибкость и риск «похоронить» информацию слишком глубоко.
5.2. Плоская таксономия
Сеть меток, тем или ключевых слов, связанных с сущностями по принципу многие‑ко‑многим. Она добавляет горизонтальные связи и позволяет связывать контент по контексту: статьи с похожими тегами, продукты с общими характеристиками, документы одной темы.
Чаще всего плоские таксономии используется в медиа, блогах и SaaS‑платформах для тегирования и сквозных переходов между материалами.

Преимущество: простота расширения и гибкость.
Недостаток: если не контролировать список терминов, со временем возможна потеря структурности и даже полная поломка логики (например, когда у вас есть 2 разных метки «UX» и «ux»).
5.3. Фасетная таксономия
Объединяет независимые классификации, например: категория, бренд, размер, цена, материал. Пользователь может фильтровать данные сразу по нескольким измерениям.
Такая модель характерна для маркетплейсов и аналитических панелей, где каждый фасет — это отдельная ось с набором значений.

Преимущество: высокая управляемость фильтрацией и быстрый поиск.
Недостаток: сложность проектирования и ухудшение управляемости при росте числа комбинаций.
5.4. Сквозные свойства
Например: материал, бренд, разрешение экрана. Сквозные свойства выполняют роль фасетов и служат мостом между таксономиями и данными:
- живут в единых словарях, которые поддерживаются централизованно;
- используются как фасеты и правила мерчендайзинга/рекомендаций;
- имеют политику синонимов, нормализации значений и правила локализации;
- могут быть жёстко типизированы (enum — о них чуть ниже) или гибкими (текстовые значения, появляющиеся из данных);
Однако у сквозных свойств есть и обратная сторона. Давайте разберём на примере свойства товара «материал».
«Материал» — фасет только при наличии нормализованного словаря (ограниченный справочник материалов). Если материал хранится как произвольный текст (например, «металлический с пластиковыми вставками»), он не является фасетом и остаётся обычным полем: участвует в полнотекстовом поиске, но не в фасетной фильтрации.
6. Противоречивые классификации
Иногда классифицировать сущности оказывается сложно. Хороший пример такой противоречивой классификации — вопрос «где разместить арбуз»? Это ягода (что правильнее с точки зрения ботаники), тыквина (что ещё более правильно) или фрукт (ведь именно там его ищут пользователи)?
Когда один и тот же объект может относиться сразу к нескольким категориям, архитектору важно не выбрать «правильный» ответ, а установить управляемую логику принятия решений. Задача таксономии — не отражать условную «истину», а обеспечивать предсказуемость и согласованность между системами.
И для этого существует несколько правил:
- Вводим приоритеты классификаций (биология < повседневные ожидания < бизнес‑цели каталога). Эти приоритеты задают уровень, на котором принимается решение — например, витрина каталога ориентируется на пользовательскую логику, а не на научную.
- Формируем правила визуализации и информационные связи: как объект отображается в меню, поиске, фильтрах и фасетах, чтобы не было дублирования или рассинхронизации. В карточке сущности могут быть указаны обе принадлежности, но навигация использует только основную.
- Фиксируем конфликты и владельцев решения: кто принимает решение, когда пересматривается структура, где фиксируются комментарии и примечания.
- Документируем принципы разрешения конфликтов и исключения, чтобы разные подсистемы (поиск, рекомендации, SEO) пользовались единым источником правды.
7. Пример визуализации базы данных
По итогу работы над информационной архитектурой обычно создаются спецификации API и дизайн БД. Про API здесь говорить пока рано, а вот про БД уже пора.
Ловите пример того, как может выглядеть простенькая база данных в виде ER-диаграммы:

Здесь учитывается почти всё:
- По типу соединения можно понять тип связей. Например, от
users.idкorders.user_idсоединение начинается одной линией, а заканчивается несколькими, разветвлением — это связь однин-ко-многим (1:N). - Иконка «ключика» возле названия поля обозначает первичный ключ (primary key), который уникально идентифицирует каждую запись. А иконка «заметки» говорит о том, что у поля есть дефолтное значение.
- Если возле названия есть иконка «ссылки», то это внешний ключ (foreign key), и от него почти всегда будет связь 1:N к источнику. Например, от того же
orders.user_idкusers.id. - Две буквы «NN» в конце каждой строки — это «NOT NULL», поле не может быть пустым. Та самая обязательность из таблички, помните?
- Буква «Е» в
orders.statusозначает «ENUM» — набор именованных констант. Значение этого поля может быть заполнено только значениями из определённого словаря. В нашем случае статус заказа может быть толькоpending,paid,shipped,deliveredилиcanceled. - Ну а всякие
varchar,int,decimal,datetimeи другие — всего лишь типы данных, которые хранятся в этом поле.
Так нафига вообще тогда информационная архитектура, если можно сразу пилить ER-диаграммы и не париться? Да потому что они описывают только один слой IA — слой реализации хранения данных (в самом начале статьи мы об этом говорили). Огромный пласт информации, накопленной грамотным подходом к IA, здесь не учитывается. Примеры, политики заполнения и мультиязычности, правила валидации, источники данных и куча всего остального.
Так что не ER-диаграммами едиными.
8. Что дальше
А дальше мы поговорим о практической работе с сущностями: как их искать, формализовать и поддерживать, немного поговорим о частых ошибках и анти-паттернах. Отдельно я расскажу о том, как из сущностей и их связей формировать навигацию и поиск. Ну и бонусом, в следующих статьях будет несколько шаблонов, чек-листов и даже мини‑RFC для решения по сущностям.
Подписывайтесь на канал, там будут все новости.
- Все статьи цикла:
- Информационная архитектура: краткий экскурс
- Информационная архитектура: пример и типизация
- Информационная архитектура: сущности (теория) (вы здесь)
- Информационная архитектура: сущности (практика, vol.1)
- Информационная архитектура: сущности (практика, vol.2)
- Информационная архитектура: модели (coming soon)
- Информационная архитектура: практические советы (coming soon)


