Проектирование ER-диаграммы сущностей приложения

Принципы реляционного моделирования и спецификация сущностей для смешанных операционных сред

Author

Core Infrastructure & Simulation Framework Documentation

Published

June 11, 2026

1 Введение и назначение спецификации

Данный документ представляет собой базовое архитектурное описание реляционной модели данных верхнего уровня (Top-Level ERD) для платформы цифровых симуляторов. Модель разработана как инвариантное ядро, способное обеспечивать сквозной жизненный цикл фиксации событий, абстрагируясь от изменчивых правил конкретных прикладных бизнес-проектов.

Главная задача настоящей спецификации — зафиксировать логическую схему движения состояний, определить типы и силу межтабличных связей (Cardinality), а также описать выбор полуструктурированных и транзакционных сущностей. Проектирование дата-слоя ориентировано на создание универсальной шины хранения, которая изолирует шаги сложных распределенных процессов и накапливает консистентные операционные логи.


2 Теоретические основы и практическая роль ER-диаграмм

Диаграмма «сущность–связь» (Entity-Relationship Diagram, ERD) представляет собой инструмент визуального и структурного моделирования реляционных баз данных. В сложных программных комплексах ERD выполняет роль декларативного контракта между системными архитекторами, DevOps-инженерами и разработчиками бэкенда.

2.1 Задачи, решаемые внедрением ER-модели:

  • Формализация бизнес-логики: Перевод абстрактных регламентов оперирования на язык реляционных отношений, ограничений целостности (Foreign Keys) и уникальности данных.
  • Предотвращение транзакционного оверхеда:1 Определение оптимального баланса между нормализацией справочников (измерений) и денормализацией таблиц фактов под высокими нагрузками.
  • Обеспечение консистентности трассировки: Создание сквозных цепочек идентификаторов, связывающих пользовательский ввод с внутренними системными логами.

2.2 Специфика единого дата-слоя для реальных пользователей и цифровых двойников

Ключевая инженерная задача при проектировании архитектуры данных симулятора заключается в том, что спроектированные таблицы и интерфейсы СУБД являются совместно используемыми (Shared Data Layer). Модель данных не разделяется на «клиентскую» и «эмуляционную»:

  • Идентичность сетевого и транзакционного следа: Когда реальный сотрудник выполняет операцию в мобильном приложении, система инициирует точно такие же реляционные транзакции, какие генерируют боты цифровых симуляторов при ускоренном воспроизведении сценариев.
  • Синхронизация Master Data: И боты, и люди обращаются к единым эталонным каталогам и матрицам разрешений. Это гарантирует, что синтетические данные, накопленные в процессе симуляции, по своей структуре и ограничениям абсолютно идентичны реальным логам.
  • Прозрачность для бизнес-анализа: Использование общих таблиц сессий и событий позволяет внешним аналитическим инструментам бесшовно обрабатывать смешанный трафик, выявляя скрытые зацикливания и инфраструктурные заторы по единым алгоритмам.

3 Концептуальное проектирование ER-диаграммы ядра платформы (для приложения AgroLaborApp)

Для обеспечения максимальной пропускной способности СУБД при одновременной обработке действий реальных пользователей и плотных потоков синтетического трафика от симуляторов, структура данных сведена к компактному архитектурному ядру.

NoteМетодология декомпозиции схемы Data Reduction

Для оптимизации визуального восприятия и предотвращения перегрузки архитектурного графа, из схемы намеренно исключены очевидные связующие таблицы прав доступа (user_field_permissions, user_activity_permissions), промежуточные перекрестные справочники (field_allowed_activities) и низкоуровневые системные поля.

На схеме отображено исключительно концептуальное ядро платформы: долгоживущие таблицы измерений (companies, agro_fields, crop_standards), транзакционные сессии оперирования (tracking_sessions), а также полуструктурированные буферы логирования атомарных событий (tracking_event_log) и транскрипции голосовых потоков (voice_transcripts). Атрибуты технического логирования, суррогатные ключи связей и базовые константы инкапсулированы и опущены.

3.1 Диаграмма связей сущностей ядра системы (Entity Relations Diagram)

WarningВажное примечание

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

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

erDiagram
    companies ||--o{ agro_fields : "manages"
    agro_fields ||--o{ tracking_sessions : "hosts"
    crop_standards ||--o{ tracking_sessions : "defines parameters"
    
    tracking_sessions ||--o{ tracking_event_log : "generates events"
    tracking_sessions ||--o{ voice_transcripts : "buffers speech"

    tracking_sessions {
        uuid session_id PK
        int user_id FK
        int field_id FK
        varchar activity_type
        varchar status
        timestamp end_time
        int total_duration_seconds
    }

    tracking_event_log {
        int event_id PK
        uuid session_id FK
        varchar activity_name
        timestamp timestamp
        jsonb payload
    }

    voice_transcripts {
        int transcript_id PK
        uuid session_id FK
        uuid correlation_id
        varchar raw_audio_path
        text recognized_text
        numeric parsed_quantity
        varchar vtt_status
    }


4 Архитектурный анализ реляционных доменов данных

NoteСправка по разделу

Архитектурный анализ реляционных доменов данных — это специализированный раздел технической документации, который объясняет, как и почему единая база данных проекта разделена на изолированные смысловые зоны (домены), и как эти зоны взаимодействуют друг с другом.

4.1 Контур транзакционных сессий и координации (tracking_sessions)

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

  • Синхронизация субъектов и зон оперирования: Поля user_id и field_id связывают сессию с конкретным исполнителем (человеком или ботом-симулятором) и пространственными границами объекта (agro_fields). Это позволяет системе применять идентичные правила валидации к действиям любого типа.
  • Управление условными переходами: Поле status контролирует текущую стадию сессии. Ограничение длительности и логика переходов состояний напрямую зависят от фонового пересчета параметров по таймеру (SES-250), что предотвращает застревание незавершенных сессий в СУБД.

4.2 Слой асинхронного логирования и гибких схем фактов (tracking_event_log)

  • Инкапсуляция денормализованных событий: Таблица tracking_event_log функционирует какAppend-Only хранилище атомарных событий сессии. Связь с сессией по ключу session_id (\(1:M\)) обеспечивает строгую реляционную целостность.
NoteАрхитектурное обоснование Append-Only & Атомарности

Использование модели Append-Only (полный отказ от операций UPDATE и DELETE в ядре) гарантирует линейную скорость последовательной записи логов телеметрии на физический диск без транзакционных блокировок строк (Row Locks).

Атомарность и неизменяемость исторических фактов сессии обеспечивают математическому движку Affinity Decay (постепенное уменьшение веса старых взаимодействий пользователя с объектом) две фундаментальные гарантии: 1. Точный расчет \(\Delta t\): Время деградации вычисляется напрямую через MAX(event_timestamp) без ресурсоемкого восстановления состояний. 2. Идемпотентность (Time Travel)2: Возможность полной перезагрузки и пересчета веса старых взаимодействий пользователя с объектом в профиле с нуля за любой исторический период при изменении коэффициентов взаимосвязи \(\lambda\).

  • Гибкость полуструктурированных данных: Интеграция типа данных JSONB для поля payload — это стратегическое архитектурное решение. Оно позволяет симуляторам динамически менять состав, вложенность и схемы передаваемых параметров телеметрии, не затрагивая физическую структуру таблиц СУБД и изолируя распределенные транзакции от оверхеда на DDL-операции.

4.3 Буфер асинхронной транскрипции и обучения ИИ (voice_transcripts)

  • Изоляция вычислительного слоя: Сущность voice_transcripts изолирует транзакционный контур бизнес-логики от тяжелых фоновых вычислений ИИ-нод (gRPC Service). Сюда асинхронно складываются ссылки на медиафайлы (raw_audio_path) и промежуточные результаты распознавания Whisper.
  • Трассировка и сбор датасетов: Поле correlation_id связывает транскрипт со сквозными логами очередей Kafka, обеспечивая выполнение задачи SES-233 (Error Handling & Tracing). Поле vtt_status контролирует жизненный цикл распознавания, позволяя выгружать пары “сырой текст — эталон” для дообучения нейросетей.

5 Детальные спецификации ключевых транзакционных сущностей

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


5.1 Контур координации и time_tracking(хронометража) сессий (tracking_sessions)

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

Параметры и атрибуты сущности tracking_sessions

Название таблицы Атрибут поля Тип данных Ключ Описание и бизнес-правило Пример
tracking_sessions session_id UUID PK Уникальный сквозной идентификатор сессии. Формируется на клиенте для обеспечения трассировки. 4a8b9c2d...
tracking_sessions user_id INT FK Идентификатор субъекта: реального пользователя или цифрового двойника. 1042
tracking_sessions field_id INT FK Направленная ссылка на пространственные границы объекта оперирования (agro_fields). 14
tracking_sessions activity_type VARCHAR - Категория выполняемой операции, валидируемая по глобальному справочнику dict_activities. watering
tracking_sessions status VARCHAR - Текущая стадия сессии (STARTED, PAUSED, COMPLETED, FAILED). STARTED
tracking_sessions total_duration_seconds INT - Фактический хронометраж сессии. Вычисляется автоматически при фиксации end_time. 7200

5.2 Слой асинхронного логирования телеметрии (tracking_event_log)

Сущность tracking_event_log решает задачу накопления плотных массивов данных. Использование полуструктурированного формата JSONB для поля payload позволяет эффективно аккумулировать транзакции смешанной среды. Симуляторы и реальные мобильные клиенты записывают атомарные события в одну таблицу, не перегружая СУБД частыми изменениями физических схем.

Параметры и атрибуты сущности tracking_event_log

Название таблицы Атрибут поля Тип данных Ключ Описание и бизнес-правило Пример
tracking_event_log event_id SERIAL PK Автоинкрементный суррогатный ключ атомарного события. 849204
tracking_event_log session_id UUID FK Внешний ключ, связывающий событие лога с родительской сессией оперирования. 4a8b9c2d...
tracking_event_log activity_name VARCHAR - Техническое имя зафиксированного шага (например, GPS_PING, METRIC_CAPTURE). GPS_PING
tracking_event_log payload JSONB - Свободный документ-массив параметров: координаты, показатели датчиков или внутренние метрики ИИ. {"lat": 43.2, "lng": 76.9}

5.3 Буфер асинхронной транскрипции и обучения ИИ (voice_transcripts)

Сущность voice_transcripts изолирует транзакционную бизнес-логику от тяжелых вычислений на gRPC-нодах ИИ. Таблица выступает в роли общего буфера для Сценария Б (голосовой ввод). Фиксация пары «сырой текст — скорректированное значение» позволяет накапливать чистые датасеты для последующего дообучения Whisper, контролируя консистентность через жизненный цикл поля vtt_status.

Параметры и атрибуты сущности voice_transcripts

Название таблицы Атрибут поля Тип данных Ключ Описание и бизнес-правило Пример
voice_transcripts transcript_id SERIAL PK Уникальный суррогатный ключ записи транскрипта. 315
voice_transcripts session_id UUID FK Связь с родительской сессией оперирования для контекстуализации аудио. 4a8b9c2d...
voice_transcripts correlation_id UUID - Сквозной идентификатор для трассировки ошибок (SES-233) через шину Apache Kafka в Loki. 9f8e7d6c...
voice_transcripts raw_audio_path VARCHAR - Символьный путь (s3_key) к бинарному WAV-файлу голосовой заметки в хранилище MinIO S3. audio/315.wav
voice_transcripts recognized_text TEXT - Сырой текстовый лог транскрипции, возвращенный ИИ-нодой Whisper. Полив сектора два
voice_transcripts vtt_status VARCHAR - Текущий статус обработки буфера (PROCESSING, PARSED, VERIFIED). PARSED

6 Заключение

Проектирование схемы данных верхнего уровня (Top-Level ERD) на базе концептуального абстрагирования позволило сформировать инвариантный дата-слой, независимый от специфики конкретных бизнес-приложений.

Совместное использование разработанной структуры tracking_sessions и tracking_event_log как реальными пользователями (через интерфейсы Flutter), так и автоматизированными ботами симулятора гарантирует абсолютную идентичность сетевого и транзакционного следа. Внедрение полуструктурированных хранилищ (JSONB payload) обеспечило гибкость эволюции схем данных без деградации производительности СУБД, а асинхронные буферы voice_transcripts изолировали вычислительную нагрузку ИИ-сервисов. Спроектированная топология сущностей полностью готова к развертыванию миграционного слоя СУБД и накоплению чистых операционных логов для последующего системного анализа.


7 Приложение A: Конвейеры фонового пересчета пайплайна (Affinity Decay Pipeline) (Вариант для AgroLaborApp)

Для симуляции реалистичного поведения цифровых двойников недостаточно использовать фиксированные статические профили. Поведенческие паттерны автоматизированных агентов должны динамически эволюционировать во времени под воздействием внутренних триггеров (накопление усталости, деградация ресурсов, изменение приоритетов сессий). За выполнение этой задачи отвечает фоновый архитектурный конвейер пересчета матрицы угасания интереса предпочтений (Affinity Decay Matrix), функционирующий по таймеру (SES-250).

Процесс реализует концепцию процесса экспоненциального угасания интереса (Exponential Decay), где текущее значение склонности агента к определенному действию или выбору узла (\(A_t\)) рассчитывается на основе его базового веса (\(A_0\)) и времени, прошедшего с момента закрытия последней активной сессии (\(\Delta t\)):

\[A_t = A_0 \cdot e^{-\lambda \cdot \Delta t}\]

Где \(\lambda\) — коэффициент интенсивности падения интереса, индивидуальный для каждого психотипа субъекта (h_deviation).


7.1 Схема взаимодействия компонентов при фоновом пересчете

Фоновый процесс пересчета полностью изолирован от синхронного API-шлюза FastAPI, чтобы исключить деградацию времени ответа для реальных пользователей. Задача вынесена на уровень асинхронных воркеров, координируемых внутренним планировщиком задач.

WarningВажное примечание

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

Ниже представлена диаграмма последовательности выполнения фонового конвейера по таймеру:

sequenceDiagram
    autonumber
    participant Cron as ⏱️ Планировщик Задач (Celery / APScheduler)
    participant Worker as ⚙️ Фоновый Воркер (Worker Node)
    participant DB as 🗄️ PostgreSQL (Business DB)
    participant Kafka as 📨 Apache Kafka Broker

    Cron->>Worker: Срабатывание таймера (Интервал: X сек)
    activate Worker
    
    %% Блокировка и выгрузка активных матриц
    Worker->>DB: SELECT * FROM map_habits_matrix WHERE is_active = TRUE
    activate DB
    DB-->>Worker: Возврат текущих весов и коэффициентов двойников
    deactivate DB

    Note over Worker: Анализ закрытых сессий в tracking_sessions.<br/>Расчет дельты времени Δt для каждого user_id.

    loop Для каждого активного цифрового двойника
        Worker->>Worker: Вычисление веса(-ов) экспоненциального падения интереса  (Affinity Decay)
        Worker->>Worker: Модификация коэффициентов h_intensity и h_anxiety
    end

    %% Атомарное обновление СУБД
    Worker->>DB: UPDATE map_habits_matrix SET h_intensity = ..., h_anxiety = ... WHERE user_id = ...
    activate DB
    DB-->>Worker: Подтверждение фиксации транзакции
    deactivate DB

    %% Пуш обновленных весов в шину данных для симулятора
    Worker->>Kafka: Пуш DTO в топик "simulator.habits.updates" (Обновленные матрицы)
    
    Note over Worker, Kafka: Симуляторы на внешнем периметре подхватывают<br/>новые веса без перезапуска контейнеров
    deactivate Worker


7.2 Системные требования к конвейеру пересчета

  • Предотвращение эффекта «гонки за данными» (Race Conditions): Фоновые воркеры осуществляют запись изменений в таблицу map_habits_matrix с использованием оптимистической блокировки или изолированных пакетов транзакций. Если реальный пользователь в этот же момент совершает действие, требующее изменения его профиля, приоритет записи отдается синхронной транзакции бэкенда FastAPI, а фоновый пересчет сдвигается на следующий шаг таймера.
  • Амортизация дискового ввода-вывода (IO-Bound Mitigation): Чтобы массовый пересчет тысяч матриц ботов-симуляторов не вызывал выгорания транзакционного лога СУБД (WAL PostgreSQL), воркер производит пакетное обновление (Bulk Update). Изменения накапливаются в оперативной памяти воркера и сбрасываются в персистентный (постоянный) слой СУБД единым скоординированным SQL-запросом.
  • Синхронизация через Event-Driven шину: Сразу после фиксации изменений в PostgreSQL, обновленные коэффициенты «интереса» и «стресса» транслируются в топик Apache Kafka. Движки симуляции, управляющие поведением ботов на внешнем периметре, считывают этот стрим в неблокирующем режиме. Это позволяет ботам мгновенно корректировать свои поведенческие тайминги и условные переходы в tracking_sessions «на лету», без необходимости постоянного выполнения тяжелых SELECT запросов к СУБД.

8 Источники и нормативные спецификации

  1. Стандарты моделирования и структуры данных:
  2. Протоколы межсервисного взаимодействия и ИИ:
  3. Интеграция пространственных и медиа-контуров:

Footnotes

  1. Транзакционный оверхед (от англ. transactional overhead — транзакционные накладные расходы) — это избыточные затраты вычислительных ресурсов (процессора, памяти, сети, дискового I/O) и времени, которые система тратит на обеспечение атомарности, согласованности, изолированности и надежности передачи или записи данных.↩︎

  2. Паттерн проектирования хранилищ данных. Он гарантирует, что повторная обработка одного и того же события не изменит состояние системы, а любое историческое состояние можно восстановить на любой момент времени.↩︎