3.8 KiB
3.8 KiB
БД 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— fluentPrepareExecute<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)
- Схемы:
CREATE SCHEMA IF NOT EXISTS src; CREATE SCHEMA IF NOT EXISTS ref; - Справочники:
ref\exercise_group.psql— таблица + вставка 5 значений (идемпотентно,ON CONFLICT (code) DO NOTHING). - Таблицы
src: порядок —athlete→athlete_profile→exercise→exercise_replacement→program→program_version→workout→workout_set→command_log→daily_log→workout_metrics→breaks(FK-зависимости). - Функции: файлы
{слой}\функции.psqlпо сущностям в том же порядке (CREATE OR REPLACE— перезапуск безопасен). - Версионирование: каталог
2-db\migrations\—NNN_описание.sqlпо возрастанию; каждая миграция идемпотентна (IF NOT EXISTS / OR REPLACE); факт применения — одна запись на файл вsrc.migration(id, filename, applied_at). - Применение (З-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 не проектируется.