53 lines
3.2 KiB
Markdown
53 lines
3.2 KiB
Markdown
# БД 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](../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).
|
||
- **Идемпотентность (🛡):** клиентские сущности несут `client_guid`
|
||
(UNIQUE) — повторная вставка возвращает существующий id
|
||
(`ON CONFLICT DO NOTHING` + `SELECT`).
|
||
- **JSON:** версии программ и факты .fit — `jsonb` с проверкой схемы
|
||
на стороне приложения (не в БД).
|
||
|
||
## Состав
|
||
|
||
| Файл | Содержание |
|
||
|---|---|
|
||
| [ref\tables.md](ref/tables.md) | справочники слоя `ref` |
|
||
| [src\tables.md](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 не проектируется.
|