VEU.WathBody/1-docs/2-db
virus-home 36eb1741dd Волна 2 ревью по решениям владельца: Р1-А (пульс покоя/самочувствие в v1), Р2-Б (UUID PK клиентских сущностей), Р3-А (Safety на телефоне); З-7/З-8; UI/UX-стандарт в техтребованиях 2026-10-17 19:54:31 +05:00
..
ref Шаг 6 завершён: functions.md слоёв src и ref утверждены 2026-10-17 19:15:37 +05:00
src Волна 2 ревью по решениям владельца: Р1-А (пульс покоя/самочувствие в v1), Р2-Б (UUID PK клиентских сущностей), Р3-А (Safety на телефоне); З-7/З-8; UI/UX-стандарт в техтребованиях 2026-10-17 19:54:31 +05:00
readme.md Волна 2 ревью по решениям владельца: Р1-А (пульс покоя/самочувствие в v1), Р2-Б (UUID PK клиентских сущностей), Р3-А (Safety на телефоне); З-7/З-8; UI/UX-стандарт в техтребованиях 2026-10-17 19:54:31 +05:00

readme.md

БД WatchBody (PostgreSQL)

Документация БД серверной части — шаг 6 процесса (std1\_process\process.md), правила d-db (std1\_rules\d\d-db.md), db-func (std1\_rules\db\db-func.md). Решение шага 6 — 0-mng\plan.md.

Общие сведения

  • СУБД: PostgreSQL 17+; доступ — только через хранимые функции (Kit.Helpers\Db.Postgres.SqlServerHelper, tech-requirements разд. 3).
  • Схемы-слои: src — основные данные (атлеты, тренировки, программы, метрики); ref — справочники (двигательные группы).
  • Изоляция атлетов (🛡): каждая таблица данных несёт athlete_id; все функции слоя src принимают p_athlete_id и выбирают/пишут только в пределах атлета (requirements, Ф-8.5, инвариант раздела 5).
  • Идемпотентность (🛡, Р2-Б): PK клиентских сущностей — UUID; телефон генерирует UUID (строки «только .fit» — сервер), повторная вставка с тем же UUID возвращает существующую запись; ссылки дочерних записей — те же UUID, маппинг серверных id не нужен.
  • JSON: версии программ и факты .fit — jsonb с проверкой схемы на стороне приложения (не в БД).

Состав

Файл Содержание
ref\tables.md справочники слоя ref
src\tables.md таблицы слоя src
{слой}\functions.md списки функций (после утверждения таблиц)

План миграции (d-db-1)

  1. Схемы: CREATE SCHEMA IF NOT EXISTS src; CREATE SCHEMA IF NOT EXISTS ref;
  2. Справочники: ref\exercise_group.psql — таблица + вставка 5 значений (идемпотентно, ON CONFLICT (code) DO NOTHING).
  3. Таблицы src: порядок — athlete → athlete_profile → exercise → exercise_replacement → program → program_version → workout → workout_set → command_log → daily_log → workout_metrics → breaks (FK-зависимости).
  4. Функции: файлы {слой}\функции.psql по сущностям в том же порядке (CREATE OR REPLACE — перезапуск безопасен).
  5. Версионирование: каталог 2-db\migrations\ — NNN_описание.sql по возрастанию; каждая миграция идемпотентна (IF NOT EXISTS / OR REPLACE); факт применения — одна запись на файл в src.migration (id, filename, applied_at).
  6. Сборка: скрипт 2-dbuild.ps1 применяет миграции по номеру (утилита Server.WatchBody.Import --mode migrate).

Таблица llm_calls (v2)

Журнал вызовов LLM-планировщика (дизайн LLM-планирования, разд. 8) создаётся в v2 вместе с LlmPlanner — в v1 не проектируется.