# Слой DDS: бизнес-модель хранилища Устройство детального слоя: сущности, которыми хранилище говорит с витринами, их связи и правила слоя. Набор собирается развилками карты #127 (этап 4) и правится по мере постройки. Рамки заданы мастер-спекой [«Боевой реализм стенда (v2)»](../../specs/2026-07-30-stand-v2-realism.md): карта таблиц и витрины — раздел 7, сверка — раздел 4, склейка идентичностей — раздел 5. Дом выбран развилкой #130 — первой, которой понадобилось записать резолюцию в доки: записи этапа 4 живут здесь, по хранилищную сторону границы «источник | хранилище». Устройство источников остаётся их собственным наборам ([заказы бэкенда](../orders/README.md)) — генератор переносим и о нашем DDS не знает. ## Карта модели Целостность модели — связи и ко-локация — живёт в этом разделе; файлы сущностей держат глубину и на карту ссылаются. - **Заказ** (`dds.order_v`, хранение `dds.order_rep` / `_dist`) — физическая сущность: одна строка — заказ в текущем состоянии, позиции массивами в строке, наполняется заменой партиций — [модель заказа](order.md). - **Сессия** (`dds.session_v`, хранение `dds.session_rep` / `_dist`) — расчётная сущность: одна строка — визит, нарезку по правилу визита стенд делает сам, `VisitID` генератора — эталон сверки; наполнение заменой дневной партиции — [модель сессии](session.md). - **Событие** (`dds.event_v`) — контракт над ODS, а не копия: представление, переводящее событие на язык бизнес-модели, — [контракт события](event.md). - **Карта идентичностей** (`dds.identity_map_v`, хранение `dds.identity_map_rep` / `_dist`) — кука ↔ пользователь магазина — [модель карты](identity.md). Связи держатся двумя ключами моста (спека, разделы 4 и 5): `purchaseID[1]` события равен `order_id` заказа — по нему идут сверка и сборка склейки; `user_id` заказа связывает куки одного человека. Ко-локацию задаёт шардирование: события и карта идентичностей раскладываются одним выражением от куки, заказы — от `order_id`. Поэтому обогащение витрин склейкой локально, а сверка и сборка карты ходят через GLOBAL JOIN с обеими сторонами-подзапросами ([исследование соединений](../../research/2026-08-22-distributed-join.md)). ## Правила слоя - DDS обслуживает человека с дашбордом: время лежит в поясе счётчика, пересчёт — один раз при наполнении слоя ([дока хранилища](../storage.md), «Часовые пояса»). - Публичный договор каждой сущности — `_v`; роли объектов и конвенция чтения заданы [докой хранилища](../storage.md), «Имена объектов». - Служебные колонки — координаты собственной загрузки слоя; чужие ярлыки не переносятся, а спрашиваются у их слоя по ключу сущности. Вывод правила и цепочка расследования — [модель заказа](order.md). - Наполняет слой [дневной конвейер](../etl.md): запуск, объём прогона и замена партиций на кластере — его устройство. ## Родословная Дом набора и первая сущность собраны развилкой #130 карты #127; форма набора — [ADR 0011](../../adr/0011-component-docs.md).