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

53 lines
3.2 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# БД 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 не проектируется.