VEU.WathBody/1-docs/2-db/readme.md

3.8 KiB
Raw Permalink Blame History

БД 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 SqlHelperAbstract/SqlHelperPostgres — fluent PrepareExecute<T>(), tech-requirements разд. 3; З-42 — фактическое имя компонента).
  • Схемы-слои: 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. Применение (З-36): Server.WatchBody.Web --mode migrate (--config <path>) — файлы каталога 2-db\migrations\ по возрастанию имён, журнал — src.migration (MigrationRepository), транзакция на файл, коды возврата 0/1; ключ конфига Db.MigrationsDir (умолчание — migrations рядом с исполняемым файлом).

Таблица llm_calls (v2)

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